WebAssembly黑暗的一面

news2024/12/25 1:10:18

案例1:技术支持诈骗


什么是技术支持诈骗?


技术支持诈骗是一种电话欺诈,其中诈骗者声称可以提供合法的技术支持服务。该骗局可能以陌生电话开始,骗子通常会声称来自合法的第三方的员工,如“微软”或“Windows部门”。他们会要求通过远程桌面软件连接受害者的计算机,然后施展各种骗人手段,比如使用各种Windows组件和实用程序(如事件查看器)、第三方软件(如假冒的安全软件)以及维基百科等参考资料网站或安全公司撰写的摘要,让受害者相信计算机存在需要修复的安全问题,然后再要求受害者支付“支持”费用。这些骗局通常针对老年人这样的用户,因为他们不熟悉骗子使用的工具,特别是收到陌生电话后,常常会人慌无智。

在其他情况下,骗局是通过浏览器弹出窗口进行的,该弹出窗口会“警告”受害者,声称他们的机器已经感染了病毒,并敦促他们拨打技术支持电话。图5中显示了技术支持诈骗中的一个浏览器弹出窗口的示例。

 

图5:用于技术支持诈骗的浏览器弹出窗口。

攻击者希望受害者能在浏览器中看到警报,并继续弹出“系统感染病毒”之类的窗口对其进行轰炸。当受害者拨打技术支持电话时,骗子要么要求用户付钱来解决“问题”,要么干脆在受害者的机器上安装一些恶意软件/后门。

技术支持诈骗来源


技术支持诈骗的来源包括:

  • 戒心不强的用户通过Bing或Google等热门搜索引擎搜索商业技术支持。
  • 合法但被攻陷的网站,将用户重定向到欺诈页面。网站的入侵通常是通过利用CMS(内容管理系统)中的漏洞来实现的,常见的CMS系统包括WordPress、Joomla、Drupal等。
  • 在欺诈页面上显示恶意广告。该机制还可以利用诸如地理定位检查、浏览器信息等的指纹识别技术,避免向同一个用户重复展示相同的恶意广告。

技术支持诈骗数量呈上升趋势


长期以来,漏洞利用工具包是恶意软件作者的首选恶意软件交付工具。但是,随着浏览器和相关插件不断更新,以及操作系统安全性的不断提高,漏洞利用工具包变得越来越不可行,恶意软件作者的感染率也越来越低。为了保持资金流动,与漏洞利用工具包相关的重定向活动逐渐倾向采用技术支持诈骗方式。这导致了技术支持骗局的大量涌现。这一点,我们可以从微软[10]和FBI的互联网犯罪投诉中心(IC3)[11]提供的报告中可以找到相应的证据。

技术支持诈骗技法越来越难以发现


技术支持诈骗刚出现时,所有恶意的网页行为都是通过JavaScript来实现的,并且这些JavaScript未经过混淆处理,所以很容易被检测到。然而,随着技术支持诈骗开始成为网络安全威胁领域的主要力量,各种反检测功能也不断被加入进来:刚开始,只是使用诸如十六进制编码之类的轻度混淆处理,后来升级为使用打包编码,甚至采用各种高级加密算法,如AES(高级加密标准)[12,13](参见图6)。

 

图6:随着技术支持诈骗开始成为网络安全威胁领域的主要力量,各种反检测功能也不断被加入进来。

下一步:应用WebAssembly


前面,我们已经介绍了WebAssembly和技术支持诈骗的背景知识,下面,让我们来深入了解它们的融合情况。

对于技术支持诈骗来说,几乎所有的过程都是通过JavaScript来实现的。通过WebAssembly,攻击者可以把JavaScript编译为二进制形式来执行,这样可以降低被检测到的机率。因此,两者结合后,不仅可以通过基于WebAssembly代码的诈骗行为来实现吓唬受害者的目的,而且还不会留下任何痕迹。

图7展示了这种组合的POC,即执行JavaScript代码的C代码片段。

 

图7 POC:执行JavaScript代码的C代码片段。

