恶意软件的早期,攻击者都是通过感染的软磁盘在用户间传播恶意载体。随着计算机使用的普及,网络技术的发展变化更加有利于攻击者传播其恶意代码。早期的软件厂商先驱如G Data、Sophos理解计算机病毒对的危害和风险,为了识别和阻止计算机恶意软件所带来的威胁,研发出反病毒程序。而恶意软件防御的方法就称为基于签名的检测方法(signature-based detection)。
使用基于签名的检测的时候,每个文件会被分析,并会分配一个签名或哈希(一种独特的字母数字方式来识别恶意软件),并添加到签名库(杀软antivirus (AV) software的主要构成),这个签名库会用在后面恶意软件事件的对比过程。当一个可疑文件在运行AV软件的计算机上出现时,杀软程序会查询与已知恶意软件家族相匹配的模式(patterns)。如果某个模式与已知变种相匹配,杀软则会报警并进行拦截封堵。
现在由于恶意软件的不断进化,基于签名的杀软不再是一种有效的解决方案。而下一代杀软(next-generation antivirus (NGAV) software)则会更加有效。
基于签名的检测方法的缺点
多年来,签名是恶意软件检测的主流,而实际上说,针对已知威胁如老旧的依然活跃的,它们依然有效。但是,面对新未知的变种攻击,签名就没有那么有用了。
现代新型的恶意软件会使用很多种技术来逃逸检测,致使签名匹配的杀软更难发现。下面几种是恶意软件经常使用来躲避检测的技术:
1)恶意软件多态变种(Polymorphic Malware Variants)
多态恶意软件经常改变其特征来逃避检测。恶意软件编写者使用多态来饶过模式匹配的检测技术。使用突变引擎,多态恶意软件可以改变某些特征如文件名或哈希,这样能够成功隐藏代码。而如今97%的恶意软件使用多态技术,在每一轮迭代都会改变其签名。这就意味着这些恶意软件变种是基于已知的恶意软件家族,但是已经不能被基于签名的检测方法检测到了。
2)代码混淆(Code Obfuscation)
代码混淆是躲避检测和分析的另一套技术。为了绕过静态分析工具,混淆使得源代码非常难以理解,甚至无法读取。它使用多种方法来隐藏代码,包括更改指令、插入死代码来改变恶意软件的外观、打包来压缩恶意软件以及加密(加密恶意软件)。
3)滥用合法签名的Windows二进制文件(Abuse of Legitimate Signed Windows Binaries)
攻击者可能使用已经签名的二进制文件或组件(如Mavinject)在进程内部执行恶意代码。这允许代码逃避基于签名的反病毒方法。根据MITRE ATT&CK,以可疑的方式使用合法程序是一种明显的指示,表明你可能正受到攻击。
新型恶意软件使用逃逸技术案例
几乎所有现代恶意软件活动都会使用若干逃逸检测技术。下面是一些著名恶意软件案例,这些恶意软件都很容易逃逸基于签名检测。
1)Qbot
Qbot最初是在2009年作为一个窃取财务信息的木马程序出现的。而自从它出现以来,就一直对企业和个人敏感信息构成威胁,在2019年,它开始展示一套新的功能来躲避检测。在其增强的版本,使用反分析方法和混淆来饶过AV(Anti-Virus)和AM(Anti-Malware),而且它会经常改变C2服务器,此外它可以用看似随机的名字创建新文件。
2) Emotet Trojan
Emotet是一个高级的,多态的,模块化的银行木马,可以逃避75%的反病毒程序。它使用一些不同的方法来维持持久性(persistence)。当提及其模块化,是指它使用自身的不同模块来改变它对系统的影响。Emotet还能够判断它是否针对虚拟机,从而提示它变为非活动状态(反沙箱机制)。
3)Stuxnet
Stuxnet可能是有史以来最著名的零日漏洞(zero-day vulnerability)。当Stuxnet拆除了伊朗纳坦兹铀浓缩设施的部分核反应堆时,使它在2010年成为头条新闻,Stuxnet病毒的独特之处在于它从数字世界跳转到物理世界,使恶意软件成为网络武器,并升级到国家对抗层面。
恶意软件防护技术的进化
很显然,单纯依靠基于签名的检测不能应对不断变化的威胁。随着恶意软件的发展,必须设计新的解决方案来应对。因此,杀毒软件开发者引入了新的工具和方法来清除恶意软件,包括:
1)启发式分析(Heuristic Analysis)
启发式分析着眼于系统或软件的行为,以检测基于签名的解决方案未能发现的新威胁。首先,它为系统或软件建立了一个正常活动的基线,然后,当不同的事件发生时,它就会作为一个异常上报。
启发式分析是唯一一种可以检测多态恶意软件的恶意软件检测技术。更重要的是,它允许开发人员根据新的威胁不断改变规则,而且它没有详细说明如何向恶意软件开发人员标记威胁。但是,当代码被充分混淆时,启发式分析将无法检测到它。
2)沙箱技术(Sandboxing)
沙箱通过在一个隔离的虚拟环境中测试潜在的恶意代码来检测恶意软件。这使得研究人员能够在一个安全的环境中观察代码的真实行为,在沙箱环境中,代码不会传播,也不会对运行它的系统和网络造成任何伤害。
沙箱是一种有用的恶意软件检测技术,因为它能够非常详细地确定文件在环境中的实际行为。它还可以提供有关行为的详细信息,让分析人员了解给定威胁的意图。
然而,沙箱方法有一些显著的缺陷。现代攻击者创建了“沙箱感知”恶意软件,它知道自己在沙箱中运行,因此,为了避免被标记,它的行为与在真实环境中不同。此外,一些恶意软件变种能够利用沙箱中的盲点。沙箱也有一些性能问题,因为沙箱里跑文件很耗时间,不可能对每个文件进行沙箱处理。
3)下一代反病毒(Next-Gen Antivirus)和其他恶意软件检测技术和阻断方法
启发式和沙箱是战胜恶意软件的良好开端,但考虑到它们的缺点,它们是不够的。当然,对抗当下的现代恶意软件需要更新、更动态的工具。这种需求导致了几种NGAV(下一代防病毒)方法的出现。下面几种是较为常见的:
1)基于AI/机器学习的静态分析(AI/Machine-Learning-Based Static Analysis)
基于机器学习的静态分析检测技术训练计算机识别和区分良性和恶意文件。这些技术采用不同的行为(文件行为、文件打开的时间、流量、日常行为等),并将它们计算成一个关于文件性质的结论。
尽管这是正确重定向的一个重要步骤,机器学习并不是检测和击败恶意软件的完美解决方案。事实上,机器学习技术可以用于“对抗性攻击”,攻击者训练机器学习系统将恶意软件样本错误分类为非恶意。作为一个恶意软件解决方案,机器学习仍然不够健壮,因此它需要与其他工具和技术结合使用。
2)应用白名单(Application Whitelisting)
虽然签名经常被认为是黑名单,另一种阻止恶意软件的方法是白名单。白名单验证和控制进程允许做什么的所有方面,并阻止应用程序做被允许的以外的任何事情。这对于阻止诸如零日之类的威胁是有益的,但对于希望运行完全安全和合法的应用程序但却无法运行的最终用户来说,这可能是非常令人痛苦的。这就是为什么应用程序白名单应该用于高风险的环境和查询机如ATM。
需要注意的是,“标准”白名单涉及的是应用程序(允许或不允许),而“智能”白名单涉及的是合法应用程序中的进程。例如,Microsoft Word是白名单,但WINWORD.exe进程不允许请求其他进程的内核句柄。
3)端点检测和响应(Endpoint Detection and Response)
端点检测和响应(EDR)监控并记录端点日志和数据包中的数据和事件。收集的数据将被分析,以了解感染后发生了什么,以寻找已知恶意软件活动的IOC(Indicators of compromise),并帮助组织识别和响应攻击。
总结
攻击方法总是在变化,任何人都无法阻止攻击者使用新的技巧和方法来实现攻击活动。对抗这些复杂而不断演变的攻击的关键是使用一种具有多种联锁防护层的解决方案来检测和转移它们。