-1

我知道这个问题本质上可能看起来有点恶意,但我只是想学习 Android/移动应用程序开发的最佳实践,而安全性绝对是软件中的一个大问题。如果您在阅读了这个问题(!)之后仍然认为它本质上是恶意的,请记住我不是在问如何实施任何这些攻击,我只是在问一个好的 Android/移动开发人员需要哪些攻击要认识到。

以下是应用程序的“官方”OWASP 十大安全威胁列表(链接在此处)。我想知道其中哪些(如果有)适用于 Android 开发,或者是否还有其他未在此处列出的主要攻击:

  • 注射
  • 跨站脚本 (XSS)
  • 损坏的身份验证和会话管理
  • 不安全的直接对象引用
  • 跨站请求伪造 (CSRF)
  • 安全配置错误
  • 不安全的加密存储
  • 未能限制 URL 访问
  • 传输层保护不足
  • 未经验证的重定向和转发

请注意:我不是在谈论为在移动设备中显示而构建的网站。我说的是部署在移动设备上的实际应用程序。对于 Android,这意味着APKs。

4

4 回答 4

3

OWASP Top 10 是针对 Web 应用程序而设计的,而 Android 应用程序是不同的。

然而,OWASP 确实有一个快速增长的移动计划,他们目前正致力于移动前十名。以下是本年度候选人前十名的名单:

  1. 不安全的数据存储
  2. 弱服务器端控制
  3. 传输层保护不足
  4. 客户端注入
  5. 授权和身份验证不佳
  6. 会话处理不当
  7. 通过不受信任的输入做出安全决策
  8. 侧信道数据泄露
  9. 破解密码学
  10. 敏感信息披露

一组精彩的幻灯片非常详细地解释了这些。

除了 OWASP Mobile Top 10 之外,我还可以向您指出Android 平台的应用程序安全性,它由 O'Reilly 于 2011 年 12 月发布,讨论了当前在 Android 上的安全移动应用程序设计,并讨论了继承的威胁平台以及如何以安全的方式编写应用程序以避免它们(免责声明:我是本书的作者 :))。

于 2012-01-25T19:44:36.030 回答
2

很难具体回答您的问题,因为根据您发布的内容,您对 Android 应用程序和 Java 服务器感到好奇,但您问的是一个非常笼统的问题。OWASP 发布的大部分内容都是非常高级的,因此如果不了解您的 Android 应用程序和服务器如何工作的细节,那么获得任何真正的实质性答案都将是困难的。通常,当人们可以追踪服务器并拥有将通过所有手机而不仅仅是一部手机的所有数据时,他们不会攻击手机。

所以注入、XSS、CSRF 等大多适用于服务器端。如果您的程序使用它,您可以对 Android SQLite 数据库执行注入(请参阅此处的应用程序细节如何发挥作用)。如果您的应用程序是基于 Web 的客户端,或者在其中的任何部分使用 webview(再次具体问题),则 XSS、CSRF 可能适用。

使用 PreparedStatements/PreparedCall 可以轻松地修复 Java 服务器上的注入。不要使用声明。如果您使用的是 JPA、Hibernate、iBatis,其中大部分都在后台使用 PreparedStatements。Java 应用程序中的注入很容易阻止这些攻击:

https://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java

XSS 和 CSRF 更难,但可以使用过滤器来防止。阅读此页面,您会看到在哪里有另一个指向该项目的链接来描述它。

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet

通过不安全的连接发送密码。如果您通过 HTTP 或非 SSL 套接字发送密码,那么您将泄露太多信息(使用单向哈希没有帮助,因为我不需要知道密码。我需要的只是哈希这是明文传输的)。因此,请确保您使用 SSL 对用户进行身份验证。然后我们可以了解您如何在数据库中存储这些密码。您是否使用单向哈希?你在使用 bcrypt 吗?如果不是,您是否使用 SALT?您是否在对哈希进行迭代以增加破坏该哈希所需的时间?

大多数入侵涉及通过操作系统中的漏洞、数据库、SQL 注入等访问底层数据库。抓取存储用户和密码的表。然后使用简单的现成显卡运行超快速暴力破解方法来暴力破解密码。如果您不注意适当地保护您的密码,那么今天大多数单向哈希都可以使用这种方法破解。

于 2012-01-25T18:55:13.003 回答
1

对于(Android)应用程序,大多数提到的攻击都不会定期应用。

如果您想让我们知道在您的情况下是谁是AliceBobEve,那么有人可能会为您的问题提供真正的答案,所以:

  • 谁需要保护?
  • 谁会(想要)攻击​​您的应用程序的安全性?

我可以自发提出的最现实的威胁(由于缺乏信息,我假设设备上几乎是独立的应用程序)将是您的应用程序中的一个错误,它要么

  • 将(应用程序)私人信息泄漏到非安全存储,或
  • 允许通过用户输入注入恶意数据(阅读:SQL 注入;但一般问题不仅与 SQL DB 有关;例如,关于“XML 注入”)。

编辑:

让我们在应用程序的安全性中收集一些可能的利益相关者(没有任何特定的顺序):

  • 应用程序用户:他、他的数据、他的货币价值或他的隐私是否需要应用程序保护/支持?

  • 应用程序用户:他是否对应用程序和/或开发人员的任何资产构成威胁?

  • 应用程序开发人员:他或他的 IP 或其他与应用程序相关的资产是否需要通过应用程序的设计来特别保护?

  • 应用程序开发人员:他或他的环境是否会对任何不属于他的资产构成威胁?

  • 第三方:是否有第三方的知识产权或其他价值需要保护?

  • 第三方:是否有第三方可能对损害上述任何可能受到威胁的资产的安全性感兴趣?

(如果你喜欢,可以添加更多。)

于 2012-01-25T18:10:02.393 回答
0

许多移动设备允许应用程序弹出浏览器,并在浏览器中插入挂钩,从而允许他们观察击键等。这可以允许键记录。攻击发生如下:

  1. 应用程序创建一个浏览器实例。
  2. 应用程序使用特权浏览器 API 将键事件处理程序添加到浏览器加载的页面。
  3. 应用程序使浏览器加载 URL,例如银行登录表单。
  4. 使用假定浏览器同源策略正在保护他们输入的数据。
  5. 应用程序观察并泄露可能包括密码的表单内容。

如何从 iPhone 应用程序启动 Safari?

如何从我的应用程序在 Android 的网络浏览器中打开 URL?

于 2012-01-25T18:46:47.177 回答