导语:在此之前,我曾发布了25万份沙盒样本报告。也许这些报告并不完美,但可以帮助您了解许多恶意软件样本的执行流程。那么在实际的运用过程中会是怎样的呢?
在此之前,我曾发布了25万份沙盒样本报告。也许这些报告并不完美,但可以帮助您了解许多恶意软件样本的执行流程。那么在实际的运用过程中会是怎样的呢?
我们想象一下…假设您想查看这25万份报告中包含的所有可能的驱动程序名称。当然也许你会问你为什么需要这个?——因为这可以告诉您恶意软件样本使用的反分析技巧,使用什么设备名称来指纹操作系统。也许这些设备中的一些甚至还没有记录!
grep -iE \\\\\.\\ Sandbox_250k_logs_Happy_New_Year_2018
然后你就会得到如下内容:
你可以尝试一下输出一些东西,比如写一个Perl / Python脚本来进行提取,这可能是一个更好的方式。
好的,那么使用GetProcAddress API能够得到什么样流行的功能呢?
它会给你答案:
grep -iE API :: GetProcAddress Sandbox_250k_logs_Happy_New_Year_2018 | cut -d:-f3 |cut-d,-f2 | cut -d = -f2 |cut-d)-f1
事实上,会给你一个所有API的列表:
我们可以通过将该命令的输出重定向到“gpa.txt”:
grep -iE API :: GetProcAddress Sandbox_250k_logs_Happy_New_Year_2018 | cut -d:-f3 | cut-d,-f2 | cut -d = -f2 | cut -d)-f1> gpa.txt
这可能需要一段时间。
您现在可以对其进行排序:
sort gpa.txt > gpa.txt.s
生成的文件gpa.txt.s可以进一步分析 – 按API发生次数排序,然后按降序排列结果,显示最流行的API:
cat gpa.txt.s | uniq -c | sort -r | more
所有上述命令可以组合成一个单一的“caterpillar”,但使用中间文件有时是方便的。它稍后有助于进一步的搜索,也可以加快速度。
回到我们最后的查询,我们可以查询所有包含'Reg'前缀/中缀/后缀的API – 这可以让我们大概了解一下最受欢迎的注册表API的解决方案:
cat gpa.txt.s | uniq -c | sort -r | grep -E "Reg" | more
你会如何解释这一结果呢?——那里有一些FP GetThemeBackgroundRegion,但这并不算什么。 ANSI API比Unicode更受欢迎。或者说是我们手边的数据集偏向于不考虑Unicode而编译的旧样本。
所以其实我们需要小心一点,当你进行解释的时候其实是非常有偏见的。但是你现在看到的是什么?这是一本开放的书!我再一次想要强调的是,所有的搜索可以通过多种方式完成。也有可能你会在我的查询中发现一些缺陷。没关系。这是一个尝试性的数据!
现在,想象一下你想看看我们拦截的所有的DELPHI API:
grep -iE Delphi:: Sandbox_250k_logs_Happy_New_Year_2018 | more
或者,Visual C ++中的所有内联函数:
grep -iE VC :: Sandbox_250k_logs_Happy_New_Year_2018 |more
或者所有包含“http://”的行(突出显示可能的URL):
grep -iE http:// sandbox_250k_logs_Happy_New_Year_2018 |more
您还可以看到调试字符串采样发送的内容:
grep -iE API :: OutputDebugString Sandbox_250k_logs_Happy_New_Year_2018 |more
您可以检查sleep功能使用的值:
grep -iE API::Sleep Sandbox_250k_logs_Happy_New_Year_2018 | more
以及在Windows下通过Anti-AV / Anti-analysis工具进行搜索:
grep -iE API :: FindWindow Sandbox_250k_logs_Happy_New_Year_2018 |more
您可以查看每个样本的开始,并确定许多不同编译器的WinMain过程的“动态”流程,发现不同样本使用的各种环境变量,从特定库中聚类API,观察过程挖空等技术,观察分配WriteProcessMemory以了解有多少个样本使用RunPE进行代码注入和执行,以及有多少个依赖于位置无关代码(PIC),您可以看到哪些启动点是最常用的(并不总是HKCU\ … \Run!),在外部/进程中使用什么机制来启动代码(例如RtlCreateUserThread,APC函数),有多少进程在代码注入之前暂停(CREATE_SUSPENDED)等等。
我最后再强调一点,这些数据我们可以将其保留为一个死的数据,但你也可以通过创造性和以任何可能的方式挖掘它,使它活起来。
http://www.hexacorn.com/blog/2018/01/20/what-can-you-do-with-250k-sandbox-reports/