Java 安卓应用程序的前十大安全威胁是什么?

Java 安卓应用程序的前十大安全威胁是什么?,java,android,security,mobile,owasp,Java,Android,Security,Mobile,Owasp,我知道这个问题在本质上可能有点恶意,但我只是想学习Android/移动应用程序开发的最佳实践,安全性肯定是软件中的一个大问题。如果你读过这个问题后,仍然!,我认为这本质上是恶意的,请记住,我不是问如何实施这些攻击,我只是问一个好的Android/移动开发者需要知道哪些攻击 下面是官方OWASP应用程序10大安全威胁链接的列表。我想知道这些攻击中有哪些适用于Android开发,或者是否有其他未列出的主要攻击: 注射 跨站点脚本XSS 断开的身份验证和会话管理 不安全的物件参考 跨站点请求伪造CSR

我知道这个问题在本质上可能有点恶意,但我只是想学习Android/移动应用程序开发的最佳实践,安全性肯定是软件中的一个大问题。如果你读过这个问题后,仍然!,我认为这本质上是恶意的,请记住,我不是问如何实施这些攻击,我只是问一个好的Android/移动开发者需要知道哪些攻击

下面是官方OWASP应用程序10大安全威胁链接的列表。我想知道这些攻击中有哪些适用于Android开发,或者是否有其他未列出的主要攻击:

注射 跨站点脚本XSS 断开的身份验证和会话管理 不安全的物件参考 跨站点请求伪造CSRF 安全配置错误 不安全加密存储 未能限制URL访问 传输层保护不足 未验证的重定向和转发
请注意:我并不是在说为在移动设备中显示而构建的网站。我说的是部署在移动设备上的实际应用程序。在安卓系统中,这意味着APK。

对于安卓应用程序,所提到的大多数攻击并不经常发生

如果您想让我们知道您的情况下,有人可能会为您的问题提供真实答案,那么:

谁需要得到保护? 谁想攻击你的应用程序的安全性? 由于缺乏信息,我能想到的最现实的威胁是,我假设设备上的一个相当独立的应用程序会是你的应用程序中的一个bug

将应用程序私有信息泄漏到非安全存储,或 允许通过用户输入注入恶意数据读取:SQL注入;但一般的问题不仅与sqldbs有关;例如,考虑一下XML注入。 编辑:

我们只需收集应用程序安全中的一些可能的利益相关者,无需任何特定顺序:

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

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

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

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

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

第三方:是否有第三方可能有兴趣在不受威胁的情况下危害上述任何资产的安全


如果您愿意,可以添加更多。

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

应用程序创建一个浏览器实例。 应用程序使用特权浏览器API向浏览器加载的页面添加关键事件处理程序。 应用程序使浏览器加载URL,例如银行登录表单。 使用时假定浏览器同源策略正在保护它们输入的数据。 应用程序观察并过滤表单内容,可能包括密码。
很难具体回答您的问题,因为从您发布的内容来看,您对您的Android应用程序和Java服务器很好奇,但您提出的是一个非常普通的问题。OWASP发布的大部分内容都是非常高级别的,因此在不了解Android应用程序和服务器工作细节的情况下,很难获得任何真正实质性的答案。一般来说,当人们能够追踪服务器并拥有通过所有手机而不仅仅是单个手机的所有数据时,他们不会攻击手机

因此,注入、XSS、CSRF等主要应用于服务器端。如果你的程序使用Android SQLite数据库,你可以执行注入,看看你的应用程序的细节是如何在这里发挥作用的。如果您的应用程序是基于web的客户端,或者使用webview处理其中的任何部分,那么XSS、CSRF都可以应用,具体细节也很重要

通过使用PreparedStatements/PreparedCall,Java服务器上的注入可以很容易地修复。不要使用语句。如果您使用的是JPA、Hibernate、iBatis,那么大多数都会在后台使用PreparedStatements。Java应用程序中的注入很容易阻止这些攻击:

XSS和CSRF比较困难,但可以通过使用过滤器来防止。往下读这一页,你会看到在哪里有另一个链接到描述它的项目

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


大多数入侵涉及通过操作系统中的VULN、数据库、SQL注入等访问底层数据库。获取存储用户和密码的表。然后运行一个超级快速的暴力方法,使用简单的现成图形卡来暴力破解密码。如果你不注意适当地保护你的密码,大多数单向散列现在都可以使用这种方法被破坏。

OWASP前十名是针对web应用程序的,Android应用程序则不同

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

不安全数据存储 弱服务器端控制 传输层保护不足 客户端注入 糟糕的授权和身份验证 不正确的会话处理 通过不可信输入的安全决策 侧通道数据泄漏 破译的密码 敏感信息披露 有一种方法可以非常详细地解释这些


除了OWASP移动前十名之外,我可以指出,O'Reilly在2011年12月刚刚发表了一篇讨论当前安卓系统上安全移动应用程序设计的文章,并讨论了该平台所面临的威胁以及如何以安全的方式编写应用程序以避免这些威胁免责声明:我是这本书的作者:.

假设您使用某种网络服务,例如远程呼叫、访问网页……我倾向于说“任何或所有应用程序”。只要假设您的“受信任”服务器实际上是一个代理试图绊倒您的客户机…我投票决定关闭,认为这不是建设性的;然而,我真的应该把这个话题挑出来发给程序员。se这不是一个有明确技术答案的问题,因此更应该属于讨论编程问题的领域。。因此,程序员。se@ChrisLively“是的,还有一个问题。”米凯萨缪尔:那就更合适了@克里斯·莱弗利。看到有人试图结束这个问题,我很沮丧。批评这个问题似乎对各种常见漏洞列表的有效性提出了挑战,例如OWASP前十名。然而,OWASP前十名似乎非常有用,挑战了你想结束这个问题的愿望的有效性。汉诺-我很感激你的回答,但我发现了一些音调。我在这里寻找一个真正的答案,因为这是一个真正的问题。我完全不知道你提到爱丽丝、鲍勃或伊芙时在说什么。至于谁需要受到保护:我说的是Android应用程序,更重要的是,它的Java后端。至于谁想攻击这个:可能是任何人。我在问优秀的安卓开发者在构建安卓应用程序时应该针对哪些攻击进行编码。我不是有意贬低你的问题,但这似乎过于笼统和模糊。如果你甚至不能在你的应用程序的安全性中命名利益相关者,我怀疑你会收到你想要的答案。-顺便说一句,你说的Java后端是什么意思?服务器端Java应用程序?在您的问题中,您没有说明您所指的是客户端-服务器应用程序或您的未来应用程序的任何其他相关参数。这是一个适用于Android用户的风险,但它与希望编写安全应用程序的人有何关系?@Heathunnicutt,您如何定义安全应用程序?如果您的用户习惯于在类似网页的内容中输入凭据,而另一个应用程序可以使用该信任让他们泄露这些凭据,那么您的系统的安全性就会受到威胁。@MikeSamuel:没错!如果你不能定义谁或什么应该受到谁的保护,那么“安全”一词就变得毫无意义了。@MikeSamuel-我如何定义“安全应用”其实并不重要,你的答案是针对用户的,而不是针对开发人员的-因为你预设了一个恶意应用。至于汉诺迂腐的坚持,我认为OWASP十大努力中没有定义Alice、Bob等是愚蠢的。或者汉诺愚蠢地想要过度指定一个环境,而开放面对各种威胁的可能性可能更合适…@Heathunnicutt,如果你不想缩小范围,然后,您的问题的答案是阅读一份可能的攻击向量的详细列表,并选择所有适用于您的情况的攻击向量,然后确保您包括任何尚未有人费心发布的新攻击向量。