http://dcrdx.com/

关于Python病毒样本的分析方法

前言

近年来,Python语言因其入门简单、功能强大、开发效率高等特性逐渐成为最受欢迎的开发语言,同时Python在安全领域的应用也逐渐广泛,开始用于黑客和渗透测试各领域微步在线在威胁监测过程中,多次发现病毒木马、直接使用Python制作、用Python打包配送。 例如,在2020年1月针对阿-拉伯地区的APT攻击事件中,攻击者通过传递具有CVE-2017-0199漏洞的docx文件,释放并运行Python打包的后门程序。 2019年11月,Gaza (中东背景的APT组织)也发现使用Python打包木马组件。 由此可见,Python在网络攻击事件中的出现越来越频繁,给安全分析师带来了新的挑战。

分析结果表明,Python打包的病毒木马主要存在以下三种形式:

1 .以py脚本的形式存在。 这种方式最常见,但最容易阅读和分析。 2 .将pyc文件结构打包成各种可执行文件,如PyInstaller工具。 用Cython转换成c语言代码,编译成可执行文件。 其中,第一种方法最简单最常见,而第二、第三种方法有一定的分析难度。 本文介绍了第二种方法,介绍了常见的Python打包工具的安装和使用,分析了典型的Python打包木马病毒,并介绍了相反的分析技巧。

常见Python打包工具

1.?PyInstaller

配置式

PyInstaller用于将Python程序打包为支持Windows、Linux和macOS X的独立可执行软件包。 该工具是目前非常成熟的工具,兼容且受支持的Python版本可达Python3.7。 使用方法

PyInstaller的使用方法非常简单。 (1)可以使用pip install pyinstaller命令安装。 )2)使用pyinstaller.exe -F yourcode.py命令轻松包装。

分析方法

PyInstaller打包的文件也很容易分析,有现成的——pyinstxtractor.py工具脚本。 pyinstxtractor.py的下载地址为https://SourceForge.net/projects/pyinstallerextractor /使用也很简单,可以使用pyinstxtractor.py可执行文件

2.?py2exe

简介

名为Py2exe的工具只能在Windows平台上使用。 Py2exe是一个开源项目,github地址: https://github.com/py2exe/py2exe。 Py2exe运行Python2和Python3。 使用方法

)1)下载地址如下: Python3可以直接通过pip下载。 Python2位于https://SourceForge.net/projects/py2exe/files/py2exe /下载中。 )2)使用方法如下: 使用时必须创建set.py (名称自由),文件内容为from distutils.coreimportsetupimportpy2exe setup ( windows=[ '1. py ' ] ) set.py

可以将python set.py py2exe命令编译为exe文件

效果如下图所示。

分析方法

)1)在py2exe打包的结果文件中,exe和python.dll都是必需的组件。 python.dll可能会嵌入到exe中。

)2)执行可执行文件时必须调用附带的python.dll。 )3) python.dll的派生函数PyMarshal_ReadObjectFromString降低hook或断点。

)4)可以通过PyMarshal_ReadObjectFromString函数获取打包在exe中的pyc数据。 此函数有两个参数,一个是pyc数据的起始地址,两个是数据的长度。

注:通过py2exe获取的pyc数据包含多个模块。 请务必分割多个模块进行逆编译。 否则会出错。

3. bbFreeze

简介

BBFreeze是由BrainBot Technologies AG开发的。

GitHub地址: https://github.com/sch mir/bbfreeze。

使用方法

)1)下载地址如下: 可以直接从pip或easy_install下载。 )2)使用方法如下。 命令: bbFreeze py脚本的输出结果如图所示。

分析方法

BBFreeze与其他工具不同,是通过PyRun_StringFlags函数完成的。 BBFreeze用zip模块解压缩随身携带的library.zip,并在python的exec上运行。 的library.zip可能嵌入在可执行文件中。 library.zip解压后,如图:

4. cx_Freeze

简介

cx_Freeze还是一个用于将Python脚本打包为可执行文件的工具,可以像使用py2exe一样使用。 GitHub地址: https://github.com/marcelotduarte/CX _ freeze

使用方法

)1)下载地址如下:

3359 source forge.net/projects/CX-freeze

也可以使用pip下载。

)2)使用方法如下。

命令: cxfreeze py脚本。

分析方法

cx_Freeze打包的文件更容易分析输出文件。 cx_Freeze将pyc文件作为资源直接放置在资源段中。 可以使用压缩工具直接打开。

典型木马病毒分析

演示了如何分析简单样本并分析这一系列样本。 找到示例散列287 b67 d 9927 b 6a 318 de8c 94e f 525 cc 426 f 59 DC 2199 ee 0e0 E1 ca F9 ef 0881 e 7555。 分析的第一步需要确定样品是用什么工具打包的。 首先,您可以看到字符串“_MEIPASS2=”。 由此可见,示例是用Python打包的。 通过WinMain函数的代码,可以看到示例在PythonInstaller中打包。

确定使用哪个工具包装后,可以通过上述方法直接解除包装。 使用pyinstxtractor.py脚本解锁。 解包后的文件清单大致如下。

其中,您可以看到,求解包将生成python27.dll,您可以看到这个示例是用Python2.7编写的。

大体上可以看出,拆包后的文件有很多。 运行需要大量Python的组件和第三方组件,如_socket.pyd和Crypto.Cipher._AES.pyd。 文件列表中显示没有扩展名的文件。

此文件需要示例核心代码。 该文件的文件名是打包前py文件的文件名,该文件的文件格式与pyc文件格式相近。 区别在于文件头没有majic字段和时间戳。

添加Python2.7的majic字段和任何时间戳。 然后,可以使用uncompile.py脚本恢复py文件。

