/ApkSec

A framework for Android APK security scan

Primary LanguagePythonGNU General Public License v3.0GPL-3.0

ApkSec -- 基于插件的APK安全扫描工具

ApkSec是一套Android APK检测框架, 它借鉴了w3af的设计思路,旨在构建一套基于插件的apk扫描工具,帮助开发者找到apk的安全性问题。 开发者可以参照实例快速的编写检测插件,这样开发者只需在关注某一检测项本身的实现,而不需要考虑整个程序的扫描流程。

ApkSec 的框架设计

ApkSec的框架被分为三个部分:

  1. 核心,掌管整个程序、调度插件以及为插件提供服务(提供文件,提交报告)
  2. 用户界面,提供与用户交互功能(开始/结束扫描,配置插件)
  3. 插件,提供apk解包、反编译、审计的插件

ApkSec 的扫描阶段

ApkSec遵循Android应用程序渗透测试中的执行步骤,为了做到这一点,它定义了不同类型的插件,这些插件将由核心部分按特定顺序调用。

从用户提供的目标apk开始,ApkSec首先调度apk审查插件,已检查apk是否符合标准,接着调度apk解包/反编译插件,这些插件从apk中提取审计阶段必要的文件,如AndroidManifest.xml,.smali文件,.java文件等,其中最常用的插件有apktool插件(由开源工具apktool改造)和jadx插件(由开源工具jadx改造),接着项目文件会流向审计插件,它们根据自己需要向核心索要文件,并报告apk是否存在漏洞。

插件介绍

apk 审查插件(APK Checker)

这类插件是最简单的一类插件,它们只需要检测apk的特征,返回apk是否为一个标准的apk的结论,具有代表性的插件有:

  • aapt插件,检查apk中是否有标准的AndroidManifest文件
  • file插件,通过file命令检测apk是否符合标准

这类插件只需要实现start()方法,核心会调度该方法获取结论。

apk 解包/反编译插件(unpacker)

apk 解包/反编译插件是最重要的插件类型之一,它们从apk中提取文件,或是反编译成源代码,为日后的审计工作提供原材料。其中的部分插件需要依赖其他插件提供的结果,因此相比于其他插件,这一类插件需要另外实现_dependencies和_ability方法,以声明它们依赖的文件类型以及它们需要的文件类型,这样核心可以通过拓扑排序以决定这些插件的执行顺序。

审计插件(Auditor)

审计插件同样重要,它们从核心索要其必须的文件,并且向核心报告审计结果。为了控制检测项质量,它们首先需要向核心注册自己的检测项(当然它们可以注册核心中给出的检测项),这与普通的Web扫描不同,因为Web扫描的检测项固定且不变化,而Apk的检测项会随系统版本、业界研究动态等外界因素变化。它们只能报告自己注册过的检测项。

用法

λ python mt_console.py
Usage:
mt_console start -F <apk_dir> [-v] [--config <config_file>]
mt_console stop
mt_console bash
mt_console (-h|--help)

TODO

解决jadx调试模式下卡死问题