APP应用安全检测
Editor's Note
移动安全检测
The following article is from 小道安全 Author 小道安全
背景
目前APP发包上架的流程前,免不了需要对APP应用安全检测这个重要且必不可少的步骤流程,APP应用安全检测大部分采用采购第三方的APP安全检测产品(因为这块技术基础储备),也有部分企业基于开源的移动安全框架(MobSF)进行二次开发APP安全检测产品(采购第三方产品费用太高),也有部分安全团队基于团队的技术储备进行基于逆向第三方APP安全检测产品进行开发自研的APP安全检测产品(采购第三方检测产品)。
其中移动安全分析开源的框架 (MobSF-obile-Security-Framework)它是基于python进行开发的,它是一个智能的、集成型的、开源移动App(安卓/iOS)自动检测框架,能用于静态检测和动态检测。该框架可以进行高效迅速的移动应用安全分析。
它的下载地址为
https://github.com/ajinabraham/Mobile-Security-Framework-MobSF
APP应用安全检测的风险程度一般分为:高危、中危、低危。
APP安全监管部门主要有:网信办、各地区网安、工信部、市场监督总局。
因为APP应用安全检测没做好,那么APP就会面临被通报、下架的风险,这对企业来说是个非常致命的问题,不仅影响到产品的发展、同样也给企业发展带来一定的风险。
下面就分析下APP应用安全检测(需要动态检测和静态检测相结合),具体的检测维度和检测思路。
基本信息检测
通常情况下,APP包基本信息的检测维度 : APK文件名称、应用名称、包名、文件大小、版本信息、签名信息、sdk版本、APP的MD5、是否有采用第三方加固、第三方sdk的数量等等。
APP权限检测
APP权限检测中比较突出的问题有:在APP应用中的隐私合规说明中没有向用户明示申请的全部隐私权限。
对APP权限检测主要是通过检测AndroidManifest.xml文件中申请权限,然后对应的对比APP隐私合规说明中是否都有明示申请的权限,并且明示申请权限的作用和目的。
下图简单罗列下某APP中的权限信息,合规安全做法是要保证APP隐私合规说明中有罗列出这些权限信息,并且描述获取这些信息的作用和目的。
APP自身安全检测
APP自身安全检测主要检测APP是否采用第三方加固产品进行加固或者有对APP进行做保护。
APP自身安全检测主要检测维度:
dex文件(java代码)是否有保护(是否有反编译风险);
elf文件(so文件)是否有保护(是否有反编译风险);
资源文件是否有保护(是否可以直接被人盗取利用);
内部四大组件是否安全(是否存在被攻击风险)。
1、Java代码中通常包含APP的业务逻辑代码,甚至一些核心功能代码,通过打包后会生成dex文件,java从开发角度来说可以利用ProGuard进行做混淆保护,dex文件可以利用第三方的加固产品进行对dex整体加固保护、函数抽取保护、vmp虚拟机保护等等。
如果dex文件没做任何保护的情况下,直接可以利用apktool反编译或者jadx、androidkiller、dex2jar、GDA等工具直接查看java代码,这样就容易直接把关键的业务逻辑暴露出来,造成功能泄露以及功能被破解的风险。
如果dex文件有进行保护,那么同样可以查看java代码分析APP应用业务逻辑,但分析有保护的代码的门槛就有所提高。因此这个的源码级的风险等级是高危型的。
2、Android中一些核心的功能代码都是在so实现的,需要通过JNI方式进行C、C++的编码实现生成so文件(ELF文件)。
如果so文件保护方案可以字符串混淆加密、关键逻辑虚拟化、函数抽取等源码级保护,如果so有进行保护,那么通过静态工具IDA就无法很直观找到分析的突破点,通过利用frida和ida动态分析的门槛就相对比较高。
如果so文件没任何保护状态,那么就可以直接利用ida工具可以快速的分析出so的关键功能代码。
3、Android中的四大内部组件分别为:activity、service、content provider、broadcast receiver,检测它们是否存在组件导出的风险,如果四大组件存在导出的风险,会被第三方的APP进行任意调用,导致一些敏感信息泄露,权限绕过,拒绝服务端的风险。
检测四大组件是否有导出风险,通过读取AndroidManifest.xml配置文件四大组件名称,组件名称后面的exported的属性值,如果为true就是导出,为false就是未导出。这种风险相对来说是低危的风险。
APP数据存储安全检测
1、检测dex的java代码和so的C、C++代码,它们是否存储着加解密算法密钥的硬编码,APP中一些关键数据的安全性依靠强大加解密算法,如果加解密算法被攻破那么这个关键数据就会被盗取,这个风险是比较致命的高危风险。
2、检测APP中数字证书是否用明文方式存储,数字证书是用于校验APP客户端和服务端身份合法性的条件,通过搜索dex文件和so文件中是否存储着明文的数字证书,如果存储明文的数字证书,那么客户端和服务端校验的合法性得不到保障,容易被非法伪造、盗取,从而造成正常业务出现风险,因此这个数字证书明文的风险也是高危的风险。
3、检测APP的xml文件中存储明文数据风险,如果xml文件中存储着一些重要敏感的明文数据,那么可以直接在app安装后用adb命令方式拷贝进行查验,或利用第三方的MT管理工具查看xml文件,这种明文存储的会导致敏感的配置信息、账号信息被泄露的风险,这个风险属于中危的风险。
4、检测APP中logcat日志函数调用风险,logcat函数作为android开发过程中重要的调试信息的,它可以进行关键功能验证及数据信息的输出,如果这个logcat被调用或在APP的发布版本上,还会进行调试信息的输出。检测这个logcat是否有调用可以从dex文件中检测是否有logcat函数存在,还有可以通过安装APP,然后通过利用android device monitor监控工具查看运行过程中是否有关键敏感信息的输出。这个会导致一些业务功能逻辑和敏感信息的泄露,这个属于低风险。
5、检测APP中明文URL、明文账号密码,手机号码信息。明文的信息在APP中这个是属于比较低级的风险,但是如果在APP的dex文件或so文件中存储着这些明文信息,那么这个会成为APP被破解被攻击的最直接的信息和突破点。
APP数据传输安全检测
1、检测APP中HTTP数据传输风险,如果在APP发布版中使用http进行数据通信,传输的数据包将以明文方式进行传输,那么可以通过抓包工具(charles、wireshark等)设置代理方式就可以将数据包进行抓取并快速分析出数据包的结构和关键字段信息。如果使用集成ssl的https进行数据传输,可以保障数据安全性更高。这个APP中使用http传输的风险是高危的。
2、检测APP中HTTPS证书和主机名弱校验风险,在APP中利用抓包工具进行分析 https通信数据,如果分析到https通信对证书和主机名称没有进行强校验的话,那么这个存在恶意程序利用这个漏洞进行对服务器或者通信数据包进行恶意操作。从而影响APP的正常数据通信的风险,这个风险属于中危风险。
运行环境安全检测
1、检测APP中AndroidManifest.xml配置文件中是否开启调试开关,如果调试开关开启那么就会给app中的敏感信息、业务逻辑的破解带来风险。这个风险性是高危的风险。
2、检测so文件是否存在有被动态调试的风险,就是是否可以利用IDA、GDB等工具进行直接动态调试分析代码,这种风险会给app安全带来业务逻辑或关键数据被篡改。这对app安全是致命的。检测的思路和方法是直接利用GDB、IDA工具去附加,如果无法附加或者附加后闪退或无法调试,那么就说明这个so文件是安全的。这个so安全风险是高危的。
3、检测app是否存在可以直接动态注入风险,通过利用系统函数ptrace进程注入,如果可以直接注入的情况,那么这个app就存在注入风险,否则就没有这方面的风险。APP被注入后有敏感信息被获取、账号 、密码、通信数据等。这个注入风险也是高危的风险。
4、检测app内存被转存(内存dump)的风险,通过利用调试工具或hook框架或者通用的修改器(例如:GG修改器、八门神器),获取APP运行时要转存的基地址和大小。这样利用frida框架或IDA调试工具的脚本,如果可以直接将运行时的内存dump下来,那么APP就存在内存被dump的风险,因APP运行时内存存储着密钥、解密后的数据、解密代码,所以如果被dump那么就会导致APP核心数据和功能被篡改的风险。因此这个内存dump的风险也是高危的风险。
5、检测APP是否存在二次打包或盗版的风险,通过利用apktool工具对app进行解包,再进行修改后重新打包,最后验证APP安装和功能运行是否正常,如果通过二次打包后还能正常运行,那么该APP就存在有被二次打包或盗版的风险。这个风险直接影响到APP的生命周期,因此这个风险也是高危的风险。
6、检测APP在ROOT环境下是否可以正常运行,如果APP可以在root环境下正常运行,那么就存在这方面的风险,那么就会导致APP的安全性大大降低。这个root环境运行的风险算是对APP影响不是非常大,因此这个风险算是低危的风险。
其他方面检测
其他方面检测主要检测:APP是否包含病毒;APP中是否包含敏感词;APP中包含的广告sdk;webview的明文、远程漏洞; APP中数据库存储等等。
病毒检测主要是调用用一些第三方公开的病毒扫描引擎,进行检测 病毒库中的病毒特征扫描比对。
敏感词检测主要通过利用敏感词库进行比对,APP中是否存在和敏感词库一样的敏感词(这个敏感词需要不断持续的更新维护)。
广告sdk检测通过检测APP中的所有第三方sdk,APP中含有广告sdk会影响到用户体验,也会影响到APP的安全生命周期。
总结
APP安全检测主要在两方向检测,一个APP自身安全性方面检测,一个是合规性检测。
APP自身安全性检测的一个很重要的检测在于APP是否进行采用第三方加固产品进行对APP检测。
APP合规性检测在于APP个人敏感信息最小收集原则、对个人信息进行必要保护原则。
欢迎扫码关注"哆啦安全"视频号
【推荐阅读】
bundletool工具使用(Android aab包安装)
Google Play上架App之aab转apk和apk转aab的使用方法
Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)
Gradle Plugin+Transform+ASM Hook并替换隐私方法调用(彻底解决隐私不合规问题)
关注、点赞、转发、分享!