对于使用这种常用工具打包的Python样本,通常会处理以下过程: (1)确定样本是用哪个工具打包的。 这样的工具很常见。 打包的程序很容易判断。 )2)的破解工具或方法进行代码提取。 )3)提取的代码通常为pyc文件格式。 )4)使用uncompile.py脚本进行反向编译可以获得原始的py文件。

其他Python打包分析

病毒样本通常不直接使用这些工具打包。 许多黑客使用自己定制的程序来打包python脚本。 以样品为例,给出在此样品中如何分析。 此示例是一个打包了pupy脚本的elf文件。 1 .分析该样本发现,该样本在内存中解密并释放名为libpython2.7.so.1.0的so文件。 此文件是python2.7核心文件,所有导出函数都是python的重要api函数。

2 .对libpython2.7.so.1.0,负责对该函数sub_5637CE90DFD2获取libpython2.7.so.1.0的导出函数。

将libpython2.7.so.1.0的导出函数地址初始化为imports全局变量。 使用dlsym函数使用函数的名称获取函数地址。

4 .以前,python api的地址存储在imports变量中,但后续调用也是在imports变量中进行的。 通过撤消调用的python函数的符号,可以看到示例初始化和运行python环境的整个过程。

首先是初始化python执行环境。

然后初始化所需的python模块。

准备好python运行时环境后,需要加载pupy的代码。 查看PyMarshal_ReadObjectFromString函数时,可以看到此示例使用脚本表达式运行python的代码。

PyMarshal_ReadObjectFromString函数的主要功能是读取数据段并生成PyCodeObject的python对象。 第一个参数是字符串的地址,第二个参数是数据的长度。

5.py marshal _ readobjectfromstring的第一个参数是pupy的字节码,该字节码的实际格式是pyc文件。 将此字符串恢复为pyc文件后,可以恢复pupy的py脚本。

将PyMarshal_ReadObjectFromString的第一个参数数据保存到pyc文件中。 请注意,保存的pyc文件没有python版本信息和时间戳。 在文件的开头添加8字节。 前4个字节是python版本(不能自由填写。 一定是python 2.7版),最后4个字节是时间戳)也可以自由填写。

使用python反编译脚本uncompyle6.py反编译保存的pyc文件,可以生成pupy的py脚本。 通过简单分析脚本,可以充分确保此示例是pupy系列。 脚本是开源的,不分析具体行为。

总结

通过分析多个工具发现,无论使用什么工具打包,都需要一个关键元素: python.dll或libpython.so。 现在,让我们先来看看python.dll在python中起着什么作用。

基本上,在整个Python目录结构中,python.dll是最核心、最基础的组件。 Python的运行时环境在python.dll中实现,其中包含对象/类型系统、内存定位器和运行时状态信息。 在此,您还可以理解为什么需要将相应的python.dll打包在一起,以便以任何方式打包。

也就是说,任何工具都将在python.dll中构建python的执行环境。 可以通过调用python.dll中的导出函数来实现此过程。 Python.dll中的一些导出函数是用于初始化python运行时环境的函数Py_Initialize。

Python有两种主要的执行模式:交互模式和脚本执行方式。 让我们来看两个简单的例子:

1. 脚本运行方式

准备一个简单的py脚本,并将其编译为pyc文件。

准备调用此pyc文件的简单c代码。

(1)加载相应版本的python.dll。

)2)首先调用Py_Initialize函数。 )3)然后,调用PyRun_SimpleFile来执行pyc文件。

2. 输出结果

3. 交互式模式

简单c代码示例:

(1)加载相应版本的python.dll。

)2)首先调用Py_Initialize函数。

)3)接下来,利用PyDict_New制作Dict。

(4)然后调用PyEval_GetBuiltins获取解释器。

)5)最后调用PyRun_String执行各种代码。

4. 运行结果

根据两个演示,可以清楚地了解Python的执行逻辑。 然后,如果遇到Python打包的可执行文件,则可以检测PyRun系列函数。

通过这一系列函数,可以获取可执行文件中打包的明文Python脚本或pyc字节码。

处理

5. 总结

python封装这一系列样本的过程主要如下: (1)判断是否为已知的工具包。 )2)如果不是已知工具,着手查找PyRun类函数的调用。 )3) PyRun类函数的自变量可以获取相应的示例代码。 )4)使用uncompile.py脚本进行反向编译可以获得原始的py文件。

参考链接

6.1 工具链接

工具

链接

Pyinstaller

3359 pypi.org/project/py installer /

py2exe

https://pypi.org/project/py2exe/

bbFreeze

https://pypi.org/project/bbfreeze /

cx-Freeze

3359 pypi.org/project/CX-freeze /

6.2 样本链接

https://s.threat book.cn/report/file/287 b67 d 9927 b 6a 318 de8c 94e f 525 cc 426 f 59 DC 2199 e E0 E1 ca F9 ef 0881 e 7555 /? sign=historyenv=winxpsp3_exe

3359 s.threat book.cn/report/file/4827847 e 926 a1 f 39 c 720894 ABA3EAE 8ee1e 711 F8 cc9f 57 eff bb a4e a 36 c 072 b 81 /? sign=history env=win7_ SP1 _ en x86 _ office 2013

6.3python木马安全事件报告

3359 x.threat book.cn/node v4/vb4/article? threatInfoID=2075? 了解如何分析3359 blog.talos intelligence.com/2020/01/jhon erat.html标签3360python病毒样本

文章来源:http://www.dcrdx.com/

上一篇:qq被找了黑客能找回吗(qq号被找求黑客找回)

下一篇:找黑客合作破解(黑客)

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读