在调试模式下,应用程序后端是否可能会记录敏感的客户数据?

信息安全 Web应用程序 网络服务器 日志记录 数据泄露 网站
2021-08-27 02:27:42

当我在一个网站上工作时,该网站要求客户输入他们的姓名、地址、电话号码等数据,显然是需要保护的客户数据。

我尽力不记录此类数据(尽管我有两个级别的日志:正常和安全,并且会为此使用安全日志区域),我想知道应用程序在调试时是否仍不记录客户数据或跟踪模式。所有这些日志都发生在服务器端。客户无法控制它。

在我当前的实现中,正常发布模式不会在 INFO、WARNING 或 ERROR 日志级别中这样做,但 DEBUG/TRACE 级别可能会将其中一些信息泄漏到日志中。这是大多数网站服务器中的预期行为吗?或者我们是否应该尝试限制此类泄漏,即使在 DEBUG、TRACE 模式下?(请注意,我们的 C++ 应用程序是在发布模式下编译的,本例中的“DEBUG”指的是日志级别,而不是一些调试代码是否仍在软件中。)

请注意,该应用程序可以将数据记录在另一台计算机甚至第三方系统上,因此对日志的安全访问独立于对网站服务器应用程序或数据库的访问,显然,数据是确定的。但是,我可以想象有些人对他们的日志计算机的安全要求低于具有数据库的计算机......

2个回答

这是一个很好的问题!我也是处理高灵敏度数据的 c++ 产品的开发人员,我们几乎每天都面临这个困境。

当生产系统开始发出警报(尤其是与性能或配置相关的警报,认为行为不端的软件/错误也适用)时,我们通常需要临时打开堆栈跟踪级别的调试以诊断问题。这些日志不可避免地包含敏感信息:交易中涉及的 IP 地址或用户,有时是数据片段,应有尽有。由于显而易见的原因,我们的客户通常不愿意向我们提供这些日志。这很难。

实际运行您的服务器的管理员会知道他们的数据的敏感程度,以及他们在处理数据时必须遵循的政府或行业安全政策(例如:政府、财务和健康数据都有特殊规则)。您的软件能够生成敏感日志是公平的,但管理员需要完全控制它们的生成和存储方式、时间和地点。

你可以做的一些事情:

  • 确保您非常小心地将所有包含(甚至可能)敏感信息的错误消息正确分类到正确的日志级别 - INFO、WARNING、ERROR、DEBUG、TRACE 等。
  • 在您的文档中明确说明每个日志级别中包含的敏感信息种类。越详细越好,这样有安全意识的管理员才能正确地完成工作。
  • 确保 DEBUG/TRACE 日志级别在软件的默认配置中处于关闭状态,并且管理员必须运行一系列警告才能将其打开(即不可能偶然发生)。
  • 您可以将 DEBUG/TRACE 级别日志发送到默认为本地存储的单独日志流(您提到单独的“安全”日志),从而更难“意外”将其发送到安全区域之外,或者将其与标准日志。
  • 使用编辑工具发送您的产品,该工具知道如何使用唯一的占位符从您的调试/跟踪日志中屏蔽所有原始数据、用户名、IP 地址等(每个唯一的用户名/IP 被唯一的 A、B、..、AA 屏蔽, 等等)。通常实际的用户名/IP/数据是不相关的,但诊断问题的关键是错误只发生在 X 类型的数据上,或者 IP 地址 A(并且只有 A)总是发送它的请求 3 次,或者其他什么. 这样,如果管理员需要将这些日志移出安全区域(例如将它们发回给您进行调试),管理员就可以确信没有任何敏感信息泄漏。

底线:我认为您的软件能够记录敏感信息以用于调试目的是公平的 - 当您必须调试出现故障的产品系统时,您会感谢自己!要尽可能地难以“意外”开启。相信管理员会了解他们的安全要求,并使他们的工作变得轻松。

自 90 年代后期以来,我一直从事渗透测试工作,并看到了很多应用程序。应用程序偶尔会记录用户识别数据的情况并不少见。大多数开发人员将有权访问日志的人声明为受信任的,因此不会限制日志记录。

这是否可能成为问题取决于业务案例和所需的安全级别。在我的专业意见中,绝不允许记录密码。如有必要,您可以记录第一个字符和长度。但仅此而已。否则,您会妥协在运动和休息期间加密密码的愿望。

在高安全性环境中,这甚至可能适用于其他数据,如用户名、姓名、地址、银行帐号等。