哪些十大安全威胁适用于Android应用?

时间:2012-01-25 17:55:18

标签: java android security mobile owasp

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

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

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

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

4 个答案:

答案 0 :(得分:3)

OWASP Top Ten适用于Web应用程序,Android应用程序则不同。

然而,OWASP确实有一个快速增长的移动设备,他们目前正在开发Mobile Top Ten。以下是本年度候选人前十名的名单:

  1. 不安全的数据存储
  2. 弱服务器端控件
  3. 传输层保护不足
  4. 客户端注入
  5. 差的授权和身份验证
  6. 会话处理不当
  7. 通过不受信任的输入进行安全决策
  8. 边渠道数据泄漏
  9. 破碎的密码学
  10. 敏感信息披露
  11. a wonderful set of slides可以非常详细地解释这些内容。

    除了OWASP Mobile Top Ten之外,我还可以为您指出Application Security for the Android Platform,由O'Reilly于2011年12月发布,讨论Android上当前的安全移动应用程序设计,并提供有关威胁继承的讨论到那个平台以及如何以安全的方式编写应用程序来避免它们(免责声明:我是本书的作者:))。

答案 1 :(得分:2)

很难回答具体问题,因为从你发布的内容来看,你对Android应用程序和Java服务器很好奇,但是你提出了一个非常通用的问题。 OWASP发布的大部分内容都非常高,因此如果不了解Android应用程序和服务器的工作方式,获得任何真正的实质性答案都会很难。一般来说,当人们可以追踪服务器并拥有通过所有手机而不仅仅是一部手机的所有数据时,人们不会攻击手机。

因此,注入,XSS,CSRF等主要适用于服务器端。如果您的程序使用它,您可以在Android SQLite数据库中执行注入(请参阅此处的应用程序细节如何发挥作用)。如果您的应用程序是基于Web的客户端,或者使用webview进行任何部分(同样重要),则可以应用XSS,CSRF。

使用PreparedStatements / PreparedCall可以轻松地修复服务器上的Java注入问题。不要使用Statement。如果您正在使用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注入等中的漏洞访问底层数据库。抓住存储用户和密码的表。然后使用简单的现成图形卡运行超快速强力方法来强制密码。如果你不小心保护你的密码,那么今天使用这种方法可以打破大多数单向哈希。

答案 2 :(得分:1)

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

如果您想告诉我们,在您的情况下,Alice, Bob, or Eve有人可能会对您的问题提供真实答案,那么:

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

我可以自发提出的最现实的威胁(由于缺乏信息,我假设设备上有一个非常独立的应用程序)将是你的应用程序中的一个错误

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

编辑:

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

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

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

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

  • App开发者:他或他的环境是否会对任何不属于他的资产构成威胁?

  • 第三方:是否有第三方需要保护其IP或其他值?

  • 第三方:是否有第三方可能有兴趣破坏上述任何可能存在威胁的资产的安全性?

(如果愿意,可添加更多。)

答案 3 :(得分:0)

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

  1. App创建一个浏览器实例。
  2. App使用特权浏览器API将键事件处理程序添加到浏览器加载的页面。
  3. 应用程序会导致浏览器加载URL,例如银行登录表单。
  4. 使用假设浏览器同源策略正在保护他们输入的数据。
  5. 应用程序观察并泄露可能包含密码的表单内容。
  6. How can I launch Safari from an iPhone app?

    How can I open a URL in Android's web browser from my application?