首页
社区
课程
招聘
[原创]【梦幻开讲了】带伙伴们入手计算机病毒分析第三天
发表于: 2021-8-16 16:48 11918

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

2021-8-16 16:48
11918


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

有的病毒在静态分析时鉴定为正常,但实际会在运行时进行恶意行为,故常用动态分析技术进行收尾(病毒制作者常在病毒制作途中,对病毒进行静态免杀处理,来规避病毒分析软件)

安全考虑,多数的动态分析是在虚拟机中进行的

因未知的计算机病毒充满了不确定性,在进行动态分析的时候,又需要运行计算机病毒,监控病毒的行为,安全考虑,需要一个安全、可控的运行环境,来降低病毒所带来的危害
常见危害例举:

因虚拟出来的毕竟不是真实环境,故存在一些限制或弊端
常见限制或弊端例举:

病毒产生危害时,往往会进行一些恶意或危险行为,可通过一些监控软件,监控被分析应用运行后都做了什么,进而判断是否为恶意文件,监控的运行行为也可为后期专杀/清理工具提供参考。
常见可用于分析的行为例举:

工具来源已公开产品、自身定制开发

在动态分析时,常通过调试器运行所分析程序或用调试器附加所分析的进程,来分析所分析程序是否存在恶意行为
常见调试器例举:

在动态分析时,常通过一些监测工具,监测程序运行后都干了什么,来分析所分析程序是否存在恶意行为
常见监测工具例举:

病毒开发人员常通过进程注入技术绕过病毒防护软件,并在合法进程中添加恶意功能,或读取内存中的敏感数据、干扰分析等等。

Windows已经为DLLs创建了注册表项,以便它们可以在符合特定条件的进程中被加载。其中许多项允许恶意软件的DLL 被注入到进程中,如浏览器和其他正常的 进程。例如:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
图片描述
这个注册表项是被恶意软件滥用的最多的注册表项之一,它被用来将DLL代码注入其他进程并保持持久性。
但添加需管理员权限,并且微软默认设置LoadAppInit_DLLs值为0以阻止加载未知的dll,可通过需改值为1关闭此项防护
图片描述
原理:

运行一些样本或程序,分析是否存在恶意行为,以此方法展示动态分析技术

在程序运行前,对注册表进行备份,开启火绒剑监控,运行一段时间后,查看是否有注册表敏感操作,例如

加载恶意dll
(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 值为未知dll,正常为空)
攻击位置被监控:
图片描述
攻击参数:
图片描述
拦截记录:

x64dbg载入程序,在常用网络函数下断点,看是否可断下(样本程序才测试前以运行过得知有网络行为)

收集软件运行后的信息

火绒剑
图片描述
筛选:
路径、进程、动作
动作分类:
执行监控、文件监控、注册表监控、进程监控、网络监控、行为监控
任务组:
信息汇总

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

有些样本会开发一些端口进行恶意利用

大部分恶意软件都会利用网络进一步进行攻击,如远程控制、远程执行命令、远程下载、远程窃取文件等等,这个时候往往防火墙可监控或捕获到本地与攻击端的网络链接,根据此链接定位恶意程序或拦截使其无法进一步攻击

到此告一段落,期待下次相见,再续前缘

传播危害:计算机病毒会感染网络中的其它计算机(例如连接一个WiFi的电脑、在内网中可访问的其它电脑,这只是一个例举实际情况中存在多种可能,望思维不要被局限,例如PC运行后只攻击使用一个WiFi的手机或其它终端,而对宿主机不产生严重干扰或破坏性危害)
 
难以清除:
有些病毒难以从系统中清除,若需再次使用需要在分析结束,会通过清除磁盘数据、重打硬件驱动、重装驱动,刷新bios等方法来移除病毒对计算机的修改。
 
