使用TCP/IP协议栈指纹进行远程操作系统辨识
我已经作了一个上面说的OS探测技术的参考实现(除了我说不包括的)。
我把它们加到了我的Nmap扫描器这样在分析指纹时它已经知道了什么
端口是打开还是关闭的而不用你再告诉。它也能在Linux,*BSD, 和
Solaris 2.51和2.6, 以及其他一些操作系统间移植。
新版的nmap读一个指纹模板文件。下面是语法的例子:
FingerPrint IRIX 6.2 - 6.4 # Thanks to Lamont Granquist
TSeq(Class=i800)
T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT)
T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
T3(Resp=Y%DF=N%W=C000|EF2A%ACK=O%Flags=A%Ops=NNT)
T4(DF=N%W=0%ACK=O%Flags=R%Ops=)
T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
T6(DF=N%W=0%ACK=O%Flags=R%Ops=)
T7(DF=N%W=0%ACK=S%Flags=AR%Ops=)
PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
看第一行(我加了''>''标记):
> FingerPrint IRIX 6.2 - 6.3 # Thanks to Lamont Granquist
这简单表明这个指纹覆盖IRIX版本6.2到6.3而注释表明Lamont Granquist
友好地送给我测试用IRIX机器的IP地址或指纹。
> TSeq(Class=i800)
这表明ISN 取样放在"i800组"。这意味着每一个新序列号比前一个大
800的整数倍。
> T1(DF=N%W=C000|EF2A%ACK=S++%Flags=AS%Ops=MNWNNT)
这个测试叫T1(比test1 聪明吧?)。这个测试我们送一个SYN 包带
一组TCP 选项到一个打开的端口。DF=N意为回答的"Don''t fragment"
位必须没有设置。W=C000|EF2A意为收到的窗口特征必须是0xC000 或
EF2A。ACK=S++是说响应必须是我们送的序列号加1 。Flags=AS 意为
ACK 和SYN 标记在回答中。Ops=MNWNNT意为回答的选项必须如此顺序:
> T2(Resp=Y%DF=N%W=0%ACK=S%Flags=AR%Ops=)
测试2 包括一个NULL及同样选项到一个打开的端口。Resp=Y表示我们
必须得到一个回答。Ops=表示必须没有任何选项包括在回答中。若整
个用''%Ops=''则任何选项都匹配。
> T3(Resp=Y%DF=N%W=400%ACK=S++%Flags=AS%Ops=M)
测试3 是一个SYN|FIN|URG|PSH w/options 到一个打开端口。
> T4(DF=N%W=0%ACK=O%Flags=R%Ops=)
这是一个到打开端口的ACK。注意这儿没有Resp=。这意味着缺少回答
(比如包在网络上掉了或被防火墙拦住了)不会妨碍其他测试的匹配。
我们如此是因为实际上所有的OS都会回答,所以缺少回答总是网络原
因而不是OS本身造成。测试2和3里有Resp标记因为有OS_确实_丢弃它
们而不回答。
> T5(DF=N%W=0%ACK=S++%Flags=AR%Ops=)
> T6(DF=N%W=0%ACK=O%Flags=R%Ops=)
> T7(DF=N%W=0%ACK=S%Flags=AR%Ops=)
这些测试是SYN,ACK,和FIN|PSH|URG, 分别地,到一个关闭端口。
总是设置同样的选项。当然这显然给了名字''T5'', ''T6'', 和 ''T7'' :)。
> PU(DF=N%TOS=0%IPLEN=38%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
这大家伙是端口不可达消息测试。现在你应该认识DF=N了。TOS=0 意
为IP服务域类型是0 。下两个域给出(16进制)返回的消息头IP全长
域和IP头中给的全长。RID=E 是说在返回的部分原始包中的RID 值应
和原来的一样(就如我们送出的)。RIPCK=E 表示没有修改检查和(
改了的话用RIPCK=F)。UCK=E表示UDP 检查和也正确。下面的是UDP
长度0x134 和DAT=E 表示它们正确返回我们的UDP 数据。因为大多数
实现(包括这个)不送回任何我们的UDP 数据包,它们默认DAT=E。
带这个功能的这个版本的nmap正在私下进行第六次beta测试循环。你
读到的时候,也许已经完成,也许没有。访问http://www.insecure.org/nmap/
以得到最新版本。
流行网站快照
下面是我们努力的成果。我们现在可以随机挑选Internet网站判断它
使用的OS。它们许多修改了telnet标志,等。以使这些信息保密。但
这对我们的新指纹没用!这也是好办法揭露<填上你喜欢的傻OS>的用
户是多么的愚蠢。:)
用在这些例子中的命令是:nmap -sS -p 80 -O -v <主机>
也要注意大多数扫描是在98-10-18进行的。那以后一些家伙会升级/
改变了它们的服务器。
注意我并不喜欢这的每个网站。
# "黑客" 网站或(两方都是)自认为是的
www.l0pht.com => OpenBSD 2.2 - 2.4
www.insecure.org => Linux 2.0.31-34
www.rhino9.ml.org => Windows 95/NT # 没的说 :)
www.technotronic.com => Linux 2.0.31-34
www.nmrc.org => FreeBSD 2.2.6 - 3.0
www.cultdeadcow.com => OpenBSD 2.2 - 2.4
www.kevinmitnick.com => Linux 2.0.31-34 # Free Kevin!
www.2600.com => FreeBSD 2.2.6 - 3.0 Beta
www.antionline.com => FreeBSD 2.2.6 - 3.0 Beta
www.rootshell.com => Linux 2.0.35 # 改成了 OpenBSD 在他们得到以后
# 安全提供商,顾问,等
www.repsec.com => Linux 2.0.35
www.iss.net => Linux 2.0.31-34
www.checkpoint.com => Solaris 2.5 - 2.51
www.infowar.com => Win95/NT
# OS制造商
www.li.org => Linux 2.0.35 # Linux 国际版
www.redhat.com => Linux 2.0.31-34 # 我奇怪它们发行什么 :)
www.debian.org => Linux 2.0.35
www.linux.org => Linux 2.1.122 - 2.1.126
www.sgi.com => IRIX 6.2 - 6.4
www.netbsd.org => NetBSD 1.3X
www.openbsd.org => Solaris 2.6 # 啊嗨 :)
www.freebsd.org => FreeBSD 2.2.6-3.0 Beta
# 学联
www.harvard.edu => Solaris 2.6
www.yale.edu => Solaris 2.5 - 2.51
www.caltech.edu => SunOS 4.1.2-4.1.4 # Hello! 这是90年代的 :)
www.stanford.edu => Solaris 2.6
www.mit.edu => Solaris 2.5 - 2.51 # 这么多好学校喜欢SUN?
# 大概是给.edu打40%的折扣 :)
www.berkeley.edu => UNIX OSF1 V 4.0,4.0B,4.0D
www.oxford.edu => Linux 2.0.33-34 # 好家伙!
# 残疾网站
www.aol.com => IRIX 6.2 - 6.4 # 不奇怪它们那么不安全 :)
www.happyhacker.org => OpenBSD 2.2-2.4 # 病态的, Carolyn?
# 甚至最安全的OS在不合格的管理员手里也没用
# 其他
www.lwn.net => Linux 2.0.31-34 # 这是Linux新闻网站!
www.slashdot.org => Linux 2.1.122 - 2.1.126
www.whitehouse.gov => IRIX 5.3
sunsite.unc.edu => Solaris 2.6
注意:在它们的安全白皮书中,Microsoft 说到它们松懈的安全:“
这种假设已经改变在这些年中Windows NT获得普及很大程度上是由于
其安全特性”。喔,从我这里看Windows 在安全团体中不是很普遍:)。
从中我只看到2 台Windows 机器,而且对nmap来说Windows 是_ 容易_
分辨的它太破了(一流的聪明)
当然,有更多需要检查的。这是ultra-secret Transmeta公司的网站。
有趣的是该公司主要由微软的Paul Allen建立,而非其雇员Linus Torvalds。
那么它们是和Paul用NT或者投身到Linux革命中去呢?我们看看:
我们用命令:
nmap -sS -F -o transmeta.log -v -O www.transmeta.com/24
这个说SYN 扫描一致端口(从/etc/services),记录结果到''transmeta.log'',
详细地,进行OS扫描,并扫描www.transmeta.com所在的''C''地址。这
是结果摘要:
neon-best.transmeta.com (206.184.214.10) => Linux 2.0.33-34
www.transmeta.com (206.184.214.11) => Linux 2.0.30
neosilicon.transmeta.com (206.184.214.14) => Linux 2.0.33-34
ssl.transmeta.com (206.184.214.15) => Linux unknown version
linux.kernel.org (206.184.214.34) => Linux 2.0.35
www.linuxbase.org (206.184.214.35) => Linux 2.0.35 可能和上面的是同一台机器http://netadmin.77169.com/HTML/20030102063600.html