Swatch是一款免费开放源代码的日志监察工具,可使用在多种Unix和Linux操作系统下。 Swatch存在设计漏洞,可导致信息不予报告。 当SWATCH检测到一个事件多次发生的时候,会对事件的报告产生抑制,也就是不重复报告同样的事件。而且如果被抑制的事件一个月以后再次发生的时候也不会被报告。 问题存在于swatch源代码的1037行,比较新旧事件的月份,如果新的一事件大,新事件就递减: if ($ymdhms[1] > $Msg_Rec{$key}->{ymdhms}[1]) { $ymdhms[0]--; } 然后1038行获得两个事件日期的差异: my @delta_dhms = Delta_DHMS(@{$Msg_Rec{$key}->{ymdhms}}, @ymdhms); 1039行到1042行判断新事件是否需要报告: foreach my $i (0..$#min_dhms_delta) { $passed = 0 if ($delta_dhms[$i] < $min_dhms_delta[$i]); last unless ($delta_dhms[$i] == $min_dhms_delta[$i]); } 如果$passed为1,事件就必须报告。 这意味着如果两个事件发生在不同的月份,新事件会被认为比旧的事件还老,两个事件的差异永远是负值,而由于$delta_dhms[$i]一直小于$min_dhms_delta[$i]使的$passed为0,就不被Swatch报告。 日志不被报告,可使攻击者的攻击不被觉察。
Swatch是一款免费开放源代码的日志监察工具,可使用在多种Unix和Linux操作系统下。 Swatch存在设计漏洞,可导致信息不予报告。 当SWATCH检测到一个事件多次发生的时候,会对事件的报告产生抑制,也就是不重复报告同样的事件。而且如果被抑制的事件一个月以后再次发生的时候也不会被报告。 问题存在于swatch源代码的1037行,比较新旧事件的月份,如果新的一事件大,新事件就递减: if ($ymdhms[1] > $Msg_Rec{$key}->{ymdhms}[1]) { $ymdhms[0]--; } 然后1038行获得两个事件日期的差异: my @delta_dhms = Delta_DHMS(@{$Msg_Rec{$key}->{ymdhms}}, @ymdhms); 1039行到1042行判断新事件是否需要报告: foreach my $i (0..$#min_dhms_delta) { $passed = 0 if ($delta_dhms[$i] < $min_dhms_delta[$i]); last unless ($delta_dhms[$i] == $min_dhms_delta[$i]); } 如果$passed为1,事件就必须报告。 这意味着如果两个事件发生在不同的月份,新事件会被认为比旧的事件还老,两个事件的差异永远是负值,而由于$delta_dhms[$i]一直小于$min_dhms_delta[$i]使的$passed为0,就不被Swatch报告。 日志不被报告,可使攻击者的攻击不被觉察。