硬件破坏:
有些病毒会通过某些方式来破坏计算机的硬件(起因例举:攻击后增加溯源难度通过破坏硬件来掩盖攻击记录)
传播危害:计算机病毒会感染网络中的其它计算机(例如连接一个WiFi的电脑、在内网中可访问的其它电脑,这只是一个例举实际情况中存在多种可能,望思维不要被局限,例如PC运行后只攻击使用一个WiFi的手机或其它终端,而对宿主机不产生严重干扰或破坏性危害)
 
难以清除:
有些病毒难以从系统中清除,若需再次使用需要在分析结束,会通过清除磁盘数据、重打硬件驱动、重装驱动,刷新bios等方法来移除病毒对计算机的修改。
 
硬件破坏:
有些病毒会通过某些方式来破坏计算机的硬件(起因例举:攻击后增加溯源难度通过破坏硬件来掩盖攻击记录)
环境检测:病毒往往会检测自身的运行环境,若检测处于虚拟环境就不进行恶意行为
 
穿透攻击:病毒检测到运行环境未虚拟机,有的病毒会穿透虚拟机攻击真实环境,而在虚拟机环境中不进行恶意行为
 
性能限制:因环境是虚拟出来的,有时会出现运行环境不稳定、增加分析时间等问题。
环境检测:病毒往往会检测自身的运行环境,若检测处于虚拟环境就不进行恶意行为
 
穿透攻击:病毒检测到运行环境未虚拟机,有的病毒会穿透虚拟机攻击真实环境,而在虚拟机环境中不进行恶意行为
 
性能限制:因环境是虚拟出来的,有时会出现运行环境不稳定、增加分析时间等问题。
在Windows操作系统中,允许进程在另一个进程的虚拟内存中分配、读取和写入,以及创建新线程、暂停线程和改变这些线程的寄存器,包括指令指(EIP/RIP),根据这一特点可以将代码注入进程(恶意利用这一技术,将恶意代码注入到正常的进程中并执行以规避防护软件。
在Windows操作系统中,允许进程在另一个进程的虚拟内存中分配、读取和写入,以及创建新线程、暂停线程和改变这些线程的寄存器,包括指令指(EIP/RIP),根据这一特点可以将代码注入进程(恶意利用这一技术,将恶意代码注入到正常的进程中并执行以规避防护软件。
将AppInit_DLLs键值修改为待加载dll的路径,即可让所有windows进程都加载该dll。
这是因为在“ AppInit_DLLs”注册表项中指定的DLL是由user32.dll加载的,几乎所有应用程序都使用该user32.dll。
将AppInit_DLLs键值修改为待加载dll的路径,即可让所有windows进程都加载该dll。
这是因为在“ AppInit_DLLs”注册表项中指定的DLL是由user32.dll加载的,几乎所有应用程序都使用该user32.dll。
语法:
LWSTDAPI UrlCanonicalizeW(
PCWSTR pszUrl,
PWSTR  pszCanonicalized,
DWORD  *pcchCanonicalized,
DWORD  dwFlags
);
语法:
LWSTDAPI UrlCanonicalizeW(
PCWSTR pszUrl,
PWSTR  pszCanonicalized,
DWORD  *pcchCanonicalized,
DWORD  dwFlags
);
执行情况示例:比如用转义序列替换不安全的字符
如果URL字符串包含“/../”或“/./”,URLCononicalize将这些字符视为指示URL层次结构中的导航。该函数在合并URL之前简化了URL。例如“/hello/craul/./world”被简化为“/hello/world”。
执行情况示例:比如用转义序列替换不安全的字符
如果URL字符串包含“/../”或“/./”,URLCononicalize将这些字符视为指示URL层次结构中的导航。该函数在合并URL之前简化了URL。例如“/hello/craul/./world”被简化为“/hello/world”。
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
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

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-8-20 10:04 被梦幻的彼岸编辑 ,原因: 内容扩充
收藏
免费 4
支持
分享
最新回复 (1)
雪    币: 1109
活跃值: (1455)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
沙发
2021-8-17 00:04
0
游客
登录 | 注册 方可回帖
返回
//