无论是渗透测试还是逆向工程,移动安全都是一个重要的领域。在实际攻防过程中对移动端进行详尽的信息收集与渗透往往能大大扩展渗透测试的攻击面。

Android安全设计与架构

谷歌对Android系统的更新非常频繁,并且非常重视其安全性,因此如今的Android系统拥有非常多的安全机制。

Android总体架构分为5个层次:Android应用层,Android框架层,Dalvik虚拟机层,用户空间原生代码层,Linux内核层。

以下是来自 Android 开发人员网站的 Android 架构的图形表示:

image-20221106190835428

Android应用层允许开发者无需修改底层代码就能对设备的功能进行扩展和提升,框架层提供大量的访问Android设备所需的API,两者都是由Java开发,并且在DalvikVM中运行。

DalvikVM是一种基于寄存器的虚拟机,为底层操作系统提供了一个高效的抽象层,可以解释执行Dalvik至此的(DEX)字节码,同时依赖于一些支持性原生代码程序库提供的功能。

Android流量分析

无安全防护的应用流量分析

对于普通的http流量,使用中间人抓包软件,在移动端设置代理,便可以轻松抓取。

对于普通https的流量,需要在移动端安装抓包软件生成的证书,使得移动端能够信任来自中间人软件的公钥。

开启了SSL Pinning的应用流量分析

SSL Pinning 的原理

在客户端内置服务器的证书或者公钥,客户端连接服务器时,对比内置证书或公钥是否与服务器的证书或公钥一致,不一致则断开连接。这样就可以让中间人伪造的证书无法通过验证。

SSL Pinning 的类型

  1. 内置证书
    将证书放入app的bundle里。服务器的证书修改或者过期时需要同步更新app。
  2. 内置公钥
    将证书的公钥硬编码进代码里。只要服务器的公钥不变,就不用更新app。

即使做了SSL Pinning,依然有HTTPS被劫持,内容被篡改的可能。具体的一些方法可以参考已有的文章。

bypass android ssl pinning | blog

使用了强校验+强混淆与加固的应用流量分析

对于这类应用除了粗暴地逆向分析其网络通信的代码外,我们需要有更加强大的手段进行对抗。因此安全人员开始利用eBPF技术。

eBPF

eBPF 是一项革命性的技术,起源于 Linux 内核,可以在操作系统内核中运行沙盒程序。它用于安全有效地扩展内核的功能,而无需更改内核源代码或加载内核模块。

从历史上看,由于内核具有监督和控制整个系统的特权,操作系统一直是实现可观察性、安全性和网络功能的理想场所。同时,操作系统内核由于其核心作用和对稳定性和安全性的高要求,难以演进。因此,与在操作系统之外实现的功能相比,操作系统级别的创新率传统上较低。

image-20221106192849891

eCapture

使用此技术的一个强大的工具是eCapture(旁观者): capture SSL/TLS text content without CA cert Using eBPF.

ehids/ecapture: capture SSL/TLS text content without CA cert using eBPF. supports Linux/Android x86_64/Aarch64.

image-20221106192734844

本项目hook了/lib/x86_64-linux-gnu/libssl.so.1.1SSL_writeSSL_read函数的返回值,拿到明文信息,通过ebpf map传递给用户进程。

而对于使用了自实现SSL通信的应用来说,这类工具可能就无法抓取其明文流量。解决方式是修改工具的hook代码,或者自己对应用关键位置进行逆向与分析,并自己实现流量的抓取。此时就需要了解Android端的hook技术。

Android逆向与hook技术

安卓frida学习笔记 | YLCao’s Blog

敏感信息泄露与硬编码

安卓Java层逆向

Dalvik可执行格式与字节码

Java层加固与混淆

安卓Native层逆向

ARM汇编语言

Native层混淆

软件壳对抗

⬆︎TOP