复制嵌入式设备的操作系统指纹

时间:2012-09-24 12:55:16

标签: embedded emulation fingerprint

我正在为包含网络服务器的闭源嵌入式设备开发模拟器。我正在使用Python在嵌入式angstrom linux 2.6.34中构建模拟器,到目前为止,我已经在功能上实现了Web服务器,使其在视觉上与浏览器中的原始设备完全相同。现在,我试图使它看起来与Nmap操作系统和服务扫描相同,这已经变得更加困难。

Nmap扫描最初证明是非常不同的(源设备没有完全匹配,我的模拟器死在Linux 2.6.32 - 2.6.39)。在完成关闭服务和关闭模拟器端口的明显事情之后,我开始比较来自源设备(包括IP和TCP头)和嵌入式设备的wireshark数据包,以确定我需要做出哪些协议级别的更改。使用Linux中的sysctl.config文件,一些参数(如TCP窗口缩放)很容易,但其他参数证明更难。例如,当数据包在源设备上被分段时,PSH标志被设置在TCP标头中,而不是在我的设备上,这与“最随意的观察者”有明显区别。这里的目标不是简单地模糊我的设备,而是让它看起来与数据包视图中的源设备类似(特别是两种类型的nmap扫描)

在我的追求中,我遇到了几个看起来很有希望的解决方案,但是当我知道有更简单的解决方案时,我害怕浪费更多时间在 工作的解决方案上。

以下列出了我尝试过的事情,以及是什么让我研究了另一种方法。其中大多数问题是缺乏文档。如果有人知道一个特定的方法应该工作,并可以指向我体面的文档来帮助我配置,我会非常感激。作为一个懒惰的工程师,我正在寻找最简单的解决方案。我不怕C,但如果有程序或模块可以启动或通过python接口,我宁愿这样做。

  • IP个性:仅适用于2.4内核,而我的模拟器(作为嵌入式ARM架构)没有可用的移植内核,可以追溯到目前为止。

  • Ethercap过滤器:让我的模拟器(安装在模拟器上,而不是安装在mitm上)用于传出数据包,但不能用于TCP和IP标头,据我所知,您只能更改数据字段在数据包中,这是不够的。手册页给人的印象是它可以工作,但没有找到任何人使用它来更改标题,这让我觉得无法完成。

  • 转移套接字:尽管补丁显然是为2.6内核设计的,但仍无法使其工作。这与IPtables一起使用来创建过滤器,您可以在它们通过防火墙之前修改传出的数据包(标题和所有数据包)。我找不到足够的文件让我把各个部分放在一起。

  • TAP / TUN:从我到目前为止所学到的,这个基于软件的网络接口应该可行,但我不相信这是一种简单的方法。我见过的例子是< 2.6.36内核,因为“后来的内核表现不同”,其中包括我的模拟器版本。

  • libpcap:我认为lippacp只能为你提供原始数据包,你无法修改数据包。我相信我可以复制数据包,杀死它们,修改副本,然后将它们发回去,但同样,我认为还有一种更简单的方法。

  • 使用userland TCP / IP堆栈:找不到关于如何使用Linux 2.4.34中的lwIP堆栈的良好文档或示例,并禁用本机内核堆栈。

  • 打开内核并使用原生TCP / IP堆栈:我知道工作,但我很担心更改 - 编译 - 测试的开发周期拿,更不用说把指针弄乱了.c文件。我从来没有这样做过,我不知道在哪里编译整个内核或特定模块,或者如何使用openembedded为我的ARM设备编译。我知道还有其他方法可以做到这一点,所以当我还有很多工作要做时,我很花时间学习如何打开内核。

在所有这些中,我跑下了ettercap并最远离转向插座因为我认为它们是最简单的。有任何这些(或其他)工作任意调整标题的例子吗?谢谢您的帮助!

1 个答案:

答案 0 :(得分:1)

在最近的内核中,您可以使用NFQUEUE来修改没有任何内核补丁的数据包。用户空间部分甚至还有python绑定。您可以在此处查看:https://www.wzdftpd.net/redmine/projects/nfqueue-bindings/wiki/Examples,其中包含重写数据包的rewrite.py示例。

对于iptables部分,您需要这样的规则:

iptables -A OUTPUT -p tcp -m tcp --sport 80 -j NFQUEUE --queue-num 0

其中最后的参数是必须与代码中的队列号匹配的队列号。

如果简单的数据包编辑不够,你也可以试试lwIP。 Linux中的tap设备上的lwIP开箱即用。为此,获取lwIP和contrib包。然后在contrib / ports / unix / proj / unixsim中有一个使用lwIP实现多个功能的示例,包括通过tap设备的Web服务器。

从实际网络接口访问lwIP堆栈的最简单方法是为tap设备设置NAT,并将端口从实际接口转发到tap接口。但这仍将涉及内核,因此它可能会显示超出您想要的内容。一些可能的选择可能是将它与NFQUEUE相结合或修改lwIP以使用原始套接字而不是tap接口(我认为它没有开箱即用)。

有关nmap指纹如何工作的信息,请查看此处:http://nmap.org/book/osdetect-methods.html。要从nmap获取原始指纹,请使用“-vv”选项。此外,您可能希望使用最新版本的nmap,因为它将具有最新的指纹识别。

相关问题