接续:APP 安全测试(OWASP Mobile Top 10)--后篇之二
M7- 客户端代码质量
测试点:
- 将不受信任的输入传递给移动代码中的方法调用的实体
Activity组件本地拒绝服务Activity劫持Activity组件绕过Broadcast Receiver组件本地拒绝服务Broadcast盗窃恶意Broadcast注入Content Provider组件本地拒绝服务Service组件本地拒绝服务Service劫持恶意Activity/Service调用- Symbols Remnant
- 弱Check-sum控制/改变检查
- Unix domain sockets的不安全权限
- 不安全网络sockets的使用
- 本地数据文件存储安全
- 调试信息是否关闭
- 第三方SDK安全性检测
- 留存的测试组件或信息
- 代码中不当的异常处理
- 保留的内网地址信息
- 数字签名检测
测试内容:
1. 上篇已经说明
2. 该篇介绍蓝色部分
3. 其他
测试方法:我这边主要的测试方法,看源码,源码查找。
- Unix domain sockets的不安全权限
- 不安全网络sockets的使用
1. 反编译,查找代码中有无Socket相关的SDK。
2. 代理拦截查看有没有走socket。使用的是Burpsuite,具体应用网上应该有相应的说明
Http请求:
socket:
注意,可以看到上面socket是空的。
- Symbols Remnant
- 调试信息是否关闭
- 第三方SDK安全性检测
- 留存的测试组件或信息
- 代码中不当的异常处理
- 保留的内网地址信息
这几块都是涉及纯粹的源码查找:
1. Symbols Remnant:
2. 留存的测试组件或信息
代码中查找一些特殊的开发留着源码中的特殊字符,测试组件,调试日志,打印日志,注释代码
3.调试信息是否关闭:
Debug = "false"设定,这里不仅要注意自身SDK的调试状态,还要注意第三方的SDK的调试状态。
4. 代码中不当的异常处理
代码查找error的处理,例如下面finally的处理位置放错了:
5. 保留的内网地址信息
测试前可先知道公司内网的ip段:如172.123.*.*,然后源码查找。
6. 第三方SDK安全性检测:1. Debug的状态。2,SDK是不是冗余的,这块我是跟负责打包的开发每个sdk进行确认的。
其他:
7. 弱Check-sum控制/改变检查:这块可以放在应用完整性模块来测,后续再说。
8. 本地数据文件存储安全:这块因为root机的原因logcat命令一直报错。但之前这方面做过。
可先参考:https://blog.csdn.net/m0_37268841/article/details/95617015
但这块logcat的测试点有两部分:log中的敏感信息泄露,像手势密码这种敏感信息是不是存储再log中。用户名/密码,身份证号码等有没有存储。
.9. 数字签名检测:
签名证书虽然有警告,但整体来说应该是验证通过。
M8- 代码篡改
测试点:
- 修改代码
- 修改资源
- 修改API
测试前提:代码没有加固,没有混肴,当然有大神比较厉害可能这些不需要也能搞。。。
测试工具:我个人使用的是Bytecode-Viewe,这款是反编译后在线修改代码打包一起的工具。
网上有这个工具下载,用法很简单如下:
C:\tools>java -jar Bytecode-Viewer-2.9.22.jar
https://the.bytecode.club - Created by @Konloch - Bytecode Viewer 2.9.22, Fat-Jar: true
Start up took 1 seconds
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at java.net.SocketInputStream.read(Unknown Source)
at sun.security.ssl.InputRecord.readFully(Unknown Source)
at sun.security.ssl.InputRecord.read(Unknown Source)
at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at sun.security.ssl.SSLSocketImpl.waitForClose(Unknown Source)
at sun.security.ssl.HandshakeOutStream.flush(Unknown Source)
at sun.security.ssl.Handshaker.kickstart(Unknown Source)
at sun.security.ssl.SSLSocketImpl.kickstartHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLCon
打开后,直接将apk拖进主窗口后界面:
左边是反编译后的包,右边是代码,可编辑
这边的不管是修改代码,修改资源还是API可根据需求进行修改后,进一步操作可参考:
注:如果代码中有混肴的话,存在编译不过的现象。
重新打包后,需要将修改后的apk装到手机里面进行验证,看是否能运行。
待续:APP 安全测试(OWASP Mobile Top 10)--后篇之四