【问题标题】:Why is printStackTrace() a security risk for mobile (Android) applications?为什么 printStackTrace() 对移动 (Android) 应用程序存在安全风险?
【发布时间】:2015-04-09 18:44:45
【问题描述】:

我在互联网上找到了几个地方,他们提到使用该方法

Throwable.printStackTrace() 

在您的 Android 应用程序中存在安全风险(这也是不好的编码习惯。)我想了解为什么它存在安全风险?攻击者可以利用提供的信息做什么

e.printStackTrace();

例如,其中 e 是 Exception 类型的?

【问题讨论】:

  • “我在 Internet 上找到了几个地方”——那么请考虑提供这些地方的链接。
  • 参见stackoverflow.com/questions/7469316/…问题中的例如项目1和第二个答案。
  • 这并不是说printStackTrace()“构成安全风险”。它说“向最终用户显示堆栈跟踪可能会带来潜在的安全风险”。用户在没有开发工具的情况下无法在 Android 4.1+ 上看到堆栈跟踪,如果他们可以使用这些工具,那么他们可以对应用程序执行许多与堆栈跟踪无关的其他事情。
  • 是的,那么让我问一下:为什么“向最终用户显示堆栈跟踪可能会带来潜在的安全风险”?攻击者在很多情况下也是开发人员,因此他们确实知道如何使用开发工具。我不是在问一个一般性的问题,我是专门问关于使用 printStackTrace 的。
  • 我不同意在客户端程序中“向最终用户显示堆栈跟踪可能会带来潜在的安全风险”的评估。我只是引用你引用的答案。在服务器端程序中,向用户显示堆栈跟踪(例如,在网页中)可能会带来安全风险,因为那里的攻击者无法直接使用该程序,因此仅限于通过 HTTP 等进行的攻击。堆栈跟踪将披露攻击者否则无法访问的信息。在客户端,攻击者可以随心所欲。

标签: android security


【解决方案1】:

好吧,作为开发人员,您永远不会希望最终用户了解您的应用程序背后发生的事情。以下几点我现在能想到。

  • 堆栈跟踪不应该对最终用户可见

  • 生成堆栈跟踪是一个相对繁琐的过程

  • 许多日志框架可用于此

  • 打印堆栈跟踪不构成错误处理。它应该与其他信息记录和异常相结合 处理。

我使用相同的链接来回答您的问题,因为两者都是相关的!

【讨论】:

  • 感谢您的努力,但关于您列表中的第一项,我仍有疑问。
  • 实际上为什么要向最终用户显示堆栈跟踪?如果您想在出现问题时记录信息 - 大多数崩溃报告工具(例如 Crashlytics)都允许您这样做。或者,如果您想给最终用户一些解释 - 文本消息 + 错误代码对我来说似乎是一个更好的解决方案(因为大多数用户不会理解堆栈跟踪的含义)。我并不是说显示堆栈跟踪是一个巨大的漏洞,它只是看起来不太理想。
  • 是的,我同意,但是如果您忘记了 Android 代码中的 printStackTrace 怎么办?该应用程序可能确实会崩溃并显示堆栈跟踪。攻击者可以利用这些信息做什么坏事?我的意思是,无论如何,有人可以对应用程序进行逆向工程,然后他们可以让它崩溃。
  • 是的,让堆栈跟踪可见不是一个好习惯。通常是由开发人员来调查它是否崩溃,而不是由最终用户来调查。
  • 通常我是这样看的——堆栈跟踪可能会显示一些很难找到的东西。攻击者可以用这些信息做什么取决于他(以及应用程序的细节)。但事实是,向他展示堆栈跟踪可以让他的生活更轻松——这是否会让他的生活变得足够容易导致应用程序崩溃是一个不同的问题。我不认为他会因此得到令人难以置信的结果,但他会注意到您使用的一些编码模式或您包含的库,从而推断出您的应用程序可能存在的一些弱点。
【解决方案2】:

攻击者已经可以下载您的 APK:
见:https://github.com/Lekensteyn/apk-downloader

反编译得到源代码:
见:Is there a way to get the source code from an APK file?

因此,如果安全功能依赖于不知道您的代码如何工作的攻击者,那么您的安全性就会很差。

“系统安全不应依赖于实现或其组件的保密性。” - https://en.wikipedia.org/wiki/Security_through_obscurity

隐藏堆栈跟踪不是一种有效的安全措施。

【讨论】:

  • 如果我理解你的答案,我会说隐藏堆栈跟踪是不够的,但最好隐藏它,因为它会使攻击者的生活更加困难。即使攻击者可以反编译apk文件并获得源代码,但仍然不容易理解代码是如何工作的,尤其是在源代码被混淆的情况下。
  • 这就像在说,如果你在没有降落伞的情况下跳下飞机,最好不要抽烟,因为它对你有害。这是有道理的,但它忽略了在重要之前你会死的一点。所以隐藏堆栈跟踪就像没有那支香烟。也许你的情况会好一点,但不会持续太久。
猜你喜欢
  • 1970-01-01
  • 2022-11-24
  • 2015-12-18
  • 2015-11-10
  • 2011-03-01
  • 2011-03-31
  • 2011-11-09
相关资源
最近更新 更多