freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Satori指纹识别原理及dhcp分析
2019-07-04 10:06:24
所属地 湖南省

原创: 萌新 合天智汇

原创投稿活动:重金悬赏 | 合天原创投稿等你来

Satori是被动识别中的一款独树一帜的软件,和ettercap等软件不同,它专门采用dhcp进行识别。本文通过对satori进行测试、读源码对其识别机制进行简单的分析,并在最后一部分对Satori开发者的paper进行了解读。

解压后有如下几个文件

0YH8SOPe86S

其中,dhcp.xml和tcp.xml在下文会详细分析,p0f.fp,p0fa.fp是和p0f的指纹库相同的,稍微了解即可,如下所示。 P0f.fp是分析syn指纹

0YH8SPNxixE

P0fa.fp是分析synack的指纹

0YH8SO1aQi0

运行测试一下

0YH8SNToEm8

1和149都是win7,但是没有非常精确地识别出来 因为我命令里加了-d,所以会打印出指纹,猜想应该是根据收到的数据包对比指纹库,然后给出结果

0YH8SMRIKno

以192.168.96.1为例

0YH8SLqTfuK

[12] 表明可能属于该系统的权重,值越大,越有可能 该数字来源于dhcp.xml中给出的特征及权重 在dhcp.xml中找到vista的指纹

0YH8SLZd3my

结合上一张截图,第一条

0YH8SKjlteS

,权重为5 第二条

0YH8SJaFuYy

,权重为5 第三条

0YH8SKIMLui

,权重为2 5+5+2=12;所以192.168.96.1为vista的权重为12 在试一下windows2000,验证一下猜想 Windows2000的指纹如图

0YH8SLD2Ek4

它所有特征中只匹配

0YH8SJ4iX8C

0YH8SHc9Ct6

权重加起来是7 我又测了一台centos

0YH8SJ0m2hk

Satori没有猜测出可能是什么系统 我手动在指纹库中匹配,也没有找到

结合抓包分析

0YH8SGtBVcu

以192.168.96.1为例 在探测时,输出的是

0YH8SFtFQlU

对应satori.pcap第一个包

0YH8SF3ZJTs

Option分别是53,61,12,60,55,255(末尾,可忽略) 命中指纹库中的

0YH8SEjYCjg

0YH8SEWD1Bw

Option55展开,分别是1,15,3,6,44,46,47,31,33,121,249,43,252 命中指纹库中的

0YH8SGQJut6

Option60展开 Vendorclass identifier为MSFT5.0

0YH8SCuXa76

命中指纹库

0YH8SDpwtTU

所以vista的权重为5+5+2=12 结合DHCP协议分析: DHCP一共有8种报文,分别为DHCPDiscover、DHCPOffer、DHCPRequest、DHCPACK、DHCPNAK、DHCPRelease、DHCPDecline、DHCPInform。各种类型报文的基本功能如下:

0YH8SBARtFQ

以这次抓到的流量来看,有三种报文,分别是DHCPRqeuest,DHCP ACK,DHCP Inform. 只分析DHCPInform的option

0YH8SAdlRYW

53表示报文类型 RFC2132(https://tools.ietf.org/html/rfc2132?spm=a2c4e.11153940.blogcont491032.62.60a34540ToTPN5)可以看到type为8表示inform

0YH8SAEvfV2

0YH8SCRyVjE

61(RFC2132)是客户端ID,DHCP客户端使用此选项指定其唯一标识符,可以包含硬件类型和硬件地址

0YH8SAp2pJw

0YH8S7n0x4i

12(RFC2132)表示hostname,指定客户端名称

0YH8S72FSMq

0YH8S7DtaLY

60被用来选择性地标识DHCP客户端的供应商类型和配置

0YH8S88AFbU

0YH8S7A5dqq

这里存在如下对应关系 MSFT5.0 <--> windows dhcpcd4.0.1 <--> 安卓2.2 dhcpcd4.0.15 <--> 安卓3.0 dhcpcd-5.2.10<--> 安卓4.0 dhcpcd-5.2.10:Linux-3.0.13:armv7l:MT6577<--> 小米手机 dhcpcd-5.5.6<--> 安卓4.2 udhcp1.19.4 <--> 极路由或其它路由器 55被用来请求指定配置参数的值。请求的参数列表指定为n个八位字节,其中每个八位字节是RFC2312中定义的有效DHCP选项代码

0YH8S5FwAfg

0YH8S3ODsOW

255表示有效信息的结束

0YH8S4RBaFs

0YH8S5EwrCK

开发Satori的人写了篇paper介绍如何通过dhcp数据包被动识别os指纹(http://chatteronthewire.org/papers.htm,chatter-dhcp.pdf),这部分是我根据paper写出理解后的笔记: 对于被动指纹识别而言,DHCP的一个优点就是它是广播包,当一个dhcp客户端要加入时,他们会向所有人发送广播(所以在wireshark抓到的包中目的地址是255.255.255.255)。 作者首先介绍了最麻烦的方案: 利用捕获中显示的数据包的实际时间,每个DHCP数据包之间的差异,数据包的类型,存储在SecondsElapsed字段中的值以及该数据包集合上的TransactionID等等来区分操作系统,如windows95和windows98等版本的比较

0YH8S0xKPKq

0YH8S2vZZ0y

0YH8S0fjh4q

0YH8S0u4O6C

0YH8S0MJCsq

0YH8RyeGDcO

再介绍了简单的方案: 通过options识别操作系统。

0YH8Rxbk6TY

首先介绍通过option55(Satori最主要的方案): 利用选项55中请求的参数以及请求它们的顺序来识别操作系统 比如window各个版本的差异

0YH8RySfihk

Fedora和centos的

0YH8RxYXxYW

由于很多linux底层dhcp堆栈相同,如下图所示

0YH8RwL6T8y

使用option55不足以识别,所以针对linux,作者提出可以加以option51(客户希望的租用时间),option57(告诉DHCP服务器它可以接受的DHCP数据包的大小)辅助。 然后又介绍了通过其他options辅助识别os option61,用作将客户端链接到其租约的唯一标识符 可用于识别MSRRAS服务器

0YH8Rw06XlA

上图是一台MSRRAS Server,value等于01+ RAS + ‘ ‘ + MAC + 000000000000 而下图是一台思科的设备

0YH8RtSnOZE

Option77是用户类信息,它通常用于帮助识别某种类型的计算机或用户类别 比如下图

0YH8RuMLtVg

接着介绍从PXEboot中进行区分

0YH8RszWg2C

相关的option包括: Option93,客户端系统的架构;通过option93可以识别底层硬件

0YH8RuiOto8

0YH8RrWqri4

Option94,客户端网络设备接口

0YH8Rrgn2xs

最后作者指出,可以利用租约信息来进行识别 可以观察当租约到期时,有多少操作系统实际更新了他们的IP地址,哪些等待直到下次重启来识别。 下面是继续使用ip地址的系统

0YH8RosMaJc

下面是当前已经拥有地址,然后发送dhcprenewel请求的系统

0YH8RpjltOS

实操推荐 python爬虫-WEB目录爆破和指纹识别:过该实验,基于之前所学的爬虫知识,自己编写两个安全测试的小工具:web指纹识别,web目录爆破。 长按下面二维码,或点击“实验:python爬虫-WEB目录爆破和指纹识别(合天网安实验室))”,可预览学习(PC端操作最佳哟)

0YH8RoF468e

长按开始学习

0YH8RodqszI

声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关,本文为合天原创,如需转载,请注明出处!

# 合天智汇
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者