Emscripten编译器提供了一种使用EM_ASM()[14]从C代码中调用JavaScript代码的方法。

EM_ASM()标签中的代码将被执行,就像这里是已经生成的代码一样。也就是说,这里的JavaScript代码就像平常在Web上找到的普通JavaScript代码一样被执行。

对于这段JavaScript代码,首先会显示警告用户系统被感染的弹出窗口和图像,具体如图8所示。

 

图8:弹出窗口警告用户系统已被感染。

之后,代码会检查以下按键:

键码      按键
13      ENTER
27      ESC
18      ALT
123     F12
85      u
9       TAB
115     F4
116     F5
112     F1
114     F3
17      CTRL

这可以防止用户通过按下ESC或CTRL+ALT+DELETE组合键或表格中显示的其他按键来退出诈骗窗口。

此外,该代码还监控鼠标点击事件,并在每次点击鼠标时都会弹出恶意警告窗口。

在这个场景中,只有“document.write()”标签中的代码会在浏览器中呈现,而JavaScript代码是动态加载的。这些C代码唯一可见的踪迹,就是在浏览器缓存中可见的Wasm文件,其内容如图9所示。因此,安全产品只会看到已编译的Wasm文件,而不会看到JavaScript源代码。这类似于使用文本编辑器考察可执行文件,从而使检测变得愈加困难。

 

图9:在浏览器缓存中看到的WASM文件的内容。

案例2:网站型键盘记录程序


键盘记录程序是什么?


键盘记录(Keystroke logging)通常被称为键盘记录(keylogging)或键盘捕获(keyboard capture),指的是记录用户的击键动作,当然,通常都是秘密进行的,这样使用键盘的人就不知道他们的动作正在被监控。然后,操作日志程序(更广为人知的说法是键盘记录程序[15])的人可以捕获相应的数据了。

键盘记录程序最常用于窃取密码和其他机密信息。

键盘记录器通常会以各种形式出现,包括可执行文件、脚本文件等,但最终目标都是窃取机密数据,如密码、信用卡信息等。

键盘记录程序对应的可执行文件可以通过各种渠道植入文件系统,例如通过垃圾邮件、社会工程诈骗、漏洞利用程序,等等。不管当前系统上面运行的是哪种应用程序,键盘记录程序的可执行代码都可以监视相应的按键操作——也就是说,无论用户正在填写网站表单、向记事本文件输入内容,还是通过键盘执行任何其他操作,键盘记录程序都能发挥作用。

脚本型键盘记录程序通常都是使用诸如JavaScript、VB之类的脚本语言编写的。之后,它们会被注入到被入侵的网站中,以窃取网站访问者的密码和其他机密信息。在大多数情况下,网站所有者和访问者都不知道这种键盘记录活动的存在。同时,这些脚本型键盘记录程序只能在被注入的网站上面发挥作用。在本文中,我们将讨论如何将脚本型键盘记录程序与WebAssembly结合起来。由于这种键盘记录程序完全是用JavaScript代码编写的,因此,很容易被基于字符串的检测方法所发现。通过以下概念证明代码,我们将为读者展示如何绕过这些检测方法。

 

图10:POC代码。

对于图10所示的代码来说,其中包含了四个主要功能:

  • myFunction0()——存储用户键入的用户名。
  • myFunction1()——存储用户键入的密码。
  • display()——我们可以利用这个函数来显示通过上述两个函数获得的登陆凭证。
  • onkeypress——这个函数用于侦听用户按下的键,并将其记录下来。

在第43行和第57行,我们可以看到"change"事件监听器被附加到了用户名和密码的文本字段中。当用户输入完用户名/密码后,将会触发该事件。触发该事件时,将分别调用myFunction0()或myFunction1()中的代码,以捕获相应的登陆凭证。

代码的其余部分只是为用户输入表单构建相应的HTML前端。

在这种情况下,安全产品只会看到编译后的Wasm文件而非JavaScript源代码,从而使检测工作变得更加困难。

概念证明代码的输出结果可以在图11中看到。

 

