• 团队作业2——需求规格说明书


    需求规格说明书

    一、引言

    1.1 定位与目标

    无论是安全学习人员还是对于安全从业人员来说,端口扫描器都是一个最初必然需要使用且经常使用的软件。

    服务器上所开放的端口就是潜在的通信通道,也是一个入侵通道。对目标计算机进行端口扫描,能得到许多有用的信息。进行端口扫描的方法很多,可以是手工扫描,也可以使用端口扫描软件进行。所以本次目标就是利用现有资源开发一个易于使用,安全快速的端口扫描器。

    1.2 阅读对象

    本《需求规格说明书》的阅读对象是:

    • 开发组成员

    • 测试组成员

    • 团队授权可阅读本文档的其他人员

    二、需求概述

    2.1 项目背景

    部分群体需要这样一款易用,安全快捷的端口扫描器。

    2.2 需求概述

    2.2.1 功能描述

    用户可利用此项目多功能方便地进行对目标主机的端口扫描

    2.2.2 真实性

    自国家愈发重视信息安全之于国家安全的重要性以来,信息安全从业人员越来越多,学习信息安全,走上安全道路的人愈来愈多。一款好用便捷的端口扫描器可以发挥独特的用处。

    2.2.3 可用性

    依托现有的已经开发成熟的库及功能加上自己团队新开发的功能,我们力求保证其可用易用。

    2.2.4 价值所在

    我们的目标用户是刚踏上安全学习道路的初学者,主张开发一个使用者在常规环境下易于使用,对初学者友好的多功能端口扫描器。

    2.2.5 预期用户量

    根据实际情况,预计用户量为200。

    2.2.6 需求分析

    • 用户输入参数使用功能

    • 扫描

    1. 主机发现功能

    2. 端口扫描功能

    3. 操作系统识别识别

    4. 服务类型进一步识别

    • 扩展功能部分

    1. 实现目标的banner信息获取、子域名获取、旁站 IP 获取、CDN 有无的识别等等的基本 OSINT 功能

    2. 实现对目标的web常见漏洞扫描,包括:XSS 扫描、SQLI 扫描

    三、系统功能需求

    3.1 功能总览

    • 用户输入

    1. 支持命令行识别扫描参数选项

    2. 支持通过 .txt、.JSON 文件来识别扫描目标

    3. 支持多种主机表达式的识别: 1)单个 IP 类型的主机表达式:如 198.168.1.1 2)IP 地址段类型的主机表达式:如192.168.1.1-254 应当支持这种扩展:192.168.1-254.1 3)CIDR 记法的主机表达式:192.168.1.0 / 24 4)URL 类型的主机表达式:testfire.net / 24

    • 扫描

    1. 主机发现功能

      通过 ICMP(echo)、ICMP(timestamp)、TCP(SYN)、UDP进行主机发现,记录在 IP 网段中存活的主机,方便后续进行端口扫描

    2. 端口扫描功能 通过TCP(SYN)、TCP(全开放)、TCP(NULL)、UDP进行端口扫描,记录开放的端口列表,方便进行服务类型识别

    3. 操作系统识别识别: 实现操作系统的识别

    4. 服务类型进一步识别 进行服务类型识别

    • 扩展功能部分

    1. 实现目标的banner信息获取、子域名获取、旁站 IP 获取、CDN 有无的识别等等的基本 OSINT 功能。

    2. 实现对目标的web常见漏洞扫描,包括:XSS 扫描、SQLI 扫描。 XSS扫描实现内容: (1)waf 种类的识别 (2)waf 以及网页后台黑名单机制的探查; (3)目标网页的递归爬取 (4)xss 注入点位的识别 (5)用户 payload 的使用

    3.2 业务流程图

    四、 团队任务及计划安排

    4.1.1 项目 GitHub 地址

    4.1.2 Issue 截图

    4.2 项目时间安排表

    4.2.1 原安排表

    模块功能 / 任务时间安排
    协定开发规范 团队开发成员协商开发规范 10.27
    主机发现 通过 ICMP(echo)、ICMP(timestamp)、TCP(SYN)、UDP进行主机发现,记录在 IP 网段中存活的主机 10.28-10.31
    端口扫描 通过TCP(SYN)、TCP(全开放)、TCP(NULL)、UDP进行端口扫描,记录开放的端口列表 10.29-11.1
    操作系统识别识别 实现操作系统的识别 11.2-11.5
    服务类型进一步识别 进行服务类型识别 11.6-11.9
    用户输入 支持命令行识别扫描参数选项、支持通过 .txt、.JSON 文件来识别扫描目标、支持多种主机表达式的识别 11.10-11.13
    扩展功能 视实际情况开发拓展功能 11.14-27

    4.2.2 改进后安排表

    模块功能 / 任务时间安排
    协定开发规范 团队开发成员协商开发规范 10.27
    主机发现 通过 ICMP(echo)、ICMP(timestamp)、TCP(SYN)、UDP进行主机发现,记录在 IP 网段中存活的主机 10.28-11.1
    端口扫描 通过TCP(SYN)、TCP(全开放)、TCP(NULL)、UDP进行端口扫描,记录开放的端口列表 10.28-11.1
    操作系统识别识别 实现操作系统的识别 11.2-11.6
    服务类型进一步识别 进行服务类型识别 11.2-11.6
    用户输入 支持命令行识别扫描参数选项、支持通过 .txt、.JSON 文件来识别扫描目标、支持多种主机表达式的识别 11.7-11.11
    基本功能测试 对以上基本功能进行测试 11.12-11.13
    扩展功能 视实际情况开发拓展功能 11.14-11.19
    整体测试1.0 对整体的功能(包括扩展功能)进行测试 11.20-11.21
    分析改进 对整个项目进行谈论分析以及改进 11.22-11.23
    代码规范 对整个项目的代码进行统一规范 11.24-11.25
    整体测试2.0 项目发布前的终极测试 11.26-11.27

    4.2.3 矫正计算方法

    • 根据团队成员分工的具体情况

    • 根据项目整体功能的多少和实现难度

    • 根据项目实际情况增加测试、分析、代码规范的时间安排

    4.3 团队分工

    任务执行
    功能开发 林泓、吴旻哲、吴茗睿、朱育清
    PM 吴茗睿、张培烽
    测试 林泓、吴旻哲、朱育清、郭泽纯、张培烽
    文档和复审 张培烽、郭泽纯

    五、本周小结

    5.1 团队完成情况

    • 项目功能的确定

    • 业务流程图的确立

    • 团队仓库的建立

    • 明确任务并提交issue

    • 完成《项目需求规格说明书》

    • 团队成员学习必要的开发技术

    5.2 个人情况

    林泓
    • 完成情况:团队仓库的建立,学习开发必要技术

    • 个人感想:了解了实现项目的大致思路,抓紧学习端口扫描在python中的实现方法

    吴旻哲
    • 完成情况:浏览源码,学习接口设计

    • 个人感想:我是最菜的那个

    朱育清
    • 完成情况:简单浏览一些开源的扫描器项目源码,学习了一些对应的开发技能

    • 个人感想:要不是真的菜,我又怎么愿意当咸鱼呢 。。

    郭泽纯
    • 完成情况:简单浏览开源扫描器的项目源码(还在理解中),参与团队博客的编写

    • 个人感想:群里除了我都是大佬,要向他们学习才对。

    张培烽
    • 完成情况:1. 完成《项目需求规格说明书》 2. 学习软工团队作业必要知识 3. 参与完成项目博客

    • 个人感想:软件工程项目与一般的编程作业不一样,团队项目跟个人项目也不一样。

    吴茗睿
    • 完成情况:研究了xsstrike如何识别waf种类,如果摸清waf和后台的过滤机制,如何对敏感符号进行测试,如何对用户输入参数回显位置做上下文环境记录,研究构造payload部分,使用到某数据挖掘算法来确定payload的可用性如何

    • 个人感想:这次的软工项目,队伍内安排要写的项目是端口扫描器,然而对于端口扫描器(的python实现)本人已经在《计算机网络》这门课的大实验上摸得七七八八了,于是就想能不能给这个项目做多些模块拓展,譬如说做一个xss扫描器上去,如果时间还有富余的话做一个sqli的扫描器上去。

      说干就干,首先是从红蓝队开源项目中寻找前辈的经验。 然而前人项目多如牛毛,软工项目给我们的学习、借鉴的时间又十分有限。为了保质保量,就只能寻找业内较为顶尖的扫描软件进行分析。于是,对于xss漏洞,我选择去分析开源的xsstrike;而对于sqli漏洞,我则剑指sqlmap。

      分析过程:

      在软工项目第二周进行到第二天的时候,我就开始进行xsstrike的代码分析。初以为“安排”这个300k不到的小脚本应该花不了多长时间,然而实际用时大大超出了我的预估。前辈的代码思维,分析问题的方法时常能让我这个未见世面的愣头青拍案叫绝。譬如说,在xsstrike中,有一个对WAF种类进行分析的模块,其代码逻辑是,发送一个必定能触发WAF告警的负载来获得WAF的告警页面,通过分析告警页面响应报文的html源码内容、headers信息、http状态码三个特征来对WAF种类进行猜测。同时还引入了分权的机制,即http响应每满足一个特征,就给予一个权值,最后根据权值的大小来判定WAF的种类,从而达到正确性尽可能高的猜解结果。又譬如说,xsstrike 会对用户输入内容的回显进行一个标识定位,从而确定回显的上下文环境,从而进一步确定 payload 的构成和分析。通俗点说,这个过程就好比我们高中生物学的荧光标记法一样,通过“荧光” payload来标记用户输入参数会显现在网页的哪个部分上,从而确定哪个部分不能进行 xss 注入,哪个部分的符号包裹情况如何等等。

      然而现实是残酷的,专业课内的学业不容许我长时间“恋战”,目前这个项目分析进度也不理想。但“一约既定,万山难阻”。

      写在最后:

      某位前辈大佬曾经说过,个人或是小团队永远不要试图去写一个漏扫出来。如今看来这条言论得到了无比确凿的证实。在安全领域有想法是好事,但是千万切记:“有多大屁股就穿多大裤衩”。盲目定一个难度过大的项目,会让整个团队陷入一个无法脱身的泥潭。

    附:

    有参考价值的红蓝对抗项目清单:https://www.lshack.cn/772/

  • 相关阅读:
    第3、4、5讲
    .NetCore使用EF5操作Oracle,解决列自增序列绑定不生效的问题
    ASP.NET Core 之 Identity 入门(一)
    ORACLE NLS_DATE_FORMAT设置
    ORA12514遇到了怎么排查问题出在哪
    Oracle特殊字符查询语句
    ORA00821: Specified value of sga_target 3072M is too small, needs to be at least 12896M
    如何定位哪些SQL产生了大量的Redo日志
    Oracle定位对阻塞的对象或锁信息
    Oracle Undo和Redo的关系,区别及相关查询
  • 原文地址:https://www.cnblogs.com/polaris-973/p/13888708.html
Copyright © 2020-2023  润新知