请帮助我使用检测恶意行为的病毒检测程序

Posted

技术标签:

【中文标题】请帮助我使用检测恶意行为的病毒检测程序【英文标题】:Please help me with a program for virus detection using detection of malicious behavior 【发布时间】:2009-11-25 10:26:06 【问题描述】:

我知道防病毒软件如何检测病毒。我读了几篇文章:

How do antivirus programs detect viruses?

http://www.antivirusworld.com/articles/antivirus.php

http://www.agusblog.com/wordpress/what-is-a-virus-signature-are-they-still-used-3.htm

http://hooked-on-mnemonics.blogspot.com/2011/01/intro-to-creating-anti-virus-signatures.html

在这一个月的假期里,我有。我想学习和编写一个简单的病毒检测程序: 所以,有2-3种方式(来自上面的文章):

    病毒字典:搜索病毒特征 检测恶意行为

我想采用第二种方法。我想从简单的事情开始。

顺便说一句,最近我遇到了一个名为“ThreatFire”的软件。它做得很好。

    我不明白的第一件事是该程序如何干预另一个程序的执行并提示用户其操作。不就是违规吗? 它如何扫描其他程序的内存?程序仅限于其虚拟空间,对吗? C# .NET 是否适合做这类事情? 请发表您对如何进行的想法?还请提及一些我可以做的简单事情。

【问题讨论】:

【参考方案1】:

    发生这种情况是因为相关软件可能安装了一个特殊的驱动程序,以允许其访问低级别内核,从而拦截和拒绝各种潜在的恶意行为。

    通过拥有许多驱动程序所拥有的权限,这使其能够扫描另一个进程的内存空间。

    没有。 C# 需要大量已加载的操作系统。需要先加载驱动程序。

    了解驱动程序和内核级编程。 . .我还没有这样做,所以我不能在这里提供更多帮助。

【讨论】:

我正在寻找更多的细节。 “了解驱动程序和内核编程”太笼统了。我最近遇到了我在 wiki 上读到的“Hooks”,它们用于拦截呼叫。我正在等待是否有人可以给我另一种方法。 我想知道我可能拥有的所有可能的替代方案。正如你所说,你没有做你提到的任何事情。所以,我正在等待对这些事情有很好了解的人来提供更多的信息。 “了解驱动程序级编程”是起点。除非您了解如何创建一个相对简单的驱动程序,否则您执行病毒检查程序等花哨的能力将受到阻碍。 爪子,钩子是驱动级编程。 Jason 建议不要直接进行某种病毒检测,而是学习基础知识——这通常是一个好主意。 @Jason - 在#3 上 - 只有数据收集需要是内核级别的。大多数防病毒程序都可以使用您喜欢的任何语言(C#,...)。 @Matt,在#3 上足够公平,但是我一直认为用户空间应用程序与内核级驱动程序通信会降低效率并导致严重减速(ala McAfee)那里有检测启发式。【参考方案2】:

我认为系统调用是可行的方法,并且比实际尝试扫描多个进程的内存空间更可行。虽然我不是一个低级的 Windows 人,但似乎这可以使用 Windows API 挂钩来完成——将低级 API 绑定到可以修改系统范围对系统调用的响应的低级 API。这些钩子可以像内核模块一样安装,拦截并可能修改系统调用。我找到了提供更多信息的article on CodeProject。

在我参加的机器学习课程中,一个小组决定尝试类似于您在学期项目中描述的内容。他们使用一个程序最近发出的系统调用列表来确定执行程序是否是恶意的,结果很有希望(想想新样本的 95% 识别率)。在他们的项目中,他们在窗口调用列表上使用 SVM 进行训练,并使用它来确定合适的窗口大小。之后,您可以从不同的恶意程序收集系统调用列表,并在整个列表上进行训练,或者找到您认为的“恶意活动”并标记它。这种方法的酷点(除了它基于 ML 的事实之外)是窗口很小,而且许多训练有素的急切分类器(SVM、神经网络)执行速度很快。

无论如何,如果不是您的风格,似乎可以不用 ML 来完成。如果您想了解有关该组的更多信息,请告诉我-我也许可以将其挖掘出来。祝你好运!

【讨论】:

这非常相似,不过 - “使用支持向量机检测未知计算机病毒”,Zhang 等人,国际计算智能研究杂志,第 2 卷,第 1 期,2006 年。Google Docs 有快速查看。无论如何,当我收到回复时,我会告诉你 - 我意识到这些都不能回答手头的问题 - Windows API 挂钩。【参考方案3】:

    Windows 提供 API 来执行此操作(通常涉及在内核中运行至少部分代码)。如果您有足够的权限,您还可以将 .dll 注入其他进程。见http://en.wikipedia.org/wiki/DLL_injection。

    当你拥有上述权力时,你就可以做到。您要么在内核空间中并且可以访问所有内容,要么在目标进程中。

    至少对于内核中的低级内容,您需要比 C# 更底层的东西,例如 C 或 C++。我不确定,但您也许可以在 C# 应用程序中完成其他一些事情。

    DLL 注入听起来像是最简单的起点。您仍处于用户空间,不必学习如何生活在内核世界中(真的是完全不同的世界)。

关于主题的一些松散的想法:

您可以插入由被跟踪进程发出的系统调用。通常假设一个进程在不发出系统调用的情况下不能做任何“危险”的事情。 您可以拦截其网络流量并查看它连接到的位置、发送的内容、接收的内容、接触的文件、失败的系统调用 你可以扫描它的内存并在沙盒中模拟它的执行(真的很难) 通过系统调用插入,您可以模拟对系统调用的一些响应,但实际上只是将进程沙箱化 您可以扫描进程内存并从中提取一些一般特征(连接到网络、修改注册表、挂钩到 Windows、枚举进程等),看看它是否看起来是恶意的 只需将整个内容放入沙盒中,看看会发生什么(为 Google Chrome 制作了一个不错的沙盒,而且它是开源的!)

【讨论】:

以上是关于请帮助我使用检测恶意行为的病毒检测程序的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-2 20155230《网络对抗技术》实验3:免杀原理与实践

避免防病毒检测 C++

Avast 将 SciPy 检测为病毒?

检测多态和变态病毒的技术? [关闭]

静态分析基础技术

20155219付颖卓 Exp3 免杀原理与实践