关于pyinstaller与Xbash系列分析(续)

前言:
 继《Xbash部分样本分析》一篇博客以后,研究了关于pyinstaller与pyc字节码格式。虽然相关资料比较少,可是不影响去接触新的知识。
 不得不说pyinstaller是Xbash系列恶意软件跨平台执行的罪魁祸首,PyInstaller支持Linux、Windows、Apple macOS等多平台可执行文件转换。意味着病毒能够在多平台上兼容运行。虽然python开发维护病毒难度较小,周期短,对于分析人员来讲也是件好事,好比把可执行文件提取成python源码。
html

pyinstaller pyc 恶意代码分析
环境搭建及使用 pyc格式解析(部分) Python恶意代码

  
1、Pyinstaller:
 ☛介绍一下pyinstaller,如前言所说pyinstaller将会读取您编写得python脚本,它会自行分析,固然是根据导出得与执行所须要得模块与库。收集这些文件包括活动得解释器,把他们放在一个文件夹中。python

 This section covers the basic ideas of PyInstaller. These ideas apply to all platforms. Options and special cases are covered below, under Using PyInstaller.
 PyInstaller reads a Python script written by you. It analyzes your code to discover every other module and library your script needs in order to execute. Then it collects copies of all those files – including the active Python interpreter! – and puts them with your script in a single folder, or optionally in a single executable file.mysql

 上述参考源于pyinstaller手册:https://pyinstaller.readthedocs.io/en/stable/index.html
也就是说当使用pyinstaller得时候,会自动检索咱们代码中所须要得库与模块与解释器,将他们打包到一块儿,根据不一样得参数生成可执行得文件。固然咱们并非研究如何实现转换成pe格式与elf格式得,由于这须要很漫长得过程。
可是咱们须要了解,pyinstaller打包到一个文件夹后,如何执行得?首先pyinstaller会加载myscript.exe,这是核心文件,而后会引导加载程序得活动平台二进制可执行程序。会引导加载程序,加载python环境,方便python解释器在myscript中导入模块和库。
启动时候会在操做系统对应得文件夹建立一个临时得文件夹名称_MEIxxxxxx, 引导加载程序与临时文件夹的上下文中的单文件夹包彻底相同。当捆绑代码终止时,引导加载程序将删除临时文件夹,详细得参考请看官方文档。linux


✍关于pyinstaller的一些参数,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片一:pyinstaller参数git

一、-F, --onefile         建立一个文件捆绑的可执行文件
    二、-w, --windowed, --noconsole       pe格式窗口程序GUI
    三、-c, --console, --nowindowed         pe格式控制台程序
    四、-a, --ascii不包含unicode支持
    五、-D, --onedir 建立包含可执行文件的单文件夹包


如和安装pyinstaller呢?很简单,命令以下所示:github

系统Centos
若是你没有安装pip,参考以下:
    一、安装epel扩展:yum -y install epel-release
    二、安装pip:yum -y install python-pip
安装pyinstaller:
    pip install pyinstaller
Windows下参考也同样


如何使用pyinstaller?分为如下几大步,以下所示:
一、首先你须要编写一个py文件,固然你能够分红多个文件进行代码得编写,除了特殊模块须要告诉pyinstaller位置以外,其他会自定帮你分析模块与库,这里用测试代码以下:
关于pyinstaller与Xbash系列分析(续)
                    图片二:python测试代码
二、使用pyinstaller命令进行打包,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片三:pyinstaller打包
三、查看生成得数据,以下所示:
关于pyinstaller与Xbash系列分析(续)
关于pyinstaller与Xbash系列分析(续)
                    图片四:dist/xxx
生成的elf程序运行正常,并且pyinstaller维护了如上图所示得PYZ格式的数据文件,附加到了可执行文件的末尾,而后最前面是PYZ开头的格式。
 官方提供了对应的脚原本提取pyc,名字叫archive_viewer.py代码下载:https://github.com/pyinstaller/pyinstaller/blob/develop/PyInstaller/utils/cliutils/archive_viewer.py

四、从上述网站中把代码粘贴下来,touch一个文件,+x权限后,复制便可使用,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片五:archive_viewer.py
五、咱们发现下面有不少数据,咱们须要关注的s标志段中name是咱们自己文件名:
关于pyinstaller与Xbash系列分析(续)
                    图片六:S段标志数据
六、archive_viewer.py都有什参数呢?很简单分析一下源码,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片七:命令分析
咱们须要用到X的命令去提取pyc,上图中为标记的命令U是go Up one level的含义。
七、开始提取pyc,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片八:提取命令
八、这时候咱们来看一看提取的pyc,widnows下用010就能够了,linux下用xxd能够观察,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片九:提取pyc数据观察
九、pyc提取的到底对不对呢?怎样来确认?这时候咱们须要利用python中的py_compile模块,这个模块中方法compile能够将py生成pyc,这样咱们对比观察,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片十:py_compileweb

代码:
            import py_compile
            py_compile.compile(r'路径')
注意:
            有时候会生成一个__pycompile__文件夹,里面会是pyc,有时候会在输入的路径下生成pyc,当心覆盖elf中提取的pyc。

十、咱们看一下python原生态编译生成的字节码pyc以下:
关于pyinstaller与Xbash系列分析(续)
                    图片十一:compile编译pyc
图片九与图片十一作比对,你必定会开头少了8个字节的数据,注意当前编译环境使用的python2.7.5,缺乏了8个字节的数据,python3前面的字节编码字节也是不一样的。
 因此在当前环境下测试观察,那么使用pyinstaller中archive_viewer.py抽取的pyc比正常编译的字节码缺乏了8个字节的数据,缺乏的是什么?下面咱们来看一看pyc格式解析。

  
