HTML 作为附件的钓鱼邮件

2024-03-26 23:41:22

上海辰童科技有限公司

网络钓鱼是非常常见的攻击行为,攻击者经常利用其来窃取登录凭据与信用卡信息。HTML 附件也是此类攻击中最常见的附件之一,因为此类附件通常被认为比其他文件类型来说更没那么可疑。

HTML 附件可能包含将用户重定向到网络钓鱼页面、下载恶意软件或通过网络钓鱼表单窃取登录凭据的链接。为了逃避检测,攻击者通常会使用多重重定向跳转、混淆代码等方式对敏感信息进行处理。

近期,研究人员发现此类攻击在全球激增。根据遥测数据,多个行业的增长率都超过 1030%。

钓鱼样本

研究人员一直在跟踪各种 HTML 作为附件的攻击行动,以下是在野发现的一小部分样本:

  • 样本1:伪造 DocuSign 请求的电子邮件,要求受害者对 HTML 进行电子签名,打开就会跳转钓鱼网站

  • 样本2:包含嵌套的电子邮件附件,其中包含恶意 HTML 文件

  • 样本3:伪装成来自人力资源部门的电子邮件,HTML 附件伪装成员工福利政策宣传

  • 样本4:伪装成会议纪要文件的 HTML 附件

  • 样本5:伪装成虚假的电话会议通知

  • 样本6:伪装成合法 eFax 消息的恶意 HTML 附件

image.png-1271.5kB各种钓鱼邮件

HTML 附件的实现原理

HTML 附件通常会使用各种混淆技术并在加载最终钓鱼页面前显示一个中间页面,这是该攻击活动的主要特征。

执行时 HTML 文件会创建一个网页,其中包含两个隐藏的 input 标签与一个 script 标签。其中一个 input 标签带有 base64 编码的目标用户电子邮件地址,script 标签会动态创建另一个 script 标签并将其附加到文档的开头。动态创建的 script 标签的 src 属性被设置为使用 atob() 函数进行 base64 编码的 URL,解码后的 URL 用于加载额外的 JavaScript 代码。

image.png-1068.7kBHTML 附件变种

上图右侧为钓鱼页面的基础版本,可以发现它向以 mj.js 结尾的 URL 发送请求。此外,还包含 ID 为 b64e 与 b64u 的 div 标签,分别为受害者的电子邮件 ID 与 C&C 服务器的 URL。

image.png-304.1kBC&C 服务器的请求

收到的响应分为两部分,下图为响应的第一部分。其中解码后包含中间加载页面的 base64 编码数据,在加载最终钓鱼页面之前,加载的中间页面会显示几秒钟。

image.png-572.1kB响应的第一部分

代码块 1 是一个函数,会返回一个包含 base64 编码日期的数组,该日期分为三部分。代码块 2 声明了各种变量,prer 与 pre2 变量包含 HTML 的 base64 编码数据,创建对应的标签内容。代码块 3 声明了对数据进行解码并将其写入 HTML 页面的 body 标签与 head 标签的函数。代码块 4 使用 eval 函数执行解码后的数据,代码块 5 用于调用代码块 3 中声明的函数。执行代码后,就可以看到如下所示的加载页面:

image.png-589.6kB中间加载页面

中间加载页面是这种攻击的关键特征之一,攻击者试图通过这种方式增加延迟来逃避检测。

image.png-214kB最终页面的 base64 编码

响应的第二部分中,变量 pr1 与 pr2 包含执行 POST 请求以获取最终页面的 base64 编码数据。首先经过 base64 解码,再通过 eval 执行。base64 解码后如下所示:

image.png-378.3kB加载最终页面的解码代码

代码块 4 会创建一个带有 4 个参数的 POST 请求。Scte 为电子邮件 ID,而 data11、data22 和 data33 合并后为包含钓鱼页面执行时间的 base64 编码数据。Conf 为带有 id conf 的 div 标签,在原始 HTML 附件中就存在。解码后的 base64 数据为:{"back":"default","title":"default","caption":"default"}

执行就会发送请求:

image.png-299.8kB发送请求接收最终页面

最终页面加载受害公司的图标与背景前,会以电子邮件地址为参数发出 POST 请求:

image.png-456.4kB使用受害者电子邮件地址发送请求

上图的请求以 JSON 数据响应,其中包含指向最终页面的背景图片与受害者公司图标的 URL。

