本帖最后由 梦幻的彼岸 于 2021-8-19 16:37 编辑
今天学习的内容是让大家简单的了解下病毒动态分析技术,若有不当之处希望伙伴们可以指出,让我们共同完善,共同进步
注意:文章内容只是分享自身的知识储备,只是自身的理解,不一定准确,希望观看的时候只是参考,思维不要被其所局限。
开始进入正文:
知识储备优点有的病毒在静态分析时鉴定为正常,但实际会在运行时进行恶意行为,故常用动态分析技术进行收尾(病毒制作者常在病毒制作途中,对病毒进行静态免杀处理,来规避病毒分析软件) 虚拟环境安全考虑,多数的动态分析是在虚拟机中进行的 起因因未知的计算机病毒充满了不确定性,在进行动态分析的时候,又需要运行计算机病毒,监控病毒的行为,安全考虑,需要一个安全、可控的运行环境,来降低病毒所带来的危害
常见危害例举: [AppleScript] 纯文本查看 复制代码 传播危害:计算机病毒会感染网络中的其它计算机(例如连接一个WiFi的电脑、在内网中可访问的其它电脑,这只是一个例举实际情况中存在多种可能,望思维不要被局限,例如PC运行后只攻击使用一个WiFi的手机或其它终端,而对宿主机不产生严重干扰或破坏性危害)
难以清除:
有些病毒难以从系统中清除,若需再次使用需要在分析结束,会通过清除磁盘数据、重打硬件驱动、重装驱动,刷新bios等方法来移除病毒对计算机的修改。
硬件破坏:
有些病毒会通过某些方式来破坏计算机的硬件(起因例举:攻击后增加溯源难度通过破坏硬件来掩盖攻击记录) 常见虚拟机软件- Vmware
- VirtulBox
- Hyper-V
- Parallels
- Xen
- QEMU
- Android模拟器(此类产品过多就不单独举例了)
弊端因虚拟出来的毕竟不是真实环境,故存在一些限制或弊端
常见限制或弊端例举: [AppleScript] 纯文本查看 复制代码 环境检测:病毒往往会检测自身的运行环境,若检测处于虚拟环境就不进行恶意行为
穿透攻击:病毒检测到运行环境未虚拟机,有的病毒会穿透虚拟机攻击真实环境,而在虚拟机环境中不进行恶意行为
性能限制:因环境是虚拟出来的,有时会出现运行环境不稳定、增加分析时间等问题。 行为监控病毒产生危害时,往往会进行一些恶意或危险行为,可通过一些监控软件,监控被分析应用运行后都做了什么,进而判断是否为恶意文件,监控的运行行为也可为后期专杀/清理工具提供参考。
常见可用于分析的行为例举: - 网络行为
发送网络连接请求,进行远程控制,下载恶意代码,本地数据监听,传输敏感数据等等 - 系统修改
开机自启,创建计划任务,创建隐藏账号,开启端口,感染、替换系统文件,创建、停止服务,破坏系统运行结构,对注册表进行修改、删除、添加等等 - 其它行为
修改文件属性,删除、读取、新增、加密、释放文件,劫持进程,关闭、探测某些程序或进行,运行环境监测,执行攻击指令等等
常用工具工具来源已公开产品、自身定制开发 软件调试类在动态分析时,常通过调试器运行所分析程序或用调试器附加所分析的进程,来分析所分析程序是否存在恶意行为
常见调试器例举: - x64dbg
Windows 下的 32/64 位调试器 - olldbg
汇编分析调试器 - immunity debugger
Immunity Debugger是编写漏洞、分析恶意软件和逆向工程二进制文件的一种强大的新方法。它建立在一个坚实的用户界面上,带有函数图解,是业界第一个专门为堆创建而建立的堆分析工具,以及一个庞大的、支持良好的Python API,便于扩展。 - windbg
Windows 调试程序 (WinDbg) 可用于调试内核模式和用户模式代码、分析故障转储以及在代码执行时检查 CPU 寄存器。 - dnspy
dnSpy是一个调试器和.NET程序集编辑器。你可以用它来编辑和调试程序集,即使你没有任何源代码可用 - GDB
GDB,GNU项目调试器,允许你在另一个程序执行时看到它的 "内部 "情况--或者另一个程序在崩溃时正在做什么。 - drozer
领先的Android安全评估框架 - frida
为开发人员、逆向工程人员和安全研究人员提供的动态工具箱
监测类在动态分析时,常通过一些监测工具,监测程序运行后都干了什么,来分析所分析程序是否存在恶意行为
常见监测工具例举: - 防火墙
GlassWire、FortKnox Firewall、TinyWall、WFN、OpenSnitch、、、 - 网络数据监控
火绒剑、Windows Sysinternals工具集、Directory Monitor、Process Hacker、Process Lasso、FSMonitor等等 - 自动化恶意软件分析环境
在线病毒分析沙箱、在线查杀引擎、Cuckoo等等
注入技术进程注入病毒开发人员常通过进程注入技术绕过病毒防护软件,并在合法进程中添加恶意功能,或读取内存中的敏感数据、干扰分析等等。 [AppleScript] 纯文本查看 复制代码 在Windows操作系统中,允许进程在另一个进程的虚拟内存中分配、读取和写入,以及创建新线程、暂停线程和改变这些线程的寄存器,包括指令指(EIP/RIP),根据这一特点可以将代码注入进程(恶意利用这一技术,将恶意代码注入到正常的进程中并执行以规避防护软件。 dll注入Windows已经为DLLs创建了注册表项,以便它们可以在符合特定条件的进程中被加载。其中许多项允许恶意软件的DLL 被注入到进程中,如浏览器和其他正常的 进程。例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 这个注册表项是被恶意软件滥用的最多的注册表项之一,它被用来将DLL代码注入其他进程并保持持久性。
但添加需管理员权限,并且微软默认设置LoadAppInit_DLLs值为0以阻止加载未知的dll,可通过需改值为1关闭此项防护 原理: [AppleScript] 纯文本查看 复制代码 将AppInit_DLLs键值修改为待加载dll的路径,即可让所有windows进程都加载该dll。
这是因为在“ AppInit_DLLs”注册表项中指定的DLL是由user32.dll加载的,几乎所有应用程序都使用该user32.dll。 分析示例运行一些样本或程序,分析是否存在恶意行为,以此方法展示动态分析技术 注册表监控在程序运行前,对注册表进行备份,开启火绒剑监控,运行一段时间后,查看是否有注册表敏感操作,例如 - 修改键值已关闭默认防护(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1)
加载恶意dll
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 值为未知dll,正常为空)
攻击位置被监控: 攻击参数: 拦截记录: 网络相关apix64dbg载入程序,在常用网络函数下断点,看是否可断下(样本程序才测试前以运行过得知有网络行为) - 运行前开启网络分析工具
- 网络函数下断单步分析:
如上图所示:成功断下,并单步看到下载文件的网络地址
补充:
UrlCanonicalizeW 函数解析
将URL字符串转换为规范形式[AppleScript] 纯文本查看 复制代码 语法:
LWSTDAPI UrlCanonicalizeW(
PCWSTR pszUrl,
PWSTR pszCanonicalized,
DWORD *pcchCanonicalized,
DWORD dwFlags
);
[AppleScript] 纯文本查看 复制代码 执行情况示例:比如用转义序列替换不安全的字符
如果URL字符串包含“/../”或“/./”,URLCononicalize将这些字符视为指示URL层次结构中的导航。该函数在合并URL之前简化了URL。例如“/hello/craul/./world”被简化为“/hello/world”。
其它API函数:
在Windows系统中,程序使用网络功能常使用ws2_32.dll动态链接库中的函数
释放文件 - 火绒剑监控到样本执行会释放文件,深入分析其释放行为:
- 监控到写入文件
这里看是写入了文件但还不知道具体是如何进行的 - 因样本是.net编写的并未加密可直接通过dnspy进行源代码级调试
根据之前监控到写入文件搜索定位执行代码:
- private void btn_crack_Click(object sender, EventArgs e)
- {
- try
- {
- this.Dosya_Sil(new string[]
- {
- "C:\\metasploit\\apps\\pro\\ui\\app\\views\\layouts\\application.html.erb",
- "C:\\metasploit\\apps\\pro\\ui\\app\\controllers\\application_controller.rb",
- "C:\\metasploit\\apps\\pro\\ui\\app\\models\\license.rb",
- "C:\\metasploit\\apps\\pro\\engine\\app\\concerns\\metasploit\\pro\\engine\\rpc\\tasks.rb"
- });
- this.Dosya_Cikar("application", "C:\\metasploit\\apps\\pro\\ui\\app\\views\\layouts\\application.html.erb");
- this.Dosya_Cikar("application_controller", "C:\\metasploit\\apps\\pro\\ui\\app\\controllers\\application_controller.rb");
- this.Dosya_Cikar("license", "C:\\metasploit\\apps\\pro\\ui\\app\\models\\license.rb");
- this.Dosya_Cikar("tasks", "C:\\metasploit\\apps\\pro\\engine\\app\\concerns\\metasploit\\pro\\engine\\rpc\\tasks.rb");
- MessageBox.Show("Metasploit Crack Done!", "OK DONE", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
- }
- catch (Exception ex)
- {
- MessageBox.Show(ex.Message, "FAILED", MessageBoxButtons.OK, MessageBoxIcon.Hand);
- }
- }
- 解析:
- 查找文件,如存在替换,若不存在保错提示未查找到的文件
复制代码
下断单步运行看监控:
证明是此处代码释放的文件,判断无错误
进程监控收集软件运行后的信息 火绒剑
筛选:
路径、进程、动作
动作分类:
执行监控、文件监控、注册表监控、进程监控、网络监控、行为监控
任务组:
信息汇总
procexp(process explorerr)
显示关于进程已打开或加载的句柄和DLL的信息
属性-字符串信息:
dll信息:
发现可疑资源信息
句柄信息:
根据访问掩码,查询获取的权限(正常情况下查看Decoded Access Mask比较直观方便阅读)
使用技巧:
为保证显示数据为最新状态,最好手动刷新下,快捷键F5
可根据进程背景颜色判断进程状态、类型,具体颜色代表信息如下所示
在[Options]菜单下[Configure Colors]选项
GlassWire
监控样本运行的网络行为
已上线:
192.168.86.131为攻击方IP TcpView
监控Tcp与Udp的信息
样本运行后:
远程桌面查看中:
通知信息泄露了监控状态(程序启用了远程桌面服务) Autoruns
运行前后自动启动项对比,查询新增自动启动项是否为恶意程序
Process Monitor(Procmon)
可实时监控系统信息,如:注册表、文件、进程、网络等等
远控样本探测系统信息:
远控样本远程桌面信息:
远控样本文件管理信息:
科来网络分析系统
监控网络数据,并查看详情:
进程IP信息:
看到了一些外联IP信息(模拟攻击IP在其中),实际场景中,会根据多方资料来确认实际的攻击IP
端口分析定位
有些样本会开发一些端口进行恶意利用
- 通过抓包软件查询目前正常使用某端口的进程
- 使用netstat命令查询占用端口进程的PID
之后结合任务管理器或其它进程监控程序查询占用进程
防火墙辅助分析定位
大部分恶意软件都会利用网络进一步进行攻击,如远程控制、远程执行命令、远程下载、远程窃取文件等等,这个时候往往防火墙可监控或捕获到本地与攻击端的网络链接,根据此链接定位恶意程序或拦截使其无法进一步攻击
- ProgCop
监控远程连接:
监控到了本地与一个远程地址建立了链接(Client-built为本次实验的远控样本)
监控此进程:
看到了此进程执行了一些危险行为(删除/写入文件、创建账号,读取注册表键值等等)
参考资料- 《windows 通过AppInit加载任意dll》
- 《Mastering Malware Analysis》
- 《ws2_32.dll百科》
到此告一段落,期待下次相见,再续前缘 |