基于签名的Rootkit扫描器?

目前我所知的唯一的rootkit扫描器必须在rootkit之前安装在机器上,这样它们才能比较文件变化等(例如:chkrootkit和rkhunter),但我真正需要做的是能够从LiveUSB扫描我的机器和其他机器,因为如果rootkit足够强大,它也会控制住rootkit检测程序。
那么,在Ubuntu/Linux上有没有基于签名的rootkit扫描器,我可以只安装在LiveUSB上,并可靠地用来扫描我插入的机器,而无需监视行为或比较以前日期的文件?

你的名字真是恰如其分,@Paranoid。你的电脑是不是在互联网上暴露无遗呢? - SDsolar
@SDsolar: 不,但是我喜欢备用计划以防万一。而且,如果我想要扫描朋友的机器,如果它已经被入侵的话,安装像rkhunter这样的东西可能不会有太大作用。事实上,如果已经安装了rootkit,我预计rkhunter将不再给出准确的结果,所以只在实际机器上安装这种工具有点荒唐。 - user364819
我不想打击你的积极性,但我认为你在寻求一种工具,这将使相当大一部分计算机取证专家失去工作,并能迅速赚取数百万美元。 :-) - CatMan
@Paranoid Panda - Sophos的Linux免费扫描器拥有超过1250万个签名,但据我所知,他们说它只用于病毒?但我猜他们的意思是指所有种类的恶意软件(在微软的丛林中...)。 - dschinn1001
@ParanoidPanda:看起来你想要的是找一个你喜欢的rootkit扫描器,安装在一个你确定干净的系统上,然后再将其安装到一个LiveUSB上,这样当你的扫描器棒在扫描一个(可能被入侵的)系统时,它可以参考棒子上的好文件。为了检查目标机器,扫描器可能需要被修改以查看棒子上用于检查目标机器的参考文件/签名。你可能还需要为每个你想扫描的操作系统版本准备一个单独的棒子。 - Tom Barron
@TomBarron:问题是,我不知道有没有适用于Linux的rootkit扫描器。你知道有吗? - user364819
@ParanoidPanda:不,我只是在思考你的项目需要什么。 - Tom Barron
@TomBarron:好的,没问题,我只是想确认一下,因为你表达得不太清楚。 - user364819
@ParanoidPanda,你提到根工具包可以简单地修改根工具包扫描器 - 你可以使用例如sha256sum安装和验证安装包,并在安装后检查二进制文件。这意味着根工具包必须即时修改已安装的二进制文件。这样一个复杂的根工具包可以在每次安装(或每n秒,或每次执行...)时自我修改 - 这避免了通过签名进行检测。然后只有基于启发式的检测才有用。我认为你所寻找的东西不存在,因为我不认为它实际上是一个有用的程序。 - pbhj
使用静态编译版本的yara。然后使用您拥有的签名进行扫描。 - shadowbq
@shadowbq:也许你可以发表一个回答,进一步解释一下。 - user364819
2个回答

提醒我起了个联想,就像是tripwire会为你指定的文件创建加密校验和。首先从已知的良好来源(例如DVD)安装一个与目标系统相同的系统副本,然后安装相同的更新,让tripwire创建校验和文件。将tripwire的校验和文件复制到目标系统上,让tripwire将校验和文件与目标系统的文件进行比较。
当然,不同步的更新/升级/安装/系统特定配置文件将被标记为已更改。
更新于2018-05-06:
我还应该补充一点,即目标系统必须在离线状态下进行检查。如果目标系统已被入侵,硬件、引导固件、操作系统内核、内核驱动程序、系统库、二进制文件可能已经被入侵并干扰或返回错误的结果。即使通过网络运行到目标系统中也可能不安全,因为(被入侵的)目标系统会处理网络数据包、文件系统、块设备等。
我脑海中想到的最小可比较的情景是智能卡(信用卡中使用的EMV,联邦政府使用的PIV等)。忽略无线接口以及所有硬件/电气/射频保护,接触式接口本质上是一个串行端口,三线或两线。API是标准化和白盒化的,所以每个人都认为它是无懈可击的。他们是否保护了数据在传输过程中、运行时内存中以及闪存中的静态数据?
但实现是闭源的。硬件中可能存在后门,可以将整个运行时和闪存中的数据复制出来。其他人可能会篡改硬件与内部存储器、智能卡操作系统之间的传输数据,或者输入/输出数据。即使硬件/固件/软件/编译器是开源的,你仍然需要在每一步进行审计,而且仍然有可能会漏掉你/其他人没有考虑到的东西。这种偏执狂会让你陷入白色橡胶房间。
对于我离题发散的偏执狂,我表示抱歉。说真的,拿出目标驱动器进行测试。你只需要担心目标驱动器的硬件/固件。最好的办法是将硬盘盘片/固态硬盘芯片取出进行测试(假设你的测试系统是完美的)。 ;)

