云安全:安全即服务
上QQ阅读APP看书,第一时间看更新

1.2.2 资产扫描

除了非常优秀的商业化软件外,还有很多开源免费的工具也非常不错。下面介绍一些用于资产扫描的常用开源免费工具,例如Nmap、Zmap、Masscan。虽然现在很多漏洞扫描的工具也同样提供资产扫描的功能,但作为功能专一的工具,资产扫描类工具也是非常有价值的。

1.Nmap

Nmap(Network Mapper)是一个开源免费的网络层扫描软件,用来扫描网上活跃的主机和开放的端口,以及确定哪些服务运行在哪些端口上,甚至推断主机运行在哪个操作系统上。Nmap于1997年9月推出,支持众多主流的操作系统,例如Linux、Windows、Solaris、BSD、MacOS X等系统。它是评估网络系统安全的重要软件,也是攻击者常用的工具之一(攻击者通常会使用开源工具或者自制工具)。除了Nmap这个命令行工具,在Nmap的产品家族中,还包括了一些其他工具,比如利用图形化页面对扫描数据进行查看的Zenmap、可以对扫描结果进行对比的Ndiff、生成数据包并对返回结果进行分析的Nping等。

Nmap的官方网站是https://nmap.org,读者可以从该网站获取所需的信息。

为了便于读者更深入地了解Nmap,我准备了一个测试环境,并通过它来详细介绍Nmap的安装和使用方法。


测试环境如下所示。
虚拟化:VirtualBox 5.6.2
虚拟机:nmap(操作系统:Ubuntu 16.04.5 LTS, 安装软件:Nmap, IP地址:192.168.1.10)
虚拟机:target(操作系统:Ubuntu 16.04.5 LTS, 安装软件:Apache HTTP Server、MySQL、
    MongoDB、vsftpd、SNMP、OpenLDAP, IP地址:192.168.1.6)

(1)Nmap的安装

Nmap的安装比较简单,在Ubuntu上直接用apt安装即可。


