注:文章内容只是分享自己的知识库,仅代表自己的理解,不一定准确,希望大家在观看时只是参考,思维不要受其限制。
优点
有些病毒在静态分析中被识别为正常病毒,但在运行时实际上会出现恶意行为,因此通常使用动态分析技术来实现闭环(病毒制作者通常在制作病毒的过程中对病毒进行静态反病毒处理,从而规避病毒分析软件)。
虚拟环境
出于安全考虑,大多数动态分析都是在虚拟机中进行的。
原因
由于未知的计算机病毒充满了不确定性,因此在进行动态分析时,有必要运行计算机病毒并监测其行为,同时出于安全考虑,需要一个安全可控的运行环境,以减少病毒造成的危害。
常见危害举例:
传播危险:计算机病毒可感染网络上的其他计算机(例如,连接到 WiFi 的计算机、可通过内网访问的其他计算机,这只是在实践中存在的多种可能性中的一个例子,因此不要局限于自己的想法,例如,一台正在运行的 PC 只攻击使用 WiFi 的手机或其他终端,而不会对主机造成严重破坏或损坏)。
难以清除:有些病毒很难从系统中清除,如果需要再次使用,则需要在分析结束后,通过清除磁盘数据、重新输入硬件驱动程序、重新安装驱动程序、刷新 BIOS 等方式来清除病毒对计算机所做的修改。
硬件损坏:某些病毒会以某些方式破坏计算机硬件(原因举例:通过破坏硬件来隐藏攻击记录,从而增加事后追查的难度)。
常用虚拟机软件:
- Vmware
- VirtulBox
- Hyper-V
- Parallels
- Xen
- QEMU
- Android emulators (too many of these to single out)
缺点
由于虚拟环境并不真实,因此存在一些限制或缺点。
常见限制或缺点举例:
环境检测:病毒倾向于检测自身的运行环境,如果检测到病毒处于虚拟环境中,则不会实施恶意行为。
穿透攻击:病毒检测到运行时环境不是虚拟的,有些病毒会穿透虚拟机攻击真实的环境,而不会在虚拟机环境中执行恶意操作。
性能限制:由于环境是虚拟的,有时运行环境不稳定,会增加分析时间等。
行为监测
当病毒有害时,它往往会执行一些恶意或危险的操作。
可用于分析的常见行为举例:
- 网络行为
发送网络连接请求、远程控制、下载恶意代码、监听本地数据、传输敏感数据等。 - 系统修改
启动、创建计划任务、创建隐藏账户、打开端口、感染和替换系统文件、创建和停止服务、破坏系统运行时结构、修改、删除和添加注册表等。 - 其他行为
修改文件属性、删除、读取、添加、加密、释放文件、劫持进程、关闭、检测某些程序或进程、监控运行环境、执行攻击命令等。
常用工具
从公开产品中获取工具,自行定制开发。
软件调试
在动态分析中,通常通过调试器运行被分析程序,或将被分析进程附加到调试器上,以分析被分析程序的恶意行为。
常见调试器举例:
- x64dbg
适用于 Windows 的 32/64 位调试器 - olldbg
汇编分析调试器 - immunity debugger
Immunity Debugger 是编写漏洞利用程序、分析恶意软件和逆向工程二进制文件的强大新方法。它建立在一个带有功能图的可靠用户界面、业界首个专为堆创建而设计的堆分析工具,以及一个便于扩展的大型、支持良好的 Python API 基础之上。 - windbg
Windows 调试器(WinDbg)可用于调试内核和用户模式代码、分析故障转储并在代码执行过程中检查 CPU 寄存器。 - dnspy
dnSpy 是.NET 程序集的调试器和编辑器。即使没有任何源代码,您也可以用它来编辑和调试程序集! - GDB
GDB 是 GNU 项目调试器,它允许你查看另一个程序执行时的 “内部 “情况,或另一个程序崩溃时的情况。 - drozer
领先的安卓安全评估框架。 - frida
面向开发人员、逆向工程师和安全研究人员的动态工具箱。 - edb-debugger
edb 是一个跨平台 AArch32/x86/x86-64 调试器。
监测类别
在动态分析中,监控工具通常用于监控程序运行后的运行情况,以分析被分析程序是否存在恶意行为。
常见监测工具示例:
- 防火墙
GlassWire、FortKnox Firewall、TinyWall、WFN、OpenSnitch、、、 - 网络数据监测
火绒系统诊断工具包、Windows Sysinternals、Directory Monitor、Process Hacker、Process Lasso、FSMonitor等。 - 自动恶意软件分析环境
在线病毒分析沙箱、在线杀毒引擎、Cuckoo 等。
注入技术
进程注入
病毒开发者通常利用进程注入技术绕过病毒防护软件,在合法进程中添加恶意功能,或从内存中读取敏感数据,干扰分析等。
在 Windows 操作系统中,允许进程分配、读取和写入另一个进程的虚拟内存,以及创建新线程、暂停线程和更改这些线程的寄存器,包括指令指针(EIP/RIP),在此基础上可以向进程注入代码(恶意利用这种技术向正常进程注入恶意代码并执行,以规避保护软件)。
DLL注入
Windows 为 DLL 创建了注册表项,以便在符合特定条件的进程中加载 DLL。其中许多条目允许将恶意软件 DLL 注入到浏览器和其他正常进程等进程中。例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
该注册表项是恶意软件滥用最严重的注册表项之一,用于向其他进程注入 DLL 代码并保持持久性。不过,它需要管理员权限才能添加,而且微软已将 LoadAppInit_DLLs 值默认设置为 0,以防止加载未知的 DLL,可以通过将该值更改为 1 来关闭它。
原则:
通过将 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 value is unknown dll, normal is empty)
监控攻击位置:
攻击参数:
拦截日志:
网络相关 api
x64dbg 加载程序,并在常用网络函数上设置断点,以查看它们是否会被破解(示例程序仅在运行前进行了测试,以了解网络行为)。
- 运行前打开网络分析工具
- 断点单步分析下的网络功能
如上图所示:成功破解并单步查看下载文件的网络地址
UrlCanicalizeW 函数说明:
将 URL 字符串转换为规范格式LWSTDAPI UrlCanonicalizeW( PCWSTR pszUrl、 PWSTR pszCanonicalized、 DWORD *pcchCanonicalized、DWORD dwFlags。 DWORD dwFlags ); 实施示例:例如,用转义序列替换不安全字符 如果 URL 字符串包含"/... /"或"/. /",URLConicalize 会将这些字符视为 URL 层次结构中的导航字符。该函数会在合并 URL 之前将其简化,例如,"/hello/craul/. /world "简化为"/hello/world"。
- 其他API函数
在 Windows 中,使用网络功能的程序通常会使用 ws2_32.dll 动态链接库中的功能。accept bind closesocket connect freeaddrinfo getaddrinfo gethostbyaddr gethostbyname gethostname getnameinfo getpeername getprotobyname getprotobynumber getservbyname getservbyport getsockname getsockopt htonl htons inet_addr inet_ntoa ioctlsocket listen ntohl ntohs recv recvfrom select send sendto setsockopt shutdown socket FreeAddrInfoW GetAddrInfoW GetNameInfoW WEP WPUCompleteOverlappedRequest WSAAccept WSAAddressToStringA WSAAddressToStringW WSAAsyncGetHostByAddr WSAAsyncGetHostByName WSAAsyncGetProtoByName WSAAsyncGetProtoByNumber WSAAsyncGetServByName WSAAsyncGetServByPort WSAAsyncSelect WSACancelAsyncRequest WSACancelBlockingCall WSACleanup WSACloseEvent WSAConnect WSACreateEvent WSADuplicateSocketA WSADuplicateSocketW WSAEnumNameSpaceProvidersA WSAEnumNameSpaceProvidersW WSAEnumNetworkEvents WSAEnumProtocolsA WSAEnumProtocolsW WSAEventSelect WSAGetLastError WSAGetOverlappedResult WSAGetQOSByName WSAGetServiceClassInfoA WSAGetServiceClassInfoW WSAGetServiceClassNameByClassIdA WSAGetServiceClassNameByClassIdW WSAHtonl WSAHtons WSAInstallServiceClassA WSAInstallServiceClassW WSAIoctl WSAIsBlocking WSAJoinLeaf WSALookupServiceBeginA WSALookupServiceBeginW WSALookupServiceEnd WSALookupServiceNextA WSALookupServiceNextW WSANSPIoctl WSANtohl WSANtohs WSAProviderConfigChange WSARecv WSARecvDisconnect WSARecvFrom WSARemoveServiceClass WSAResetEvent WSASend WSASendDisconnect WSASendTo WSASetBlockingHook WSASetEvent WSASetLastError WSASetServiceA WSASetServiceW WSASocketA WSASocketW WSAStartup WSAStringToAddressA WSAStringToAddressW WSAUnhookBlockingHook WSAWaitForMultipleEvents WSApSetPostRoutine WSCDeinstallProvider WSCEnableNSProvider WSCEnumProtocols WSCGetProviderPath WSCInstallNameSpace WSCInstallProvider WSCUnInstallNameSpace WSCUpdateProvider WSCWriteNameSpaceOrder WSCWriteProviderOrder
- 释放文件
火绒系统诊断工具包监控示例执行将释放文件,并深入分析其释放行为。 - 监测写入文件
这里似乎写入了一个文件,但我们还不知道是如何完成的。
- 由于示例是用 .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(进程浏览器)
显示进程已打开或加载的句柄和 DLL 的相关信息
属性-字符串信息。dll 信息:
- 发现可疑资源信息句柄信息:
- 根据访问掩码,查询所获得的权限(通常查看解码访问掩码更直观、更易读) 使用提示
为确保显示数据是最新的,最好手动刷新,快捷键 F5
您可以根据流程的背景颜色确定流程状态和类型,具体颜色代表的信息如下所示
[选项]菜单下的[配置颜色]选项 - GlassWire
监测样本运行的网络行为已经上线:
192.168.86.131是攻击者的IP
-
TcpView
监控TCP和UDP信息
样本运行后: - 正在进行远程桌面查看:
通知信息显示监控状态(程序已启用远程桌面服务)
- Autoruns
比较运行前后的自动启动项,检查新的自动启动项是否为恶意程序。 - Process Monitor (Procmon)
实时监控系统信息,如注册表、文件、进程、网络等。
系统信息远程采样检测:远程控制样本的远程桌面信息:
远程控制样本文件管理信息:
- 科来网络分析系统
监控网络数据并查看其详细信息:
处理 IP 信息看到一些外联 IP 信息(其中有模拟攻击 IP),在实际场景中,将根据多个来源确定实际攻击 IP。
端口分析定位
一些样本开发了可被恶意利用的端口
- 使用数据包捕获软件找出当前正常使用端口的进程
- 使用 netstat 命令查询占用端口的进程的 PID
netstat -ano|findstr "端口号"
然后结合任务管理器或其他进程监控程序查询占用的进程。
防火墙辅助分析定位
大多数恶意软件会利用网络进行进一步攻击,如远程控制、远程命令执行、远程下载、远程文件窃取等。在这种情况下,防火墙往往可以监控或捕获本地端与攻击端之间的网络链接,并根据这一链接定位恶意程序或拦截恶意程序,使其无法进一步攻击。
- ProgCop
监控远程连接
监控连接到远程地址的本地链接(本实验的远程样本为客户机) 监控此过程:看到该进程执行的一些危险操作(删除/写入文件、创建账户、读取注册表键值等)
暂无评论内容