searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种高效资产发现组合引擎

2023-10-16 02:21:56
53
0

前言概述

理清资产是安全活动(检测与响应)的前提,受限各种原因,很多企业无法梳理清或动态跟踪上资产的变更,出现IT管理范围的影子资产,留下黑客入侵的半开之门。本文侧重在主机与端口侧的扫描发现,介绍如何利用开源组件进行高效探测。下面内容基于centos 7.6展开。

组件介绍

资产发现开源组合为:msscan + nmap + mongodb + python,msscan用于探测存活主机与开放端口,nmap用于发现主机端口对应服务,MongoDB用于进行数据存储,python用于逻辑调度与处理(如对比端口新增开放、高危端口服务)。组件具体版本根据自身环境和需求选取。
msscan
github项目上号称给每人一个支点撬动整个互联网(This is an Internet-scale port scanner. It can scan the entire Internet in under 5 minutes, transmitting 10 million packets per second, from a single machine.)。自身实现了ad hoc TCP/IP stack,使用异步TCP半连接探测主机端口。安装如下:
(1) 安装依赖
yum groupinstall -y "Development Tools"
yum install -y libpcap 
(2)github上下载masscan源码
(3)cd masscan然后make // 这样编译的二进制msscan在bin目录下,如果想要安装到环境变量PATH路径下,运行make install

nmap
对比msscan,速度略慢,不过带来的优点是:更准、更全。支持TCP三次握手扫描,反防火墙丢失首syn包防扫描,具备丰富组件和操作系统指纹,可帮助识别端口开放服务和主机操作系统。在一定条件下结合msscan达到高效资产发现效果。官网提供了Linux标准rpm包,直接下载安装或解压即可:
(1)nmap官网下载rpm包, nmap-x.y-1.x86_64.rpm
(2)解压rpm包,rpm2cpio nmap-x.y-1.x86_64.rpm | cpio -idv

mongodb
高效的文档数据库,适合存储内容和字段变更频繁场景。官网提供了Linux下tgz和rpm包,直接下载安装或解压即可:
(1)mongodb官网下载社区版rpm包, mongodb-org-server-x.y.z-1.el7.x86_64
(2)安装rpm包,rpm -i mongodb-org-server-x.y.z-1.el7.x86_64

python
第三方库丰富的解析型语言,每个云厂商都维护着自己源仓,根据自己需要搜索安装即可。
(1) 搜索python包,yum search python3
(2) 安装包,yum install python3.x86_64

组合使用

python脚本负责串联调度所有过程,接收扫描范围(IP+端口+协议)、排除范围(IP),格式可以直接使用msscan的参数格式(更多使用见 msscan --help,msscan -h,msscan --nmap)。第一步命令调用msscan,下面简单使用示例:
./msscan/masscan-master/bin/masscan -p 1-65535,U:1-65535 --rate=2000 -oX out.xml a.b.c.d/24 --exclude e.f.g.h
-p: 指定端口扫描范围,默认TCP,可通过如1-65535, U:1-6335扫描TCP,UDP
--rate: 每秒发包频率,根据自身主机资源和企业网络带宽设置,默认1000
-oX: 设置输出文件和格式,-oL/-oJ/-oD/-oG/-oB/-oX/-oU <file>: Output scan in List/JSON/nDjson/Grepable/Binary/XML/Unicornscan format
--exclude: 排除具体主机,多个通过逗号隔开

