Flame病毒极其复杂的结构
迈克菲通过反编译操作发现,其主模块包含 65 万行 C 语言编写的代码。所有迹象都表明,这并非这一恶意软件的所有代码,预计最高可能达到 75 万行以上。鉴于此,迈克菲已着手展开长期分析,以确定其完整的功能和特性。
根据截至目前所获得的数据及分析结果,迈克菲使用IDA(一款专业反汇编和反编译工具)完成了跟踪工作,并绘制了以下代码关系图:
这个像龙卷风一样的代码关系图展示了Flame病毒庞大的代码群及代码间复杂的关系。令人惊叹的是,这只是主模块的代码!仅仅这一个模块就调用了大约 4400 多次字符串反混淆例程。本质上讲,如果代码中存在容易引起关注的字符串,例如 “flame::beetlejuice::BeetleJuiceDataCollector,”或 “flame::gator::GatorCmdFetcher,”,它就会把信息封装在一个密封函数中。这使得本已十分庞大的代码进一步“增肥”,要成功辨识更是难上加难。
代码中用到的混淆字符串量超乎寻常,这保证了可执行文件的功能不仅难于理解,而且即使代码被他人捕获也无法轻易用于其他目的。
代码中包含了其所需的全部库代码:SSH、ZLib例程、Web 服务器代码等。从这点来说,代码中至少涉及几十种加密函数,例如,Blowfish 算法、MD5/MD4 函数等。
Flame似乎对有关专业监控需求和操作的信息“情有独钟”。它的一些功能和特性包括:
·具备适用于文件系统解析和存取的低级别磁盘存取解析
·支持 ZIP 文件解析
·能够解析多种文档格式,例如,PDF、Microsoft Word 和其他 Office 格式
·特别关注记录项,搜索目标项时即使是操作系统内的隐藏位置也不会放过
·“热衷”于探究目标桌面上的内容
·能够在特定的域内实现远程自行传播
·该恶意软件在搜寻到需要的信息后会非常谨慎地传回给控制服务器:这一点是通过在后台启动额外的 IE 实例并将代码注入其中来实现的。如此一来,它就成功“化身”为计算机上的一项“可信”进程,从而绕过个人防火墙。
·可能最重要的是,移动设备才是它的“兴趣所在”。这正是 Beetlejuice 模块的“用武之地”。该模块就好像进入计算机的“幽灵”一样到处搜寻蓝牙设备,同时通过查找联系人来关注目标受害人的社交网络。在本地同样可以这样做,因为它能够在文件中或执行信息同步的主机上找到设备信息。目前为止,Sony 和 Nokia 设备的联系信息已成为其觊觎的目标。当然,这其中的文章绝非表面看上去这样简单。
实际上Flame病毒还在不断“与时俱进”。对该病毒的分析将是长期的工作。20 世纪 90 年代,病毒分析可谓争分夺秒,被调侃为“百米赛跑”。如果说那个年代的病毒的实际代码可以打印出100 米,那么 Flame的代码长度足可达到一英里(约为1609米)。这样看来,对Flame病毒的分析可以堪称“一英里徒步”!
Flame病毒能够随意更改其名称和扩展名,迷惑性极强
威胁文件可以根据控制服务器特定的指令和配置使用情况更改文件名和扩展名。一些情况下,Flame可以检测到特定的防病毒软件,于是就会更改可执行文件 (DLL) 的扩展名,比如从 OCX 更改为 TMP。实际上,通常在受感染的系统上,尤其是威胁先于安全产品安装的情况下,就不需要进行这样的更改。
Flame病毒的主模块超过6MB,而完全部署后接近20MB。毫无疑问,这是一款包含大量代码的恶意软件,它使用了Zlib、LUA Interpreter、SQLite 支持、Custom DB 支持代码等,整个代码像一个复杂的企业数据库系统。
加密包含简单的模糊处理,例如带有字节值的 XOR。在一些其他攻击中,都用到了 XOR 密钥 (0xAE),这揭示了其与 Duqu 和 Stuxnet 的一些潜在关系,因为它们也使用这个值。但 Stuxnet 和 Duqu 会在使用此字节值的同时结合使用其他值,包括具有可能含义的日期。
除了上述内容,Flame在代码方面并未显示出与Stuxnet或Duqu的直接关系。它采用了相似但又复杂得多的结构,这在很多方面都提醒了研究人员,这些攻击具有高危性。根据早期日期值来判断,它从某些方面可以视为一个并行项目。而从文件中遗留的日期值不难发现,攻击文件中融入了 2011 年 1 月和 8 月最新开发的代码。文件标头中的日期经过了蓄意更改(例如,声称是 1994 年),但导出表日期值和文件其他位置的日期却暴露了真实日期:2011年。
(责任编辑:)