离开 NSLogs 是否存在安全风险?

Is leaving NSLogs on a security risk?

假设您有一个使用密码的应用程序。开发过程中,想排查一些问题,用NSLog()打印密码看看是否正常。

在某个时刻你很开心,一切都很顺利。 您将您的应用程序发送给 Apple,最终该应用程序被接受并提交给 App store。

您忘记删除输出密码的 NSLog()....

这有什么不好的地方吗?或者有什么方法可以让黑客窃听那些 NSLogs()?

这取决于您存储的密码类型。 我相信日志文件存储在您的 iPhone 上。但我很确定,如果不将实际设备连接到计算机,读取这些文件是不可能的。

额外说明:如果我必须诚实,我现在不会拒绝我的应用程序进行审核。准备一个补丁是个好主意,当你的应用程序被审查时,你应该尽快上传新版本。但是,如果您保存将应用程序连接到某种数据库的密码,我会拒绝它。

是的,如果您的应用程序崩溃,这可能会非常糟糕。一旦用户同步了他们的设备,崩溃日志就会进入他们的计算机,连同 NSLog 的内容。这使得任何拥有二进制文件 reader.

的人都可以使用明文密码

例如,如果 Alice 将她的 phone 给了 Bob,则 Bob 输入他的密码,完成他的任务,注销,然后将她的 phone 还给 Alice。然后你的应用程序崩溃了。一旦 Alice 同步了她 phone,她就可以访问 Bob 的密码。

我猜。设备日志将包含该密码!这可以在 xcode-window-device/device 日志中看到。

是的,这很糟糕。我看到过攻击者在其中快速询问设备控制台日志的讨论。使用这些日志中的字符串,他们可以快速搜索可执行二进制文件以查找类似的字符串,例如用于部分日志条目的格式字符串。示例:

NSLog(@"user entered password '%@'", passwordString)

找到格式字符串,他们可以快速找到实际使用该字符串的代码部分,从而找到处理密码的代码部分。然后他们可以分析相关代码以完全绕过密码或为所欲为。

即使设备不会长时间保存大量控制台数据,攻击者可能需要做的就是将被盗设备连接到计算机,启动应用程序并输入随机密码。如果应用程序记录了密码(正确或不正确),则仍会捕获所需的字符串并开始攻击。

当然,如果日志行仍在设备控制台数据中,攻击者也可以获得实际用户的实际密码。如果该用户重复使用用户名和密码(很多人都这样做),攻击者现在可能拥有该用户在 Internet 上的其他帐户的凭据,这可能更敏感。

许多编程讨论建议不要直接使用 NSLog 并建议使用像 DEBUGLOG 这样的宏,它将编译出发布版本。如果那是用来调试的,那么app就不会留下这样的线索给攻击者利用。