os指纹匹配算法

1.IPv4 matching
Nmap用于检测匹配的算法相对简单。它需要一个受试者指纹,并针对nmap-os-db中的每个参考指纹进行测试。

当针对参考指纹进行测试时,Nmap依次查看来自受试者指纹(例如SEQ或T1)的每个探针class行。跳过参考指纹中不存在的任何探测行。 当参考指纹确实具有匹配行时,将对它们进行比较。

对于探测行比较,Nmap依次检查主题类别行中的每个单独测试(R,DF,W等)。 跳过参考行中不存在的任何测试。每当找到匹配测试时,Nmap会将PossiblePoints累加器增加分配给此测试的点数。然后比较测试值。 如果参考测试具有空值,则受试者测试仅匹配其值是否为空。如果参考测试只是一个普通的字符串或数字(没有操作符),则受试者测试必须完全匹配。如果引用字符串包含运算符(|, - ,>或<),则受试者必须匹配,如“测试表达式”一节中所述。 如果测试匹配,则NumMatchPoints累加器将增加测试的点值。

一旦测试了所有探测线的指纹,Nmap就会将NumMatchPoints除以PossiblePoints。结果是描述受试者指纹与该特定参考指纹匹配的概率的置信因子。例如,1.00是完美匹配,而0.95非常接近(95%)。

测试点值由nmap-os-db中的特殊MatchPoints条目(可能只出现一次)指定。此条目看起来很像普通指纹,但不是为每个测试提供结果,而是为每个测试提供点值(非负整数)。 MatchPoints结构中列出的测试仅在列出的相同测试中找到时才适用。因此,T1中W(窗口大小)测试的值不会影响T3中的W测试。通过为点值指定0可以有效地禁用测试。示例8.10中给出了示例MatchPoints结构。
os指纹匹配算法
一旦评估了所有参考指纹,Nmap就会对它们进行排序并打印完美匹配(如果没有太多)。 如果没有完美匹配,但有些非常接近,Nmap可能会打印出来。 如果给出–osscan-guess选项,则更有可能打印猜测。

IPv6 matching
IPv6 OS分类使用称为逻辑回归的机器学习技术。 Nmap使用LIBLINEAR库进行此分类。该过程从一大组训练示例开始,这些示例是Nmap用户提交的指纹,并通过其操作系统进行了仔细标记。每个训练示例由特征向量表示,该特征向量可以被认为是多维空间中该OS的“坐标”。 训练算法计算每个OS类的成员与每个其他类的成员之间的最佳边界。然后它将这些边界中的每一个编码为矢量。 每个OS类都有不同的向量。
匹配时,引擎依次获取这些边界向量中的每一个,并计算它与特征向量之间的点积。 结果是一个实数。 数字越高(越正),匹配的可能性越大。 负数不太可能匹配。 使用逻辑公式100 /(1 + ex)将数字x从范围[-∞,∞]映射到[0,100]。 (这是“逻辑回归”这个名称的来源。)
通常,具有最高分数的OS类最有可能匹配,但是在前所未有的操作系统的情况下,可能具有非常高的分数但是仍然是不准确的匹配。 因此,第二个“novelty detection”算法检查观察到的指纹是否与该类别的其他代表非常不同。 该算法找到从观察到的特征向量到该类成员的特征向量的平均值的欧几里德距离,在每个维度上通过该特征的方差的倒数进行缩放。与已经看到的特征向量相似的特征向量将具有低novelty,并且那些不同的特征向量将具有高novelty。
具有最高分数的OS类被报告为匹配,但仅当新颖性低于15时。另外,如果两个最高OS类具有相差小于10%的分数,则分类被认为是不明确的并且不是成功匹配 。 针对Mac OS X 10.6.8的运行的示例逻辑和novelty得分显示在表8.9“OS对Mac OS X的猜测”中。
os指纹匹配算法
没有包含IPv6 OS数据库的单独数据文件,他们与IPv4放在一起。 数据库存储在C ++源代码文件FPModel.cc中。 该文件包含缩放常数(用于将特征值大致置于[0,1]范围内)和上述边界向量。