灵活应变是的,但实际上这是一个非常好的问题解决方案!我会接受它,因为在Linux上似乎没有其他好的解决方案。虽然如果另有一个回答提供完整并符合要求的问题解决方案,那我将不得不移动接受标记。但非常感谢您提供这个至少是临时的解决方案! - user364819
注意:一些固态硬盘实际上会在闪存中对数据进行加密,因此我的关于仅移动闪存芯片进行测试的评论在这种情况下不适用。在某个时候,你只能叹息并接受安全性与完成计算任务之间的妥协。 - rcpa0

AIDEAdvanced Intruder Detection Envionment)是一个在另一个回答中提到的 tripwire 的替代品。根据wikipedia

高级入侵检测环境(AIDE)最初是作为 Tripwire 的免费替代品开发,根据 GNU 通用公共许可证(GPL)的条款获得许可。

主要开发人员是 Rami Lehti 和 Pablo Virolainen,他们都与坦佩雷理工大学有关,还有独立的荷兰安全顾问 Richard van den Berg。该项目在许多类 Unix 系统上被用作廉价基线控制和 rootkit 检测系统。


功能

AIDE会对系统的状态、注册哈希值、修改时间以及管理员定义的文件等其他数据进行“快照”。这个“快照”用于构建一个数据库,该数据库会被保存并可以存储在外部设备上以备份。

当管理员想要运行完整性测试时,管理员将之前构建的数据库放置在可访问的位置,并命令AIDE将数据库与系统的真实状态进行比较。如果在快照创建和测试之间发生了计算机的变化,AIDE将检测到并向管理员报告。另外,AIDE还可以配置为定期运行,并使用诸如cron之类的调度技术每天报告变化,这是Debian AIDE软件包的默认行为。2

这主要用于安全目的,因为AIDE会报告任何可能发生在系统内部的恶意更改。


自从维基百科的文章撰写以来,原来的维护人员Richard van den Berg(2003-2010)已被新的维护人员Hannes von Haugwitz取代,任期为2010年至今。 AIDE主页中说明了Debian的支持,这意味着该应用程序可以在Ubuntu上进行可预测的安装。
sudo apt install aide

关于便携性和USB闪存驱动器支持,主页上继续说道:
它从配置文件中找到的正则表达式规则创建一个数据库。一旦初始化了这个数据库,就可以用它来验证文件的完整性。它具有几种消息摘要算法(见下文),用于检查文件的完整性。还可以检查所有常见的文件属性是否一致。它可以读取旧版本或新版本的数据库。有关更多信息,请参阅分发包中的手册页面。
对我来说,这意味着您可以将签名数据库与应用程序一起放在您的闪存驱动器上,并将其存储在活动的USB持久存储中。我不确定AIDE是否适合您的需求,但作为您当前最喜欢的tripwire的替代品,值得研究一下。

聪明的回答!**:-)** - Fabby
@Fabby 谢谢夸奖。在大多数安装中,AIDE被设置在cron中。我可能会考虑使用它,不仅是为了防止rootkit,更重要的是保护自己免受自己糟糕的编程:p 安装完apt get install后,看看有哪些变化可能也是一种学习方式。 - WinEunuuchs2Unix