测试说明
测试内容根据绿盟APP测试流程进行检查,APP是前几年谷歌CTF的中的APK。
客户端安全
安装包签名
jarsigner.exe -verify WhyShouldIPay.apk -verbose -certs
输出结果为“jar 已验证”时,表示签名正常。
程序保护
此处使用jadx打开APK,若软件使用混淆好加壳则不存在问题。如下打开后是下面这种,则是没添加保护。
应用完整性检测
反编译APK,修改其中的res资源文件,把其中的一个图片替换为其他图片
如果完整性是检查MANIFEST.MF 中的数据则存在风险。若回编译后安装使用正常,则代表无检查。
组件安全
主要查看是否存在android:exported="true"
属性的组件,存在属性的组件可以被第三方导出。但是部分组件需要被调用来执行,比如组件中存在<intent-filter>
过滤器。这种组件就相当于允许导出。
根据不同的要求这种情况不一定算是风险项。比如此activity组件,由于是首启动页。需要被调用执行,也就不存在上面所说的不允许被导出情况。
webview组件安全
Android 4.2 版本以下的 webview 组件存在安全漏洞 ,检测本地是否会被利用的方式是允许运行的sdk最小不能低于17,来避免在受影响的手机上使用。
敏感信息安全
数据文件
查看安装app目录文件权限是否为rw-rw----
当前用户可读性模式。
如果文件目录下存在database目录,db类型的文件,说明使用本地数据库,查看数据文件是否有明文敏感信息。
日志文件
查看日志文件中是否输出了一些敏感信息,比如账号密码,认证session等
可以通过adb命令查看,也可以使用第三方连接软件查看adb logcat
密码键盘安全性
屏幕录像
这种问题从测过的软件和客户来看,在意的程度不高,可能也就在银行金融类APP上会比较在意。
比如利用adb截图来测试是否可以对屏幕进行记录adb shell /system/bin/screencap -p /path/a.png
如果打开后,可以看到输入的数据,或者可以看到键盘点击反馈则算安全问题。
随机键盘
这种目前只在银行APP支付的时候输入银行卡密码的时候存在,一般APP并没有此要求。可以根据情况来确定是否需要检测此项。
安全策略
密码复杂度
APP登陆的密码一般要求大小写字母和数字,需要其中两种以上,不少于八位。如果允许使用纯数字或者纯字母,且长度没有要求的情况下,则存在问题。
账号登陆限制
根据业务需要,是否允许同一个账号多设备登陆同时操作,如果不允许则尝试多设备登陆,登陆正常使用则存在问题。
账号锁定机制
账号可能存在被爆破密码的可能,在有些不适合使用验证码的场景下,对账号执行登陆错误次数的限制是可以有效防止账号被暴力破解的方式之一。
验证码安全性
查看使用的验证码是否能被简单识别,使用能正常使用和防止登陆中被多次验证的问题
安全退出
账号在登陆退出后,查看是否正确的注销session。利用原session是否还可以请求到数据。
密码修改验证
验证修改密码的功能是否存在问题,是否需要原密码判断,修改的复杂度等是否符合要求
activity 界面劫持
如果攻击者注册一个receiver,响应android.intent.action.BOOT_COMPLETED,使得开启启动一个service;在这个service中启动一个计时器,不停枚举当前进程中是否有预设的进程启动,如果发现有预设进程,则使用FLAG_ACTIVITY_NEW_TASK启动自己的钓鱼界面,而正常应用的界面则隐藏在钓鱼界面的后面。
比如使用https://github.com/abigbread/Hijack来创建一个apk。循环监听设置好的app。
进程防护
动态注入
可以利用成熟的HOOK框架来尝试,比如使用xpose,在对于进程文件中,查看maps文件。其中可以看到对于的xpose文件
或者使用Frida来加载其中的所有的类,查看是否正常获取。
通信安全
通信加密
这种更像是web漏洞,主要查看是否使用了https加密流量,并且是否有正确的证书配置。加密算法是否在TLSv1.1以上。