首页
论坛
课程
招聘
[翻译]如何开始逆向/恶意软件分析
2022-7-25 13:19 4744

[翻译]如何开始逆向/恶意软件分析

2022-7-25 13:19
4744

【译文】How to start RE/malware analysis?

很多人都会或多或少的问我一个同样的问题:如何开始逆向,如何成为一个恶意软件分析师,我又是怎么开始的,有没有什么推荐的学习资料等等。因此,在这篇文章里面我会给新手提供一些建议以及一些有用的参考链接。

 

注意:这篇文章的内容会定期更新。

 

逆向工程是一个非常宽泛的话题。你可以逆向所有平台上的所有软件。你也可以逆向硬件。但是在这篇文章里面我们关注的是Windows平台上的恶意软件分析。

0x00 工具和环境

为了不被恶意软件影响,你首先应该准备一个安装好所有会用到的工具的独立虚拟环境,以便于你可以在虚拟环境中运行、分析恶意软件。关于这部分的更多内容参考:

常用工具的学习

日常使用的工具包括调试器和反汇编,如IDAGhidraBinaryNinja、OllyDbg(或其一些衍生物,如ImmunityDbg)、x64dbg。另外一个非常有用且功能强大的工具是WinDbg,但是我并不建议新手使用。下面是一些帮助你熟悉这些工具的课程:

0x01 如何获取恶意软件样本以及威胁情报等等

如果你是初学者并且还不是任何社区的成员,你可以在这里免费找到最新的、精心分类的样本:

你也可以从这些在线沙箱或者开源仓库下载它们:

对于获取攻击活动的威胁情报、相关信息、最新样本的哈希值等,我建议你加入 twitter 并关注你知道的一些研究人员。

 

还可以通过一些恶意软件追踪平台找到最新恶意软件的实时链接,以及有关攻击活动的更多信息:

0x02 常见的恶意软件家族

你可以在这里找到有关特定恶意软件家族的各种文章:

实际上有几个流行的恶意软件家族的源代码已经泄露(即 ZeuSTinbaGoziPonyAlinaCarberp)。

 

VXUnderground的GitHub仓库MalwareSourceCode也有很多恶意软件的源代码。现有的恶意软件可能是基于它们实现的,或者是使用了其中一部分源代码。花几个小时阅读泄露的代码可能会为你在分析恶意软件时节省几天的时间!即使你正在分析的恶意软件是从头开始编写的,通过阅读泄露的代码获得的经验也可以帮助你识别通用的方法。同样,恶意软件的作者会毫不犹豫地将为了合法目的而编写的工具包进行修改。对于红队人员来说,Cobalt Strike 就是这种被泄露并经常被用在恶意软件中的一个例子(Avast on Cobalt Strike,Mandiant on Cobalt Strike)。

0x03 实践

逆向是一门只有做才能学会的艺术,所以我建议你直接开始练习。首先尝试通过下面这些练习循序渐进的提升。

还有writeups from an annual FlareOn Challenge(以及我的解题过程)。它包含各种逆向工程任务,且难度也在不断增加。

0x04 进入编译好的应用程序内部

逆向原生应用程序需要你了解一些底层的概念。如果你想专注于 Windows 恶意软件(就像我一样),那么你的大部分时间都是在处理 PE 文件。当你在调试器下查看应用程序时,你会看到它以反汇编的形式存在,也就是被转换为汇编语言(汇编器)。因此,你对汇编程序、PE 结构和操作系统了解得越多,你就越容易理解。

 

视频1视频2中你会找到一些关于 x86 汇编的简单介绍。为了更深入地理解和掌握其他平台的汇编,你可以通过这个免费课程进行学习。另外一个非常宝贵,也非常全面的关于汇编语言的资源是英特尔官方手册

 

对于学习PE这种格式,我建议你去读这篇文章,Matt Pietrek 写的An In-Depth Look into the Win32 Portable Executable File Format Part 1An In-Depth Look into the Win32 Portable Executable File Format Part 2Peering Inside the PE: A Tour of the Win32 Portable Executable File Format以及 Ange Albertini 发布的PE101PE102。你也可以从我写的这个PPT开始。还有就是通过PE-bear尝试查看各种可执行文件,将其结果与你正在阅读的有关格式的内容进行比较。

0x05 为逆向、恶意样本分析学习编程

并不是所有的恶意软件分析师都是熟练的程序员,但你需要具备一些基本技能,并且至少能够理解代码。你的编程能力越好,对你就越有利——你能够编写代码试验这些技术,编写一些协助你进行分析的工具。

 

我经常会用到的编程语言是C/C++,Python和汇编,并且我非常认同MalwareTech的这篇文章

 

有人问我是从哪里学习的这些编程语言,这里给大家推荐一些学习资源:

Windows System Programming是一本非常全面的书,涵盖了 Windows API 和相关主题。

0x06 恶意软件脱壳

恶意软件通常是加过壳的,为了分析壳内的核心内容,你必须把它脱壳。恶意软件分发者可能使用合法的、知名的打包程序和保护程序,以及定制的打包程序和保护程序,专门针对 AV 规避(Anti virus evasion)而准备。这篇文章解释了这个概念。

 

