展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 如何利用Python识别恶意软件

如何利用Python识别恶意软件

01微软Windows可移植可执行文件格式要进行恶意软件静态分析,你需要了解WindowsPE文件格式,该格式描述了如.exe、.dll和.sys等当今Windows程序文件的结构,并定义了它们存储数据的方式。PE文件包含x86指令、图像和文本等数据,以及程序运行所需的元数据。PE格式最初的设计是用来进行下面的操作。1)告诉Windows如何将程序加载到内存中PE格式描述了文件的哪些块应该加载到内存中,以及在哪里加载。它还告诉你,Windows应该在程序代码里的哪个位置开始执行程序,以及哪些动态链接代码库

本文目录

    01 微软Windows可移植可执行文件格式

    要进行恶意软件静态分析,你需要了解Windows  PE文件格式,该格式描述了如.exe、.dll和.sys等当今Windows程序文件的结构,并定义了它们存储数据的方式。PE文件包含x86指令、图像和文本等数据,以及程序运行所需的元数据。

    PE格式最初的设计是用来进行下面的操作。

    1)告诉Windows如何将程序加载到内存中

    PE格式描述了文件的哪些块应该加载到内存中,以及在哪里加载。它还告诉你,Windows应该在程序代码里的哪个位置开始执行程序,以及哪些动态链接代码库应该加载到内存中。

    2)为运行程序提供在执行过程中可能使用的媒体(或资源)

    这些资源可以包括字符串,如GUI对话框或控制台输出的字符串,以及图像或视频。

    3)提供安全数据,例如数字代码签名

    Windows使用这些安全数据来确保代码出自受信任的来源。

    PE格式通过利用图1-1中所示的一系列结构来完成以上工作。

    如何利用Python识别恶意软件

    ▲图1-1 PE文件格式

    如图1-1所示,PE文件格式包括一系列头(header),用来告诉操作系统如何将程序加载到内存中。它还包括一系列节(section)用来包含实际的程序数据。Windows将这些节加载到内存中,使其在内存中的偏移量与它们在磁盘上的显示位置相对应。

    让我们从PE头开始,来更详细地探讨这个文件结构。我们将略过对DOS头的讨论,这是20世纪80年代微软DOS操作系统的遗留产物,仅仅出于兼容性原因而存在。

    1. PE头

    如图1-1底部所示,在DOS头❶的上面是PE头❷,它定义了程序的一般属性,如二进制代码、图像、压缩数据和其他程序属性。它还告诉我们程序是否是针对32位或64位系统而设计的。

    PE头为恶意软件分析师提供了基本但有用的情景信息。例如,头里包括了时间戳字段,这个字段可以给出恶意软件作者编译文件的时间。通常恶意软件作者会使用伪造的值替换这个字段,但是有时恶意软件作者会忘记替换,就会发生这种情况。

    2. 可选头

    可选头❸实际上在今天的PE可执行程序中无处不在,恰恰与其名称的含义相反。它定义了PE文件中程序入口点的位置,该位置指的是程序加载后运行的第一个指令。

    它还定义了Windows在加载PE文件、Windows子系统、目标程序(例如Windows  GUI或Windows命令行)时加载到内存中的数据大小,以及有关该程序其他的高级详细信息。由于程序的入口点告诉了逆向工程师该从哪里开始进行逆向工程,这个头信息对逆向工程师来说是非常宝贵的。

    3. 节头

    节(section)头❹描述了PE文件中包含的数据节。PE文件中的一个节是一块数据,它们在操作系统加载程序时将被映射到内存中,或者包含有关如何将程序加载到内存中的指令。

    换句话说,一个节是磁盘上的字节序列,它要么成为内存中一串连续字节的字符串,要么告知操作系统关于加载过程的某些方面。

    节头还告诉Windows应该授予节哪些权限,比如程序在执行时,是否应该可读、可写或可执行。例如,包含x86代码的.text节通常被标记为可读和可执行的,但是不可写的,以防止程序代码在执行过程中意外修改自身。

    图1-1描述了许多节,如.text和.rsrc。执行PE文件时,它们会被映射到内存中。其他如.reloc节的特殊节不会被映射到内存中,我们也将讨论这些节。下面我们来浏览图1-1中显示的节。

    1).text节

    每个PE程序在其节头中包含了至少一个标记为可执行的x86代码节;这些节几乎总是命名为.text❺。

    2).idata节

    .idata节❻,也被称为导入节,包含导入地址表(IAT),它列出了动态链接库和它们的函数。IAT是最重要的PE结构之一,在对PE二进制文件进行最初的分析时需要查看它,因为它指出了程序所调用的库,然而这些调用反过来又可能会泄露恶意软件的高级功能。

    3)数据节

    在PE文件结构中的数据节可以包括.rsrc、.data和.rdata等节,它们存储程序使用的鼠标光标图像、按钮图标、音频和其他媒体等。例如,图1-1中的.rsrc节❼包含了程序用于将文本呈现为字符串的可打印字符串。

    .rsrc(资源)节中的信息对恶意软件分析师是非常重要的,因为通过检查PE文件中的可打印字符串、图形图像和其他资产,他们可以获得关于文件功能的重要线索。

    在03节中,你将了解如何使用icoutils工具包(包括icotool和wrestool)从恶意软件二进制文件的资源节中提取图形图像。然后,在04节中,你将学习如何从恶意软件资源节中提取可打印的字符串。

    4).reloc节

    PE二进制文件的代码并非是与位置独立的,这意味着如果将它从预期的内存位置移动到新的内存位置,它将无法正确执行。.reloc❽在不破坏代码的情况下通过允许移动代码来解决这个问题。

    如果一个PE文件的代码已被移动,它就告诉Windows操作系统将该文件的代码中进行内存地址转换,这样代码仍可以正确运行。这些转换通常涉及在内存地址中添加或减去偏移量。

    02 使用pefile解析PE文件格式

    由Ero  Carerra编写和维护的Python模块pefile已经成为解析PE文件的一个行业标准的恶意软件分析库。在本节中,我将向你展示如何使用pefile来解析ircbot.exe。代码清单1-1假设ircbot.exe已位于你当前的工作目录中。

    输入以下命令安装pefile库,以便我们可以在Python中导入它:

    $ pip install pefile

    现在,使用代码清单1-1中的命令启动Python,导入pefile模块,然后使用pefile打开并解析PE文件ircbot.exe。

    • 代码清单1-1 加载pefile模块并解析PE文件(ircbot.exe)

    $ python >>> import pefile >>> pe = pefile.PE("ircbot.exe")

    我们实例化pefile.PE,它是PE模块实现的核心类。它解析PE文件,以便我们可以查看它们的属性。通过调用PE构造函数,我们加载并解析指定的PE文件,在本例中为ircbot.exe。现在我们已经加载并解析了这个文件,运行代码清单1-2中的代码从ircbot.exe的pe字段中提取信息。

    • 代码清单1-2 遍历PE文件的各个节并打印有关它们的信息

    #基于 Ero Carrera的示例代码(pefile库的作者) for section in pe.sections:   print(section.Name, hex(section.VirtualAddress),     hex(section.Misc_VirtualSize), section.SizeOfRawData)
    • 代码清单1-3显示了打印输出的内容。

    代码清单1-3 使用Python的pefile模块从ircbot.exe中提取节数据

    我们从PE文件五个不同的节中提取了数据:.text、.rdata、.data、.idata和.reloc。输出是以五元组的形式给出,每提取一个PE节对应一个元素。每一行的第一个条目标识PE节。(你可以忽略一系列的\\x00空字节,它们只是C语言样式的空字符串终止符。)其余字段告诉我们,一旦将每个节被加载到内存中,它的内存利用率将是多少,以及一旦被加载,它将在内存中的何处被找到。

    例如,0x1000❶是加载这些节的虚拟内存地址基址,也可以将其视为节的内存地址基址。在虚拟大小(virtual  size)字段中的0x32830❷指定了节被加载后所需的内存大小。第三个字段中的207360❸表示该节将在该内存块中所占用的数据量。

    除了使用pefile解析程序的节之外,我们还可以使用它列出二进制文件将加载的DLL文件,以及它将在这些DLL文件中所请求的函数调用。我们可以通过镜像(dump)PE文件的IAT来实现这一点。代码清单1-4显示了如何使用pefile镜像ircbot.exe的IAT。

    • 代码清单1-4 从ircbot.exe中提取导入信息

    $ python pe = pefile.PE("ircbot.exe") for entry in pe.DIRECTORY_ENTRY_IMPORT:     print entry.dll     for function in entry.imports:         print '\t', function.name

    代码清单1-4会生成如代码清单1-5所示的输出(为了简洁起见,输出进行了截断)。

    • 代码清单1-5 ircbot.exe的IAT表内容,其显示了这个恶意软件使用的库函数

    如何利用Python识别恶意软件

    如代码清单1-5所示,这个输出对于恶意软件分析很有价值,因为它列出了恶意软件声明和将引用的丰富的函数数组。

    例如,输出的前几行告诉我们,恶意软件将使用WriteFile❶写入文件,使用CreateFileA❷打开文件,并使用CreateProcessA❸创建新的进程。虽然这些只是关于恶意软件的基本信息,但它们是了解恶意软件更为详细行为的开始。

    03 检查恶意软件的图片

    要了解恶意软件是如何设计来捉弄攻击目标的,让我们看看在它的.rsrc节中所包含的图标。例如,恶意软件二进制文件常常被设计成伪装的Word文档、游戏安装程序、PDF文件等常用软件的图标来欺骗用户点击它们。

    你还可以在恶意软件中找到攻击者自己感兴趣程序中的图像,例如攻击者为远程控制受感染机器而运行的网络攻击工具和程序。

    回到我们的样本图像分析,你可以在本文的数据目录中找到名为fakepdfmalware.exe的这个恶意软件样本。这个样本使用Adobe  Acrobat图标诱骗用户认为它是一个Adobe Acrobat文档,而实际上它是一个恶意的PE可执行文件。

    在我们使用Linux命令行工具wrestool从二进制文件fakepdfmalware.exe中提取图像之前,我们首先需要创建一个目录来保存我们将提取的图像。代码清单1-6显示了如何完成所有这些操作。

    • 代码清单1-6 从恶意软件样本中提取图像的Shell命令

    $ mkdir images $ wrestool -x fakepdfmalware.exe -output=images $ icotool -x -o images images/*.ico

    我们首先使用mkdir  images创建一个目录来保存提取的图像。接下来,我们使用wrestool从fakepdfmalware.exe中提取图像资源(-x)到/images目录,然后使用icotool提取(-x)并将Adobe中.ico图标格式中的所有资源转换(-o)为.png图形,以便我们可以使用标准的图像浏览工具查看们。

    如果你的系统上没有安装wrestool,你可以从这里下载:

    http://www.nongnu.org/icoutils/

    一旦你使用wrestool将目标可执行文件中的图像转换为PNG格式,你就可以在你喜欢的图像浏览工具中打开它们,并以各种分辨率查看Adobe  Acrobat图标。

    正如我在这里给出的例子所示,从PE文件中提取图像和图标相对简单,可以快速显示与恶意软件二进制文件相关的有趣且又有用的信息。同样地,我们可以轻松地从恶意软件中提取可打印字符串来获取更多信息,我们接下来会做这项工作。

    04 检查恶意软件的字符串

    字符串是程序二进制文件中可打印字符的序列。恶意软件分析师通常依赖恶意样本中的字符串来快速了解其中可能发生的情况。这些字符串通常包含下载网页和文件的HTTP和FTP命令,用于告诉你恶意软件连接到的地址的IP地址和主机名等类似信息。

    有时,即使用于编写字符串的语言也有可能暗示恶意软件二进制文件的来源国,尽管这可能是伪造的。你甚至可以在一个字符串中找到一些文本,它们用网络用语解释了恶意二进制文件的用途。

    字符串还可以显示有关二进制文件的更多技术信息。例如,你可能会发现有关用于创建二进制文件的编译器、编写二进制文件所使用的编程语言、嵌入式脚本或HTML等信息。

    虽然恶意软件作者可以对所有这些痕迹进行混淆、加密和压缩等处理,但是即便是高水平的恶意软件作者也经常会暴露并留下一些痕迹,因此在分析恶意软件时,对镜像的字符串进行细致检查显得尤为重要。

    1. 使用字符串程序

    查看文件中所有字符串的标准方法是使用命令行工具strings,按照以下语法进行使用:

    $ strings filepath | less

    该命令将文件中的所有字符串逐行打印到终端上。在末尾添加 |  less可以防止字符串在终端上跨屏显示。默认情况下,strings命令查找所有最小长度为4字节的可打印字符串,但是你可以设置不同的最小长度并更改“命令手册”中所列各种其他参数。

    我建议只使用默认的最小字符串长度4,但是你可以使用-n选项更改最小字符串长度。例如,“string -n 10  filepath”只提取最小长度为10字节的字符串。

    2. 分析镜像字符串

    现在我们镜像了一个恶意软件程序的可打印字符串,但是挑战在于要理解这些字符串的含义。例如,假设我们将ircbot.exe中的字符串镜像到ircbotstring.txt文件中,这在本文前面的内容中,我们使用pefile库已经进行了探讨,如下所示:

    $ strings ircbot.exe > ircbotstring.txt

    ircbotstring.txt的内容包含数千行文本,但其中一些行应该突出显示出来。例如,代码清单1-7显示了从字符串镜像中提取出来的一串以单词DOWNLOAD开头的行。

    • 代码清单1-7 显示恶意软件可以将攻击者指定的文件下载到目标计算机的字符串输出

    如何利用Python识别恶意软件

    这些行表示ircbot.exe将尝试把攻击者指定的文件下载到目标计算机上。

    我们来尝试分析另一个。代码清单1-8所示的字符串镜像表明ircbot.exe可以起到Web服务器的作用,在目标机器上侦听来自攻击者的连接。

    • 代码清单1-8 显示恶意软件有一个攻击者可以连接的HTTP服务器的字符串输出

    如何利用Python识别恶意软件

    代码清单1-8显示了ircbot.exe用于实现HTTP服务器的各种HTTP样板程序。此HTTP服务器可能允许攻击者通过HTTP连接到目标计算机以发出命令,例如获取受害者桌面的屏幕截图并将其回传给攻击者的命令。

    我们在整个代码清单中看到了HTTP功能的证据。例如,从Internet资源请求数据的GET方法❶。HTTP/1.0 200  OK❷这一行是一个返回状态代码200的HTTP字符串,表明HTTP网络事务都运行良好,而Server:myBot❸表明HTTP服务器的名称是myBot,这是ircbot.exe附加的一个内置HTTP服务器。

    所有这些信息都有助于理解和阻止特定的恶意软件样本或恶意活动。例如,知道恶意软件样本有一个HTTP服务器,当你连接到它时,它会输出特定的字符串,这样你就可以借此扫描你的网络来识别受感染的主机。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。