原文:
https://www.sentinelone.com/blog/technical-analysis-paypal-phishing-scam/?tdsourcetag=s_pcqq_aiomsg
0x01 前言
对于现如今的我们来说 铺天盖地的互联网营销环绕在我们的身边 几乎每个人都收到过垃圾邮件或网络钓鱼邮件。对于企业来说,网络钓鱼邮件是攻击者进入内网的最常见载体。 在过去的12个月中,微软公开了增幅高达250%的网络钓鱼邮件的检查报告,并且针对软件运营服务和网络邮件服务的网络钓鱼在相比上一季度翻了两倍。
我们已经在其他地方讨论了防御网络钓鱼攻击的方法,但在这篇文章中,我们将更深入地研究钓鱼邮件的工作原理,揭示在这种社会工程学攻击中,看看受害者是怎么泄露他们的Paypal证书的 。
0x02 HTML特性利用
在本文中,我们将使用最近捕获的一封恶意钓鱼邮件来进行阐述,下面我们就从查看攻击者的HTML文件的排列开始进行分析:
$: shasum PayPal_Document916.html
948fa2be822a9320f6f17599bc2066b2919ff255 PayPal_Document916.html
扫描一下,看看有没有什么惊喜.
不知道这是什么.这里用 Detect-It-Easy 来分析一下.
从DIE
中可以获取以下文件属性:
- File type: Plain Text HTML
- Entropy: 6.056
- Packed: No
- File Size: ~34k
幸运的是文件并没有被压缩 看样子只是稍微混淆了一下子而已 分析难度应该不高。
0x03 代码分析
由于HTML文件可以在任何操作系统上运行,我们想要知道里面的内容可能不太可能,而且我们也不知道这个是什么操作系统。 想要了解这里面的内容很重要,我们可以用一个非常简单的文本编辑器来实现。不过一定要像打开常规文本一样打开它.
虽然这看起来很漂亮,但是读起来有点难,幸运的是我们可以做一些操作让它更容易理解,但在我们操作之前,我们将删除所有的HTLM代码标签:
<!DOCTYPE html><html><head><script>
和
</script></head><body></body></html>
剩下的是JavaScript代码,Sublime Text可以帮助我们:
使用一些“美化插件”编辑一下代码,让它看起来更容易理解:
我们可以通过macOS或者Linux 中的命令行界面来实现:
$: awk -v RS=';' -v ORS=';\n' 'NF' PayPal_Document916.html
把这个Javascript格式化,把新的版本写入一个名为:
decoded_PayPal_Document916.js
0x04 未知:解码文本
编辑一些变量,尝试理解这里发生了什么。
首先我们知道:
var nxjCDAXFwFEX=
保存原始Base64代码块(自然假设为嵌入式有效负载)。
把这个写进一个文件,看看可以得到什么:
grep nxjCDAXFwFEX= decoded_PayPal_Document916.js|awk -F '"' '{print$6}'|base64 --decode >> payload
这个命令用于隔离Base64编码的字符串,不过关于包含我们的字符串的行,有两点需要注意:
(1)在字符串的开头:
return g=x.join(""),g.replace(/\0+$/,"")}var nxjCDAXFwFEX="
(2)在字符串的末尾:
awk -F '"' '{print$6}'
删除Base64编码字符串前后的所有内容,可以方便对它解码。使用: -F '"'
这个命令只使用空格作为分隔符将目标字符串分割为列。我们使用-F '"开关将分隔符更改为双引号。然后我们有了一个单独的字符串,我们可以解码它。它并不总是像解码base64字符串那么容易,编码后的代码块写入文件时看起来很奇怪:
$: file payload
payload: data
数据文件不一定是字符串解码失败的指示符,但是它确实说明可能会解码失败。不管用什么方式我们都要检查代码来看看我们可能忽略的逻辑。
0x05 新观点:隔离变量
当重命名变量时,我喜欢从那些简单的开始。
已经知道nxjCDAXFwFEX包含Base64代码字符串,所以我将把所有出现的nxjCDAXFwFEX更改为raw_base64,看能找到什么。
我有一个单独的系统,我用它来运行样本,不用担心感染任何一个文件!为了加快速度,我只需将decoded_PayPal_Document916.js复制到VM中。使用Linux,因为几乎所有的东西都想杀死Windows。
为了进一步消除脚本代码块中的变量的混淆,我们可以为每个变量放置print语句,看看它们输出了什么,然后对应的命名。目前来看,有一些明显的问题我们可以替换:
- 重命名一下 :
xoCisgpExGEs –> function_01
- 这是我们在脚本中看到的第一个函数:xoCisgpExGEs(rr,oo) 函数
sCmCMuMlIZJy –> function_02
- 这是我们在脚本中看到的第二个函数:sCmCMuMlIZJy(rr) 函数**
nxjCDAXFwFEX –> raw_base64
- 只包含base64编码字符串的变量。
lSiYOlcTTfmR –> call_array
- 参数的主要列表。
TZGYADnjYnzp –> function_02_call
- 这只是调用脚本中的第二个函数:
lSiYOlcTTfmR:
- lSiYOlcTTfmR[0] –> cyQvdxDbHhpBfpCX
- 这只是“lSiYOlcTTfmR”(重命名为“call_array”)数组中的第一个值
- lSiYOlcTTfmR[1] –> write
- 这只是“lSiYOlcTTfmR”(重命名为“call_array”)数组中的第二个值
注意:我们将移动整个变量,因为我们知道这些值在哪里使用。
在这种情况下,脚本的最后一行是执行语句,将它注释掉,并应用新的代码将输出转储到2个文件:
在执行后,“function_02_call”看起来还是很乱,我们暂时忽略它。“function_01_call”好像给了我们很多很好的新代码来检查:
输出文件中包含的代码都在一行中,并且再次使用了一个插件来美化代码 .
0x06 可疑的域
我们已经怀疑这是一种钓鱼攻击,所以最好能看到页面中编码的所有域。
PayPal域名在没有意思,因为域名都是合法的,而且不能骗过去。看起来更有趣的是:
运行cURLs命令检查一些这些东西:
我们在处理一些事情时,我们可以下载PNG文件并看看它们的信誉度
$: shasum *.png
f18a83299a9dbf4905e27548c13c9ceb8fb5687d AM_mc_vs_ms_ae_UK.png
53b7e80a8a19959894af795969c2ff2e8589e4f0 bdg_secured_by_pp_2line.png
b311f639f1de20d7c70f321b90c71993aca60a44 pp-logo-200px.png
这些文件被恶意攻击的几率很低:
关注一个不属于PayPal的域名。我遇到了代码中的一个变量让我想仔细看看,_0x78eb7f:
逻辑相当简单:当用户输入信用卡信息后单击submit按钮,页面脚本将更改发送最终用户输入数据的目的地。
于是用户的信息被发送到攻击者的web服务器,而不是PayPal。
0x07 结论
通过这个基本分析,我们知道了攻击的工作方式和攻击者服务器的域。这种网络钓鱼电子邮件不像我们到现在为止经历的攻击那么复杂,但它很容易被忽视。这种类型的攻击常常比现代的攻击更有效。作为安全专家,我们可以用这个例子作为一个提醒,应该教育我们的朋友、家人和用户在任何时候都要质疑电子邮件的有效性。