国外的FireEye实验室有一套自动化系统,这套系统能够主动侦测最新注册的恶意域名。所谓的恶意域名,绝大部分都是伪装成很多人知道的常用域名,以此来达到“恶意”的目的。比如说伪装成苹果公司的域名——FireEye的这套系统最近就检测到了今年一季度注册的不少此类钓鱼域名。
这类域名的特色就是擅长伪装,跟合法域名“长得”很像。FireEye报道称,这些“伪苹果”域名针对的主要是中国和英国的苹果iCloud用户。虽说FireEye先前曾经追踪过不少类似的域名,但这次的情况比较独特:这些站点的恶意钓鱼内容是一样的,而且手段比较复杂,甚至能够规避钓鱼检测系统。
众所周知,苹果用户都有个Apple ID。Apple ID可以说是苹果全套服务的核心账户了,贯穿于iCloud、iTunes Store、App Store等等服务。其中iCloud是苹果的云服务,实时保证用户苹果设备上的文档、照片、联系人等资料同步;此外iCloud也提供与朋友分享照片、日历、地理位置等的接口;它也能用来找回丢失的iOS设备。
或许对很多人而言,iCloud更重要的作用是iCloud Keychain(密钥链)功能。这项功能用于存储用户的密码、信用卡信息,这样一来用户在iOS和Mac设备上操作时,iCloud就能帮助用户自动填写这些信息了。有了Apple ID、密码,还有其他一些信息(比如生日、设备解锁码),对设备就有比较完整的操作权限,甚至可以使用信用卡信息在Apple Store购物。
而下面这些针对苹果用户的钓鱼攻击,就是高度组织化,而且比较复杂的钓鱼攻击,一部分针对中国人,一部分针对英国人。
下面这张列表就是FireEye Labs在今年3月份检测到的、针对苹果用户的钓鱼域名。当然这些域名肯定都不是苹果注册的,自然也不会指向苹果的产品:
显然,黑客是想模仿和iTunes、iCloud和Apple ID相关的网站,就是要吸引用户输入他们的Apple ID。访问这些域名,绝大部分都呈现Apple ID、iTunes和iCloud的登录界面;网页还部署了非常复杂、可疑的JavaScript代码。据说对于分析表单和依赖HTML内容的反钓鱼系统而言,这些网站能够很大程度令其失效。
从观察到的结果来看,这些域名明显都是在中国注册的,而且注册用的还是QQ邮箱。
通常我们通过简单查看HTML代码,大致就能明了钓鱼内容,理论上这些代码应该是一部分图片用来模仿苹果品牌,另外还有一些收集用户凭证的表单。 一般来说,如果是这样的话, 钓鱼检测系统就能够在HTML页面内容中发现问题,但在此处却失效了。
初看起来,这里只是向页面发起简单的GET请求,响应内容却是编码过的JavaScript代码。这么一来,除非是在浏览器或JS模拟器中真的去执行,否则还真是看不出其真实意图。下面就是从代码中获取到的编码字符串的一部分。
编码后的字符串StrHTML,需要通过一系列复杂的23种解密函数,包括数制转换(number system conversions)、伪随机规则表达式的修饰符(pseudo-random pattern modifiers)等,然后还要加上采用了固定密钥“zycode”的XOR解码,最后才得到了真正的HTML钓鱼内容(参见附录1)。所以说, 仅依赖于响应部分HTML的钓鱼检测系统,在此显然是根本没法发挥作用的。
一旦这些代码真正在浏览器中加载,混淆后的JavaScript也就构建起了iCloud钓鱼页面,如上图所示。
这就是还原混淆后(de-obfuscated)的内容。
然后用Burp Suite工具来观察,上图展示的就是用户提供的登录和密码信息提交到HTML表单。此处能够看到,以HTTP POST方式,5个变量(u,p,x,y和cc)和1个cookie被发往save.php页面。
用户输入登录信息后,页面会被重定向到上面显示的“苹果”页面。有意思的是,这个页面的所有链接倒是指向正确的苹果官网域名的,这些无关紧要。该页面还仅支持中文(贴心服务),“验证您的出生日期或设备屏幕锁以继续”。
若进入下一步,用户被带到ask3.asp页面。这个页面会询问你更多账户细节。
再下一步,提交成功!
再看看Burp会话。
除此以外,如果用户尝试再度提交相同的Apple ID,就会被重定向至save.asp页面。该页面会告诉你,“您的Apple ID或密码输入有误,请重新输入”,如上图所示。点击OK又会回到主页。
从FireEye提供的数据来看,注册这些伪苹果域名的登记名,集中在“Yu Hu”“Wu Yan”“Yu Fei”和“Yu Zhe”之上,明显都是中文名。如上所述, 注册所用的邮箱,都是后缀为qq.com的QQ邮箱 ,详情如下图所示。
深入挖掘FireEye的恶意域名检测系统,我们会发现这类“伪苹果”域名的注册正变得越来越多。自今年1月份以来,这套恶意域名检测系统标记了大约240个域名,都是相关Apple ID、iCloud或iTunes的。这其中154个采用单独的邮箱登记,64个邮箱都是qq.com后缀,26个则为Gmail账户,另有18个指向163.com和126.com,还有一些是139.com。
这些数据对苹果自己的身份凭证钓鱼检测团队而言是很有意义的,同时也表明,果然QQ邮箱很受欢迎。FireEye在信息总结中有提到, “这些攻击者更喜欢用数字作为邮箱地址,而非名字,比如545454@qq.com之类” 。显然FireEye是不知道,QQ邮箱在中国人的心目中,有着怎样的位置。
最后,如上图所示,这些域名指向中国和美国的13个独立的IP地址,或许表明目标攻击群体也在这些地方。
不仅是中国的苹果用户,英国的苹果用户也成为钓鱼的目标。下面这张表包含了86个苹果钓鱼域名,也是FireEye自今年1月份以来收集到的(域名似乎不及中国人注册的高级啊…)。
这些域名给出的页面,也都是相同的钓鱼内容:向域名主页发起简单的HTTP GET(通过wget工具),HTML代码中包含了刷新标记(meta-refresh)重定向至signin.php页面。
下面展示的是wget会话:
$ wget http://manageAppleid84913[.]net --2016-04-05 16:47:44-- http://manageAppleid84913[.]net/ Resolving manageAppleid84913[.]net (manageAppleid84913[.]net)... 109.123.121.10 Connecting to manageAppleid84913[.]net (manageAppleid84913[.]net)|109.123.121.10|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 203 [text/html] Saving to: ‘index.html.1’ 100%[============================================================================================================>] 203 --.-K/s in 0s 2016-04-05 16:47:44 (37.8 MB/s) - ‘index.html.1’ saved [203/203]
下面就是页面内容:
<meta http-equiv="refresh" content="0;URL=signin.php?c=ODcyNTA5MTJGUjU0OTYwNTQ5NDc3MTk3NTAxODE2ODYzNDgxODg2NzU3NA==&log=1&sFR=ODIxNjMzMzMxODA0NTE4MTMxNTQ5c2RmZ3M1ZjRzNjQyMDQzNjgzODcyOTU2MjU5&email=" />
这个代码会将浏览器重定向至如下的页面:
随后浏览器会加载高度混淆的JavaScript代码,生成钓鱼HTML代码——和上面中国人做的那些钓鱼页面一样,这些页面也具备躲避基于特征的钓鱼检测系统的能力(详见附录2)。
这些代码在浏览其中渲染出如上图所示的Apple ID钓鱼页面,看起来还挺像真的(就是域名太假了)…
提交用户名和密码后,表单提交至signin-box-disabled.php页面。随后JavaScript和jQuery构建如上图所示的页面,告诉用户Apple ID已被锁定,需要解锁。
然后就是要你填写姓名、出生日期、电话号码、家庭住址、信用卡信息、安全号等个人信息了。值得一提的是,在填写家庭住址的时候,“国家”这一项仅允许选择“英格兰”“苏格兰”和“威尔士”,说明这些钓鱼域名是专坑英国人的。
最后出现的页面就是让你等待,经过系统“认真的处理”后,就会弹出页面恭喜用户Apple ID已成功解锁了。最终,用户被重定向至苹果官网。
这些域名全部都用上了某些注册机构的域名查询隐私保护功能(whois privacy protection),这样一来,域名注册人就能隐藏其个人信息了。上述域名注册均指向“contact@privacyprotect.org”。
至于这些域名注册所在的地理位置,自然都是在英国了。
从技术手段来谈,钓鱼网页算不上多高端的东西。 不过FireEye的监测系统却认为,今年第一季度这种有明确目标的钓鱼攻击变得非常频繁。其中的一些还很有意思,比如它们用上了比较复杂的、能够反钓鱼检测系统的技术;而且多个域名的页面内容都是一样的,表明攻击者用的应该是一样的钓鱼工具。
这些信息对于预防此类复杂钓鱼攻击手法应该还是相当有意义的,尤其是对于一些原本就有意向为其用户做防护的安全机构。
附录1:混淆后的JavaScript代码;绿色框中,明确存在数制转换、伪随机规则表达式的修饰符,还有比特级别的二进制转换
附录1:混淆后的JS代码,红色框表明了XOR解码
附录2:混淆后的JS代码