第二步解析msscan输出,命令调度nmap逐一IP探测服务
msscan的XML输出结构:
<?xml version="1.0"?>
<!-- masscan v1.0 scan -->
<nmaprun scanner="masscan" start="1697371383" version="1.0-BETA"  xmloutputversion="1.03">
<scaninfo type="syn" protocol="tcp" />
<host endtime="1697371383"><address addr="xxx.xx.xx.z" addrtype="ipv4"/><ports><port protocol="tcp" portid="2202"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371426"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371436"><address addr="xxx.xx.xx.y" addrtype="ipv4"/><ports><port protocol="tcp" portid="3389"><state state="open" reason="syn-ack" reason_ttl="121"/></port></ports></host>
<host endtime="1697371457"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="tcp" portid="4443"><state state="open" reason="syn-ack" reason_ttl="56"/></port></ports></host>
<host endtime="1697371462"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="10256"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371504"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="udp" portid="51295"><state state="open" reason="none" reason_ttl="0"/></port></ports></host>
<host endtime="1697371537"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="tcp" portid="442"><state state="open" reason="syn-ack" reason_ttl="56"/></port></ports></host>
<host endtime="1697371538"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="6443"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<runstats>
<finished time="1697371559" timestr="2023-10-15 20:05:59" elapsed="264" />
<hosts up="7" down="0" total="7" />
</runstats>
</nmaprun>
nmap简单示例:
./nmap/usr/bin/nmap -Pn -A a.b.c.d -p 22,80 -oX n.xml
-Pn: 标识不用额外探测主机存活
-A: 官方解释 Enable OS detection, version detection, script scanning, and traceroute,默认是只探测端口对应服务
-oX: 跟msscan类似,定义输出,-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename

第三步,解析nmap输出,存储mongodb数据库(推荐每日一张表)

附加
(1) 存在防火墙丢失首syn包防扫描情景的,python逻辑可跳过msscan扫描,直接用nmap做主机、端口探测和服务发现,慢点而已。
(2) 需要做每日端口变化、高危端口开放检测,新增第4步实现。
(3) 进阶做脆弱性发现的,可把弱口令、未授权访问引入,逻辑简单,检测效果好。
(4) msscan无法做localhost扫描发现,更多排除见exclude.conf配置
(5) 扫描存在被封可能,需要做IP白名单放行。
(6) 定时调度扫描,可自己写常驻进程或借助crond实现定时。

参考文献

[1] nmap官网介绍
[2] github上msscan介绍
[3] github上masnmap介绍

0条评论
0 / 1000
刘****成
15文章数
0粉丝数
刘****成
15 文章 | 0 粉丝
原创

一种高效资产发现组合引擎

2023-10-16 02:21:56
53
0

前言概述

理清资产是安全活动(检测与响应)的前提,受限各种原因,很多企业无法梳理清或动态跟踪上资产的变更,出现IT管理范围的影子资产,留下黑客入侵的半开之门。本文侧重在主机与端口侧的扫描发现,介绍如何利用开源组件进行高效探测。下面内容基于centos 7.6展开。

组件介绍

资产发现开源组合为:msscan + nmap + mongodb + python,msscan用于探测存活主机与开放端口,nmap用于发现主机端口对应服务,MongoDB用于进行数据存储,python用于逻辑调度与处理(如对比端口新增开放、高危端口服务)。组件具体版本根据自身环境和需求选取。
msscan
github项目上号称给每人一个支点撬动整个互联网(This is an Internet-scale port scanner. It can scan the entire Internet in under 5 minutes, transmitting 10 million packets per second, from a single machine.)。自身实现了ad hoc TCP/IP stack,使用异步TCP半连接探测主机端口。安装如下:
(1) 安装依赖
yum groupinstall -y "Development Tools"
yum install -y libpcap 
(2)github上下载masscan源码
(3)cd masscan然后make // 这样编译的二进制msscan在bin目录下,如果想要安装到环境变量PATH路径下,运行make install

nmap
对比msscan,速度略慢,不过带来的优点是:更准、更全。支持TCP三次握手扫描,反防火墙丢失首syn包防扫描,具备丰富组件和操作系统指纹,可帮助识别端口开放服务和主机操作系统。在一定条件下结合msscan达到高效资产发现效果。官网提供了Linux标准rpm包,直接下载安装或解压即可:
(1)nmap官网下载rpm包, nmap-x.y-1.x86_64.rpm
(2)解压rpm包,rpm2cpio nmap-x.y-1.x86_64.rpm | cpio -idv

mongodb
高效的文档数据库,适合存储内容和字段变更频繁场景。官网提供了Linux下tgz和rpm包,直接下载安装或解压即可:
(1)mongodb官网下载社区版rpm包, mongodb-org-server-x.y.z-1.el7.x86_64
(2)安装rpm包,rpm -i mongodb-org-server-x.y.z-1.el7.x86_64

