Nmap高级技术与防御措施
Nmap网络安全审计(五)
Nmap的高级技术与防御措施
Nmap的伪装技术
大部分人认为,Nmap中不应该提供逃避防火墙规则和欺骗IDS的功能。但是很多安全工具都已经提供了这些功能,因此Nmap中包含这些功能可以帮助网络管理员增强安全性。Nmap不提供检测和破坏防火墙及IDS系统专门工具和选项,但是却提供了相关技术。
Nmap -f 目标
使用 -f 选项可以对Nmap发送的探测数据包进行分段。这样将原来的数据包分为几个部分,目标网络的防御机制如包过滤,防火墙等在对这些数据包进行检测的时候就会变得更加困难。另外必须谨慎使用这个选项,一些比较老的系统在处理分段的包时会经常出现死机的情况。
nmap -f 192.168.0.103
在这里想要看的更直观一些的话,我们可以通过抓包工具对这个步骤进行抓包。我们就会发现大量的数据包上面都含有 Fragmented IP protocol 的标志。这个标志就说明这些数据包都是分段的报文。
我们在检测结果中可以发现有一个warning的提示,这个提示说明我们刚才所演示的功能可能在windows下无法正常工作。
-mtu(使用指定的MTU)
MTU(最大输出单元)是指一种通信协议的某一层上面所能通过的最大数据包大小。一般来说,以太网的MTU值默认是1500 bytes,这个含义就是指当发送者的协议高层向IP层发送了长度为2008 bytes数据报文,则该报文再添加20 bytes的IP包头后,IP包的总长度是2028 bytes。为2028大于1500,因此该数据报文就会被分片。
在Nmap中使用 -mtu 参数可以指定MTU的大小。这里 MTU 的值必须是8的整数倍。
nmap --mtu 16 192.168.0.103
因为我这里的windows没有操作成功我这里就暂时不贴图了。在这里我们同样使用抓包工具查看,我们会发现每个发送的数据包大小都被修改成了16bytes。
-D
(使用诱饵主机隐蔽扫描) 通常在对目标进行扫描时,有可能会被发现。一个比好用的方法就是同时伪造大量的主机地址对目标进行扫描,这是目标主机及时发现了有人正在进行扫描,但是由于扫描数据包来自于多个主机,即使是IDS也只能知道目前正在被扫描,并不知道到底是哪台主机在进行扫描。这是一种常用的隐蔽自身IP的技术。
Nmap中支持使用诱饵主机,在扫描时,使用选项-D来指定诱饵主机,使用逗号分隔每个诱饵IP地址,也可以使用自己的真实IP做为诱饵,自己的ip地址可以使用ME选项。如果在第六个位置和更后的位置使用ME选项,一些常用的端口扫描检测器就不会报告这个真实IP。如果不使用ME选项,Nmap将真实IP放在一个随机位置。
作为诱饵的主机,必须处于工作状态中,否则这次扫描就可能变成SYN FLOOD,也就是我们常说的DDoS。如果网络中只有一台主机在工作,无论你产生多少个诱饵,都是这一台主机在扫描。
在我们之前讲到的Ping扫描(ICMP、SYN、ACK等)阶段或真正的端口扫描。以及远程操作系统检测阶段,都可以使用诱饵主机选项。但是在进行版本检测或TCP连接扫描时,诱饵主机选项是不能使用的。
我们用这条命令来进行测试,在参数-D 后面加上RND:10 表示产生十台诱饵主机。(产生的诱饵主机的数量越多,会导致扫描变慢,而且结果不准确。)
nmap -D RND:10 192.168.0.103
这个时候我们使用抓包工具进行抓包检测的话,我们就可以发现很多源地址不一样的数据包发送。
--source-port
;-g (源端口欺骗) 网络安全控制中有一种访问控制列表技术(Access Control Lists, ACL)。这种技术主要是依靠ip地址和端口数来对数据包进行限制,有时候需要保证DNS和FTP协议正常工作,DNS响应来自53端口,FTP连接来自于20端口,很多时候网络管理员会直接允许来自于这些端口的数据进入网络,这样做其实就是在防护的网络边界上开的一个漏洞。
Nmap提供了-g和--source-port参数,用于利用上述弱点,nmap就可从不常用或被遗忘的端口发送数据,下面我们来测试一下,将扫描的源端口指定为8888。
nmap -g 8888 192.168.0.103
在这里我们也可以通过抓包工具,对发送出去的数据包进行检测,在数据包中的Source port 字段中可以看到源端口为8888。
5.--date-length
默认情况下,Nmap发送到报文中只包含头部,内容部分是空的。,因此,TCP的数据包大小只有40字节,而ICMP ECHO请求只有28字节。我们在之前也讲到这种空的报文,很容易被网络中检测机制发现,所以在试图通过这些网络的检测机制时,可以在数据包上附加指定数量的随机字节,这个选项会使得大部分Ping和端口扫描变慢,但是影响并不大。
使用 --data-length 指定为25
nmap --data-length 25 192.168.0.103
想要进一步查看是否更改成功的话,还需要通过抓包软件。在抓包软件中可以看到发送出去的数据包的data部分的长度是25字节。
--ttl
(设置IP time to live ) TTL(time to live 生存时间)。Nmap中可以设置IPv4数据包的ttl域为指定的值,指定参数为 -ttl
nmap -ttl 25 192.168.0.103
在这里就不再去贴图片了,因为结果都是一样的。不一样的就是需要自己通过抓包软件去分析数据包中被修改过的值。
--spoof-mac
(MAC地址欺骗) 通过这个选项可以人为指定Nmap在进行扫描工作时发送的Mac地址。这个选项默认使用了 --send-eth 参数,这样Nmap发送的才是真正的以太网包。Nmap支持多种格式,如果简单使用字符串 0 ,Nmap选择一个完全随机的MAC地址。如果给定的字符是一个使用分号分隔的十六进制偶数,Nmap将使用这个MAC地址。如果是小于12的十六进制数字,Nmap会随机填充剩下的六个字节。如果参数不是0和十六进制字符串,Nmap将通过Nmap-mac-prefixes查找厂商名称,如果找到匹配,将使用厂商的三字节前缀,然后随机填充剩下的三个字节。
伪造MAC地址的扫描方法(-PR ARP ping 扫描)
nmap -sn -PR --spoof-mac 0 192.168.0.103
TCP Connect扫描的检测
这个TCP Connect扫描之前说过,这里就不再多写了,算了还是写上吧...
TCP Connect扫描是一种最为基本的扫描方式。Nmap向一个开放的端口发起了连接请求,并且完成三次握手,之后结束了这次连接。这种扫描很容易被检测到,因为Nmap会向每一个目标端口发送一个数据包。如果该端口是关闭的,目标会回复一个RST和ACK标志位的数据包。如果该端口是开放的,目标会回复一个设置了SYN/ACK标志位的数据包。然后Nmap会发送一个设置了ACK标志位的数据包来完成三次握手,在这个过程中会产生大量错误消息。下面来测试分析一下这个实验,我这里使用物理机192.168.126.1去扫描虚拟机192.168.126.139我们可以看到这段时间内有大量的TCP Connect活动出现,如此频繁地对大量TCP端口发起连接很可能意味有人正在对你的主机进行扫描。如果网络中部署了网络检测设备,当达到一定的阈值时就会报警。
可以看出这个时间段内正在尝试大量的端口进行连接
操作系统扫描的防范
当维护一个网络的时候,最简单的办法无非为系统及时打上补丁,及时安装更新等。但是真正这样并不能阻止他人的扫描,最好增加防火墙之类的安全设备。另外,Morph和IP Personality两款软件也是极为优秀的防护软件。
防范网络中进行的操作系统扫描,最好的办法就是提供虚假的信息来迷惑对方,可以使用上述两个软件。
具体的我也没用过,感兴趣的可以自己下一下试试。
问题
应该没啥大问题,这个环节主要是需要Nmap配合wireshake进行使用,这样实验的效果会更明显,理解起来也有帮助。
为什么最后一点才贴wireshake的图,因为我懒的贴图。过段时间会更新wireshake的用法和操作文章可能有的地方写的比较多,什么TTL,ACL这种基础的网络知识其实都不想写,就当给自己复习了。