我该如何编写恶意软件检测软件?

时间:2016-12-30 07:52:12

标签: security malware malware-detection

我需要完成哪些资源才能完全了解其工作原理?我在网上查了一下,但我得到的只是软件解决方案而不是软件实际检测它们的方式。

我希望能够检测到计算机中存在的恶意软件。比方说我的电脑里有一个特洛伊木马。我如何编写程序来检测它?

我是信息安全的初学者。

提前致谢。

2 个答案:

答案 0 :(得分:1)

在文献中,Peter Szor的“计算机病毒研究与防御艺术”绝对是“必读”。

答案 1 :(得分:1)

大多数端点安全产品都有:   - 按需扫描组件。   - 实时扫描组件。   - 挂钩到操作系统的其他区域,以便在发布"之前检查数据。例如。用于网络威胁的网络层。   - 检测引擎 - 包括文件提取器   - 可以更新的检测数据。   - 运行时扫描元素。

有许多层和组件都需要协同工作以增强保护。

以下是安全产品需要涵盖的一些方案。

  • 磁盘上的恶意文件 - 静态扫描 - 按需。也许你的例子。 命令行/按需扫描程序将根据请求扫描的内容枚举每个目录和文件。该过程将读取文件并将数据流传递给检测引擎。根据配置的扫描设置和排除项,将检查文件。引擎可以理解/解压缩文件以检查类型。大多数都有文件类型检测组件。它可以按照这个来查看文件的前几个字节 - https://linux.die.net/man/5/magic。相当基本,但它可以让您了解如何在执行更多分类之前对文件类型进行分类。它可以像在不同偏移量的文件的几个校验和一样简单。

对于您的木马文件示例。假设您是自己的病毒实验室,也许您之前已经看过该文件,并对其进行了书面检测,因为您知道它是恶意的。也许你可以只校验文件的一部分并将这些数据发布给你的产品。所以你有virusdata.dat,你可能有一个校验和和一个名字。例如。 123456789,Troj-1 然后,您有一个扫描过程,在启动时加载病毒数据文件并打开文件进行扫描。您可以根据实验室方案对文件进行校验和校验,并获得与数据文件的匹配。您显示标记的名称。这是最基本的例子,而不是实用的,希望它有用。当然,你会看到误报的问题。

产品的其他方面包括:

  • 将恶意文件写入磁盘的过程 - 实时。 为了"看"实时文件访问并进入该堆栈,您需要一个文件系统筛选器驱动程序。例如,在Windows上的文件系统迷你过滤器:https://msdn.microsoft.com/en-us/windows/hardware/drivers/ifs/file-system-minifilter-drivers。这将保证您在读取/写入文件之前可以访问该文件。然后,您可以在该文件写入或读取之前扫描该文件,以便您有机会拒绝访问和警报。请注意,在此方案中,您将阻止,直到您决定是允许还是阻止访问。正是由于这个原因,访问时安全产品可以减慢文件I / O.它们通常具有许多驱动程序可以将工作传递给的扫描线程。如果所有线程都忙于扫描,那么您有一些问题。在捆绑扫描引擎/ CPU /内存等之前,你需要处理像拉链炸弹等一样的东西并拯救出来......

  • 浏览器下载恶意文件 您可以在按访问扫描程序上回复,防止文件通过浏览器进程访问磁盘,但浏览器可以在命中文件系统之前呈现脚本。因此,您可能希望创建一个组件以在Web浏览器之前拦截流量。这里有一些可能性。您是使用插件定位特定浏览器,还是使用本地代理进程拦截流量并拦截流量。选项包括使用分层服务提供程序(LSP)或WFP(https://msdn.microsoft.com/en-us/windows/hardware/drivers/network/windows-filtering-platform-callout-drivers2)挂接网络层。您可以在此处将流量重定向到进程内或进程外代理以检查流量。 SSL流量在这里提出了一个问题,除非您再次打开管道再开展更多工作。

  • 然后有运行时保护,您不会检测带有签名的文件,但您应用规则来检查行为。例如,为自己创建启动注册表位置的进程可能会被视为可疑。可能还不足以阻止它自己的文件,但如果文件没有有效的签名,该位置就是用户的临时位置。它是由AutoIt创建的,并没有文件版本。所有这些属性都可以决定是否应该运行这些属性,这些属性构成了安全供应商的专有数据,并且不断完善。也许您开始将应用程序检测为可疑并向用户发出警告,以便他们对其进行授权。

这是一个涉及如此多层次的巨大话题。希望这是你想到的那种东西。