网络安全研究人员近期发现一款基于Python的远程访问木马(RAT),该恶意软件展现出前所未有的多态行为——每次运行时都会改变其代码特征。
低检测率的完整功能木马
这款名为nirorat.py的样本最初在VirusTotal平台上被发现,尽管具备完整的RAT功能套件,但在检测引擎上仅获得26/100的低分。分析人员认为,该恶意软件利用Python的自省和代码修改功能,通过持续变换关键代码段来规避基于签名的检测。
互联网风暴中心(Internet Storm Center)的分析师通过关联样本源代码中的selfmodifyingwrapper
、decryptandexecute
和polymorphcode
等函数名称确认了这一威胁。这些函数通过从内存中提取自身代码、应用随机化的XOR打包技术,并在执行前注入垃圾代码片段来实现规避检测。这种动态变异确保每次执行的指纹都不相同,给静态扫描器带来了巨大挑战。
传播与驻留机制
该RAT主要通过包含看似无害Python脚本的网络钓鱼邮件传播,也会通过受感染的网络共享扩散。执行时,它会完全在内存中解包,避免在磁盘上留下痕迹。为了实现持久化,它会将变异后的脚本副本以随机文件名附加到启动文件夹中。其在VirusTotal上的低检测分数表明,传统的文件哈希签名对这种威胁几乎无效。
核心规避检测技术
该RAT的检测规避主要依赖两大核心机制:自我修改和垃圾代码插入。
运行时自修改技术
selfmodifyingwrapper
函数会在运行时使用Python的inspect
模块获取目标例程的源代码,通过用随机密钥对每个字节进行XOR编码,然后在执行前在内存中重建代码。这种技术高度模拟了打包器的行为,但不会在磁盘上留下打包文件痕迹。
import inspect, random, marshal, zlib
def selfmodifyingwrapper(func):
code = inspect.getsource(func).encode()
key = random.randint(1,255)
packed = bytes(b ^ key for b in code)
unpacked = bytes(b ^ key for b in packed)
codeobj = marshal.loads(zlib.decompress(unpacked))
exec(codeobj)
垃圾代码注入技术
polymorphcode
函数则会在核心例程中注入随机化的垃圾代码——包括未使用的函数、打乱的变量名和无操作循环。通过结合变量重命名和随机代码片段插入,该恶意软件每次运行都会生成几乎唯一的源代码,从而破坏静态签名和启发式方法的有效性。
鉴于这些高级规避策略,防御者必须依赖行为分析和实时监控,而非传统的基于签名的工具。
参考来源:
New Polymorphic Python Malware Repeatedly Mutate its Appearance at Every Execution Time
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf
客服小蜜蜂(微信:freebee1024)