内网设备存在弱密码,对于企业来说,是个极大的安全隐患。而如何快速地发现企业网络中各种设备的弱密码,并有效地进行处置,便成了摆在安全部门面前的难题。

笔者所在的企业,光是OA网络就有10万+的活跃IP,分布于总部及数十个分支机构中,设备类型也很繁杂。为了能够每周都对全体设备做一次弱密码审计并定期输出扫描报告,我基于开源工具有针对性地编写了一些辅助工具(脚本)来做这件事情,取得了不错的效果。因而我在此将自己的经验和代码分享出来,希望对大家有所帮助。

在本篇文章中分享的是ssh弱密码审计工具。我会具体讲解一下它的开发思路、使用环境和以及使用方法。

一、ssh弱密码审计工具的执行流程

下面是我做一次ssh弱密码审计的执行流程:

(1)使用开源工具zmap对全网进行ssh端口扫描,发现所有潜在的ssh主机;

(2)使用自编写的工具sshbrute对上述的ssh主机进行弱密码审计;

(3)使用自编写的脚本sshverify对一些特殊的设备进行二次验证和过滤;

(4)输出弱密码审计的结果。

二、相关的资源和环境

本文的工具均基于Linux进行开发和运行。在我的企业环境中,只允许使用红帽企业版,所以我是基于RHEL 6/7来开发的。但其它的Linux发行版应该也没有什么问题。同时你还需要准备以下的软件或工具:

(1)zmap,请参考其主页(URL:https://github.com/zmap/zmap)自行编译安装;

(2)编译工具,主要是gcc/g++/make/cmake/libtool等;

(3)第三方库,主要是libssh2(URL:https://www.libssh2.org/ ),以及plog和getoptpp,均安装在/usr/local目录下;

(4)python 2.7,以及paramiko库(URL:https://pypi.python.org/pypi/paramiko/)。

(5)我的工具代码sshbrute.cpp和sshverify.py,链接地址https://github.com/penoxcn/SshWeakPasswordAudit.git

其中sshbrute.cpp使用以下命令编译即可:

g++ --std=c++11 sshbrute.cpp -o sshbrute-pthread -I /usr/local/include/ -lssh2  -L/usr/local/lib

三、ssh主机的发现

在我的企业OA网络中使用10.0.0.0/8的A类地址,每个分支机构使用一个或多个16位掩码的地址段,地址空间比较大。端口扫描工具有很多,开源的就有nmap、zmap、masscan等。相对来说,nmap扫描速度慢,准确度高,适合精细的扫描,如OS识别、服务识别等;masscan和zmap速度快,适合于进行大规模(如整个Internet地址空间)的端口扫描。而在企业内网环境中,我觉得zmap更易用一些,在漏报率和误报率方面比masscan表现要好一些。zmap最大的不便是一次扫描只支持扫描一个端口,如果有多个端口要扫描,需要多次启动程序进行扫描。

要使用zmap扫描网络中的ssh主机,使用以下命令即可:

zmap -M tcp_synscan -p 22 -wipsubnets.txt  -o ssh_hosts_found.txt -B50M -i eth0 --disable-syslog 

其中:

-M tcp_synscan指定扫描方式为TCP SYN扫描;

-p 参