要熟悉手动脱壳,请查看系列教程:Unpacking With Anthracene[下载链接Unpacking With Anthracene.zip,解压密码:tuts4you],以及来自Tuts4You的其他系列教程。

 

我个人录制的关于手工脱壳的视频教程在这里

0x07 使用虚拟化技术的保护器

另一类应用于可执行程序的保护程序是使用虚拟化技术实现的,它同样被应用在了恶意软件上。与典型的保护程序相比,它们不仅将原始代码包装了一层,还修改了现有代码,通过重写了一些代码段的方式使其只能在内置的虚拟机上运行。这种类型的保护器特别难分析,它们不能用传统的方式脱壳。有时重建原始可执行文件是不可能的,或者是时间成本太高。我通常在追踪的帮助下与他们打交道。但是,对于不太复杂的变体,可以分析完整的 VM 逻辑并重构代码。

 

此类(合法)保护器的示例是 VMProtectThemida

 

你可以在下面找到一些有关分析此类保护方法的链接:

你可以在一些专门的破解程序上练习去虚拟化技术保护——脱壳一些简单的,自定义的虚拟化技术保护程序。例如:

0x08 恶意软件注入/仿冒方法

大多数恶意软件会将代码注入其他进程。注入的常见目的是:仿冒其他应用程序和进行Hook。注入的可以是一段shellcode,也可以是一个完成的PE文件。手段非常多样化。在 PE 模拟技术中,最流行的是 Process Hollowing(又名 RunPE)和反射型 DLL 注入

PE-sieve/HollowsHunter 的帮助下,可以检测到代码注入。它默认检测 PE 植入,也可以检测到shellcode植入)。

0x09钩子注入

Hooking是一种允许拦截 API 调用的技术。恶意软件使用这项技术是为了以下这些目的:规避监控程序,截获正在发送的数据等。反之,同样的技术也会被沙盒用来监控恶意软件

 

Hooking是如何实现的:

一个简单的用户级 rootkit 如何利用hooking:

PE-sieve/HollowsHunter的帮助下,hooking是可以被检测出来的。PE-sieve默认会检测inline hookingdetects inline hooking,针对IAT hooking)则是可选的。而HollowsHunter则两种都是可选的。

0x0a 内核模式的恶意软件

你遇到的大多数恶意软件都是运行在用户级的。但有时你会遇到一些内核级的恶意软件模块。逆向它们更加困难,并且需要不同的环境设置。

 

当分析在内核级的恶意软件时,需要按照我在 Windows 内核利用实践中描述的相同步骤进行环境的搭建,如下所示:

内核模式模块的结构与你日常遇到的在用户空间中的模块完全不同。这就是为什么在分析它们之前,我强烈建议你了解有关驱动程序的一般知识。在我看来,关于驱动程序的介绍最好的是这本Pavel Yosifovich写的“Windows Kernel Programming”,配套的实例可以在这里免费下载。在此处可以找到对驱动程序分析方法的简要介绍(由 Matt Hand 撰写)。有关该主题的其他说明(由 VoidSec 提供)可在此处获得(尽管作者主要关注驱动程序逆向,但大多数方法也适用于恶意软件研究人员)。

 

通过下面这个链接你可以得到一个关于逆向内核模式rootkit的非常好的教程:

通过下面这些链接你可以得到更多有关内核模式 rootkit 会用到的技术:

请记住,经典内核模式 rootkit 的一些技术不再适用于现代 Windows。

0x0b 深入更底层

可以在比操作系统内核空间更底层的级别安装恶意软件植入程序。比如,可以感染 MBR 的恶意软件,例如 Petya 和其他引导程序。一个单独的类别是 bootkits,它可以从最早阶段开始劫持系统的整个引导序列。当然,准备这种植入物比编写传统的恶意软件要困难得多,所以很少这样做。这里有一项非常有趣关于感染 UEFI 固件的恶意软件的:“Moon Bounce”

0x0c 课程

0x0d YouTube视频

0x0e 书籍

0x0f 提示和建议

0x10 如何获得一个恶意软件分析师的工作

根据我的经验,最好的方法是为社区做出贡献。保持活跃,开始自己研究,展示你的热情,分享你学到的东西。 twitter 上有一个庞大且非常友好的研究人员社区,它帮助我在这个领域找到了很多工作。所以,如果你还没有加入,我强烈建议你加入。

原文

https://hshrzd.wordpress.com/how-to-start/


[2022夏季班]《安卓高级研修班(网课)》月薪三万班招生中~

收藏
点赞9
打赏
分享
最新回复 (3)
雪    币: 552
活跃值: 活跃值 (1489)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kakasasa 活跃值 2022-7-25 14:18
2
0
感谢分享
雪    币: 26
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
heards 活跃值 2022-8-6 15:37
3
0
感谢分享
雪    币: 48
活跃值: 活跃值 (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
June0165 活跃值 2022-8-7 09:57
4
0
感谢分享
游客
登录 | 注册 方可回帖
返回