zoukankan      html  css  js  c++  java
  • 传统反病毒产品丧钟响起

    反病毒产品开发人员必需在实验室运行恶意代码,才能找到并建立恶意代码的识别信息(签名)。如果无法运行恶意代码,将发生什么情况呢?

    传统反病毒产品的开发者需要以下前提才能顺利开发反病毒产品:

    · 能够在实验室运行恶意代码。

    · 能够自动对恶意代码进行分析。

    如果没有这样的前提,会怎么样呢?

    为什么必需要这两个前提?

    传统反病毒软件的客户端需要不断将截获的代码与数据库中保存的恶意代码识别标志进行比对,才能发现恶意代码。建立恶意代码识别标志的数据库需要对恶意代码进行分析。如果无法对恶意代码进行分析,无法获取恶意代码的特征,反病毒软件就没有用武之地了。

    另一个问题是,如今网络犯罪分子活动猖獗,每天新出现的恶意代码超过5万个。而对恶意代码进行分析是一个劳动密集型的工作,因此反病毒软件厂商将分析流程进行了自动化设计,以便能够提高分析速度,让恶意代码特征数据库保持最新。

    如果无法对恶意代码样本进行自动化分析,新出现的恶意代码数量将会迅速让反病毒软件厂商的恶意代码特征库与时代脱节。

    坏消息

    “我们经过技术测算,如果恶意代码在地下大范围扩散,将会对自动化恶意代码分析带来致命的打击,恶意代码分析将变得毫无效率和实用性。”

    以上言论摘自乔治亚理工学院信息安全中心的Chengyu Song和Paul Royal所作的论文。在论文结尾,他们是这样总结的:“Flashback使用被感染系统的独特硬件特征(UUID)作为密钥的方法,意味着恶意代码编造者已经开始通过本文所述的方法保护自身代码了。”

    我想大家可能还记得Flashback。它是苹果Mac系统上第一款真正的恶意代码。更重要的是,它使用了具有开创性的加密技术。

    德州大学的Daryl Ashley在自己的文章中解释了Flashback 恶意代码是如何利用被感染电脑硬件UUID(Universally Unique Identifier)将其自身部分加密的细节。虽然加密技术并不新,但是将加密技术与特定电脑的特征结合用来模糊或伪装恶意代码,就很新鲜了。

    基于主机标示的加密

    这种代码模糊技术被称作基于主机标示加密(Host Identity-based Encryption,HIE)。它与音像行业预防CD拷贝的技术类似,然我们看看它是如何工作的:

    传统反病毒产品丧钟响起 

    首先使用某种手段,让恶意代码下载器(loader)能够成功进入电脑。接下来,下载器会收集该主机的特定硬件信息,利用收集来的信息创建一个加密密钥,并用这个密钥修改和加密远端的恶意代码主程序。

    接下来就是下载被加密后的恶意代码主程序。

    然后下载器会重新收集相同的硬件信息,并生成相同的密钥。这是该程序的奇怪之处。接下来下载器会用密钥解密恶意代码主程序,进行安装并实施犯罪活动。

    开始我觉得先加密再解密有些多余,但是仔细想想,又觉得这是个避免触发任何报警的绝妙方法。更重要的是,在安装过程中,如果恶意代码被任何反病毒程序截获,也没有什么关系。

    因为反病毒软件所截获的恶意代码,只是针对该主机的恶意代码,换一台主机,这个代码就失效了,因为代码无法被正确解密。这就意味着,那些依靠逆向工程还原代码的专家,必须先想办法对代码进行正确解密。Song 和 Royal在论文中对HIE的优势进行了总结:

    使用了先进的加密技术。就算反病毒专家知道密钥是如何生成的,也不会影响该恶意代码的保护效果。除非专家们能生成同样的密钥,否则无法解密恶意代码样本。

    任意两个恶意代码样本使用的是不同的密钥,这意味着就算成功分析了一个代码样本,对于另一个代码样本的分析,也没有任何帮助。

    生成密钥需要主机的哪些信息?

    研究人员发现,收集主机的哪些信息用来生成密钥,完全是恶意代码开发者决定的。为了验证他们的这一观点,他们使用了一下硬件ID进行测试:

    Environment Block: 当信息收集进程创建后,Windows存储环境信息会进入该进程的地址空间。在我们的设计中,我们使用了进程拥有者的用户名,计算机名以及CPU编码。由于代码可以直接读取环境块中的信息,因此这些信息获取起来很容易。

    MAC address:网卡的MAC地址可以通过GetAdaptersInfo API函数获取。

    Graphics Processing Unit (GPU) 信息: GPU的信息可以通过IDirect3D9Ex接口的GetAdapterIdentifier方法得到。在我们的设计中,我们使用了设备描述。

    User Security Identifier (SID): 所使用的进程令牌。通过GetTokenInformation API可以获取当前进程拥有者的SID。在Windows域中,该代码是唯一的。

    更多坏消息

    如果以上信息还不算坏的话,我们可以看看今年初Dancho Danchev为WebRoot写的一篇博客。其中他指出恶意代码制造者一直在努力隐藏恶意代码,以下是两个例子:

    Fully Undetectable cryptors: 设计用来掩盖恶意代码的工具,防止电脑中的安全软件检测到恶意代码。其原理是不断改变cryptor直到恶意代码无法被反病毒程序发现为止。

    Server-side polymorphism: 恶意代码每运行一次就改变一些。这种改变是受服务器端控制的,防止被安全软件厂商研究出代码改变方法。

    隐藏与反隐藏

    在我阅读论文的时候,我想这两个研究人员是不是给我们提供了应对方案呢?果然他们在论文后面提供了两点建议:

    直接在被感染的肉鸡上分析恶意代码。

    收集主机和网络环境信息,并在受控的实验室环境将这些环境完全复制出来。

    总结

    我并不想危言耸听,但是我们必须意识到其中的危险信号。基于HIE技术的恶意软件,比如Flashback 正在四处传播。另外我要强调的是,正如我在之前很多文章中提到的,对终端用户进行安全教育,阻断恶意代码进入电脑的第一步,是最关键的。

  • 相关阅读:
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 貌似化学
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    Java 蓝桥杯 算法训练 字符串的展开 (JAVA语言实现)
    JAVA-蓝桥杯-算法训练-字符串变换
    Ceph:一个开源的 Linux PB 级分布式文件系统
    shell 脚本监控程序是否正在执行, 如果没有执行, 则自动启动该进程
  • 原文地址:https://www.cnblogs.com/swordzj/p/2736928.html
Copyright © 2011-2022 走看看