作为安卓手机的铁杆粉丝,如果你的手机突然掉电,你的第一反应是不是“天啊!”或者您在 Google Pay 或 Paypal 中的资金不安全?如果最新下载的应用程序不仅弹出各种无聊的广告,还弹出意想不到的通知,您是否会认为这可能是钓鱼尝试并立即卸载该应用程序?
如何确保我们的应用为对Android安全漏洞认识不足的用户提供安全的体验? Android生态系统存在哪些安全漏洞?我们可以在哪里探索新的 Android 安全测试技术?我们如何简化安全测试流程?
首先,Android操作系统的开源开发优势也掩盖了其开发中固有的安全问题,例如Android系统的沙箱系统(即虚拟机)。然而,底层存在一个又一个漏洞,允许恶意程序(或工具)获得root访问权限并突破沙箱的限制。就像PC时代一样,不存在绝对安全的PC操作系统;在移动互联网时代,也没有绝对安全的移动操作系统。 Android开源生态的安全风险就像血淋淋的警钟,敲响了每一个Android开发者的心
其次,Android APP/SDK开发过程中的安全风险就像未知的黑洞。我们永远不知道安全对抗的终点在哪里,攻击者是谁,终结者是谁,以及如何防御。
最后,在用户层面,有哪些常见且可识别的安全行为漏洞?
Android App 和 SDK 都存在一定程度的安全漏洞。也许有一天,您的应用程序可能会受到上述安全漏洞之一的影响。无独有偶,最近在测试Android SDK时,我们发现了一个与Android应用程序组件相关的安全漏洞。基于这个例子,总结了Android SDK安全测试的方法、技巧和流程。
漏洞原因概述
应用程序(以下简称应用程序)Android SDK的一个可选组件在本地打开了一个随机端口,用于监听Java层服务是否存活。但Java层与组件通信时,并没有严格检查输入参数,导致调用Linux系统的“system()”函数时,有可能被填充攻击代码,遭受恶意攻击。
如下截图所示,模拟端口被攻击后,应用组件Intent在通信过程中修改了URL内容,Webview显示乱码:
Android APP 的四大应用组件:Activity、Receiver、Service、Content Provider,以及应用组件通过 Intent 进行 IPC 通信的安全角色,这里不再详细讨论。利用上例中组件相关的漏洞,终端APP侧相关的攻击维度如下图所示:
由于Android APP的本地应用环境,网络socket先天缺乏细粒度的认证和授权机制。因此,如果使用Android客户端作为服务器,利用反向代码搜索应用程序本地随机端口号,主动向该端口发送攻击,则会潜伏以下安全隐患:
本地命令执行:当嵌入应用程序的Package名称指定为应用程序本身,Component名称指定为应用程序的Activity时,可以启动应用程序的任何Activity,包括受保护的非导出的Activity活动,从而造成安全隐患。例如,通过 HTTP 请求一一启动多个未导出的 Activity 即可发现拒绝服务漏洞。
命令控制修改应用程序权限:通过开放的socket端口传入启动Android应用程序组件的意图,然后以被攻击应用程序的权限执行启动activity、发送广播等操作。由于通过socket传入的intent无法对发送者的身份和权限进行细粒度的检查,绕过Android对应用组件提供的权限保护,并且可以启动未导出且受权限保护的应用组件,存在安全隐患
敏感信息泄露,手机控制:本地服务打开UDP端口监听,收到特定命令字后,可以返回手机的敏感信息。比如百度手机管家可以远程管理手机的secretKey,然后未经授权的攻击者就可以通过网络全面管理手机
Android安全强化版本优化
在 Native 层和 Java 层添加对系统命令的检查和特殊字符过滤。
加密 JNI Watchdog 守护进程进程的套接字通信。
在本地通知功能中添加对 URL、意图和活动的功能验证,以防止点击通知时重定向到恶意链接。
更改包名在应用本地存储中的存储位置。
添加在线配置功能。
这些是本次安全加固优化的重要要求
如果按照常规的系统测试或性能测试,只需要根据需求的变化进行前向测试即可。但对于安全测试来说,保证SDK安全的稳健性需要逆向专项测试,模拟各种安全攻击方式,针对修改点发散测试用例。
隐私数据:外部存储安全和内部存储安全;检查用户名、密码、聊天记录、配置信息等隐私信息是否在本地保存并加密;使用前请验证信息的完整性。
权限攻击:检查应用程序的目录并确保其权限不允许其他组成员读取或写入;检查系统权限是否受到攻击。
Android组件权限保护:防止app内部组件被第三方程序任意调用:防止Activity被第三方程序调用,防止Activity劫持;确保广播接收和传输安全,仅接收应用发出的广播,防止第三方接收传输内容;防止恶意启动或停止服务;检查Content Provider操作权限;如果需要外部调用组件,请验证调用者是否已应用签名限制。
升级:检查升级包的完整性和合法性,避免被劫持。
第三方库:如果使用第三方库,请跟进其更新并检查其安全性。
ROM安全:使用官方ROM或权威团队提供的ROM,避免添加植入广告、木马等
反破解对策:对抗反编译,使得无法使用反编译工具反编译或反编译后无法获取正确的反汇编代码;通过使用代码混淆和加密来抵消静态分析;通过添加代码来检测调试器和模拟器来抵消动态调试;通过检查签名和验证编译后的 dex 文件的哈希值来防止重新编译。
完成安全专项测试和常规流程测试后,对App现有功能、新旧版本兼容性、不同Android操作系统版本的兼容性进行滚动回归测试。
包起来 相比普通的性能和系统功能测试用例,安全测试用例需要对Android生态系统有更全面的了解,例如:涵盖用户安全外观级别、应用系统本地和远程攻击级别、操作系统漏洞级别等,并且更加关注关于设计反向攻击思维测试用例。開発の出発点がセキュリティ防御である場合、テストの出発点はハッカーの攻撃の考え方です。攻撃シナリオのテスト ケースを設計し、攻撃テスト手法を実装することで、SDK のセキュリティの堅牢性が決まります。
アプリケーションの最高レベルのセキュリティを確保するには、WeTest アプリケーション セキュリティ テストの利用を検討してください。このサービスは、アプリケーションのセキュリティ問題の包括的な評価、プログラムの脆弱性のタイムリーな検出を提供し、脆弱性の修復を支援するコード修復例を提供します。
潜在的な脅威からアプリケーションを保護し、安全なユーザー エクスペリエンスを維持するには、WeTest を信頼してください。
以上是如何进行 Android 应用安全测试:开发人员和测试人员指南的详细内容。更多信息请关注PHP中文网其他相关文章!