C9:实施安全日志和监控
描述
日志记录是大多数开发人员已经用于调试和诊断目的的概念。安全日志记录是一个同样基本的概念:在应用程序运行时记录安全信息。
监控是通过各种自动化形式对应用程序和安全日志进行的实时审查。相同的工具和模式可用于运维、调试和安全目的。
安全日志记录的目标是检测和响应潜在的安全事件。
安全日志记录的益处
安全日志记录可用于:
- 为入侵检测系统提供数据
- 取证分析和调查
- 满足法规遵从性要求
用于入侵检测和响应的日志记录
使用日志记录来识别表明用户行为恶意的活动。可能需要记录的恶意活动包括:
- 提交的数据超出了预期的数值范围。
- 提交的数据涉及不应修改的数据(选择列表、复选框或其他受限输入组件)的更改。
- 违反服务器端访问控制规则的请求。
- 更全面的可能检测点列表可在此处获取。
当您的应用程序遇到此类活动时,您的应用程序至少应记录该活动并将其标记为高严重性问题。理想情况下,您的应用程序还应响应可能已识别的攻击,例如通过使用户会话失效和锁定用户帐户。响应机制允许软件实时响应可能已识别的攻击。
安全日志记录设计
日志记录解决方案必须以安全的方式构建和管理。安全日志记录设计可能包括以下内容:
- 只允许预期的字符,和/或根据目标编码输入,以防止日志注入攻击。首选方法是日志记录解决方案执行输入转义而不是丢弃数据:否则日志记录解决方案可能会丢弃后续分析所需的数据。
- 不要记录敏感信息。例如,不要记录密码、会话ID、信用卡或社会安全号码。
- 保护日志完整性。攻击者可能会尝试篡改日志。因此,应考虑日志文件的权限和日志更改审计。
- 将分布式系统的日志转发到中央安全日志服务。这将确保在一个节点受到攻击时日志数据不会丢失。这也允许集中式甚至自动化监控。
威胁
- 攻击者可以通过操纵日志条目来执行日志注入攻击,可能将恶意数据或命令插入到日志文件中。
- 攻击者可能通过过度详细的日志记录实践,无意中捕获和存储机密数据,从而获得对敏感信息的未经授权访问。
- 攻击者可能通过篡改日志来掩盖恶意活动的踪迹,可能删除或修改其入侵证据。
- 攻击者可能通过大量数据淹没日志系统来发起拒绝服务攻击,可能扰乱正常的系统操作或掩盖其他恶意行为。
- 由于不当的访问控制,攻击者可能获得对日志文件的未经授权访问,可能暴露敏感系统信息或用户数据。
- 攻击者可能进行日志伪造以创建虚假审计跟踪,可能误导调查人员或诬陷无辜方进行恶意活动。
- 攻击者可能利用日志记录实践不足来在不被发现的情况下进行恶意活动,可能延长他们对系统的未经授权访问。
- 攻击者可能利用多线程应用程序中的日志文件竞争条件,可能破坏日志数据或获得对敏感信息的未经授权访问。
- 攻击者可能利用从日志中收集的信息执行重放攻击,可能重复使用捕获的数据来冒充合法用户或重复已认证的操作。
实施
以下是安全日志记录实施的最佳实践列表。
- 在系统内部以及组织的所有系统之间遵循通用的日志记录格式和方法。通用日志记录框架的一个例子是 Apache Logging Services,它有助于在 Java、PHP、.NET 和 C++ 应用程序之间提供日志记录一致性。
- 日志记录不宜过多也不宜过少。例如,务必始终记录时间戳和识别信息,包括源 IP 和用户 ID,但除非采取额外的谨慎措施,否则要小心不要记录私有(例如用户名)或机密数据(例如业务数据)。
- 密切关注节点间的时间同步,以确保时间戳一致。
防止的漏洞
- 针对登录机制的暴力破解攻击