近期由于公司存在环境整改/迭代以及历史弱口令等状况,运维同事将内网测试环境的一些SSH等敏感端口对外,导致被挖矿团伙利用进行挖矿,虽然生产环境存在物理隔离,但仍存在极大安全风险,对此需要对所有域名/IP进行对外开放端口监控。
0x01 确定方案
通过网上调研,发现滴滴安全应急响应中心发过一个相关的文章
需求基本一致,使用了下文章中提到的代码进行测试,可能我环境/带宽/目标等多种因素,导致测试之后发现效果并不理想,扫描速度慢且有时不稳定。
经过github、sourceforge、stackoverflow等一番搜索及疯狂复制粘贴,完成了个勉强算的上的成品。
代码逻辑如下:
1.1 用户输入目标处理
#单独IP/HOST ip: 127.0.0.1 ip_list: 127.0.0.1 #CIDR ip: 127.0.0 ip_list: 127.0.0.1, 127.0.0.2, 127.0.0.3 ... 127.0.0.254 #IP访问 ip: 127.0.0.1-127.0.0.20 ip_list: 127.0.0.1, 127.0.0.2, 127.0.0.3 ... 127.0.0.20 #文件 ip: ip.txt ip_list: Same as above
1.2 目标存活探测
使用ICMP协议进行ping检测,使用的第三方库pyping(该库不支持python3,若要用py3需要自己转换下)
1.3 Go脚本探测
编译 port_scan.go
go build -buildmode=c-shared -o portscan.so portscan.go
探测结果返回:
# 单个端口 94.191.42.58:22 # 多个端口 94.191.42.58:22, 9099
1.4 nmap指纹识别
根据go探测结果进行解析,分别使用nmap库进行服务识别
pip install python-nmap
返回结果:
127.0.0.1:22/ssh 127.0.0.1:9999:unknown ...