前言
昨天晚上和甲方A的开发同学对了安卓应用需求的代码修改点,今天和甲方B的开发进行安全需求评审,经过这两天的接触,发现很多甲方安全同学对常用的安卓应用的安全检查项的细节并不是很了解,这里总结下常见的安全检查的内容,并附上相关的测试工具。
StaCoAn
https://github.com/vincentcox/StaCoAn
使用感受,就是比较简单,下载windows的启动包,直接启动
将需要测试的apk放入其中进行检测,点击获取报告(个人感觉是内置了jadx后进行关键字解析)
检查Manifest.xml的方式
在APK中有一个清单文件,即Manifest.xm。它是这个APK的配置文件,包含很多内
容。
漏洞往往就出现在该文件中。接下来我们看看该文件有哪些需要注意的点。
1)检查应用程序是否可调试。检查清单文件里是否有debugable="true",这样的程序可
以用 idb 调试。
2)检查 APK是否允许备份。检查清单文件里是否有 android:allowBackup="true",这样
的程序可以通过 ADB 备份应用,从而有可能泄露隐私数据,
3)检查是否有导出的Activity。检查清单文件里是否有<activity android:name="
TestActivity" android:exported="true"/>,这样的 Acitivity 组件可以被其他应用调用。
4)检查是否有导出的 ContentProvider。检查清单文件里是否有<provider android:name="
DBContentProvider" android:exported="true">,这样的 Provider 可以被其他应用调用。
5)检查是否有导出的Service。检查清单文件里是否存在<service android:name="
ExampleExportedService" android:exported="true"/>,这样的 Service 可以被其他应用调用。
6)检查是否有广播接收器。检查清单文件里是否存在<receiver android:name="
MyBroadcastReceiver" android:exported="true">,这样其他的应用可以发送广播给该程序
7)检查是否有URL Scheme。检查清单是否存在 Activity中具有URL Scheme:<data
android:scheme="app" android:host="open.my.app"/>。这样的Activity可以被其他应用通过
URL 打开,包括浏览器。
8)检查 Activity模式是否为 singleTask。具有 singleTask模式的 Activity 具有被劫持的风
险,检查命令如下。此类漏洞的详情可以参考
https:/blog.takemyhand.xyz/2021/02/android-task-
hijacking-with.html
<activity android:name=",MainActivity" android:launchMode="singleTask">
程序数据保存的位置是否安全检查
首先,默认情况下,对于在内部存储中创建的文件,只有应用程序自己才能访问。但有 些程序使用MODE WORLDREADBALE和MODE WORLDWRITABLE可以将这些文件公 开出来。在 Android 设备的/data/data/中会有每个应用程序的文件夹,在里面都有一个 Shared Prefs 和 databases 文件夹以及由应用程序所创建的其他文件夹。这些文件夹里的文件都属于内 部存储,如果程序使用了MODE WORLDREADBALE,命令如下,则任意程序都能访问该 文件。
如下所示,该文件中存在密码等敏感信息
root@vbox86p:/data/data/org.owasp.goatdroid.fourgoats/shared prefs # ls-al
ls -al
-rw-rw-r-u0 a99 u0 a99 209 2015-01-14 13:55 credentials.xml
-rw-rw-r-u0 a99 u0 a99 153 2015-01-14 13:55 destination info.xml
-rw-rw-r-u0 a99 u0 a99 1482015-01-14 13:55 proxy info.xml
rootevbox86p:/data/data/org.owasp.goatdroid.fourgoats/shared prefs # cat
credentials.xml
redentials.xml
<?xl version='1.0'encoding-'utf-8'standalone='yes" ?>
<map>
<string name-"password"
,goatdroid</string>
<boolean name="remember" value="true">
>qoatdroid</string>
<string name-"username"
</map>
其次,在外部存储上创建的文件是全局可读和可写的,因此是不安全的。外部存储的路 径通常是 /store/emated/0、/sdCard、/mnt/sdCard。如果程序将可执行的文件放在该目录下,则 要检查一下它是否会校验签名等完整性信息。
检查是否有硬编码秘钥
有些程序将敏感数据存储在本地,并使用代码中 硬编码密钥对其进行加密。这样可以通过逆向的方式 获取密钥,从而解密敏感数据,如图所示,存 在硬编码私钥。
应用使用的加密算法是否安全检查
程序不应该使用过时的加密算法,比如RC4、 MD4、MD5、SHA1等,https:// www.ibm.com/docs/en/ibm-mg/8.0?topic=cipherspecs-deprecated
自动化静态工具分析
MOBSF
如图所示,MobSF 是一个很强大的开源分析工具,既可以静态分析也可以动态分 析。它的下载地址为 https://github.com/MobSF/Mobile-Security-Framework-MobSF,也支持直 接在 https://mobsf.live/上进行在线试用。
Yaazhini Android
下载地址:https://www.vegabird.com/yaazhini/,可以作为mobsf的平替选择
通过Yaazhini扫描出项目中的中危漏洞!!
原文始发于微信公众号(车联网攻防日记):【车联网】车载安卓应用攻击-自动化安全配置检查