团队作业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/

posted @ 2020-10-28 01:10  polaris_973  阅读(228)  评论(0编辑  收藏  举报