不断增长的Python恶意软件 - cyborgsecurity


在过去的30年中,绝大多数严重的恶意软件   都是用Assembly或编译语言(例如C,C ++和Delphi)编写的。但是,在过去的十年中,这种恶意软件的数量一直在不断增长,以解释性语言(例如Python)编写。
低进入门槛,易用性,快速开发过程以及庞大的库集合使Python对数百万开发人员(包括恶意软件作者)具有吸引力。Python已迅速成为威胁者创建远程访问特洛伊木马(RAT),信息窃取者和漏洞利用工具的标准语言。

与C之类的标准编译语言相比,用Python编写恶意软件会带来很多困难。首先是为了解释和执行Python代码,需要在操作系统上安装Python。但是,正如我们将在下一节中看到的那样,可以使用多种不同的方法将Python程序轻松转换为本地可执行文件。
用Python编写的恶意软件也会对文件大小,内存占用量和处理能力产生不利影响。严重的恶意软件通常被设计为小巧,隐蔽,内存占用量少并且使用有限的处理能力。用C编写的已编译恶意软件样本可能为200 KB,而用Python编写的类似恶意软件样本在转换为可执行文件后可能为20 MB。使用解释语言时,CPU和RAM的使用率也会大大提高。
但是,现在是2020年,数字化格局已不再是过去。互联网比以往任何时候都快,我们的计算机拥有比以往更大的内存和存储容量,并且CPU的速度每年都在提高。Python也比以往任何时候都更加普及,默认情况下已预装在macOS和大多数所有Linux发行版中。

Microsoft Windows仍然是大多数恶意活动的主要目标,并且默认情况下未安装Python。因此,为了使威胁参与者能够有效地分发其恶意软件,他们必须将其Python代码转换为可执行格式。有很多方法可以将Python“编译”为本地可执行文件。让我们来看看几种最流行的方法……

PyInstaller能够将Python应用程序构建为适用于Windows,Linux,macOS等的独立可执行文件。它是将Python代码转换为可执行格式的最受欢迎的方法之一,已被广泛用于合法和恶意目的。
Python可执行文件之所以大得多,是因为它必须将Python解释器(在Linux上作为共享对象文件)捆绑在可执行文件本身中才能运行。

Py2exe  是将Python代码转换为可以本地运行的Windows EXE(可执行)格式的另一种流行方法。与PyInstaller相似,它将Python解释器与您的Python代码捆绑在一起,以生成可移植的可执行文件。Py2exe可能会随着时间的流逝而变得过时,因为在Python 3.4上尚不支持Py2exe,这是由于  CPython中的字节码在Python 3.6及更高版本中已发生重大变化
Py2exe利用distutils并需要setup.py 创建一个小的  脚本来生成可执行文件。

Nuitka  可能是最未充分利用的方法,但它是将Python代码编译为可执行文件的更高级的方法。它将Python代码转换为C程序,然后与libpython链接以执行与CPython相同的代码。Nuitka可以使用各种C编译器(包括gcc,clang,MinGW64,Visual Studio 2019+和clang-cl)将Python代码转换为C.
Nuitka在防止逆向工程(RE)方面可能具有进一步的内置优势。已经有几种工具可以轻松分析PyInstaller和py2exe生成的二进制文件以恢复Python源代码。但是,通过Nuitka将Python代码转换为C,进行逆向工程要困难得多。

Python恶意软件可以利用庞大的开源Python软件包和存储库生态系统。您几乎可以想到的任何东西,已经有人使用Python构建了它。对于恶意软件作者而言,这是一个巨大的优势,因为可以从开放的网络中挑选出简单的功能,而无需从头开始编写更复杂的功能。
让我们看一下三个简单但功能强大的工具示例:

  1. 代码混淆
  2. 截屏
  3. 执行网络请求

1.代码混淆: 使用Python的恶意软件作者拥有许多库,他们可以使用这些库来模糊化Python代码以使代码可读性更加困难,例如:  pyminifier  和  pyarmor

2.截屏 : 信息窃取恶意软件通常会具有捕获用户桌面屏幕快照的功能,以窃取敏感信息。使用Python太容易了,有几个库可以做到这一点,包括:  pyscreenshot  和  python-mss