2、pyc格式解析:
关于pyinstaller与Xbash系列分析(续)
                    图片十二:部分pyc格式数据分析
固然pyc的格式不仅上述那么多,只是罗列出了一部分,详细的去介绍参数不是一篇文章或者短期内可以研究学习明白的,那么咱们来看一些重要的数据。redis

一、MAGIC,魔术头,注意版本区分不一样因此魔术头的数值不一样,好比python2通常是03f30d0a,python3.6通常是33790d0a,占用4个字节,前两个字节是版本,后两个字节是0d0a两个标志位.
 二、紧跟着Magic的是MTIME,是时间也占四个字节。
 三、TYPE_CODE, 表示了一个PyCodeObject对象,占用了一个字节大小,这个标志位是c,其实就是Pyton中编译过程生成code对象PyCodeObject。将PyCodeObject写入二进制文件,即.pyc。
 四、咱们发现图片中co_code的数值,其实就是PyCodeObject结构体中的各个域,每个属性占用一个long字节。
 五、下面三个属性Type_string与size values数值,是对应着PyCodeObject的co_code。
 六、Type_List,占用一个字节,是类型链表。
 七、co_consts size 表示元素个数,占用四个字节。
 八、Type_INT与co_consts[0]是一个×××。
 还有不少的属性,详细的数据还能够参考:https://www.2cto.com/kf/201504/395067.html


 ✉经过上面的描述,对pyc的数据格式有一个基础的认识,简单的知道了那些字节的含义与基础的做用。
 这样咱们就能够很轻易的知道在pyinstaller打包的时候,解压Pyc缺失了8个字节,分别是Magic与MTIME两个字段属性,MTIME字段咱们能够填充为0(可有可无)。
 因此根据当前环境来断定魔术头的格式(pyinstaller在打包的时候,应该会抽取魔术头来做为版本的断定方式,因此会缺乏字节)。咱们尝试将确实的数据添加到c也就PyCodeObject对象以前补齐8个字节的数据,以下所示:

关于pyinstaller与Xbash系列分析(续)
                    图片十三:补齐数据
 注意:是在PyCodeObject对象以前补齐数据,而不是在原来的数据上修改!不然转换py的时候会报错的。
 补齐数据以后咱们须要作的是用工具去反编译成py文件,wdinows下推荐一款为EasyPythonDecompiler.exe的软件,而linux下更是数不胜数,那么这里使用linux下名为uncompyle2, decompyle2不少均可以。下面演示就使用EasyPythonDecompiler.exe来转换py,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片十四:Decompile Success
 转换完成以后将会生成mypy.pyc_dis文件,若是pyc的格式不对就会失败,生成mypy.pyc_dis.failure,这时候咱们拉入到IDE看一看python源码是否与图二中源码相同,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片十五:匹配成功
 上述一已经能成功的将pyinstaller打包elf格式的文件成功的转换成py,有何用呢?还记着Xbash系列病毒其中便有pyinstaller打包的病毒,以下所示:
关于pyinstaller与Xbash系列分析(续)
                    图片十六:提取恶意代码

3、Python恶意代码分析:
➀弱用户与密码字典:
关于pyinstaller与Xbash系列分析(续)
                    图片十七:弱用户与弱密码
➁公网请求及初始化扫IP及描端口:
关于pyinstaller与Xbash系列分析(续)
                    图片十八:请求及端口初始化
➂初始化恶意线程环境及启动线程:sql

关于pyinstaller与Xbash系列分析(续)
                    图片十九:建立启动线程
➃线程回调分析:
关于pyinstaller与Xbash系列分析(续)
                    图片二十:线程回调分析
➄WEB扫描及数据库扫描:
关于pyinstaller与Xbash系列分析(续)
                    图片二十一:pass_crack
关于pyinstaller与Xbash系列分析(续)
                    图片二十二:check_pass
关于pyinstaller与Xbash系列分析(续)
                    图片二十三:check_pass
关于pyinstaller与Xbash系列分析(续)
                    图片二十四:mysql
关于pyinstaller与Xbash系列分析(续)
关于pyinstaller与Xbash系列分析(续)
关于pyinstaller与Xbash系列分析(续)
                    图片二十五:mysql删库勒索mongodb

关于pyinstaller与Xbash系列分析(续)
                    图片二十六:postgresql删库勒索
关于pyinstaller与Xbash系列分析(续)
关于pyinstaller与Xbash系列分析(续)
关于pyinstaller与Xbash系列分析(续)
                    图片二十七:mongodb删库勒索
关于pyinstaller与Xbash系列分析(续)
                    图片二十八:redis删库勒索
关于pyinstaller与Xbash系列分析(续)
                    图片二十九:hadoop Yarn Rm执行命令
关于pyinstaller与Xbash系列分析(续)
                    图片三十:MQ利用执行put
⑥内网扫描:
关于pyinstaller与Xbash系列分析(续)
                    图片三十一:内网扫描
关于pyinstaller与Xbash系列分析(续)
                    图片三十二:内网扫描
经过上述恶意代码的分析,最可恶的是没有任何备份的状况下删库,且欺0.02BTC,即便给对方支付了费用,抱歉你的数据库仍没法恢复,对方会利用你的心性索要更多的BTC。 服务器中大量的弱帐户与弱密码,给病毒带来了福利。扫描web、内网建立线程,一经发现字典匹配成功,那么会对数据库进行毁灭的操做。 如何防范?若是你服务器与数据库帐户名,密码规范化管理(复杂程度及长度),常常更换,不使用这些弱密码弱帐户,即便突破了安全防御,在字典扫描与破解的时候,也不能胡做非为,那么XbashY样本分析告一段落。

相关文章
相关标签/搜索