Android应用安全系列 part 21 – 攻击可调试应用
设想一下,当你一部没有被root的手机被偷时,如果有一个应用可以进行调试,攻击者可以利用应用权限访问应用数据或执行任意代码。
而在非调试应用中,攻击者需要先root设备才能提取数据。
如何检验是否可调式属性
使用sieve程序作为演示
反编译sieve.apk文件,在AndroidManifest.xml中搜索关键字找到 debuggable
可以看到 debuggable = true 意味着程序是可调式的
接下来需要查找那个应用连接着调试socket(@jdwp-control)
在appie终端输入adb jdwp 查看所有可被调试的PIDs(进程ID)信息
注意:需要在sieve运行前执行此命令,然后开启sieve时再次执行此命令,查看pids的变化,出现变化的就是sieve调试pid
两次执行的结果如下:
可以看到增加了两个pids。可以输入命令查看这个新增加的pids属于哪个应用。
输入命令: adb shell ps | grep 1922
以及同样方法可以查到属于1938端口的应用
可以提取应用程序私有文件中的data数据,使用如下命令
adb shell run-as com.mwr.example.sieve
在sieve应用权限下可以执行任意命令,仅限于此应用权限
使用sieve应用查看其它应用数据时,会因为权限问题不允许
如何修复?
修复非常简单,只需要在AndroidManifest.xml中设置如下属性就ok了
android:debuggable = false