-
-f (报文分段);
--mtu (使用指定的MTU)
-f选项要求扫描时(包挺ping扫描)使用
小的IP包分段。其思路是将TCP头分段在几个包中,使得包过滤器、
IDS以及其它工具的检测更加困难。必须小心使用这个选项,有些系
统在处理这些小包时存在问题,例如旧的网络嗅探器Sniffit在接收
到第一个分段时会立刻出现分段错误。该选项使用一次,Nmap在IP
头后将包分成8个字节或更小。因此,一个20字节的TCP头会被分成3个
包,其中2个包分别有TCP头的8个字节,另1个包有TCP头的剩下4个字
节。当然,每个包都有一个IP头。再次使用-f可使用
16字节的分段(减少分段数量)。使用--mtu选项可
以自定义偏移的大小,使用时不需要-f,偏移量必须
是8的倍数。包过滤器和防火墙对所有的IP分段排队,如Linux核心中的
CONFIG-IP-ALWAYS-DEFRAG配置项,分段包不会直接使用。一些网络无法
承受这样所带来的性能冲击,会将这个配置禁止。其它禁止的原因有分段
包会通过不同的路由进入网络。一些源系统在内核中对发送的报文进行
分段,使用iptables连接跟踪模块的Linux就是一个例子。当使用类似Ethereal
的嗅探器时,扫描必须保证发送的报文要分段。如果主机操作系统会产
生问题,尝试使用--send-eth选项以避开IP层而直接
发送原始的以太网帧。
-
-D <decoy1 [,decoy2][,ME],...>
(使用诱饵隐蔽扫描)
为使诱饵扫描起作用,需要使远程主机认为是诱饵在扫描目标网络。
IDS可能会报个某个IP的5-10个端口扫描,但并不知道哪个IP在扫描以及
哪些不是诱饵。但这种方式可以通过路由跟踪、响应丢弃以及其它主动
机制在解决。这是一种常用的隐藏自身IP地址的有效技术。
使用逗号分隔每个诱饵主机,也可用自己的真实IP作为诱饵,这时可使用
ME选项说明。如果在第6个位置或
更后的位置使用ME选项,一些常用
端口扫描检测器(如Solar Designer's excellent scanlogd)就不会报告
这个真实IP。如果不使用ME选项,Nmap
将真实IP放在一个随机的位置
注意,作为诱饵的主机须在工作状态,否则会导致目标主机的SYN洪水攻击。
如果在网络中只有一个主机在工作,那就很容易确定哪个主机在扫描。也可
使用IP地址代替主机名(被诱骗的网络就不可能在名字服务器日志中发现)。
诱饵可用在初始的ping扫描(ICMP、SYN、ACK等)阶段或真正的端口扫描
阶段。诱饵也可以用于远程操作系统检测(-O)。在进行版
本检测或TCP连接扫描时,诱饵无效。
使用过多的诱饵没有任何价值,反而导致扫描变慢并且结果不准确。
此外,一些ISP会过滤哄骗的报文,但很多对欺骗IP包没有任何限制。
-
-S <IP_Address> (源地址哄骗)
在某些情况下,Nmap可能无法确定你的源地址(如果这样,Nmap会给出
提示)。此时,使用-S选项并说明所需发送包的接口IP地址。
这个标志的另一个用处是哄骗性的扫描,使得目标认为是另
一个地址在进行扫描。可以想象某一个竞争对手在不断扫描某个公司!
-e选项常在这种情况下使用,也可采用-P0选项。
-
-e <interface> (使用指定的接口)
告诉Nmap使用哪个接口发送和接收报文,Nmap可以进行自动检测,
如果检测不出会给出提示。
-
--source-port <portnumber>;
-g <portnumber> (源端口哄骗)
仅依赖于源端口号就信任数据流是一种常见的错误配置,这个问题非常
好理解。例如一个管理员部署了一个新的防火墙,但招来了很多用户的不满,因为
他们的应用停止工作了。可能是由于外部的UDP DNS服务器响应无法进入网络,而导致
DNS的崩溃。FTP是另一个常见的例子,在FTP传输时,远程服务器尝试和内部用
建立连接以传输数据。
对这些问题有安全解决方案,通常是应用级代理或协议分析防火墙模块。
但也存在一些不安全的方案。注意到DNS响应来自于53端口,FTP连接
来自于20端口,很多管理员会掉入一个陷阱,即允许来自于这些端口的数据进入
网络。他们认为这些端口里不会有值得注意的攻击和漏洞利用。此外,管理员
或许认为这是一个短期的措施,直至他们采取更安全的方案。但他们忽视了安全的
升级。
不仅仅是工作量过多的网络管理员掉入这种陷阱,很多产品本身也会有这类
不安全的隐患,甚至是微软的产品。Windows 2000和Windows XP中包含的IPsec过滤
器也包含了一些隐含规则,允许所有来自88端口(Kerberos)的TCP和UDP数据流。另
一个常见的例子是Zone Alarm个人防火墙到2.1.25版本仍然允许源端口53(DNS)或
67(DHCP)的UDP包进入。
Nmap提供了-g和--source-port选项(它们是
等价的),用于利用上述弱点。只需要提供一个端口号,Nmap就可以从这些
端口发送数据。为使特定的操作系统正常工作,Nmap必须使用不同的端口号。
DNS请求会忽略--source-port选项,这是因为Nmap依靠系
统库来处理。大部分TCP扫描,包括SYN扫描,可以完全支持这些选项,UDP扫
描同样如此。
-
--data-length <number> (发送报文时
附加随机数据)
正常情况下,Nmap发送最少的报文,只含一个包头。因此TCP包通常
是40字节,ICMP ECHO请求只有28字节。这个选项告诉Nmap在发送的报文上
附加指定数量的随机字节。操作系统检测(-O)包不受影响,
但大部分ping和端口扫描包受影响,这会使处理变慢,但对扫描的影响较小。
-
--ttl <value> (设置IP time-to-live域)
设置IPv4报文的time-to-live域为指定的值。
-
--randomize-hosts (对目标主机的顺序随机排列)
告诉Nmap在扫描主机前对每个组中的主机随机排列,最多可达
8096个主机。这会使得扫描针对不同的网络监控系统来说变得不是很
明显,特别是配合值较小的时间选项时更有效。如果需要对一个较大
的组进行随机排列,需要增大nmap.h文件中
PING-GROUP-SZ的值,并重新编译。另一种方法是使用列表扫描
(-sL -n -oN
<filename>),产生目标IP的列表,
使用Perl脚本进行随机化,然后使用-iL提供给Nmap。
-
--spoof-mac <mac address,prefix,or vendor
name> (MAC地址哄骗)
要求Nmap在发送原以太网帧时使用指定的MAC地址,这个选项隐含了
--send-eth选项,以保证Nmap真正发送以太网包。MAC地址有几
种格式。如果简单地使用字符串“0”,Nmap选择一个完全随机的MAC
地址。如果给定的字符品是一个16进制偶数(使用:分隔),Nmap将使用这个MAC地址。
如果是小于12的16进制数字,Nmap会随机填充剩下的6个字节。如果参数不是0或16进
制字符串,Nmap将通过nmap-mac-prefixes查找
厂商的名称(大小写区分),如果找到匹配,Nmap将使用厂商的OUI(3字节前缀),然后
随机填充剩余的3个节字。正确的--spoof-mac参数有,
Apple,
0,01:02:03:04:05:06,
deadbeefcafe,0020F2,
和Cisco.