📄 485.htm
字号:
定如何重组数据包。我没有加入这一特性因为没有简便的方式 <br>
发送IP分段(特别是,在Solaris 上是不允许的)。关于覆盖 <br>
段的更多信息,可以看IDS 的论文(www.secnet.com) <br>
TCP 选项 -- 这简直是泄漏信息的金矿。它的好处在于: <br>
1) 这通常是可选的(哈!):) 所以并非所有实现都支持。 <br>
2) 若一个实现发出设置了选项的请求,目标通过设置它在回 <br>
应中表示支持。 <br>
3) 可以在一个数据包中设置而一次测试所有选项。 <br>
Nmap发送这些选项的几乎所有可能的包: <br>
Window Scale=10; NOP; Max Segment Size = 265; Timestamp; End of Ops; <br>
当你得到回应,看看那个选项被送回也就是被支持。一些操作 <br>
系统如最近的FreeBSD 机器支持上面所有的,而其他,如Linux 2.0.X <br>
支持的则很少。最近的Linux 2.1.x 内核支持上面所有的。另 <br>
一方面,它们又有更易受攻击的TCP 序列生成方式。去看看。 <br>
即使几个操作系统支持同样的选项集,有时仍可以通过选项的 <br>
_值_分辨出它们。例如,如果送一个小的MSS值给Linux机器, <br>
它会用那个MSS 生成一个回答给你。其他主机会给你不同的值。 <br>
甚至即使你得到同样的支持选项集和同样得值,你仍可以通过 <br>
选项提供的_顺序_和填充字进行辨识,例如Solaris返回'NNTNWME' <br>
表示: <br>
而Linux 2.2.122返回MENNTNW。同样的选项,同样的值,但不 <br>
同顺序! <br>
没见过其他OS检测工具利用TCP 选项,但它非常有用。 <br>
因同样原因有其他几个有用的选项我会探测,象那些支持T/TCP <br>
和选择性确认。 <br>
开发年代 -- 甚至使用上面所有测试,nmap仍不能从TCP 栈区分Win95, <br>
WinNT,或Win98。这很令人惊讶,尤其是Win98 比Win95 晚出 <br>
现4 年。你可能想它们不得不从某些方面进行改善(象支持更 <br>
多的TCP 选项)这样我们可以检测到改变而分辨出它们。不幸 <br>
的是,不是这样的。NT的栈显然就是放在95里的蹩脚的东西。 <br>
而且到98也没加改动。 <br>
但别放弃希望,还有个办法。你可以简单的进行早期的Windows <br>
DOS 攻击(Ping of Death, Winnuke, 等)而比当时的如Teardrop <br>
和Land多做一些。就是在每个攻击之后,ping它们看是否垮 <br>
掉了。等到你最后crash 掉它们,你就能缩小的某一服务包 <br>
或补丁。 <br>
这个没加进nmap,尽管我承认它非常诱人:)。 <br>
SYN洪水限度 -- 一些操作系统会停止新的连接尝试如果你送太多的 <br>
伪造SYN 给它(伪造包避免你的内核复位连接)。许多操作系 <br>
统只能处理8 个包。最近的Linux 内核(包括其他操作系统) <br>
允许不同的方式如SYN cookie来防止这成为严重问题。所以你 <br>
可以试着从伪造地址发8 个包到目标打开的端口再尝试你还能 <br>
否建立连接以发现一些信息。这没在nmap中实现因为有人不喜 <br>
欢你用SYN 洪水,甚至你解释这只是想知道它运行的操作系统 <br>
也不能使他们平静。 <br>
NMAP实现和结果 <br>
我已经作了一个上面说的OS探测技术的参考实现(除了我说不包括的)。 <br>
我把它们加到了我的Nmap扫描器这样在分析指纹时它已经知道了什么 <br>
端口是打开还是关闭的而不用你再告诉。它也能在Linux,*BSD, 和 <br>
Solaris 2.51和2.6, 以及其他一些操作系统间移植。 <br>
新版的nmap读一个指纹模板文件。下面是语法的例子: <br>
FingerPrint IRIX 6.2 - 6.4 # Thanks to Lamont Granquist <br>
TSeq(Class=i800) <br>
T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT) <br>
T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) <br>
T3(Resp=Y%DF=N%W=C000|EF2A%ACK=O%Flags=A%Ops=NNT) <br>
T4(DF=N%W=0%ACK=O%Flags=R%Ops=) <br>
T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) <br>
T6(DF=N%W=0%ACK=O%Flags=R%Ops=) <br>
T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) <br>
PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) <br>
看第一行(我加了'>'标记): <br>
> FingerPrint IRIX 6.2 - 6.3 # Thanks to Lamont Granquist <br>
这简单表明这个指纹覆盖IRIX版本6.2到6.3而注释表明Lamont Granquist <br>
友好地送给我测试用IRIX机器的IP地址或指纹。 <br>
> TSeq(Class=i800) <br>
这表明ISN 取样放在"i800组"。这意味着每一个新序列号比前一个大 <br>
800的整数倍。 <br>
> T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT) <br>
这个测试叫T1(比test1 聪明吧?)。这个测试我们送一个SYN 包带 <br>
一组TCP 选项到一个打开的端口。DF=N意为回答的"Don't fragment" <br>
位必须没有设置。W=C000|EF2A意为收到的窗口特征必须是0xC000 或 <br>
EF2A。ACK=S++是说响应必须是我们送的序列号加1 。Flags=AS 意为 <br>
ACK 和SYN 标记在回答中。Ops=MNWNNT意为回答的选项必须如此顺序: <br>
> T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=) <br>
测试2 包括一个NULL及同样选项到一个打开的端口。Resp=Y表示我们 <br>
必须得到一个回答。Ops=表示必须没有任何选项包括在回答中。若整 <br>
个用'%Ops='则任何选项都匹配。 <br>
> T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AS%Ops=M) <br>
测试3 是一个SYN|FIN|URG|PSH w/options 到一个打开端口。 <br>
> T4(DF=N%W=0%ACK=O%Flags=R%Ops=) <br>
这是一个到打开端口的ACK。注意这儿没有Resp=。这意味着缺少回答 <br>
(比如包在网络上掉了或被防火墙拦住了)不会妨碍其他测试的匹配。 <br>
我们如此是因为实际上所有的OS都会回答,所以缺少回答总是网络原 <br>
因而不是OS本身造成。测试2和3里有Resp标记因为有OS_确实_丢弃它 <br>
们而不回答。 <br>
> T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=) <br>
> T6(DF=N%W=0%ACK=O%Flags=R%Ops=) <br>
> T7(DF=N%W=0%ACK=S%Flags=AR%Ops=) <br>
这些测试是SYN,ACK,和FIN|PSH|URG, 分别地,到一个关闭端口。 <br>
总是设置同样的选项。当然这显然给了名字'T5', 'T6', 和 'T7' :)。 <br>
> PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E) <br>
这大家伙是端口不可达消息测试。现在你应该认识DF=N了。TOS=0 意 <br>
为IP服务域类型是0 。下两个域给出(16进制)返回的消息头IP全长 <br>
域和IP头中给的全长。RID=E 是说在返回的部分原始包中的RID 值应 <br>
和原来的一样(就如我们送出的)。RIPCK=E 表示没有修改检查和( <br>
改了的话用RIPCK=F)。UCK=E表示UDP 检查和也正确。下面的是UDP <br>
长度0x134 和DAT=E 表示它们正确返回我们的UDP 数据。因为大多数 <br>
实现(包括这个)不送回任何我们的UDP 数据包,它们默认DAT=E。 <br>
带这个功能的这个版本的nmap正在私下进行第六次beta测试循环。你 <br>
读到的时候,也许已经完成,也许没有。访问http://www.insecure.org/nmap/ <br>
以得到最新版本。 <br>
流行网站快照 <br>
下面是我们努力的成果。我们现在可以随机挑选Internet网站判断它 <br>
使用的OS。它们许多修改了telnet标志,等。以使这些信息保密。但 <br>
这对我们的新指纹没用!这也是好办法揭露<填上你喜欢的傻OS>的用 <br>
户是多么的愚蠢。:) <br>
用在这些例子中的命令是:nmap -sS -p 80 -O -v <主机> <br>
也要注意大多数扫描是在98-10-18进行的。那以后一些家伙会升级/ <br>
改变了它们的服务器。 <br>
注意我并不喜欢这的每个网站。 <br>
# "黑客" 网站或(两方都是)自认为是的 <br>
www.l0pht.com => OpenBSD 2.2 - 2.4 <br>
www.insecure.org => Linux 2.0.31-34 <br>
www.rhino9.ml.org => Windows 95/NT # 没的说 :) <br>
www.technotronic.com => Linux 2.0.31-34 <br>
www.nmrc.org => FreeBSD 2.2.6 - 3.0 <br>
www.cultdeadcow.com => OpenBSD 2.2 - 2.4 <br>
www.kevinmitnick.com => Linux 2.0.31-34 # Free Kevin! <br>
www.2600.com => FreeBSD 2.2.6 - 3.0 Beta <br>
www.antionline.com => FreeBSD 2.2.6 - 3.0 Beta <br>
www.rootshell.com => Linux 2.0.35 # 改成了 OpenBSD 在他们得到以后 <br>
# 安全提供商,顾问,等 <br>
www.repsec.com => Linux 2.0.35 <br>
www.iss.net => Linux 2.0.31-34 <br>
www.checkpoint.com => Solaris 2.5 - 2.51 <br>
www.infowar.com => Win95/NT <br>
# OS制造商 <br>
www.li.org => Linux 2.0.35 # Linux 国际版 <br>
www.redhat.com => Linux 2.0.31-34 # 我奇怪它们发行什么 :) <br>
www.debian.org => Linux 2.0.35 <br>
www.linux.org => Linux 2.1.122 - 2.1.126 <br>
www.sgi.com => IRIX 6.2 - 6.4 <br>
www.netbsd.org => NetBSD 1.3X <br>
www.openbsd.org => Solaris 2.6 # 啊嗨 :) <br>
www.freebsd.org => FreeBSD 2.2.6-3.0 Beta <br>
# 学联 <br>
www.harvard.edu => Solaris 2.6 <br>
www.yale.edu => Solaris 2.5 - 2.51 <br>
www.caltech.edu => SunOS 4.1.2-4.1.4 # Hello! 这是90年代的 :) <br>
www.stanford.edu => Solaris 2.6 <br>
www.mit.edu => Solaris 2.5 - 2.51 # 这么多好学校喜欢SUN? <br>
# 大概是给.edu打40%的折扣 :) <br>
www.berkeley.edu => UNIX OSF1 V 4.0,4.0B,4.0D <br>
www.oxford.edu => Linux 2.0.33-34 # 好家伙! <br>
# 残疾网站 <br>
www.aol.com => IRIX 6.2 - 6.4 # 不奇怪它们那么不安全 :) <br>
www.happyhacker.org => OpenBSD 2.2-2.4 # 病态的, Carolyn? <br>
# 甚至最安全的OS在不合格的管理员手里 <br>
也没用 <br>
# 其他 <br>
www.lwn.net => Linux 2.0.31-34 # 这是Linux新闻网站! <br>
www.slashdot.org => Linux 2.1.122 - 2.1.126 <br>
www.whitehouse.gov => IRIX 5.3 <br>
sunsite.unc.edu => Solaris 2.6 <br>
注意:在它们的安全白皮书中,Microsoft 说到它们松懈的安全:“ <br>
这种假设已经改变在这些年中Windows NT获得普及很大程度上是由于 <br>
其安全特性”。喔,从我这里看Windows 在安全团体中不是很普遍:)。 <br>
从中我只看到2 台Windows 机器,而且对nmap来说Windows 是_ 容易_ <br>
分辨的它太破了(一流的聪明) <br>
当然,有更多需要检查的。这是ultra-secret Transmeta公司的网站。 <br>
有趣的是该公司主要由微软的Paul Allen建立,而非其雇员Linus Torvalds。 <br>
那么它们是和Paul用NT或者投身到Linux革命中去呢?我们看看: <br>
我们用命令: <br>
nmap -sS -F -o transmeta.log -v -O www.transmeta.com/24 <br>
这个说SYN 扫描一致端口(从/etc/services),记录结果到'transmeta.log', <br>
详细地,进行OS扫描,并扫描www.transmeta.com所在的'C'地址。这 <br>
是结果摘要: <br>
neon-best.transmeta.com (206.184.214.10) => Linux 2.0.33-34 <br>
www.transmeta.com (206.184.214.11) => Linux 2.0.30 <br>
neosilicon.transmeta.com (206.184.214.14) => Linux 2.0.33-34 <br>
ssl.transmeta.com (206.184.214.15) => Linux unknown version <br>
linux.kernel.org (206.184.214.34) => Linux 2.0.35 <br>
www.linuxbase.org (206.184.214.35) => Linux 2.0.35 可能和上面的是同一台机器 <br>
好,我想结果很清楚了:)。 <br>
感谢 <br>
现在Nmap能够检测如此多不同的操作系统的唯一原因是那么多的人在 <br>
个人beta测试中努力找到新的激动人心的机器来获取指纹!特别是, <br>
Jan Koum, van Hauser, Dmess0r, David O'Brien, James W. Abendschan, <br>
Solar Designer, Chris Wilson, Stuart Stock, Mea Culpa,Lamont Granquist, <br>
Dr. Who, Jordan Ritter, Brett Eldridge, 和Pluvius 送来成吨的 <br>
古怪机器的IP地址和/或不能通过Internet访问的机器的指纹。 <br>
感谢Richard Stallman些的GNU Emacs。 本文不能顺利自动换行如果 <br>
我用vi或cat 和^D的话。 <br>
问题和意见可以送到fyodor@insecure.org(如果它不工作了,用fyodor@insecure.org <br>
)。 <br>
Nmap可以从获得http://www.insecure.org/nmap。 <br>
------ <br>
译者注: <br>
1>原文在:http://www.insecure.org/nmap/nmap-fingerprinting-article.txt <br>
2>原文还有法语、葡萄牙语、意大利语、俄语、西班牙语、德语译本 <br>
3>对译文的任何意见请来信neko@126.com <br>
[ Nmap | Exploit World | Reading | About/Contact | Privacy Policy ] <br>
<br>
-- <br>
如果发现太太有错一定是我的错; <br>
如果我没有看错,一定是我害太太犯错; <br>
如果她不认错,她就没有错; <br>
如果我还坚持她有错,那就是我的错; <br>
如果太太m真错了,那我就尊重她的错, 我才不会犯错。 <br>
总之,太太绝对不会错, <br>
</small><hr>
<p align="center">[<a href="index.htm">回到开始</a>][<a href="12.htm">上一层</a>][<a href="486.htm">下一篇</a>]
<p align="center"><a href="http://cterm.163.net">欢迎访问Cterm主页</a></p>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -