」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何進行 Android 應用程式安全測試:開發人員和測試人員指南

如何進行 Android 應用程式安全測試:開發人員和測試人員指南

發佈於2024-08-10
瀏覽:399

介绍

作为安卓手机的铁杆粉丝,如果你的手机突然掉线,你的第一反应是不是“天啊!”或者您在 Google Pay 或 Paypal 中的资金不安全?如果最新下载的应用程序不仅弹出各种无聊的广告,还弹出意想不到的通知,您是否会认为这可能是钓鱼尝试并立即卸载该应用程序?

如何确保我们的应用为对Android安全漏洞认识不足的用户提供安全的体验? Android生态系统存在哪些安全漏洞?我们可以在哪里探索新的 Android 安全测试技术?我们如何简化安全测试流程?

常见的 Android 安全漏洞

首先,Android操作系统的开源开发优势也掩盖了其开发中固有的安全问题,例如Android系统的沙箱系统(即虚拟机)。然而,底层存在一个又一个漏洞,允许恶意程序(或工具)获得root访问权限并突破沙箱的限制。就像PC时代一样,不存在绝对安全的PC操作系统;在移动互联网时代,也没有绝对安全的移动操作系统。 Android开源生态的安全风险就像血淋淋的警钟,敲响了每一个Android开发者的心。

其次,Android APP/SDK开发过程中的安全风险就像未知的黑洞。我们永远不知道安全对抗的终点在哪里,攻击者是谁,终结者是谁,以及如何防御。

最后,在用户层面,有哪些常见且可识别的安全行为漏洞?

Android应用程序和SDK都存在一定程度的安全漏洞。也许有一天,您的应用程序可能会受到上述安全漏洞之一的影响。无独有偶,最近在测试Android SDK时,我们发现了一个与Android应用程序组件相关的安全漏洞。基于此示例,总结了Android SDK安全测试的方法、技巧和流程。

Android APP安全测试示例

漏洞原因概述
应用程序(以下简称应用程序)Android SDK的一个可选组件在本地打开了一个随机端口,用于监听Java层服务是否存活。但Java层与组件通信时,并没有对输入参数进行严格检查,导致调用Linux系统的“system()”函数时存在被填充攻击代码、遭受恶意攻击的可能性。

如下截图所示,模拟端口被攻击后,应用组件Intent在通信过程中修改URL内容,Webview显示乱码:

Garbled code

该漏洞潜在的安全风险

Android APP的四大应用组件:Activity、Receiver、Service、Content Provider,以及应用组件通过Intent进行IPC通信的安全角色,这里不再详细讨论。利用上例中组件相关的漏洞,终端APP侧相关的攻击维度如下图所示:

Attack dimensions

由于Android APP的本地应用环境,网络socket先天缺乏细粒度的认证和授权机制。因此,如果使用Android客户端作为服务端,通过反向代码搜索应用程序本地随机端口号,主动向该端口发送攻击,将会潜伏以下安全隐患:

  1. 本地命令执行:当嵌入式应用程序的Package名称指定为应用程序本身,Component名称指定为应用程序的Activity时,应用程序的任何Activity都可以启动,包括受保护的非出口活动,从而造成安全隐患。例如,通过HTTP请求一一启动多个未导出的活动,即可发现拒绝服务漏洞。

  2. 命令控制修改应用程序权限:通过开放的socket端口传入启动Android应用程序组件的意图,然后以该应用程序的权限执行启动activity、发送广播等操作被攻击的应用程序。由于通过socket传入的intent无法对发送者的身份和权限进行细粒度的检查,绕过Android对应用组件提供的权限保护,并且可以启动未导出且受权限保护的应用组件,存在安全隐患

  3. 敏感信息泄露、手机控制:本地服务打开UDP端口监听,收到特定命令字后,可以返回手机的敏感信息。比如百度手机管家可以远程管理手机的secretKey,然后未经授权的攻击者就可以通过网络全面管理手机。

Android安全测试执行

Android安全强化版本优化

  1. 在 Native 层和 Java 层中添加对系统命令的检查和特殊字符过滤。

  2. 加密 JNI Watchdog 守护进程的套接字通信。

  3. 在本地通知功能中添加对 URL、意图和活动的功能验证,以防止单击通知时重定向到恶意链接。

  4. 更改包名在应用本地存储中的存储位置。

  5. 添加在线配置功能。

这些是本次安全加固优化的重要需求。

特殊安全测试

如果按照常规的系统测试或性能测试,则只需根据需求的变化进行前向测试即可。但对于安全测试来说,保证SDK安全的稳健性需要逆向专项测试,模拟各种安全攻击方式,针对修改点发散测试用例。

Android定期安全回归测试

  1. 隐私数据:外部存储安全和内部存储安全;检查用户名、密码、聊天记录、配置信息等隐私信息是否在本地保存并加密;使用前请验证信息的完整性。

  2. 权限攻击:检查应用的目录,确保其权限不允许其他组成员读写;检查系统权限是否受到攻击。

  3. Android组件权限保护:防止app内部组件被第三方程序任意调用:防止Activity被第三方程序调用,防止Activity劫持;确保广播接收和传输安全,仅接收应用发出的广播,防止第三方接收传输内容;防止恶意启动或停止服务;检查Content Provider操作权限;如果需要外部调用组件,请验证调用者是否已应用签名限制。

  4. 升级:检查升级包的完整性和合法性,避免被劫持。

  5. 第三方库:如果使用第三方库,请跟踪第三方库的更新并检查其安全性。

  6. ROM安全:使用官方ROM或权威团队提供的ROM,避免添加植入广告、木马等

  7. 反破解对策:对抗反编译,使得无法使用反编译工具反编译或反编译后无法获得正确的反汇编代码;通过使用代码混淆和加密来抵消静态分析;通过添加代码来检测调试器和模拟器来抵消动态调试;通过检查签名和验证编译后的 dex 文件的哈希值来防止重新编译。

完成安全专项测试和常规流程测试后,对应用现有功能、新旧版本兼容性、不同Android操作系统版本的兼容性进行滚动回归测试。

包起来

与普通的性能和系统功能测试用例相比,安全测试用例需要对Android生态系统有更全面的了解,例如:涵盖用户安全外观级别、应用系统本地和远程攻击级别、操作系统漏洞级别等,更注重设计逆向攻击思维测试用例。

如果说开发的出发点是安全防御,那么测试的出发点就是黑客攻击思维。针对攻击场景设计测试用例并实施攻击测试技术决定了SDK安全性的稳健性。

为了确保您的应用程序具有最高级别的安全性,请考虑使用 WeTest 应用程序安全测试。该服务对应用程序中的安全问题进行全面评估,及时发现程序漏洞,并提供代码修复示例,协助漏洞修复。

相信 WeTest 能够保护您的应用程序免受潜在威胁并保持安全的用户体验。

Image description

版本聲明 本文轉載於:https://dev.to/wetest/how-to-do-android-app-security-testing-a-guide-for-developers-and-testers-3j8b?1如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>
  • 如何在 Serp 中排名 4
    如何在 Serp 中排名 4
    搜索引擎排名页面 (SERP) 是网站争夺可见性和流量的地方。到 2024 年,在 Google 和其他搜索引擎上的高排名仍然对在线成功至关重要。然而,SEO(搜索引擎优化)多年来已经发生了变化,并将继续发展。如果您想知道如何在 2024 年提高 SERP 排名,这里有一个简单的指南可以帮助您了解最...
    程式設計 發佈於2024-11-05
  • 如何使用多處理在 Python 進程之間共享鎖
    如何使用多處理在 Python 進程之間共享鎖
    在Python 中的進程之間共享鎖定當嘗試使用pool.map() 來定位具有多個參數(包括Lock() 物件)的函數時,它是對於解決子進程之間共享鎖的問題至關重要。由於 pickling 限制,傳統的 multiprocessing.Lock() 無法直接傳遞給 Pool 方法。 選項 1:使用 ...
    程式設計 發佈於2024-11-05
  • Type Script 中 readonly 和 const 的區別
    Type Script 中 readonly 和 const 的區別
    這兩個功能的相似之處在於它們都是不可分配的。 能具體解釋一下嗎? 在這篇文章中,我將分享它們之間的差異。 const 防止重新分配給變數。 在這種情況下,hisName 是一個不能重新分配的變數。 const hisName = 'Michael Scofield' hisN...
    程式設計 發佈於2024-11-05
  • 如何使用 Range 函式在 Python 中複製 C/C++ 循環語法?
    如何使用 Range 函式在 Python 中複製 C/C++ 循環語法?
    Python 中的 for 迴圈:擴展 C/C 迴圈語法在程式設計中,for 迴圈是迭代序列的基本結構。雖然 C/C 採用特定的循環初始化語法,但 Python 提供了更簡潔的方法。不過,Python 中有一種模仿 C/C 循環風格的方法。 實作循環運算:for (int k = 1; k <...
    程式設計 發佈於2024-11-05
  • TechEazy Consulting 推出全面的 Java、Spring Boot 和 AWS 培訓計畫並提供免費實習機會
    TechEazy Consulting 推出全面的 Java、Spring Boot 和 AWS 培訓計畫並提供免費實習機會
    TechEazy Consulting 很高興地宣布推出我們的綜合培訓計劃,專為希望轉向後端開發使用Java、Spring Boot的初學者、新手和專業人士而設計,以及AWS。 此4個月的帶薪培訓計劃之後是2個月的無薪實習,您可以在實際專案中應用您的新技能—無需任何額外的培訓費用。對於那些希望填補...
    程式設計 發佈於2024-11-05
  • Polyfills-填充物還是縫隙? (第 1 部分)
    Polyfills-填充物還是縫隙? (第 1 部分)
    幾天前,我們在組織的 Teams 聊天中收到一條優先訊息,內容如下:發現安全漏洞 - 偵測到 Polyfill JavaScript - HIGH。 舉個例子,我在一家大型銀行公司工作,你必須知道,銀行和安全漏洞就像主要的敵人。因此,我們開始深入研究這個問題,並在幾個小時內解決了這個問題,我將在下...
    程式設計 發佈於2024-11-05
  • 移位運算子與位元簡寫賦值
    移位運算子與位元簡寫賦值
    1。移位運算子 :向右移動。 >>>:無符號右移(零填充)。 2.移位運算子的一般語法 value > num-bits:將值位向右移動,保留符號位。 value >>> num-bits:透過在左側插入零將值位向右移動。 3.左移 每次左移都會導致該值的所有位元向左移動一位。 右側插入0...
    程式設計 發佈於2024-11-05
  • 如何使用 VBA 從 Excel 建立與 MySQL 資料庫的連線?
    如何使用 VBA 從 Excel 建立與 MySQL 資料庫的連線?
    VBA如何在Excel中連接到MySQL資料庫? 使用VBA連接到MySQL資料庫嘗試連接使用 VBA 在 Excel 中存取 MySQL 資料庫有時可能具有挑戰性。在您的情況下,您在嘗試建立連線時遇到錯誤。 若要使用 VBA 成功連線至 MySQL 資料庫,請依照下列步驟操作:Sub Connec...
    程式設計 發佈於2024-11-05
  • 測試自動化:使用 Java 和 TestNG 進行 Selenium 指南
    測試自動化:使用 Java 和 TestNG 進行 Selenium 指南
    测试自动化已成为软件开发过程中不可或缺的一部分,使团队能够提高效率、减少手动错误并以更快的速度交付高质量的产品。 Selenium 是一个用于自动化 Web 浏览器的强大工具,与 Java 的多功能性相结合,为构建可靠且可扩展的自动化测试套件提供了一个强大的框架。使用 Selenium Java 进...
    程式設計 發佈於2024-11-05
  • 我對 DuckDuckGo 登陸頁面的看法
    我對 DuckDuckGo 登陸頁面的看法
    「為什麼不穀歌一下呢?」是我在對話中得到的常見答案。谷歌的無所不在甚至催生了新的動詞「Google」。但是我寫的程式碼越多,我就越質疑我每天使用的數位工具。也許我對谷歌使用我的個人資訊的方式不再感到滿意。或者我們很多人依賴谷歌進行互聯網搜索和其他應用程序,說實話,我厭倦了在搜索某個主題或產品後彈出的...
    程式設計 發佈於2024-11-05
  • 為什麼 Turbo C++ 的「cin」只讀取第一個字?
    為什麼 Turbo C++ 的「cin」只讀取第一個字?
    Turbo C 的「cin」限制:僅讀取第一個單字在Turbo C 中,「cin」輸入運算符有一個處理字元數組時的限制。具體來說,它只會讀取直到遇到空白字元(例如空格或換行符)。嘗試讀取多字輸入時,這可能會導致意外行為。 請考慮以下 Turbo C 代碼:#include <iostream....
    程式設計 發佈於2024-11-05
  • 使用 Buildpack 建立 Spring Boot 應用程式的 Docker 映像
    使用 Buildpack 建立 Spring Boot 應用程式的 Docker 映像
    介绍 您已经创建了一个 Spring Boot 应用程序。它在您的本地计算机上运行良好,现在您需要将该应用程序部署到其他地方。在某些平台上,您可以直接提交jar文件,它将被部署。在某些地方,您可以启动虚拟机,下载源代码,构建并运行它。但是,大多数时候您需要使用容器来部署应用程序。大...
    程式設計 發佈於2024-11-05
  • 如何保護 PHP 程式碼免於未經授權的存取?
    如何保護 PHP 程式碼免於未經授權的存取?
    保護PHP 代碼免於未經授權的訪問保護PHP 軟體背後的智慧財產權對於防止其濫用或盜竊至關重要。為了解決這個問題,可以使用多種方法來混淆和防止未經授權的存取您的程式碼。 一個有效的方法是利用 PHP 加速器。這些工具透過快取頻繁執行的部分來增強程式碼的效能。第二個好處是,它們使反編譯和逆向工程程式碼...
    程式設計 發佈於2024-11-05
  • React:了解 React 的事件系統
    React:了解 React 的事件系統
    Overview of React's Event System What is a Synthetic Event? Synthetic events are an event-handling mechanism designed by React to ach...
    程式設計 發佈於2024-11-05
  • 為什麼在使用 Multipart/Form-Data POST 請求時會收到 301 Moved Permanently 錯誤?
    為什麼在使用 Multipart/Form-Data POST 請求時會收到 301 Moved Permanently 錯誤?
    Multipart/Form-Data POSTsMultipart/Form-Data POSTs嘗試使用multipart/form-data POST 資料時,可能會出現類似所提供的錯誤訊息遭遇。理解問題需要檢視問題的構成。遇到的錯誤是 301 Moved Permanently 回應,表示資...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3