跳过内容

C9:实施安全日志和监控

描述

日志记录是大多数开发者用于调试和诊断目的的概念。安全日志记录是一个同样基本且重要的概念:在应用程序运行时记录安全信息。

监控是利用各种自动化形式,对应用程序和安全日志进行实时审查。相同的工具和模式可用于操作、调试和安全目的。

安全日志记录的目标是检测和响应潜在的安全事件。

安全日志记录的益处

安全日志记录可用于:

  1. 为入侵检测系统提供数据
  2. 取证分析和调查
  3. 满足法规遵从性要求

用于入侵检测和响应的日志记录

使用日志记录来识别表明用户行为恶意的活动。可能需要记录的恶意活动包括:

  • 提交的数据超出了预期的数值范围。
  • 提交的数据涉及不应修改的数据(选择列表、复选框或其他受限输入组件)的更改。
  • 违反服务器端访问控制规则的请求。
  • 更全面的可能检测点列表可在此处获取。

当您的应用程序遇到此类活动时,至少应记录该活动并将其标记为高严重性问题。理想情况下,您的应用程序还应响应可能已识别的攻击,例如通过使用户会话失效和锁定用户账户。这些响应机制允许软件实时响应可能已识别的攻击。

安全日志记录设计

日志记录解决方案必须以安全的方式构建和管理。安全日志记录设计可能包括以下内容:

  • 仅允许预期字符和/或根据目标对输入进行编码,以防止日志注入攻击。首选方法是让日志记录解决方案执行输入转义而不是丢弃数据:否则日志记录解决方案可能会丢弃后续分析所需的数据。
  • 不要记录敏感信息。例如,不要记录密码、会话ID、信用卡或社会安全号码。
  • 保护日志完整性。攻击者可能会尝试篡改日志。因此,应考虑日志文件的权限和日志更改审计。
  • 将分布式系统的日志转发到中央安全日志服务。这将确保即使一个节点被攻陷,日志数据也不会丢失。这还允许进行集中式甚至自动化监控。

威胁

  • 攻击者可以通过操纵日志条目来执行日志注入攻击,可能将恶意数据或命令插入到日志文件中。
  • 攻击者可能通过过于冗长的日志记录实践无意中捕获和存储机密数据,从而获得对敏感信息的未经授权访问。
  • 攻击者可能参与日志篡改,以掩盖恶意活动的踪迹,可能擦除或修改其入侵的证据。
  • 攻击者可能通过大量数据淹没日志系统来发起拒绝服务攻击,可能扰乱正常的系统操作或掩盖其他恶意行为。
  • 由于不当的访问控制,攻击者可能获得对日志文件的未经授权访问,可能暴露敏感系统信息或用户数据。
  • 攻击者可能参与日志伪造,以创建虚假的审计追踪,可能误导调查人员或诬陷无辜方参与恶意活动。
  • 攻击者可能利用日志记录实践不足进行恶意活动而不被检测,可能延长其对系统的未经授权访问时间。
  • 攻击者可能利用多线程应用程序中的日志文件竞争条件,可能损坏日志数据或获得对敏感信息的未经授权访问。
  • 攻击者可能利用从日志中获取的信息执行重放攻击,可能重复使用捕获的数据来冒充合法用户或重复已认证的操作。

实施

以下是安全日志记录实施的最佳实践列表。

  • 在系统内部和组织的不同系统之间遵循通用的日志格式和方法。Apache Logging Services 是一个通用日志框架的示例,它有助于在 Java、PHP、.NET 和 C++ 应用程序之间提供日志记录的一致性。
  • 日志记录不要过多也不要过少。例如,请务必始终记录时间戳和标识信息,包括源 IP 和用户 ID,但要小心不要记录私人(如用户名)或机密数据(如业务数据),除非采取了额外措施。
  • 密切关注节点间的时间同步,以确保时间戳一致。

防止的漏洞

  • 针对登录机制的暴力破解攻击

参考资料

工具