记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

Happer: Unpacking Android Apps via a Hardware-Assisted Approach

2021-11-01 16:08

作者:Lei Xue, Hao Zhou, Xiapu Luo, Yajin Zhou, Yang Shi, Guofei Gu, Fengwei Zhang, Man Ho Au

单位:The Hong Kong Polytechnic University, Zhejiang University, Tongji University, Texas A&M University, Southern University of Science and Technology, The University of Hong Kong

会议:42nd IEEE Symposium on Security and Privacy

原文:http://malgenomeproject.org/papers/sp21_happer.pdf

Abstract

恶意软件通常都会使用加密壳来防止其安装包被分析。尽管现在已经有很多脱壳工具,但是这些工具很容易被加密壳检测并绕过,并也不能有效地收集到脱壳得到的真实 DEX 文件。为了填补其中的技术空白,作者提出了第一种基于硬件的先进的脱壳工具。这种工具通过监控加密壳的行为动态选择合适的脱壳方法对受监控软件进行脱壳,并收集其 DEX 文件。不仅如此,作者还进一步开发了一种行为描述语言 BDL 和脱壳工具 Happer 来针对不同的加密壳行为来脱壳。作者最后在 12 个安卓商业加密壳和超过 2 万 4 千个安卓 App 上进行评估,观察到了 27 个加密壳行为,其中有 17 个行为都是之前没有研究过的。基于这些行为,Happer 使用了正确的脱壳方法来对这些采用商业加密壳的应用进行了完全地脱壳,并组装成了合法的 DEX 文件。

Introduction

恶意软件编写者通常都会使用商业加密壳来保护这些恶意软件被分析。这些加密壳通常有很多行为,例如:检测执行环境、保护原始 DEX 数据和在运行后释放这些 DEX 数据等。在加密壳发展的同时也涌现了很多脱壳工具,这些工具通常使用魔改过的 Android 系统或调试器、动态分析器(DBI)或完整的 Android 模拟器来获取加密壳释放到内存中的 DEX 数据。

但是,在加密壳和脱壳工具互相斗争了这么久以后,脱壳工具逐渐不敌加密壳,无法有效地收集现在商业加密壳保护的 DEX 数据。在这种情况下,作者认为应当开发一种长期有效的脱壳工具,在分析加密壳行为的基础上选择合适的脱壳手段对加密壳进行脱壳。

作者提出了以下三种针对脱壳工具的要求:

  1. 有效性:脱壳工具应当可以获取所有的 DEX 数据
  2. 可扩展性:脱壳工具应当可以方便地扩展从而覆盖更多的加密壳行为
  3. 适应性:脱壳工具应当可以针对加密壳的行为选择合适的脱壳方法

作者还对现有的脱壳工具进行了评估:

本文贡献:

  1. 作者提出了首个基于硬件的脱壳方法
  2. 作者使用该方法开源了脱壳工具的原型
  3. 作者在 12 个安卓商业加密壳和超过 2 万 4 千个安卓 App 上进行评估,观察到了 27 个加密壳行为,其中有 17 个行为都是之前没有研究过的。最后也成功提取了所有受保护的 DEX 数据

Background

Hardware Features of ARM Platform

  1. Non-invasive Tracing - ETM
    1. 跟踪进程
    2. 使用 DSTREAM协助
    3. 重点关注地址与上下文(虚拟地址空间)
  2. Invasive Tracing - HBRKs
    1. 硬件断点
    2. 相对于软件断点来说难以追踪

A Motivating Example

High-Level System Design

Overview

Workflow

  1. 监控 Runtime 行为
    1. 加载 EBL 编写的特定行为
    2. 运行 App
    3. ETM Stream、需要的内存内容、释放的 DEX 数据
  2. 分析壳行为
    1. 分析 ETM Stream
    2. 获取内存内容与 DEX 数据
  3. 脱壳
    1. 获取正确的 DEX 数据收集点
    2. 获取 DEX 数据
    3. 组装为完整 DEX 文件

Challenges and Solutions

Fetching Memory Data

由于操作系统内核的内存管理特性,有些情况下数据被虚拟地址空间分配并不会被加载到物理内存中(例如 mmap)

Solution: 作者采用了 DBI 迫使操作系统将加载进虚拟内存的数据都分配到物理内存中

Resolving ETM Stream

现有的 ETM Stream 解析器都仅仅关注虚拟地址和被 trace 的指令,而检测加密壳的行为需要更高的层次的语义信息,例如 Android 框架和 Native 方法的调用。

Solution: 作者设计了一个新的解析器从加载的系统库与 OAT 文件中获取信息来解析 ETM Stream

Collecting Dex data

很多加密壳只会在 Android Runtime 需要 DEX 数据时才会释放被保护的数据

Solution: 作者针对加密壳行为利用 Hook 机制修改内存数据与寄存器的值调整 Android Runtime 的执行流,从而解析并获取 DEX 数据

Monitoring Runtime Behaviors

Tracing Execution Flow

  1. 追踪 Context ID:监控特定进程
  2. 分支广播跟踪:ETM 通常仅会记录执行的每个非直接分支跳转指令的目标地址,需要使 ETM 记录直接与非直接分支跳转指令的目标地址

Fetching Memory Data

由于 Happer是以外部调试器工作的,因此不能访问目标进程的虚拟地址。因此使用以下两步获取内存数据

  1. 计算物理内存地址(MMU)
  2. 强制加载进物理内存

Analyzing Packing Behavior

Resolving ETM Stream

  1. 构建地址-函数映射
  2. 解析方法调用

Behavior Description Language (BDL)

Identifying Packing Behavior

  1. Anti-Debugging (ADG)
  2. Anti-Emulator (AEU)
  3. Anti-DBI (ADI)
  4. Time Checking (TCK)
  5. System Library Hooking (SLH)
  6. Dynamic Dex File Loading (DDL)
  7. Dynamic Dex Data Modification (DDM)
  8. Dynamic Runtime Object Modification (DOM)
  9. Dex Data Fragmentation (DDF)
  10. JNI Transformation (JNT)

Unpacking Apps

Determining Dex Data Collection Points

Collecting Dex Data

Happer迫使加密壳释放所有的 DEX 数据,并通过目标数据的起始地址和大小来定位虚拟内存中的 DEX 数据。起始地址可以通过 DEX 数据收集点的寄存器值获得,而大小则需要通过数据收集点的相关信息进行判断。

Reassembling Dex Data

  1. 收集 DEX 数据
  2. 使用 baksmali拼接 DEX 数据为完整有效的 DEX 文件

Evaluation

数据集

  1. 第一批从 F-Droid 上随机挑选的 20 个 App,12 种商业加密壳,即 240 个 Apk
  2. 第二批直接收集了 24031 个 Apk
  3. 第三批 1787 个恶意软件 Apk


知识来源: https://loccs.sjtu.edu.cn/gossip//blog/2021/07/05/Happer-Unpacking-Android

阅读:71092 | 评论:0 | 标签:Android app android

想收藏或者和大家分享这篇好文章→复制链接地址

“Happer: Unpacking Android Apps via a Hardware-Assisted Approach”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

求打赏·赞助·支持💖

标签云