3.执行网络请求: 恶意软件通常会执行Web请求,以在受感染的端点上执行各种不同的操作,包括:基于Web的命令和控制(C2),获取外部IP地址,下载第二阶段有效负载等。使用Python,发出Web请求非常简单,可以使用标准库或开源库(例如:  requests  和  httpx)来完成

eval()力量
通常,Python的  eval() 内置函数被视为  非常危险,  因为在生产代码中使用它会带来严重的安全风险。但是,  eval() 在Python恶意软件中使用时具有巨大的优势。
该  eval() 功能非常强大,可用于从Python程序本身内部执行Python代码字符串。单个功能通常被视为已编译恶意软件的高级功能。如果使用得当,它可以即时运行高级脚本或“插件”。这类似于C恶意软件包括Lua脚本引擎以使恶意软件能够执行Lua脚本的情况。这在知名的恶意软件(例如Flame)中已经看到  。
假设一个假想的APT组正在与某些基于Python的恶意软件进行远程交互。如果该小组遇到了需要快速反应的意外情况,那么能够在最终目标上直接执行Python代码将非常有益。另外,可以将Python恶意软件有效地“毫无特征”地放置在目标上,并且可以根据需要在目标上执行功能以保持隐身状态。

恶意样本
SeaDuke恶意软件可能是涉及基于Python的恶意软件中最引人注目的危害。SeaDuke恶意软件是Python木马,使用PyInstaller制成Windows可执行文件并与UPX打包在一起  。混淆了Python源代码,使分析人员更难以阅读该代码。该恶意软件具有多种功能,包括在Windows上建立持久性的几种方法,运行跨平台以及执行Web命令和控制请求的能力。

PWOBot是基于Python的恶意软件,类似于SeaDuke,它是使用PyInstaller编译成Windows可执行文件的。它在2013-2015年期间很普遍,并影响了几个欧洲组织,其中大多数在波兰。该恶意软件功能非常强大,并且具有记录按键,在Windows上建立持久性,下载和执行文件,执行Python代码,创建Web请求以及挖掘加密货币的功能。Palo Alto的Unit 42对PWOBot 进行了一些出色的分析。

PyLocky是基于Python的勒索软件,使用PyInstaller编译成Windows独立可执行文件。它针对几个不同的国家,包括美国,法国,意大利和韩国。它包括防沙盒功能,命令和控制以及使用3DES(三重DES)密码的加密文件。趋势科技对PyLocky 进行了一些出色的分析  。Talos Intelligence的分析师对PyLocky进行了反向工程,并能够   为受害者创建文件解密器,以恢复其加密文件。

PoetRAT是基于Python的木马,于2020年初针对阿塞拜疆政府和能源部门。该木马枚举了系统并窃取了与控制风力涡轮机的ICS / SCADA系统有关的信息。该恶意软件是使用恶意Microsoft Word文档删除的。RAT提供了许多用于窃取信息的功能,包括通过FTP提取文件,使用网络摄像头拍摄图像,上传其他工具,键盘记录,浏览器枚举和凭据盗用。

还有一些Python RAT是开源的,例如  pupy  和  Stitch。这些开放源代码的Python木马展示了复杂和功能丰富的Python恶意软件有多复杂。pupy RAT是跨平台的,具有全内存执行准则,占用空间非常小,可以结合多种C2加密方法,使用反射注入迁移到进程中,并且可以从内存中加载远程python代码。

PYTHON恶意软件分析工具
有许多工具可用来分析Python恶意软件,即使是已编译的形式。让我们粗略地看一下恶意软件分析师可以使用哪些工具来破解Python恶意软件。

 uncompyle6是decompyle,uncompyle和uncompyle2的后继者   是本机Python交叉版本反编译器和片段反编译器。它可用于将Python字节码转换回Python源代码。

 PyInstaller提取器  可以提取PyInstaller编译的可执行文件的Python数据。

 pythonexeunpack.py script 可以用来解压和反编译了与py2exe生成的可执行文件。

更多点击标题见原文。