代码安全 | 第十期:日志伪造漏洞
本期主题为日志伪造漏洞的相关介绍。
01什么是日志伪造漏洞?
应用程序通常使用日志文件来存储事件或事务的历史,以供以后查看、收集统计信息或调试。根据应用程序的性质,检查日志文件的任务可以根据需要手动执行,也可以使用工具自动筛选重要事件或趋势信息的日志。
当日志条目包含未经过授权的用户输入时,会造成日志伪造。
02日志伪造漏洞的构成条件有哪些?
满足以下条件,就构成了一个日志伪造的安全漏洞:
1、数据是从不可靠的来源(包括但不局限于不可靠用户的输入信息或是不可靠用户可能更改的文件)进入应用程序;
2、数据写入到应用程序或是系统日志文件。
03日志伪造漏洞会造成哪些后果?
关键词:修改应用程序的数据;隐藏活动;执行未授权的代码或命令
如果攻击者向记录到日志文件的应用程序提供恶意数据,则可能会妨碍或误导日志文件的解读。最理想的情况是,攻击者可能通过向应用程序提供包括适当字符的输入,在日志文件中插入错误的条目。如果日志文件是自动处理的,那么攻击者可以破坏文件格式或注入意外的字符,从而使文件无法使用。通过伪造或其他方式,可能会导致日志文件中的统计信息发生偏差,受到破坏的日志文件可用于掩护攻击者的跟踪轨迹,甚至还可以牵连第三方来执行恶意行为。最糟糕的情况是,攻击者可能向日志文件注入代码或者其他命令,利用日志处理实用程序中的漏洞。
04日志伪造漏洞的防范和修补方法有哪些?
1、输入验证:对输入的信息进行验证。假设所有输入都是恶意的,使用“接受已知好的数据”输入验证策略,即,使用严格符合规范的可接受输入列表。拒绝任何不严格符合规范的输入,或者将其转换为符合规范的输入。
2、输出编码:对要写入日志文件的信息进行编码,使之符合日志文件的编码格式要求。常见的编码格式包括ISO-8859-1, UTF-7, 和UTF-8。
05日志伪造导致的漏洞样例:
用Wukong检测上述程序代码,则可以发现代码中存在着日志伪造导致的代码缺陷,如下图:
日志伪造在CWE中被编号为CWE-117:Improper Output Neutralization for Logs