飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3609|回复: 2

[病毒分析] 【梦幻开讲了】带伙伴们入手计算机病毒分析第三天

[复制链接]
  • TA的每日心情
    开心
    2019-3-15 11:00
  • 签到天数: 262 天

    [LV.8]以坛为家I

    发表于 2021-8-17 11:46:04 | 显示全部楼层 |阅读模式
    本帖最后由 梦幻的彼岸 于 2021-8-19 16:37 编辑

    767964_Q68ZXPGR4CMWM6T.png
    今天学习的内容是让大家简单的了解下病毒动态分析技术,若有不当之处希望伙伴们可以指出,让我们共同完善,共同进步
    注意:文章内容只是分享自身的知识储备,只是自身的理解,不一定准确,希望观看的时候只是参考,思维不要被其所局限。
    开始进入正文:

    知识储备优点
    有的病毒在静态分析时鉴定为正常,但实际会在运行时进行恶意行为,故常用动态分析技术进行收尾(病毒制作者常在病毒制作途中,对病毒进行静态免杀处理,来规避病毒分析软件)
    虚拟环境
    安全考虑,多数的动态分析是在虚拟机中进行的
    起因
    因未知的计算机病毒充满了不确定性,在进行动态分析的时候,又需要运行计算机病毒,监控病毒的行为,安全考虑,需要一个安全、可控的运行环境,来降低病毒所带来的危害
    常见危害例举:
    [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
    1.jpg
    这个注册表项是被恶意软件滥用的最多的注册表项之一,它被用来将DLL代码注入其他进程并保持持久性。
    但添加需管理员权限,并且微软默认设置LoadAppInit_DLLs值为0以阻止加载未知的dll,可通过需改值为1关闭此项防护
    2.jpg
    原理:
    [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,正常为空)
    攻击位置被监控:
    3.jpg
    攻击参数:
    4.jpg
    拦截记录:
    5.png
    网络相关api
    x64dbg载入程序,在常用网络函数下断点,看是否可断下(样本程序才测试前以运行过得知有网络行为)
    • 运行前开启网络分析工具
      6.png
    • 网络函数下断单步分析:
      7.png
      如上图所示:成功断下,并单步看到下载文件的网络地址
      补充:
      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动态链接库中的函数
      1. accept
      2. bind
      3. closesocket
      4. connect
      5. freeaddrinfo
      6. getaddrinfo
      7. gethostbyaddr
      8. gethostbyname
      9. gethostname
      10. getnameinfo
      11. getpeername
      12. getprotobyname
      13. getprotobynumber
      14. getservbyname
      15. getservbyport
      16. getsockname
      17. getsockopt
      18. htonl
      19. htons
      20. inet_addr
      21. inet_ntoa
      22. ioctlsocket
      23. listen
      24. ntohl
      25. ntohs
      26. recv
      27. recvfrom
      28. select
      29. send
      30. sendto
      31. setsockopt
      32. shutdown
      33. socket
      34. FreeAddrInfoW
      35. GetAddrInfoW
      36. GetNameInfoW
      37. WEP
      38. WPUCompleteOverlappedRequest
      39. WSAAccept
      40. WSAAddressToStringA
      41. WSAAddressToStringW
      42. WSAAsyncGetHostByAddr
      43. WSAAsyncGetHostByName
      44. WSAAsyncGetProtoByName
      45. WSAAsyncGetProtoByNumber
      46. WSAAsyncGetServByName
      47. WSAAsyncGetServByPort
      48. WSAAsyncSelect
      49. WSACancelAsyncRequest
      50. WSACancelBlockingCall
      51. WSACleanup
      52. WSACloseEvent
      53. WSAConnect
      54. WSACreateEvent
      55. WSADuplicateSocketA
      56. WSADuplicateSocketW
      57. WSAEnumNameSpaceProvidersA
      58. WSAEnumNameSpaceProvidersW
      59. WSAEnumNetworkEvents
      60. WSAEnumProtocolsA
      61. WSAEnumProtocolsW
      62. WSAEventSelect
      63. WSAGetLastError
      64. WSAGetOverlappedResult
      65. WSAGetQOSByName
      66. WSAGetServiceClassInfoA
      67. WSAGetServiceClassInfoW
      68. WSAGetServiceClassNameByClassIdA
      69. WSAGetServiceClassNameByClassIdW
      70. WSAHtonl
      71. WSAHtons
      72. WSAInstallServiceClassA
      73. WSAInstallServiceClassW
      74. WSAIoctl
      75. WSAIsBlocking
      76. WSAJoinLeaf
      77. WSALookupServiceBeginA
      78. WSALookupServiceBeginW
      79. WSALookupServiceEnd
      80. WSALookupServiceNextA
      81. WSALookupServiceNextW
      82. WSANSPIoctl
      83. WSANtohl
      84. WSANtohs
      85. WSAProviderConfigChange
      86. WSARecv
      87. WSARecvDisconnect
      88. WSARecvFrom
      89. WSARemoveServiceClass
      90. WSAResetEvent
      91. WSASend
      92. WSASendDisconnect
      93. WSASendTo
      94. WSASetBlockingHook
      95. WSASetEvent
      96. WSASetLastError
      97. WSASetServiceA
      98. WSASetServiceW
      99. WSASocketA
      100. WSASocketW
      101. WSAStartup
      102. WSAStringToAddressA
      103. WSAStringToAddressW
      104. WSAUnhookBlockingHook
      105. WSAWaitForMultipleEvents
      106. WSApSetPostRoutine
      107. WSCDeinstallProvider
      108. WSCEnableNSProvider
      109. WSCEnumProtocols
      110. WSCGetProviderPath
      111. WSCInstallNameSpace
      112. WSCInstallProvider
      113. WSCUnInstallNameSpace
      114. WSCUpdateProvider
      115. WSCWriteNameSpaceOrder
      116. WSCWriteProviderOrder
      复制代码

      释放文件
    • 火绒剑监控到样本执行会释放文件,深入分析其释放行为:
    • 监控到写入文件
      8.jpg
      这里看是写入了文件但还不知道具体是如何进行的
    • 因样本是.net编写的并未加密可直接通过dnspy进行源代码级调试
      9.jpg
      根据之前监控到写入文件搜索定位执行代码:
      10.png
      1. private void btn_crack_Click(object sender, EventArgs e)
      2.       {
      3.           try
      4.           {
      5.               this.Dosya_Sil(new string[]
      6.               {
      7.                   "C:\\metasploit\\apps\\pro\\ui\\app\\views\\layouts\\application.html.erb",
      8.                   "C:\\metasploit\\apps\\pro\\ui\\app\\controllers\\application_controller.rb",
      9.                   "C:\\metasploit\\apps\\pro\\ui\\app\\models\\license.rb",
      10.                   "C:\\metasploit\\apps\\pro\\engine\\app\\concerns\\metasploit\\pro\\engine\\rpc\\tasks.rb"
      11.               });
      12.               this.Dosya_Cikar("application", "C:\\metasploit\\apps\\pro\\ui\\app\\views\\layouts\\application.html.erb");
      13.               this.Dosya_Cikar("application_controller", "C:\\metasploit\\apps\\pro\\ui\\app\\controllers\\application_controller.rb");
      14.               this.Dosya_Cikar("license", "C:\\metasploit\\apps\\pro\\ui\\app\\models\\license.rb");
      15.               this.Dosya_Cikar("tasks", "C:\\metasploit\\apps\\pro\\engine\\app\\concerns\\metasploit\\pro\\engine\\rpc\\tasks.rb");
      16.               MessageBox.Show("Metasploit Crack Done!", "OK DONE", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
      17.           }
      18.           catch (Exception ex)
      19.           {
      20.               MessageBox.Show(ex.Message, "FAILED", MessageBoxButtons.OK, MessageBoxIcon.Hand);
      21.           }
      22.       }
      23. 解析:
      24. 查找文件,如存在替换,若不存在保错提示未查找到的文件
      复制代码


      下断单步运行看监控:
      11.jpg
      证明是此处代码释放的文件,判断无错误
    进程监控
    收集软件运行后的信息
    • 火绒剑
      12.jpg
      筛选:
      路径、进程、动作
      动作分类:
      执行监控、文件监控、注册表监控、进程监控、网络监控、行为监控
      任务组:
      信息汇总
      13.png
    • procexp(process explorerr)
      显示关于进程已打开或加载的句柄和DLL的信息
      属性-字符串信息:
      14.jpg
      dll信息:
      15.png
      发现可疑资源信息
      句柄信息:
      17.png
      根据访问掩码,查询获取的权限(正常情况下查看Decoded Access Mask比较直观方便阅读)
      使用技巧:
      为保证显示数据为最新状态,最好手动刷新下,快捷键F5
      可根据进程背景颜色判断进程状态、类型,具体颜色代表信息如下所示
      在[Options]菜单下[Configure Colors]选项
      补1.png
    • GlassWire
      监控样本运行的网络行为
      18.jpg
      已上线:
      19.jpg
      192.168.86.131为攻击方IP
    • TcpView
      监控Tcp与Udp的信息
      样本运行后:
      20.png
      远程桌面查看中:
      21.png
      通知信息泄露了监控状态(程序启用了远程桌面服务)
    • Autoruns
      运行前后自动启动项对比,查询新增自动启动项是否为恶意程序
      22.png
    • Process Monitor(Procmon)
      可实时监控系统信息,如:注册表、文件、进程、网络等等
      远控样本探测系统信息:
      23.png
      远控样本远程桌面信息:
      24.png
      远控样本文件管理信息:
      25.png
    • 科来网络分析系统
      监控网络数据,并查看详情:
      进程IP信息:
      26.png
      看到了一些外联IP信息(模拟攻击IP在其中),实际场景中,会根据多方资料来确认实际的攻击IP


    端口分析定位
    有些样本会开发一些端口进行恶意利用
    • 通过抓包软件查询目前正常使用某端口的进程
      补2.jpg
    • 使用netstat命令查询占用端口进程的PID
      之后结合任务管理器或其它进程监控程序查询占用进程
      补3.png 补4.png

    防火墙辅助分析定位
    大部分恶意软件都会利用网络进一步进行攻击,如远程控制、远程执行命令、远程下载、远程窃取文件等等,这个时候往往防火墙可监控或捕获到本地与攻击端的网络链接,根据此链接定位恶意程序或拦截使其无法进一步攻击
    • ProgCop
      监控远程连接:
      补5.png
      监控到了本地与一个远程地址建立了链接(Client-built为本次实验的远控样本)
      监控此进程:
      补6.png
      看到了此进程执行了一些危险行为(删除/写入文件、创建账号,读取注册表键值等等)


    参考资料
    • 《windows 通过AppInit加载任意dll》
    • 《Mastering Malware Analysis》
    • 《ws2_32.dll百科》
    到此告一段落,期待下次相见,再续前缘
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2021-10-11 09:07
  • 签到天数: 26 天

    [LV.4]偶尔看看III

    发表于 2021-8-17 13:39:16 | 显示全部楼层
    小白一个,虽然看不懂,还是觉得很厉害
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2024-2-26 21:51
  • 签到天数: 1059 天

    [LV.10]以坛为家III

    发表于 2021-8-18 22:24:59 | 显示全部楼层
    支持一下。。感谢分享。
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表