7.0 App客户端劫持及简单防护(获取栈顶包名、webview) | 您所在的位置:网站首页 › webview被劫持 › 7.0 App客户端劫持及简单防护(获取栈顶包名、webview) |
Android APP客户端安全评估中,有一项叫做activity界面劫持。 该bug的攻击场景是,当手机中的恶意APP检测到当前运行的为目标APP时,就启动自身的钓鱼界面覆盖到目标APP之上,以欺骗用户输入账号密码等。
本文将要归纳Android各个版本可以使用的检测当前运行的APP的方法,及附带webview的劫持示例。 1、getRunningTasks(android5.0之前)
getRunningTasks需要使用权限android:name=”android.permission.GET_TASKS” 除了使用activity覆盖目标APP,还可以使用alertwindow(模态弹窗) alertwindow需要使用权限android:name=”android.permission.SYSTEM_ALERT_WINDOW”
2、Accessibility Service(辅助功能,一直可用) (Accessibility Service,需要引导用户在手机 “设置” 中激活才能有效,需要使用权限android:name=”android.permission.BIND_ACCESSIBILITY_SERVICE“) 在Accessibility Service的onAccessibilityEvent回调函数中,可以检测到当前执行的APP 3、通过/proc/目录也可以获取当前应用(Android7.0中限制了APP获取/proc/的内容,会失效) 使用github中的AndroidProcesses库,可以直接获取 4、UsageStatsManager(Android5.0引入) 需要系统级别权限android.permission.PACKAGE_USAGE_STATS(系统签名的APP能使用该权限),参见 github中的android-overlay-malware-example 5、webview webview加载目标m站后,再加载恶意js,劫持用户输入,如下 webview添加java接口: webView.addJavascriptInterface(new MyJavaScriptInterface(), “MYOBJECT”); 然后覆盖setWebViewClient的onPageFinished,插入js代码,劫持用户输入 最后,一个粗略的防护方案: ①、对于界面(activity)覆盖,可以利用同样的方法,判断是否为自身在activity栈顶。 ②、alertwindow不是activity栈机制,依然无法检测。在android6.0之后,如果app是从Play Store安装的,则SYSTEM_ALERT_WINDOW自动允许,如果是其他途径安装的则需要用户手动在设置中开启 悬浮窗 权限。 另外重载onFilterTouchEventForSecurity函数可以进行安全检测(未测) ③、对Accessibility Service这类,只有提高用户的安全意识方面着手 ④、对于webview类型的劫持,可以利用js计算当前页面是否被篡改过 ⑤、对于/proc/目录和UsageStatsManager两个 Android系统方面也有相应的防护 详细地址:http://blog.nsfocus.net/app-client-hijacking-simple-protection/
|
CopyRight 2018-2019 实验室设备网 版权所有 |