0x00 前言
近期由于公司存在环境整改/迭代以及历史弱口令等状况,运维同事将内网测试环境的一些SSH等敏感端口对外,导致被挖矿团伙利用进行挖矿,虽然生产环境存在物理隔离,但仍存在极大安全风险,对此需要对所有域名/IP进行对外开放端口监控。
0x01 确定方案
通过网上调研,发现滴滴安全应急响应中心发过一个相关的文章
需求基本一致,使用了下文章中提到的代码进行测试,可能我环境/带宽/目标等多种因素,导致测试之后发现效果并不理想,扫描速度慢且有时不稳定。
经过github、sourceforge、stackoverflow等一番搜索及疯狂复制粘贴,完成了个勉强算的上的成品。
代码逻辑如下:
1.1 用户输入目标处理
|
|
1.2 目标存活探测
使用ICMP协议进行ping检测,使用的第三方库pyping(该库不支持python3,若要用py3需要自己转换下)
1.3 Go脚本探测
编译port_scan.go
|
|
探测结果返回:
|
|
1.4 nmap指纹识别
根据go探测结果进行解析,分别使用nmap库进行服务识别
|
|
返回结果:
|
|
1.5 web service
若nmap结果返回为http
,unknown
,sun-answerbook
等时,尝试连接获取title
0x02 代码实现
2.1 用户输入处理
|
|
2.2 目标存活探测
|
|
2.3 Go脚本探测
|
|
1.4 nmap指纹识别
|
|
1.5 web service
|
|
0x03 运行效果
以tx云的一台vps为例,全端口扫描+服务识别我测试的稳定在40s之内,还可以。但是有些IP不知什么情况会比较慢,还需进行优化。
公众号发送:portscan 获取项目代码。go代码就不放了,太烂了,完全cv拼凑的,若有兴趣可私聊讨论。
参考文章
https://medium.com/@KentGruber/building-a-high-performance-port-scanner-with-golang-9976181ec39d
https://github.com/golang/go/blob/master/src/cmd/cgo/doc.go
https://www.coder.work/article/202337
https://www.kancloud.cn/kancloud/web-application-with-golang/
https://www.yuyang.io/post/python-go-dynamic/
https://ejin66.github.io/2018/09/15/go-to-so-android.html