图11:概念证明代码的输出结果。

该示例表明,WebAssembly可用于在网络钓鱼活动捕获机密信息,并且不会留下许多痕迹,从而提高了安全检测的难度。

WebAssembly——探索新领域


正如我们所看到的那样,WebAssembly可以通过各种方式用于实现邪恶的目标。但是,这些只是一个开端而已。我们坚信,在未来,WebAssembly将涉足以下一个或多个领域:

  • 浏览器漏洞利用——通过考察近期公开的浏览器漏洞利用代码,我们发现,它们许多都会涉及JavaScript代码。因此,WebAssembly可以通过混淆漏洞利用代码在浏览器攻击过程中发挥重要作用。
  • 恶意重定向——我们通常会遇到从被入侵的网站到技术支持诈骗、浏览器挖矿等页面的恶意重定向。除了通过JavaScript进行重定向之外,实际上,攻击者还可以使用WebAssembly实现重定向。下面的代码能够将受害者重定向到我们的键盘记录程序POC。

 

因此,我们可以使用WebAssembly构建一个很长的重定向链:首先,让被入侵的网站加载上面的Wasm,而Wasm代码则用于生成一个定制的网络钓鱼页面,进而通过WebAssembly代码来窃取机密信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530787.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我,想用YOLOv5实现目标的分类计数,因此本文将在之前目标计数博客的基础上添加一些代码,实现分类计数。阅读本文前请先看那篇博客,链接如下: YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…

web 实验一 HTML基本标签实验

实验原理 通过创建HTML5网页,验证form内多种元素标签及其属性的作用及意义。 实验目的 理解并掌握Form表单提交必须声明的内容 理解并掌握Input元素中多种类型属性的使用方法及使用场景 理解并掌握Label元素的使用方法 理解并掌握Datalist元素的使用方法 理解并掌握…

软件测试学习——笔记一

一、软件和软件测试 1、软件和软件分类 (1)软件:程序、数据、文档——用户手册 (2)软件的分类 按层次划分:系统软件、应用软件按组织划分:开源软件(代码公开)、商业软…

RSA 加密算法在C++中的实现 面向初学者(附代码)

概述 博文的一,二部分为基础知识的铺垫。分别从密码学,数论两个方面为理解RSA算法做好了准备。第三部分是对RSA加密过程的具体介绍,主要涉及其密钥对(key-pair)的获取。前三个部分与编程实践无关,可以当作…

C# | 内存池

内存池 文章目录 内存池前言什么是内存池内存池的优点内存池的缺点 实现思路示例代码结束语 前言 在上一篇文章中,我们介绍了对象池的概念和实现方式。对象池通过重复利用对象,避免了频繁地创建和销毁对象,提高了系统的性能和稳定性。 今天我…

你真的了解索引吗

当我们学习存储算法和索引算法时,他们可以深入了解如何在系统中存储和查询数据。因为存储和查询数据是许多系统的核心功能之一,例如数据库、搜索引擎等。理解这些算法可以帮助程序员更好地设计和优化系统架构,提高系统的可扩展性、可用性和性…

玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

一、前言 这篇文章主要总结gtest中的所有断言相关的宏。 gtest中,断言的宏可以理解为分为两类,一类是ASSERT系列,一类是EXPECT系列。一个直观的解释就是: 1. ASSERT_* 系列的断言,当检查点失败时,退出当前…

大数据之光:Apache Spark 实用指南 大数据实战详解【上进小菜猪大数据】

上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 本文将深入探讨Apache Spark作为一种强大的大数据处理框架的基本概念、特点和应用。我们将详细介绍Spark的核心组件,包括Spark Core、Spark SQL、Spark Streaming和Spa…

百子作业 —— 中国邮递员问题

题目 严老师和宋老板去勘测武威市区的道路网,每一条路都需要勘测,且需要两人合作.武威市区可以近似地看成六横六纵组成的道路网,自西向东依次为学府路、民勤路、西关路、中关路、富民路、滨河路;自北向南依次为雷海路、宣武路、祁…