root@nmap:~# apt install nmap
root@nmap:~# nmap -V
Nmap version 7.01 ( https://nmap.org )
Platform: x86_64-pc-linux-gnu
Compiled with: liblua-5.2.4 openssl-1.0.2g libpcre-8.38 libpcap-1.7.4 nmap-libdnet-1.12 ipv6
Compiled without:
Available nsock engines: epoll poll select
root@nmap:~#

(2)Nmap的使用

首先,利用Nmap对被扫描主机进行一个全面的扫描,包括主机存活、开放端口、运行服务、操作系统信息等,其中使用的两个参数是-A(Enable OS detection, version detec-tion, script scanning, and traceroute)和-F(Fast mode - Scan fewer ports than the default scan)。


root@nmap:~# nmap -A -F 192.168.1.6
Starting Nmap 7.01 ( https://nmap.org ) at 2020-02-15 18:12 CST
Nmap scan report for target (192.168.1.6)
Host is up (0.00043s latency).
Not shown: 95 closed ports
PORT     STATE SERVICE VERSION
21/tcp   open  ftp     vsftpd 3.0.3
22/tcp   open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 c4:aa:eb:23:40:fc:24:b3:c2:e2:b2:f7:4e:95:ea:f4 (RSA)
|_  256 10:03:89:89:9e:85:0e:48:29:b8:f4:4b:3b:ab:4f:38 (ECDSA)
80/tcp   open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
389/tcp  open  ldap    OpenLDAP 2.2.X - 2.3.X
3306/tcp open  mysql   MySQL (unauthorized)
MAC Address: 08:00:27:E8:FE:F9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.0
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT     ADDRESS
1   0.43 ms target (192.168.1.6)
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 14.52 seconds
root@nmap:~#

其次,可以利用Nmap对被扫描主机进行开放端口及运行服务探测,其中使用的参数是-sV(Probe open ports to determine service/version info)。


root@nmap:~# nmap -sV 192.168.1.6
Starting Nmap 7.01 ( https://nmap.org ) at 2020-02-15 16:46 CST
Nmap scan report for target (192.168.1.6)
Host is up (0.00039s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE VERSION
21/tcp  open  ftp     vsftpd 3.0.3
22/tcp  open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    Apache httpd 2.4.18 ((Ubuntu))
389/tcp open  ldap    OpenLDAP 2.2.X - 2.3.X
MAC Address: 08:00:27:E8:FE:F9 (Oracle VirtualBox virtual NIC)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.87 seconds
root@nmap:~#

再次,可以利用Nmap对被扫描主机的UDP端口进行开放端口及运行服务探测,使用的参数是-sU(UDP Scan)。


root@nmap:~# nmap -sUV -F 192.168.1.6
Starting Nmap 7.01 ( https://nmap.org ) at 2020-02-15 18:15 CST
Nmap scan report for target (192.168.1.6)
Host is up (0.00083s latency).
Not shown: 98 closed ports
PORT    STATE         SERVICE VERSION
68/udp  open|filtered dhcpc
161/udp open          snmp    SNMPv1 server; net-snmp SNMPv3 server (public)
MAC Address: 08:00:27:E8:FE:F9 (Oracle VirtualBox virtual NIC)
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 193.43 seconds
root@nmap:~#

最后,可以利用Nmap对被扫描主机的操作系统进行探测,其中使用的参数是-O(Enable OS detection)。


root@nmap:~# nmap -O 192.168.1.6
Starting Nmap 7.01 ( https://nmap.org ) at 2020-02-15 16:39 CST
Nmap scan report for target (192.168.1.6)
Host is up (0.00071s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
21/tcp  open  ftp
22/tcp  open  ssh
80/tcp  open  http
389/tcp open  ldap
MAC Address: 08:00:27:E8:FE:F9 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.0
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.02 seconds
root@nmap:~#

2.Zmap

第二个值得推荐的开源免费资产扫描工具是Zmap。2015年3月27日,在Usenix国际安全研讨会上,由密歇根大学研究人员组成的研究团队推出了一款名为Zmap的工具,这款工具能令一台普通的服务器在短短44分钟内扫描互联网上的每一个地址。团队中的Durumeric及其同事在2013年年末开发了Zmap。在此之前,用软件扫描互联网需要耗时数周或数月,当时的工具比Zmap慢1000倍。Zmap是一款无状态(Stateless)的工具,也就是说,这款工具会向服务器发出请求,然后“忘记”这些请求。Zmap不会保留未获回复请求的清单,而是在传出的数据包中对识别信息进行编码,这样一来该工具就能对回复进行鉴别。

Zmap的官方网站为https://github.com/zmap/zmap,可以从该网站获取所需的信息。

为了便于读者更深入地了解Zmap,我准备了一个测试环境,并通过它来详细介绍Zmap的安装和使用方法。


测试环境如下所示。
虚拟化:VirtualBox 5.6.2
虚拟机:zmap(操作系统:Ubuntu 16.04.5 LTS, 安装软件:Zmap, IP地址:192.168.1.10)
虚拟机:target(操作系统:Ubuntu 16.04.5 LTS, 安装软件:Apache HTTP Server、MySQL、
    MongoDB、vsftpd、SNMP、OpenLDAP, IP地址:192.168.1.6)

(1)Zmap的安装

Zmap的安装与Nmap类似,在Ubuntu上直接用apt安装即可。


root@zmap:~# apt install zmap
root@zmap:~# zmap -V
zmap 2.1.1
root@zmap:~#

(2)Zmap的使用

Zmap的使用方法很简单,只需制定一个扫描网段和扫描端口就可以开始扫描了。


root@zmap:~# zmap -p 80 192.168.1.0/24
Feb 15 19:46:42.223 [WARN] blacklist: ZMap is currently using the default blacklist located at /etc/zmap/blacklist.conf. By default, this blacklist excludes locally scoped networks (e.g. 10.0.0.0/8, 127.0.0.1/8, and 192.168.0.0/16). If you are trying to scan local networks, you can change the default blacklist by editing the default ZMap configuration at /etc/zmap/zmap.conf.
Feb 15 19:46:42.242 [INFO] zmap: output module: csv
Feb 15 19:46:42.243 [INFO] csv: no output file selected, will use stdout
0:00 0%; send: 0 0 p/s (0 p/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hitrate: 0.00%
0:00 0%; send: 0 0 p/s (0 p/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hitrate: 0.00%
192.168.1.6
192.168.1.1
…
Feb 15 19:46:51.279 [INFO] zmap: completed
root@zmap:~#

3.Masscan

第三个推荐的工具是Masscan(Massive Scan)。Masscan同样也是互联网级别的端口扫描器,Zmap可以在44分钟内扫遍全网,而Masscan则号称可以在6分钟内扫遍全网,它最快可以从单台服务器上每秒发出1000万个数据包。

Masscan的官方网站是https://github.com/robertdavidgraham/masscan,如果有需要可以从中获得更多的信息。

为了便于读者更深入地了解Masscan,我准备了一个测试环境,并通过它来详细介绍Masscan的安装和使用方法。


测试环境如下所示。
虚拟化:VirtualBox 5.6.2
虚拟机:masscan(操作系统:Ubuntu 16.04.5 LTS, 安装软件:masscan, IP地址:192.168.1.10)
虚拟机:target(操作系统:Ubuntu 16.04.5 LTS, 安装软件:Apache HTTP Server、MySQL、
    MongoDB、vsftpd、SNMP、OpenLDAP, IP地址:192.168.1.6)

(1)Masscan的安装

Masscan的安装相对复杂,它需要从GitHub上下载源码,然后自行编译,具体步骤如下。


root@masscan:~# apt install git gcc make libpcap-dev
root@masscan:~# git clone https://github.com/robertdavidgraham/masscan
root@masscan:~# cd masscan
root@masscan:~/masscan# make

(2)Masscan的使用

Masscan的使用方法并不复杂,首先,可以针对某一个特定端口进行扫描。


root@masscan:~# ./masscan/bin/masscan 192.168.1.0/24 -p80
...arping router MAC address...
Starting masscan 1.0.6 (http://bit.ly/14GZzcT) at 2020-02-15 12:14:49 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 256 hosts [1 port/host]
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 80/tcp on 192.168.1.6
root@masscan:~#

其次,可以按一定速度,扫描一个范围内的端口,其中使用的参数有--ports和--rate。


root@masscan:~# ./masscan/bin/masscan 192.168.1.6 --ports 0-65535 --rate 10000
...arping router MAC address...
Starting masscan 1.0.6 (http://bit.ly/14GZzcT) at 2020-02-15 12:29:58 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [65536 ports/host]
Discovered open port 27017/tcp on 192.168.1.6
Discovered open port 389/tcp on 192.168.1.6
Discovered open port 80/tcp on 192.168.1.6
Discovered open port 3306/tcp on 192.168.1.6
Discovered open port 22/tcp on 192.168.1.6
Discovered open port 21/tcp on 192.168.1.6
root@masscan:~#