QARK工具的介绍和原理分析


文章目录
  1. 1. 简介
  2. 2. 前提条件
  3. 3. 功能
  4. 4. 原理分析
  5. 5. 操作步骤
  6. 6. 总结

简介

QARK的核心是一个静态代码分析工具,旨在识别基于Java的Android应用程序的潜在安全漏洞和关注点。QARK还试图提供动态生成的ADB(Android调试桥)命令,以帮助验证其检测到的潜在漏洞。它甚至可以动态地创建一个定制的测试应用程序,以即用APK的形式,专门设计来展示它发现的潜在问题。
QARK的设计是基于社区的,可供所有人免费使用。QARK被设计出来的主要目的和大多数的自动化检测工具一样是教育开发人员和信息安全人员了解与Android应用程序安全相关的潜在风险 ,相应的开发人员和评估人员就可以在开发和检测阶段,针对于APP移动应用进行检测,及时修改相应的风险点。

前提条件

• python 2.7.
• JRE 1.6+(最好1.7+)
• Ubuntu环境(最好)
• 未加固的测试APK;
• 一台root过的手机
在前提条件中,有提到未加固的APK,从简介中,我们就提到该工具就是一个静态代码分析的工具,在其中QARK的脚本中是没有脱壳的脚本,所以是需要未加固的APK,其中的ubuntu环境不是唯一的,但是我只在ubuntu成功过,所以我建议试用该环境。

功能

QARK是一款易于使用的工具,能够找到Android应用程序中的常见安全漏洞。与商业产品不同,它可以100%免费使用。QARK提供教育信息,允许安全审查人员找到对漏洞的精确和深入的解释。在反编译APK时,QARK可以自动使用多个反编译器,利用它们的组合输出来产生出色的结果。最后,QARK与传统工具相比的主要优势仅仅是指出可能存在的漏洞,它可以产生ADB命令甚至功能齐全的APK,将假设的漏洞转化为“POC”漏洞利用。
包含在此工具尝试查找的安全漏洞类型中的有:
• 无意中导出的组件
• 未妥善保护的导出组件
• 易受拦截或窃听的intent
• 不正确的x.509证书验证
• 创建事件可读或事件可写的文件
• 可能泄漏数据的Activity
• 粘滞的intent的使用
• 不安全地创建了Pending Intents
• 发送不安全的广播Intent
• 嵌入在源中的私钥
• 弱密码学使用不当或不适用
• 潜在可利用的WebView配置
• 导出偏好活动
• Tapjacking
• 启用备份的应用程序
• 可调试的应用程序
• 支持过时API版本的应用程序,具有已知的漏洞

原理分析

前面我们说过该工具就是静态代码分析的工具,所以首先我打开相应的qark.py脚本文件,其可以发现刚开始就使用到unpackAPK脚本,然后打开相应的unpackAPK,py,发现相应aapt和dex2jar,这里就可以知道还是老方法,对apk进行反编译,然后在进行相应的dex2jar把dex转换为jar文件,之后在进行查看源码。


然后就是相应的代码静态分析,这里就需要对于检测项目的了解,其实说到底就是一个关键代码查找和匹配,因为这些检测项目大部分引起的原因就是编写代码没有注意到相关的安全措施,例如其中的组件暴露就是,组件的属性exported:设置为ture或者没有设置,则默认为true,这就会导致相应的组件暴露。
我们查看下mouble文件夹里面,基本上所有的检测项目都是这里的检测检测脚本。

我们就分析其中的cryptoFlaws.py这个脚本,从字面意思就是密码缺陷,那这个部分就是针对于移动应用加解密子之类的风险。我们直接打开来查看其中方法。
这里我们看到相应的寻找ECB的特殊关键字,这个是检测AES和DES是否存在弱加密(ECB模式)的风险。

这个地方是匹配PRIVATE\sKEY的1特殊关键字,寻找相应的加密算法的私钥,这个地方的私钥如果存在且是以明文形式存在,这个就是加密算法的密钥硬编码风险,会导致相关的加密算法被破解。

这里还有一个地方,但是方法被注释掉了,这个是匹配SecureRandom.setseed()方法,这个是伪随机数的一个风险点。

大部分的原理都是类似的。所以其他的脚本就看各位自己去分析。

操作步骤

QARK有两种模式:1.交互模式 2.无缝模式
交互模式使用户能够交互地一个接一个地选择选项。而无缝模式允许我们用一个命令完成整个工作。
我们主要看看交互模式的实际应用。
输入python qark.py

接着会有选择apk或者soure,这些都是通过数字来进行选择。继续下去会有输入路径或者通过设备来进行检测。我们选择1,然后底下就开始提示是否导出mainfirst文件。

接下来就直接导出相应的mainfist文件,这其实就是直接反编译获取到的。接下来就是先从mainfirst文件进行分析,分析相应组件暴露和allowback和debuggable等相关的风险点。


接下里,我们继续查看,直接检测broadcast广播是否有附带相应的敏感信息,然后就是相应的脚本进行检测,例如x509证书检验,这些都是该工具具有的代码静态分析。


最后会在qark的本身目录中的report.html文件,这个文件类似于mobsf生成的界面。这里面就是会把刚刚经过检测的所有风险都以报告的形式打印出来,都会在相应的选项中,详细的告诉你风险点存在的位置,以及相应的危害。
但是在这里我们只是看到很稀少的数据,其实这些数据只是mainfist文件暴露出来的风险点,但是代码中的分析根本没有进行分析。问题出在于apk本身,这是一个有进行加固的apk,我之前说过这个工具无法进行相应的脱壳,所以导致无法获取到相应的代码,就无法进行相应的分析,所以其他数据就是空的。

总结

在安装的过程会有一个问题就是python no module named _curses的问题,这个问题最后解决了,经过对比python2.6 ,终于发现,原来 pythong2.7/lib-dynload 里没有相应的 curses 库,_curses_panel.so,_curses.so。说到底就是去缺少文件,所以此时你将python2.6 的 这2个so文件拷贝到 pythong2.7 的lib-dynload 文件夹下, 就解决了问题。或者你可以下载ncurses文件,然后重新跑下python就可以了。

我们前面也说过这款工具是为了教育开发人员和信息安全人员了解与Android应用程序安全相关的潜在风险 ,相应的开发人员和评估人员就可以在开发和检测阶段,针对于APP移动应用进行检测,及时修改相应的风险点。
其实通过对于QARK的了解,我们不难看出这就是和大多数自动化工具一样就是,感觉就像个多了些脚步的Mobsf,作为一个安全评估人员,其实再多的检测工具也是辅助,我们仍然需要进行自己的分析,有些风险点也不一定是准确的,所以我们是需要好好利用该工具。

参考的文章:
http://resources.infosecinstitute.com/qark-a-tool-for-automated-android-app-assessments/#gref
https://github.com/linkedin/qark
工具下载链接:
https://github.com/linkedin/qark