第十四周周报

论文具体思路

作者在传统的担保识别的基础上做了一些额外的工作例如,传统的包指纹识别,考虑ttl、windows scale、RTO等特征,但是传统的指纹识别在使用这些特征的时候只是简单的使用,不具有鲁棒性,而网络世界中的变化是非常大的,所以就也就是很多单包指纹识别工具的准确性比较低的原因。

基于RTO进行指纹识别是可能的,不仅仅是因为不同的设备实现TCP算法有区别,而且RFCs没有规定初始这个初始的RTO或者有多少个SYN-ACK必须被生成(既要生成多少个超时重传的包),所有有很多不同的RTO实现。

论文中用 u j u_j uj δ j \delta_j δj代表从第j个操作系统中提取到的一些传统的固定的特征向量(例如window scale,ttl等)和RTO向量,而 x = ( u ; δ ) x=(u;\delta) x=(u;δ)则代表从网络中观察到的一个数据包,既 δ \delta δ代表观察到的指纹RTO向量, δ j \delta_j δj代表第 j j j个操作系统的RTO指纹向量。

首先来讲讲RTO存在的问题,RTO既超时重传时间(超时重传时间不同的操作系统可能会有不同的算法,和不同的RTT初始值,所以他能用来识别操作系统)。如果我们通过操作系统源码或者是其他途径得到了RTO的指纹库,那么这个指纹库用在实际中是否真的准确呢?不一定。因为网络环境很复杂,server响应的SYN-ACK数据包在传输过程中会有两个问题:

  1. 传输延迟抖动:因为一个server回复的所有SYN-ACK数据包的大小肯定是一样的,那么他本身所需要的传输时间应该是固定的,我们用 d d d表示。但是网络是存在延迟的,我们用 Q m Q_m Qm表示,m表示第m个SYN-ACK数据包的延迟,所以最终实际的传输时间应该是 d + Q m d+Q_m d+Qm(这个$Q_m$值是固定的吗,既每个SYN-ACK在传输过程中的延迟时间是固定的吗?显然不是,因为网络拥堵情况不同,$Q_m$是会变化的。)。所以说,直接使用指纹数据,是存在问题的,我们需要考虑网络延迟的问题。
  2. 丢包问题,数据包在传输过程中是会丢包的,这就导致可能有时候抓到的RTO超时重传向量的维度不同,而且你不知道丢失的是哪个包,我们就无法去比较。

再来看看一些传统的特征存在的问题,例如TTL,windows scale等。

  1. 操作系统调优是非常常见的操作,调优的过程中就可能会修改这些传统的参数,又或者是目标主机专门为了混淆操作系统识别,专门修改了。那这时候这些特征的可信度就非常低了。

传统的单包操作系统指纹识别就没有考虑上们的问题。
例如:传统的单包指纹工具识别考虑RTO的时候是按照如下公式来的:
Y j m = m a x ( ⌈ − l o g 10 ( m a x ( ∣ δ ( m ) − δ j ( m ) ∣ , 1 0 − 6 ) ) ⌉ , 0 ) Y_{jm} = max(\lceil-log_{10}(max(|\delta(m)-\delta_j(m)|,10^{-6}))\rceil,0) Yjm=max(log10(max(δ(m)δj(m),106)),0)
其中的 δ \delta δ是RTO向量,既每次超时重传的时间间隔向量。 δ j ( m ) \delta_j(m) δj(m)代表指纹数据库中第 j j j个操作系统的超时重传指纹的第m维的值, δ ( m ) \delta(m) δ(m)代表我们采样到的数据的第 M M M维的值。
然后再
W j = ∑ m = 1 ∣ δ ∣ Y j m W_j = \sum^{|\delta|}_{m=1}Y_{jm} Wj=m=1δYjm
其中 W j W_j Wj代表的是给第 j j j个操作系统打的分。
思路特别的简单,但是存在很大的问题,例如现在有这种情况:
o b s e r v a t i o n   δ : ( 3.0 , 24.0 ) f i n g e r p r i n t   δ 1 : ( 3.0 , 12.0 ) f i n g e r p r i n t   δ 2 : ( 2.9 , 23.9 ) observation \ \delta:(3.0,24.0) \\ fingerprint \ \delta_1:(3.0,12.0) \\ fingerprint \ \delta_2:(2.9,23.9) observation δ:(3.0,24.0)fingerprint δ1:(3.0,12.0)fingerprint δ2:(2.9,23.9)
显然我们观察到的值与指纹库中的 δ 2 \delta_2 δ2是比较接近的,但是计算一下会发现 d e l t a 1 delta_1 delta1的得分更高。

论文中就尝试提出一种更优的策略来确定操作系统的类别,不是通过打分,而是直接得到是第 j j j个操作系统的概率。因为 δ \delta δ u u u是相互独立的两个变量,所以既有如下表示:
p ( x ∣ y j ) = p ( δ ∣ δ j ) p ( u ∣ u j ) p(x|y_j) = p(\delta|\delta_j)p(u|u_j) p(xyj)=p(δδj)p(uuj)
其中的 y j y_j yj为指纹库中第 j j j个操作系统的指纹, x x x为我们从网络中得到的特征向量。