image.png-418.7kB最终请求的代码

上图显示了请求的相应代码,页面会根据 JSON 对象收到的数据,动态更改页面以加载受害者的公司图标与背景图片。

下图列举了部分受害者看到的最终页面:

image.png-592.5kB钓鱼页面

一旦用户输入密码,就会将数据发送到攻击者的服务器上,如下所示:

image.png-516.1kB发送的请求信息

HTML 附件:不断进化的逃避策略

攻击者会定期更新 HTML 文件代码以逃避检测,各种变种的 HTML 代码都执行类似的攻击行为。大多数变种的 HTML 附件文件大小在 3KB 到 5KB 间。

变种1:访问 DOM 树

该变种正在访问 DOM 树以构建最终的网络钓鱼脚本:

image.png-917.2kB变种代码

image.png-811.7kB变种代码

样本使用混淆脚本执行加载中间页面的初始 Payload,在 b64e 的 div 标签中包含电子邮件地址,在 b64u 的 div 标签中包含第二阶段 Payload 的 URL。

image.png-1083.3kB变种代码

变种2:使用 onload 触发与 eval

该变种使用 onload 触发 eval 与 atob 函数执行网络钓鱼 Payload:

image.png-438.1kB变种代码

上图中包含 base64 编码的数据,首先通过 eval 函数进行 base64 解码再执行。通过 body 标签的 onload 属性触发执行。

image.png-866kB变种代码

变种3:使用 onload 触发访问 DOM

该变种没有使用 script 标签,而是使用 onload 触发执行访问 DOM 元素的代码。

image.png-1112.9kB变种代码

样本代码通过 onload 属性触发,访问 ID 为 temp1 和 temp2 的 div 元素。div 元素包含类名称,也是 base64 编码的字符串。生成的脚本最终如下所示:

image.png-562.4kB变种代码

生成的代码执行逻辑类似,只是访问的类名称的脚本不同。也会访问 base64 编码字符串的值,并将其组合起来。

image.png-234.3kB变种代码

样本经过多层 Unicode 编码,解码后与前述代码类似:

image.png-152.5kB变种代码

脚本反转字符串并解码 base64 数据,使用 decodeURIComponent 对特殊字符进行转义,然后使用 document.write 将其写入 HTML 文件。

变种4:使用 onerror 触发与 eval

变种使用 onerror 触发 eval 与 atob 函数加载网络钓鱼 Payload:

image.png-486.1kB变种代码

上图中,样本包含 base64 编码的字符串。解码后通过 eval 函数执行:

image.png-485.5kB变种代码

解码后通过 eval 执行的,是由 onerror 属性触发的。由于来源路径被设置为 x,img 标签的 onerror 属性在加载图像时出错,从而触发执行 onerror 属性中的代码。

解码后的 base64 字符串中的代码如下所示:

image.png-488.2kB变种代码

样本混淆隐藏了原始代码,去混淆后如下所示:

image.png-615.5kB变种代码

变种5:使用 URI 编码

属于该变种的样本使用 URI 编码与 HTML 标签(例如 svg、video 与 h5):

image.png-697.5kB变种代码

与前述代码中使用 base64 编码字符串不同,该样本的变种使用 URI 编码的字符串。解码后可以看到另一个混淆的脚本,与其他变种行为类似。

如下使用 h5 标签的 onanimatestart 属性来触发执行:

image.png-1160.3kB变种代码

如下使用 style 标签的 onload 属性来触发执行:

image.png-1259.6kB变种代码

如下使用 video 标签的 onloadstart 属性来触发执行:

image.png-213.5kB变种代码

邮件安全遥测数据

如下所示,此类攻击的主要目标是美国、韩国与德国。

image.png-180.5kB国别分布

按行业划分,高科技、制造业与医疗保健行业发现的攻击最多,这些行业不仅经常处理敏感信息还拥有复杂的 IT 架构与攻击面。

image.png-124.2kB行业分布

从 2022 年第四季度到 2023 年第一季度,此类攻击活动激增。攻击者趁着年底的假期,针对在线购物、零售与金融机构的攻击大幅度增加。

image.png-151kB检测趋势

结论

近年来,使用 HTML 附件的网络钓鱼攻击一直在持续增长。近期攻击活动激增显示,攻击者的技术越来越复杂。只有不断改进策略与技术,才能提高网络钓鱼的成功率。