Redis基本数据类型及使用(2)

书接上回,这节讲讲其余的基本数据结构使用 集合,有序集合以及遍历和事务的使用 Set集合,无序不重复的成员 表现形式: key1string1string2key2string1string2 常用的基本操作: sadd key string1 [string2..]添加1…

第二十届宁波大学程序设计竞赛(同步赛)

A-0-1翻转_第二十届宁波大学程序设计竞赛(同步赛) (nowcoder.com) 思路: 我们观察发现,奇数位与偶数位的1每次操作一定时同时增加或者减少的,我们无法做到同时删除奇数位的两个1.。不满足相等则情况无解那么&#xf…

【谷粒商城之订单服务-支付】

本笔记内容为尚硅谷谷粒商城订单服务支付部分 目录 一、支付宝沙箱 沙箱环境 二、公钥、私钥、加密、加签、验签 1、公钥私钥 2、加密和数字签名 3、对称加密和非对称加密 三、内网穿透 四、整合支付 1、导入支付宝SDK依赖 2、封装工具类和PayVo 3、前端访问支付接…

python汉诺塔编程代码

汉诺塔问题是一个经典的递归问题。以下是使用Python实现汉诺塔的一个简单方法: python def hanoi(n, source, target, auxiliary): if n > 0: # 把 n-1 个盘子从 source 移动到 auxiliary hanoi(n-1, source, auxiliary, target) # 把第 n 个盘子从 source 移动到…

三十四、服务治理、实现负载均衡、

1、服务治理介绍 先来思考一个问题 通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址 (ip,端口)等硬编码到了代码中,这种做法存在许多问题: l 一旦服务提供者地址变化…

浪潮之巅第一章 — 帝国的余辉(ATT)(一) 阅读笔记

在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。 从一百年前算起,AT&T 公司、IBM 公司、苹果公司 (Apple)、英特尔 (Intel) 公司、微软 (Microsoft) 公司、思科公司 (Cisco) 公司、雅虎 (Yahoo) 公司和谷歌 (Google) 公司都先…

相见恨晚的Matlab编程小技巧(2)-代码怎么做到逻辑清晰?——巧用注释符“%“

本文将以教程的形式详细介绍Matlab中两个常用符号“%”和“%%”的作用。初学者可以通过此文掌握这两个符号的用法,为Matlab编程打下坚实的基础。 一、什么是“%”符号? 在 Matlab 中,“%” 符号是注释符号,它后面的文本被视为注释…

GEE:下载MODIS海表温度影像

作者:CSDN @ _养乐多_ 本篇博客将介绍如何使用Google Earth Engine(GEE)平台下载MODIS(Moderate Resolution Imaging Spectroradiometer)海表温度影像数据。MODIS是一种遥感传感器,用于监测地球表面的温度变化。我们将展示如何获取MODIS数据集,并选择特定感兴趣区域进行…

C#操作Redis明细内容 C#调用redis c#使用redis业务 C# Redis操作类 C#中Redis封装的类 C#和Redis客户端

谈下你对 Redis 的了解? 1)Redis是一种基于键值对的NoSQL数据库(非关系型数据库);是一个key-value存储系统 2)高性能、可靠性 Redis将数据存储在内存中,读写性能高;Redis提供了 R…

第四十天学习记录:C语言进阶:笔试题整理Ⅰ

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int main() {unsigned long pulArray[] { 6,7,8,9,10 };unsigned long* pulPtr;pulPtr pulArray;*(pulPtr 3) 3;printf("%d,%d\n", *pulPtr, *(pulPtr 3));//6 12return 0; }输出&#xff1a;6&#…

哈工大软件过程与工具作业1(100以内加减法练习小软件)

softwareProcess-lab1-master 哈工大软件过程与工具作业1 100以内加减法练习小软件 地址&#xff1a;https://github.com/944613709/Addition-and-subtraction-practice-small-software 项目概述 &#xff08;1&#xff09;项目名称&#xff1a;100以内加减法练习小软件 &…