免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
聚合网络安全,存储安全技术文章,融合安全最新讯息
点击蓝字 · 关注我们
前言
恶意代码分析是安全从业人员非常重要的一个技能。
参考书籍:<<恶意代码分析实战>>
<<Windows核心编程>>
相关知识
书本上用到的是snort,但我个人比较熟悉suricata引擎。所以下面以suricata为例,虽然两者之间相似处很多,几乎一样。
Suricata是一个免费、开源、成熟、快速、健壮的网络威胁检测引擎。Suricata引擎能够进行实时入侵检测(IDS)、内联入侵预防(IPS)、网络安全监控(NSM)和离线pcap处理。
suricata支持多个动作,pass,reject,alert,drop.
多个协议:
TCP、UDP、ICMP、IP、http、ftp、ssh、imap
在网络行为监测上,是一个非常好用的工具。
因为suricata的关键字很多,下面只列举几个http协议的关键字,更多的可以去suricata官网查看。
http_method
修饰content,表示content只能在HTTP方法上匹配
http_uri/http_raw_uri
在请求URL缓冲区上匹配
uricontent
效果与http_uri相同
urilen
urilen用来匹配uri长度
http.protocol
protocol从请求或响应行检查协议字段
http.request_line
强制检查整个HTTP请求行
http.header/http.header.raw
匹配HTTP header缓存区所有信息
http.cookie
匹配cookie缓存区
http.user_agent
匹配的是user-agent中的纯文本内容
http.accept
与HTTP Accept header匹配的粘性缓冲区
http.accent_enc
与HTTP Accept-Encoding header匹配的粘性缓冲区
http.accept_lang
与HTTP Accept-Language header 匹配的粘性缓冲区
http.connection
与HTTP Connection header匹配的粘性缓冲区
http.content_type
与HTTP Content-Type header匹配的粘性缓冲区
http.content_len
与HTTP Content-Length header匹配的粘性缓冲区。
http_referer
要在HTTP Referer header上匹配的粘性缓冲区
http.start
检查HTTP请求/响应的起始
http.header_names
检查只包含HTTP头名称的缓冲区
http.request_body
匹配请求体
http.stat_code
匹配状态码
http.response_body
匹配返回的请求体
http.host
匹配host头
Lab14-1
放入PEid查看,无壳
放入IDA中查看。
GetCurrentHwProfileA
得到硬件配置文件GUID
GetUserNameA
获取当前登录的用户名
这里进行base64编码,但是编码方式有点不一样,=改成了a。
然后将编码后内容与编码最后一位结合,作为传输url.
然后下载文件,创建一个进程运行。
这里运行一下,查看网络特征。
这里可以看到base64特征,替换两个a为=,解密,GUID和用户名
这里编写suricata的两个特征规则
alerttcp any any -> any any(msg:"Lab14.1 first."; urilen:>32;content:"GET|20|/"; depth:5;pcre:"/GETx20/[A-Z0-9a-z+/]{3}6[A-Z0-9a-z+/]{3}6[A-Z0-9a-z+/]{3}6[A-Z0-9a-z+/]{3}6[A-Z0-9a-z+/]{3}6[A-Z0-9a-z+/]{3}t([A-Z0-9a-z+/]{4}){1,}//i";sid:100001; rev:1;)
alerthttp any any -> any any (msg:"Lab14.1 internet."; urilen:>32;content:".png"; http.uri;pcre:"//[A-Z0-9a-z+/]{24,}([A-Z0-9a-z+/])/1.png/URi";sid:100002; rev:1;)
第一个代表的是匹配GET类型,长度大于32,然后结尾都是6的前面,因为冒号,第六个总是t,因为破折号。然后这个匹配是忽略png的后缀。
然后这里第二个是匹配了png,用最后一个匹配的括号作为.png前缀的结尾。
Lab14-2
把文件放入PEid中查看。
LoadStringA
从 资源 里加载字符串资源到CString对象里。
CreateEventA
它用来创建或打开一个命名的或无名的事件对象。如果想为对象指定一个访问掩码,应当使用CreateEventEx函数。
PeekNamedPipe
预览一个管道中的数据,或取得与管道中的数据有关的信息。
查看资源文件
放入IDA中查看。
先导入了资源文件的字符串。
然后创建两个管道。
创建cmd进程。
创建一个线程
读取管道内容并加密。
作为agent内容发送出去。
之后不断对网站进行访问。
这里理一下思路,就是明文agent获得命令,编码agent输出结果。
Lab14-3
放入DiE99中查看,无壳。
放入IDA中查看。
进行一个配置文件的判断,有读取,没创建写入。
然后进行网络连接
这里可以看到一个switch结构
根据不同指令跳转。
解码后,创建线程运行url换存文件
休眠
解码后,更新配置文件
运行,编写规则。
这里因为代码编写者的错误,会多一个agent字样,作为特征
alerthttp any any -> any any(msg:"Lab14.3";content:"User-Agent|3a20|Mozilla/4.0|20|(compatible;|20|MISE";http.user_agent; sid:100003; rev:1;)
接着的规则没有现成的数据包,是根据代码写的
alert tcp any any -> anyany(msg:"Lab14.3 1"; content:"/08202016370000";pcre:"//[dr][^/]*/08202016370000/i"; sid:100004; rev:1;)
08202016370000是http://的编码结果,dr代表的是download和redirect两个指令。
休眠
alert tcp any any -> anyany(msg:"Lab14.3 2"; content:"96";pcre:"//s[^/]{0,15}/[0-9]{2,20}96/i"; sid:100005; rev:1;)
原文始发于微信公众号(Th0r安全):PC端恶意代码分析Lab14.1-3:IDS标记
评论