团队作业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 需求分析
-
用户输入参数使用功能
-
扫描
-
主机发现功能
-
端口扫描功能
-
操作系统识别识别
-
服务类型进一步识别
-
扩展功能部分
-
实现目标的banner信息获取、子域名获取、旁站 IP 获取、CDN 有无的识别等等的基本 OSINT 功能
-
实现对目标的web常见漏洞扫描,包括:XSS 扫描、SQLI 扫描
三、系统功能需求
3.1 功能总览
-
用户输入
-
支持命令行识别扫描参数选项
-
支持通过 .txt、.JSON 文件来识别扫描目标
-
支持多种主机表达式的识别: 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
-
扫描
-
主机发现功能
通过 ICMP(echo)、ICMP(timestamp)、TCP(SYN)、UDP进行主机发现,记录在 IP 网段中存活的主机,方便后续进行端口扫描
-
端口扫描功能 通过TCP(SYN)、TCP(全开放)、TCP(NULL)、UDP进行端口扫描,记录开放的端口列表,方便进行服务类型识别
-
操作系统识别识别: 实现操作系统的识别
-
服务类型进一步识别 进行服务类型识别
-
扩展功能部分
-
实现目标的banner信息获取、子域名获取、旁站 IP 获取、CDN 有无的识别等等的基本 OSINT 功能。
-
实现对目标的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 注入,哪个部分的符号包裹情况如何等等。
然而现实是残酷的,专业课内的学业不容许我长时间“恋战”,目前这个项目分析进度也不理想。但“一约既定,万山难阻”。
写在最后: