| 本帖最后由 梦幻的彼岸 于 2021-8-19 16:37 编辑 
 
   今天学习的内容是让大家简单的了解下病毒动态分析技术,若有不当之处希望伙伴们可以指出,让我们共同完善,共同进步
 注意:文章内容只是分享自身的知识储备,只是自身的理解,不一定准确,希望观看的时候只是参考,思维不要被其所局限。
 开始进入正文:
 
  知识储备优点
 有的病毒在静态分析时鉴定为正常,但实际会在运行时进行恶意行为,故常用动态分析技术进行收尾(病毒制作者常在病毒制作途中,对病毒进行静态免杀处理,来规避病毒分析软件)虚拟环境 安全考虑,多数的动态分析是在虚拟机中进行的起因 因未知的计算机病毒充满了不确定性,在进行动态分析的时候,又需要运行计算机病毒,监控病毒的行为,安全考虑,需要一个安全、可控的运行环境,来降低病毒所带来的危害常见危害例举:
 常见虚拟机软件[AppleScript] 纯文本查看 复制代码 传播危害:计算机病毒会感染网络中的其它计算机(例如连接一个WiFi的电脑、在内网中可访问的其它电脑,这只是一个例举实际情况中存在多种可能,望思维不要被局限,例如PC运行后只攻击使用一个WiFi的手机或其它终端,而对宿主机不产生严重干扰或破坏性危害)
 
难以清除:
有些病毒难以从系统中清除,若需再次使用需要在分析结束,会通过清除磁盘数据、重打硬件驱动、重装驱动,刷新bios等方法来移除病毒对计算机的修改。
 
硬件破坏:
有些病毒会通过某些方式来破坏计算机的硬件(起因例举:攻击后增加溯源难度通过破坏硬件来掩盖攻击记录)弊端VmwareVirtulBoxHyper-VParallelsXenQEMUAndroid模拟器(此类产品过多就不单独举例了)
 因虚拟出来的毕竟不是真实环境,故存在一些限制或弊端常见限制或弊端例举:
 行为监控[AppleScript] 纯文本查看 复制代码 环境检测:病毒往往会检测自身的运行环境,若检测处于虚拟环境就不进行恶意行为
穿透攻击:病毒检测到运行环境未虚拟机,有的病毒会穿透虚拟机攻击真实环境,而在虚拟机环境中不进行恶意行为
性能限制:因环境是虚拟出来的,有时会出现运行环境不稳定、增加分析时间等问题。病毒产生危害时,往往会进行一些恶意或危险行为,可通过一些监控软件,监控被分析应用运行后都做了什么,进而判断是否为恶意文件,监控的运行行为也可为后期专杀/清理工具提供参考。常见可用于分析的行为例举:
 常用工具网络行为发送网络连接请求,进行远程控制,下载恶意代码,本地数据监听,传输敏感数据等等
系统修改开机自启,创建计划任务,创建隐藏账号,开启端口,感染、替换系统文件,创建、停止服务,破坏系统运行结构,对注册表进行修改、删除、添加等等
其它行为修改文件属性,删除、读取、新增、加密、释放文件,劫持进程,关闭、探测某些程序或进行,运行环境监测,执行攻击指令等等
 
 工具来源已公开产品、自身定制开发软件调试类 在动态分析时,常通过调试器运行所分析程序或用调试器附加所分析的进程,来分析所分析程序是否存在恶意行为常见调试器例举:
 监测类x64dbgWindows 下的 32/64 位调试器
olldbg汇编分析调试器
immunity debuggerImmunity Debugger是编写漏洞、分析恶意软件和逆向工程二进制文件的一种强大的新方法。它建立在一个坚实的用户界面上,带有函数图解,是业界第一个专门为堆创建而建立的堆分析工具,以及一个庞大的、支持良好的Python API,便于扩展。
windbgWindows 调试程序 (WinDbg) 可用于调试内核模式和用户模式代码、分析故障转储以及在代码执行时检查 CPU 寄存器。
dnspydnSpy是一个调试器和.NET程序集编辑器。你可以用它来编辑和调试程序集,即使你没有任何源代码可用
GDBGDB,GNU项目调试器,允许你在另一个程序执行时看到它的 "内部 "情况--或者另一个程序在崩溃时正在做什么。
drozer领先的Android安全评估框架
frida为开发人员、逆向工程人员和安全研究人员提供的动态工具箱
 
 在动态分析时,常通过一些监测工具,监测程序运行后都干了什么,来分析所分析程序是否存在恶意行为常见监测工具例举:
 注入技术进程注入防火墙GlassWire、FortKnox Firewall、TinyWall、WFN、OpenSnitch、、、
网络数据监控火绒剑、Windows Sysinternals工具集、Directory Monitor、Process Hacker、Process Lasso、FSMonitor等等
自动化恶意软件分析环境在线病毒分析沙箱、在线查杀引擎、Cuckoo等等
 
 病毒开发人员常通过进程注入技术绕过病毒防护软件,并在合法进程中添加恶意功能,或读取内存中的敏感数据、干扰分析等等。 dll注入[AppleScript] 纯文本查看 复制代码 在Windows操作系统中,允许进程在另一个进程的虚拟内存中分配、读取和写入,以及创建新线程、暂停线程和改变这些线程的寄存器,包括指令指(EIP/RIP),根据这一特点可以将代码注入进程(恶意利用这一技术,将恶意代码注入到正常的进程中并执行以规避防护软件。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,正常为空)
 攻击位置被监控:
 攻击参数: 拦截记录:网络相关api x64dbg载入程序,在常用网络函数下断点,看是否可断下(样本程序才测试前以运行过得知有网络行为) 进程监控运行前开启网络分析工具
  网络函数下断单步分析:
   如上图所示:成功断下,并单步看到下载文件的网络地址
 补充:
 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为攻击方IPTcpView 
监控Tcp与Udp的信息 
样本运行后:
   
远程桌面查看中:
   
通知信息泄露了监控状态(程序启用了远程桌面服务)Autoruns 
运行前后自动启动项对比,查询新增自动启动项是否为恶意程序
  Process Monitor(Procmon) 
可实时监控系统信息,如:注册表、文件、进程、网络等等 
远控样本探测系统信息:
   
远控样本远程桌面信息:
   
远控样本文件管理信息:
  科来网络分析系统 
监控网络数据,并查看详情: 
进程IP信息:
   
看到了一些外联IP信息(模拟攻击IP在其中),实际场景中,会根据多方资料来确认实际的攻击IP
 端口分析定位
 有些样本会开发一些端口进行恶意利用
 
 通过抓包软件查询目前正常使用某端口的进程
  使用netstat命令查询占用端口进程的PID之后结合任务管理器或其它进程监控程序查询占用进程
 
     
 防火墙辅助分析定位
 大部分恶意软件都会利用网络进一步进行攻击,如远程控制、远程执行命令、远程下载、远程窃取文件等等,这个时候往往防火墙可监控或捕获到本地与攻击端的网络链接,根据此链接定位恶意程序或拦截使其无法进一步攻击
 
 ProgCop监控远程连接:
 
   监控到了本地与一个远程地址建立了链接(Client-built为本次实验的远控样本)
 监控此进程:
 
   看到了此进程执行了一些危险行为(删除/写入文件、创建账号,读取注册表键值等等)
 
 
 参考资料
 《windows 通过AppInit加载任意dll》《Mastering Malware Analysis》《ws2_32.dll百科》
 到此告一段落,期待下次相见,再续前缘 |