G.O.S.S.I.P 阅读推荐 2022-08-04

admin 2022年8月6日15:56:27评论49 views字数 2274阅读7分34秒阅读模式

2015发表在RAID会议上的论文 AppSpear: Bytecode Decrypting and DEX Reassembling for Packed Android Malware (没错,正是G.O.S.S.I.P的得意作品之一)是最早关注Android平台上代码脱壳的研究工作之一,同期的另一个研究工作 DexHunter: Toward extracting hidden code from packed android applications 由香港理工大学罗夏朴教授团队发表。今天我们要给大家推荐的就是罗夏朴教授团队的最新后续研究成果——NCScope: Hardware-Assisted Analyzer for Native Code in Android Apps

G.O.S.S.I.P 阅读推荐 2022-08-04

在这篇研究论文中,作者指出,在Android平台上对app进行分析,越来越多地需要处理native code,而现有分析技术的局限性包括:

  1. 难以准确分析所有指令;

  2. 会被程序中的抗分析方法影响;

  3. 导致额外开销影响结果。

而本文设计了名为NCScope的 native code 分析工具,利用 ARM 提供的硬件功能ETM收集程序执行的ARM指令,并通过内核提供的eBPF组件收集程序使用的内存数据,实现了更为高效和透明的native code追踪记录和分析能力。

首先让我们了解一下背景知识,ARM引入了Embedded Trace Microcell(ETM)这样一个定制化的硬件单元,来帮助CPU在运行时高速记录所有执行的指令。熟悉x86的读者肯定会马上想到,Intel同样也为CPU提供的Branch Trace Store(BTS)功能。

https://developer.arm.com/documentation/ddi0337/h/embedded-trace-macrocell

NCScope 使用 ETM 记录 CPU 执行的每一个间接分支指令的目的地址,可以从 ETM 的记录中还原程序的具体行为。但是我们知道,在 CPU 层面上是看不到操作系统和应用程序的高级语义的,所以用 ETM 记录和恢复程序行为需要处理的问题包括:

  1. ETM 记录包含 CPU 执行的所有间接分支指令,即运行的所有程序都会被记录;

  2. ETM 只记录间接跳转地址,不能记录直接分支指令。

NCScope 启用了 ETM 的 context ID tracing 和 branch broadcasting tracing 功能来解决这些问题:

  1. context ID tracing 保证 ETM 只记录目标程序执行的指令;

  2. branch broadcasting tracing 使得 ETM 可以记录直接分支指令。

NCScope 也充分运用了当前红得发紫的 Extended Berkeley Packet Filter (eBPF)来记录程序运行时的内存数据,尤其是系统函数的调用参数。

G.O.S.S.I.P 阅读推荐 2022-08-04

有了这些功能的加持,NCScope 得以按照下图所示的架构实现,让我们再来看看它的分析模块:

分析模块

NCScope 通过分析 ETM 和 eBPF 记录的数据,恢复程序中 native code 的函数调用和数据流信息。

函数调用

首先建立系统函数与指令地址之间的映射关系,然后通过指令地址在 ETM 记录中找到系统函数的调用记录,根据 ETM 的分支指令记录确定程序中调用系统函数的具体位置。

检测自我保护方法

作者总结了常用的 10 种程序自我保护的方法,包括 7 种 Root Detection (RTD) 方法和 3 种 Tampering Detection (TPD) 方法,并对每一种保护方法提出了检测规则。

G.O.S.S.I.P 阅读推荐 2022-08-04

检测抗分析机制

作者总结了 12 种抗分析机制,包括 3 种 Debugger Detection (DBD) 机制、3 种 Emulator Detection (EMD) 机制、2 种 DBI Framework Detection (DFD) 机制、1 种 Timing Check (TCK) 机和 3 种 Dynamic Code Loading (DCL) 机制,并提出对应的检测规则。

G.O.S.S.I.P 阅读推荐 2022-08-04

诊断内存问题

NCScope 可以用于诊断 CWE-416 (use-after-free) 和 CWE-415 (double-free) 两种内存问题。

通过离线符号执行还原出程序的运行时数据流信息,并在此基础上进行内存问题检测。在离线符号执行的过程中,监测 libc.so 中与内存分配和释放相关的函数,并维护一个分配与释放内存的列表,从而判断 use-after-free 和 double-free 问题。


作者对 NCScope 的多方面指标进行了定性和定量的测试

性能开销

NCScope 的性能开销主要来自 ETM 和 eBPF 的记录过程,测试结果如下表所示:

G.O.S.S.I.P 阅读推荐 2022-08-04

自我保护检测

作者随机下载了 900 个金融应用并挑选出 500 个含有 native code 的样本,检测结果如下:

G.O.S.S.I.P 阅读推荐 2022-08-04

抗分析检测

作者从安全公司获取 450 个恶意应用程序,并抽取 300 个含有 native code 的样本,检测结果如下:

G.O.S.S.I.P 阅读推荐 2022-08-04

内存问题检测

作者使用 NIST C/C++ Juliet 数据集进行内存问题检测,成功检测出所有 use-after-free 和 double-free 问题,并且不存在误报和漏报。

并且作者还使用 NCScope 对存在 CVE-2019-11932 漏洞的 F-Droid 应用进行检测,成功检测出其中的 double-free 问题。


开源代码:https://github.com/moonZHH/NCScope
论文PDF:https://chapering.github.io/pubs/issta22hao.pdf


原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 阅读推荐 2022-08-04

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年8月6日15:56:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   G.O.S.S.I.P 阅读推荐 2022-08-04https://cn-sec.com/archives/1223351.html

发表评论

匿名网友 填写信息