今年五月份发现的Flame病毒(又名Flamer、Skywiper或火焰病毒)对伊朗能源部门进行了猛烈的网络攻击,Flame病毒的出现引起了人们对于网络间谍活动和网络战争的高度关注。伊朗方面认为,Flame病毒与之前针对工业系统的臭名昭著的Stuxnet(震网)病毒和Duqu病毒有密切的关联。
面对这一高危病毒,迈克菲实验室第一时间对该病毒的相关功能和主要特性进行了深度分析和持续研究,以助力业界更好地了解这一威胁并找出应对措施。
根据迈克菲实验室的分析,Flame病毒是一种模块化的、可扩展和可更新的,具有广泛隐蔽性和很强攻击性的威胁。目前,迈克菲防病毒产品已经可以从感染的系统中检测到这一威胁并进行清除。通过迈克菲的初期数据显示,目前这一威胁还存在多种变体。
Flame病毒强大的攻击能力
以下是迈克菲发现的Flame病毒的部分攻击能力(实际上,Flame病毒的攻击能力还远不止于此):
ü 扫描网络资源
ü 窃取指定信息
ü 能够侦测到100多种安全防护产品(包括反病毒软件、反间谍软件和防火墙等)
ü 进行屏幕截图
ü 记录语音通话
ü 利用 PE 加密资源
ü 像Stuxnet和Duqu一样把自己隐藏为名为 ~ 的临时文件
ü 使用已知漏洞,如被Stuxnet利用的Print Spooler 和lnk漏洞
ü 通过 USB 闪存和局域网攻击新系统(缓慢传播)
ü 使用 SQLite 数据库存储收集到的信息
ü 使用自定义数据库来构建攻击模块(这很罕见,但显示了这一恶意软件的模块化构造和可扩展性)
ü 运行于Windows XP、Windows Vista 和 Windows 7 系统
ü 随 Winlogon.exe 一起加载并注入IE和服务项中
ü 复杂的内部功能能够调用Windows APC、操控线程启动并对关键进程进行代码注入
ü 往往位于临近的系统上并通过局域网进行总控和发起目标注入攻击
ü 通过 SSH 和 HTTPS 协议与总控服务器通信
ü 同时使用内核模式和用户模式逻辑
总体而言,Flame病毒在一些工作原理上与Stuxnet和Duqu十分类似,但代码库和具体实施上则差别很大,因为Flame病毒更加复杂,攻击能力更强。
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年。
Flame病毒与Stuxnet、Duqu病毒的关联
通过分析,可以发现虽然Flame病毒代码库与 Stuxnet蠕虫病毒或Duqu木马病毒不同,但三者的攻击目标和技术非常相似。Flame与 Duqu 拥有差不多的变体数量,但其传播范围更广,代码结构更为复杂。显然,这一威胁经过了数年的开发,幕后很可能是一支训练有素的大型而专门的团队。
Stuxnet 于2010年7月被发现,这种蠕虫病毒专门针对德国西门子公司设计制造的供水、发电等基础设施的计算机控制系统,伊朗曾承认 Stuxnet影响到其核电站的部分离心机。Stuxnet当年成名的一个重要原因在于其使用了“零日漏洞”攻击,即病毒编写者利用自己发现的4个系统漏 洞,在软件公司发布补丁之前发起攻击。而Flame病毒利用的已知漏洞中就包括Stuxnet曾攻击的两个漏洞。Duqu病毒针对的也是工业控制系统,目 的在于收集信息。业界普遍认为,Stuxnet和Duqu来源相同,因为它们都需要多人长时间合作完成,极可能是某组织或政府机构所为。
通过目前迈克菲网络动态传感器检测到的信息,我们在地图上绘制了Flame病毒的感染情况:
上图显示伊朗是Flame病毒的重灾区。实际上,在过去至少两年中,Flame病毒已经感染了伊朗、黎巴嫩、叙利亚、苏丹、其他中东和北非国家的相应目标计算机系统。此威胁的攻击目标仅限于一些个人、组织和机构,是极具针对性的威胁。