Py学习  »  Python

新型多态Python恶意软件:每次执行都会改变自身特征

FreeBuf • 4 周前 • 65 次点击  


网络安全研究人员近期发现一款基于Python的远程访问木马(RAT),该恶意软件展现出前所未有的多态行为——每次运行时都会改变其代码特征。


Part01

低检测率的完整功能木马


这款名为nirorat.py的样本最初在VirusTotal平台上被发现,尽管具备完整的RAT功能套件,但在检测引擎上仅获得26/100的低分。分析人员认为,该恶意软件利用Python的自省和代码修改功能,通过持续变换关键代码段来规避基于签名的检测。

互联网风暴中心(Internet Storm Center)的分析师通过关联样本源代码中的selfmodifyingwrapper、decryptandexecute和polymorphcode等函数名称确认了这一威胁。这些函数通过从内存中提取自身代码、应用随机化的XOR打包技术,并在执行前注入垃圾代码片段来实现规避检测。这种动态变异确保每次执行的指纹都不相同,给静态扫描器带来了巨大挑战。


Part02

传播与驻留机制


该RAT主要通过包含看似无害Python脚本的网络钓鱼邮件传播,也会通过受感染的网络共享扩散。执行时,它会完全在内存中解包,避免在磁盘上留下痕迹。为了实现持久化,它会将变异后的脚本副本以随机文件名附加到启动文件夹中。其在VirusTotal上的低检测分数表明,传统的文件哈希签名对这种威胁几乎无效。


    Part03

    核心规避检测技术


    该RAT的检测规避主要依赖两大核心机制:自我修改和垃圾代码插入。

    运行时自修改技术

    selfmodifyingwrapper函数会在运行时使用Python的inspect模块获取目标例程的源代码,通过用随机密钥对每个字节进行XOR编码,然后在执行前在内存中重建代码。这种技术高度模拟了打包器的行为,但不会在磁盘上留下打包文件痕迹。

    import inspect, random, marshal, zlibdef 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

    https://cybersecuritynews.com/new-polymorphic-python-malware-repeatedly-mutate/




    推荐阅读


    电台讨论


    图片

    Python社区是高质量的Python/Django开发社区
    本文地址:http://www.python88.com/topic/187728