首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制嵌入式设备的操作系统指纹

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

Stack Overflow用户
提问于 2012-09-24 12:55:16
回答 1查看 914关注 1票数 2

我正在为一个包含for服务器的封闭源嵌入式设备开发一个模拟器。我正在使用Python在embedded angstromLinux2.6.34中构建模拟器,到目前为止,我已经在功能上实现了far服务器,使其在外观上与浏览器中的原始设备相同。现在,我试图使它看起来与Nmap操作系统和服务扫描相同,结果发现这要困难得多。

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

在我的探索中,我遇到了一些看起来很有希望的解决方案,但当我知道有更简单的解决方案存在时,我害怕浪费更多的时间在应该有效的解决方案上。

下面列出了我尝试过的事情,以及是什么促使我研究另一种方法。他们中的大多数人的问题是缺乏文件。如果有人知道一种特定的方法应该有效,并且可以为我提供适当的文档来帮助我进行配置,我将非常感激。作为一个懒惰的工程师,我正在寻找最简单的解决方案。我不害怕C,但是如果有程序或模块,我可以通过python启动或接口,我更喜欢这样。

  • IP个性:只适用于2.4内核,而我的模拟器(作为嵌入式ARM架构)没有可追溯到那么远的移植内核。
  • Ethercap :让它们在我的模拟器上工作(安装在模拟器上,而不是mitm上),用于发送数据包,但不用于TCP和IP报头,据我所知,您只能更改数据包中的数据字段,这是不够的。手册页给人的印象是,它可以工作,但没有发现任何人使用它来更改标题,这使我认为它无法完成。
  • 尽管显然是为2.6内核设计的修补程序,但是无法让它工作。这与IPtables一起工作,可以创建过滤器,在这些过滤器通过防火墙之前,您可以修改传出数据包(报头和所有数据包)。我找不到足够的文件来把这些碎片放在一起。
  • TAP/TUN:据我所知,这个基于软件的网络接口应该能工作,但我不相信这是最容易的方法。我看到的例子是<2.6.36内核,因为“后续内核的行为不同”,其中包括我的模拟器版本。
  • libpcap:我相信lippacp只给你原始的包,你不能修改包。我相信我可以复制数据包,杀死它们,修改副本,然后把它们送回去,但我认为还有一个更简单的方法。
  • 使用userland /IP堆栈:找不到关于如何在Linux2.4.34中使用lwIP堆栈和禁用本机内核堆栈的良好文档或示例。
  • 打开内核,不使用本机TCP/IP堆栈:我知道这是可行的,但我正在考虑更改编译测试的开发周期所需的时间,更不用说判断.c文件中指针的混乱程度了。我从来没有这样做过--我不知道该在哪里编译整个内核或特定模块,或者如何使用openembedded为我的ARM设备编译。我知道还有其他方法可以做到这一点,所以当我还有很多工作要做的时候,我会花时间学习如何打开内核。

从所有这些,我已经跑了埃特盖帽和转移插座最远,因为我认为他们将是最容易的。有这些(或其他)任意调整头的例子吗?谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-25 06:10:48

在最近的内核中,您可以使用NFQUEUE来修改包,而不需要任何内核补丁。甚至还有用户空间部分的python绑定。您可以在这里检查:https://www.wzdftpd.net/redmine/projects/nfqueue-bindings/wiki/Examples,它包括一个重写数据包的rewrite.py示例。

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

iptables -A -p -p tcp --体育80 -j NFQUEUE --p-num 0

其中,末尾的参数是必须与代码中的队列号匹配的队列号。

如果简单的数据包编辑是不够的,您也可以尝试lwIP。Linux中的抽头设备上的lwIP是开箱即用的。要做到这一点,请同时获得lwIP包和控制包。然后,在cont肋骨/port/unix/proj/unixsim中有一个使用lwIP实现几件事情的示例,包括通过tap设备实现web服务器。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12565465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档