如何识别恶意源代码?

意识到! 在您居住的地方制造间谍软件,电脑病毒和类似的瑕疵可能是非法的,几乎所有人都认为这是非常不道德的。 尽管如此,我仍需要问这个问题,以提高人们对创建它的容易程度的认识。 在W32 / Induc-A被介绍给这个世界之后,我提出这个问题的人是一个讨厌传播方式的人。 所以我想知道如何创建病毒,以便我将来能够识别它们!

最近发现了一种新的病毒,它通过替换开发者的库代码副本来扩展自己。 实际上,通过Delphi 4到7的源代码。发生的事情是,野外存在一种病毒,它在计算机上搜索名为SYSCONST.PAS的文件,并将其自身添加为源代码。 该文件恰好是Delphi运行时库的源文件。 (此运行时源代码可供Delphi开发人员使用。)因此,被感染后,程序员会在不知情的情况下创建大量新版本的病毒。 由于病毒扫描程序有时会产生误报,因此许多开发人员可能会决定忽略扫描程序的警告,甚至在构建项目时甚至会禁用扫描程序。 更糟的是,他们的项目甚至可能会触发客户的扫描器,所以这些程序员很可能不会检查他们的源代码,但会试图以某种方式欺骗扫描器。 也就是说,如果病毒扫描程序甚至能够识别病毒,这不太可能。 因此,我们的软件开发人员可能会在没有意识到我们正在做什么的情况下制造病毒!

那么,如何创建病毒? 简单:让你的源代码感染病毒,你就完成了!

好的,所以Delphi 4到7的源代码可能会被感染。 所有的Delphi开发者,请检查你的源文件! 这个案例只是一个概念验证,显然它可能非常成功。 此外,大多数病毒扫描程序不会检查源代码,只关注可执行文件。 这种病毒可能在一段时间内未被发现。

这种病毒也是成功的,因为它滥用了源代码。 Delphi是一个商业项目,源代码可用。 但是谁确定这些黑客不会以类似的方式攻击开源项目呢? 那里有很多开源项目,谁来检查它们,确保它们都表现得很体面? 如果有人正在检查代码,他是否能够识别出是否有恶意代码?

因此,为了确保我们可以识别恶意源代码,我必须问:如何创建病毒? 我如何识别会产生病毒的代码? 大多数恶意软件想要做什么?


关于Delphi运行时源代码有一些讨论,关于这个代码是否是开源的。 从开始用Kylix支持Linux的那一刻起,Borland就为其源代码使用双许可证。 因此,源代码会声明一个“GPL”符号,表示库是否被编译为GPL代码。 作为GPL,源代码将是开源的。 这也恰好是受病毒攻击的源代码版本。 无论如何,为了避免在这里讨论,我在这里提出了这个问题,所以我们可以专注于病毒问题,而不是Delphi。 基本上,我们谈论的是一种攻击源代码的病毒。 从技术上讲,所有源代码都可能处于危险之中,但是由于黑客知道它的结构并且可以针对那些很少修改的文件,因此很少进行检查,所以开源代码可能是一种候选。 (如果他们能够进入CVS系统,他们甚至可以消除他们修改的痕迹,因此没有人会注意到修改!)


虽然这并没有真正回答你的问题,但我认为一篇非常有趣的论文是Ken Thompson的“信任信任的反思”。 它提出了一个迷人的观点,即使你的源代码没有缺陷(病毒,木马等),如果你的编译器有缺陷,你仍然可能会产生有缺陷的可执行文件。 即使你从干净的源代码重建编译器,你仍然可能会遇到同样的问题。

除非您用自己的微芯片从头开始构建计算机,手工组装自己的BIOS,编写自己的操作系统,编译器和软件,否则必须在某处绘制线路并相信所用的硬件和软件你正在构建你的系统是正确的。


您可以检查传入数据包上的邪恶位... http://en.wikipedia.org/wiki/Evil_bit


如果你想识别恶意软件,你必须知道它是如何工作的。 这意味着研究恶意软件并获得恶意软件的技能。

  • 搜索29A - 他们撰写关于病毒的论文
  • 阅读有关rootkit(甚至有书籍)
  • 阅读有关逆向工程
  • 阅读恶意软件的源代码 - 网络上有很多。
  • 学习汇编
  • 了解你的操作系统
  • 反转os内核
  • 得到蛤蜊,检查来源
  • 我不会在这里提供链接。 他们很容易找到。

    链接地址: http://www.djcxy.com/p/27833.html

    上一篇: How to recognize malicious source code?

    下一篇: Using LINQ to remove elements from a List<T>