python
第三方库丰富的解析型语言,每个云厂商都维护着自己源仓,根据自己需要搜索安装即可。
(1) 搜索python包,yum search python3
(2) 安装包,yum install python3.x86_64

组合使用

python脚本负责串联调度所有过程,接收扫描范围(IP+端口+协议)、排除范围(IP),格式可以直接使用msscan的参数格式(更多使用见 msscan --help,msscan -h,msscan --nmap)。第一步命令调用msscan,下面简单使用示例:
./msscan/masscan-master/bin/masscan -p 1-65535,U:1-65535 --rate=2000 -oX out.xml a.b.c.d/24 --exclude e.f.g.h
-p: 指定端口扫描范围,默认TCP,可通过如1-65535, U:1-6335扫描TCP,UDP
--rate: 每秒发包频率,根据自身主机资源和企业网络带宽设置,默认1000
-oX: 设置输出文件和格式,-oL/-oJ/-oD/-oG/-oB/-oX/-oU <file>: Output scan in List/JSON/nDjson/Grepable/Binary/XML/Unicornscan format
--exclude: 排除具体主机,多个通过逗号隔开

第二步解析msscan输出,命令调度nmap逐一IP探测服务
msscan的XML输出结构:
<?xml version="1.0"?>
<!-- masscan v1.0 scan -->
<nmaprun scanner="masscan" start="1697371383" version="1.0-BETA"  xmloutputversion="1.03">
<scaninfo type="syn" protocol="tcp" />
<host endtime="1697371383"><address addr="xxx.xx.xx.z" addrtype="ipv4"/><ports><port protocol="tcp" portid="2202"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371426"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="22"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371436"><address addr="xxx.xx.xx.y" addrtype="ipv4"/><ports><port protocol="tcp" portid="3389"><state state="open" reason="syn-ack" reason_ttl="121"/></port></ports></host>
<host endtime="1697371457"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="tcp" portid="4443"><state state="open" reason="syn-ack" reason_ttl="56"/></port></ports></host>
<host endtime="1697371462"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="10256"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<host endtime="1697371504"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="udp" portid="51295"><state state="open" reason="none" reason_ttl="0"/></port></ports></host>
<host endtime="1697371537"><address addr="xxx.xx.xx.xx" addrtype="ipv4"/><ports><port protocol="tcp" portid="442"><state state="open" reason="syn-ack" reason_ttl="56"/></port></ports></host>
<host endtime="1697371538"><address addr="xxx.xx.xx.x" addrtype="ipv4"/><ports><port protocol="tcp" portid="6443"><state state="open" reason="syn-ack" reason_ttl="57"/></port></ports></host>
<runstats>
<finished time="1697371559" timestr="2023-10-15 20:05:59" elapsed="264" />
<hosts up="7" down="0" total="7" />
</runstats>
</nmaprun>
nmap简单示例:
./nmap/usr/bin/nmap -Pn -A a.b.c.d -p 22,80 -oX n.xml
-Pn: 标识不用额外探测主机存活
-A: 官方解释 Enable OS detection, version detection, script scanning, and traceroute,默认是只探测端口对应服务
-oX: 跟msscan类似,定义输出,-oN/-oX/-oS/-oG <file>: Output scan in normal, XML, s|<rIpt kIddi3,
and Grepable format, respectively, to the given filename

第三步,解析nmap输出,存储mongodb数据库(推荐每日一张表)

附加
(1) 存在防火墙丢失首syn包防扫描情景的,python逻辑可跳过msscan扫描,直接用nmap做主机、端口探测和服务发现,慢点而已。
(2) 需要做每日端口变化、高危端口开放检测,新增第4步实现。
(3) 进阶做脆弱性发现的,可把弱口令、未授权访问引入,逻辑简单,检测效果好。
(4) msscan无法做localhost扫描发现,更多排除见exclude.conf配置
(5) 扫描存在被封可能,需要做IP白名单放行。
(6) 定时调度扫描,可自己写常驻进程或借助crond实现定时。

参考文献

[1] nmap官网介绍
[2] github上msscan介绍
[3] github上masnmap介绍

文章来自个人专栏
信息安全
15 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
0