公式推导

然后再来下面讲该公式中的 p ( δ ∣ δ j ) p(\delta|\delta_j) p(δδj) p ( u ∣ u j ) p(u|u_j) p(uuj)从何而来。

第一部分,RTO向量部分

从上面我们知道 Q m Q_m Qm代表RTO重传的数据包中第 m m m次的延迟时间,d为传输固定大小的 S Y N − A C K SYN-ACK SYNACK数据包所需要的时间,那么我们就有如下的图:
在这里插入图片描述
也就是有:
δ ( m ) = δ j ( m ) + Q m + 1 − Q m ,     m = 1 , 2 , … , ∣ δ j ∣ \delta(m) = \delta_j(m) + Q_{m+1} - Q_{m} , \ \ \ m=1,2,\dots,|\delta_j| δ(m)=δj(m)+Qm+1Qm,   m=1,2,,δj
然后其中的 Q m + 1 − Q m Q_{m+1} - Q_{m} Qm+1Qm,我们将其称为延迟抖动OWD(网络情况不同出现的延迟不同导致的传输时间抖动)

然后有如下公式:
在这里插入图片描述
其中的 f ( . ) f(.) f(.)是OWD的概率密度函数。(论文后面使用指数分布来表示OWD的分布,看起来好像比较何理?至于其中的参数,我们可以根据实际情况来确定。)

但是还有问题,上面的公式没有考虑到数据包丢失的情况,因为目标主机在响应SYN-ACK的时候,数据包可能会丢失,出现数据包丢失的情况下,我们的抓取到 δ = ( 3 , 18 ) \delta = (3,18) δ=(3,18)向量时,他是与 ( 3 , 6 , 12 ) (3,6,12) (3,6,12)这个指纹向量比较匹配呢还是与 ( 2.6 , 17.9 ) (2.6,17.9) (2.6,17.9)这个指纹向量比较匹配?为了解决这种问题,论文中定义了一种新的广义化的RTO,用 τ \tau τ,其表示如下:
在这里插入图片描述
其中的j还是代表指纹库中的第 j j j个操作系统。
实际上就是把 δ \delta δ向量中的时间间隔该用 τ \tau τ向量中的时间和向量来表示。

再定义 Γ ( τ , τ j ) \Gamma(\tau,\tau_j) Γ(τ,τj),其包含集合 { 1 , 2 , … , ∣ τ j ∣ } \{1,2,\dots,|\tau_j|\} {1,2,,τj}的所有子集。然后定义 γ ∈ Γ \gamma \in \Gamma γΓ γ ( m ) = k \gamma(m)=k γ(m)=k,意味着接收到的第m个syn-ack数据包实际上对应的原始位置为k,就拿下图来说:
r ( 2 ) = 3 r(2)=3 r(2)=3,也就是客户端收到的第二个包实际上是目标主机发送的第3个包。然后得到如下公式:
在这里插入图片描述
其中的 p ( γ ) p(\gamma) p(γ)如下:
在这里插入图片描述
既伯努利分布,其中的 q q q就为发生丢包的概率。

然后再处理 p ( τ ∣ τ j , γ ) p(\tau|\tau_j,\gamma) p(ττj,γ)

我们需要重新定义延迟抖动,因为之前的延迟抖动是向量两个包之间的,而我们考虑丢包之后,延迟抖动可能就不相邻了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后有:
在这里插入图片描述
最终得到:
在这里插入图片描述

第二部分:常用特征部分,既Window scale、TTL等

这一部分之所以要进行概率化,是因为这部分的数据是可能被修改的,我们把值被修改的情况考虑进去。
我们定义用户修改第 m m m个特征的概率为 π m \pi_m πm(参数值,自己定义),然后还有 I j m = 1 { u ( m ) = u j ( m ) } I_{jm}=1_{\{u(m)=u_j(m)\}} Ijm=1{u(m)=uj(m)},既抓到的数据包的特征值和指纹中的特征值相同时 I j m I_{jm} Ijm为1,不同为0。
然后就有:
在这里插入图片描述
最终我们开始的公式变成了下面的公式:
在这里插入图片描述
通过如上公式,我们就能得到为某个操作系统的概率。

论文方法的局限性
  1. SYN数据包可能丢失,且我们无法验证是否丢失。除非我们允许SYN重传,但是又会引发新的问题。收到的SYN-ACK是响应的哪个SYN?或许可以用不同的SYN源端口解决。
  2. 如果延迟抖动过程变成了非独立的,工具的精度会下降。例如在CPU过载时,内核的会存在显著的内核调度延迟。且不同延迟抖动不是独立的。
  3. 现实世界中的操作系统分布并不是均衡的。

操作系统指纹识别进一步的设想

阅读了一篇论文,有限样本下的暗网指纹识别,文中使用SGAN来提升有限样本下的暗网指纹识别。利用SGAN能学习到很多没有标签的样本中的特征。

那么根据这个思路,在操作系统识别中,要想获取到没有标签的样本非常容易(获取带标签的数据难度比较大),所以我们是否可以利用其来提高操作系统指纹识别的准确度。

本周学习了GAN,SGAN,同时尝试去找到更多数据和获取数据的工具。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值