[Logcheck-devel] Bug#336265: logrotate detection, possible attack not checked by logcheck
TsT
tst at letsgozik.com
Sat Oct 29 01:10:51 UTC 2005
Package: logcheck
Version: 1.2.41
Problem: Logcheck try to detect if log file have been rotate or not by file size way.
Possible attack:
- current log file (sizeA)
- run logcheck, (logcheck/logtail put inode in offsetfile), offset=sizeA
- [attacker run attack 1]
- run logrotate
- [attacker run attack 2]
- run logcheck may don't detect the rotation and don't check the log for attack 1 duration.
attack 1 : The real attack, this attack log will not be checked by logcheck if attack 2 run succesfully.
attack 2 Goal : Growing the log file more than possible, if his size become more than last checked offset.
The problem is here line 397
395: offsetfile="$STATEDIR/offset$(echo $file | tr / .)"
396: if [ -s "$offsetfile" -a -r "$offsetfile" ]; then
397: if [[ $(wc -c < "$file") -lt $(tail -n 1 "$offsetfile") ]]; then
398: # assume the log is rotated by savelog(8)
399: # syslog-ng leaves old files here
400: if [ -e "$file.0" -a "$file.0" -nt "$file.1.gz" ]; then
401: debug "Running logtail on rotated: $file.0"
402: $LOGTAIL -f "$file.0" -o "$offsetfile" $LOGTAIL_OPTS > \
403: $TMPDIR/logoutput/$(basename "$file") 2>&1 \
404: || error "Could not run logtail or save output"
405: rm -f "$offsetfile" \
406: || error "Could not remove $offsetfile"
407: # assume the log is rotated by logrotate(8)
408: # should also probably check if file is still fresh
409: elif [ -e "$file.1" ]; then
410: debug "Running logtail on rotated: $file.1"
411: $LOGTAIL -f "$file.1" -o "$offsetfile" $LOGTAIL_OPTS > \
412: $TMPDIR/logoutput/$(basename "$file") 2>&1 \
413: || error "Could not run logtail or save output"
414: rm -f "$offsetfile" \
415: || error "Could not remove $offsetfile"
416: fi
417: fi
My proposed Fix:
- if [[ $(wc -c < "$file") -lt $(tail -n 1 "$offsetfile") ]]; then
+ INODEOFFSET=$(head -n 1 < $offsetfile)
+ #INODEFILE=$(ls -id $file) ;# not run with symlink.
+ INODEFILE=$(find $file -follow -printf "%i")
+ if [[ $INODEFILE -eq $INODEOFFSET ]]; then
This problem seems like to bug #195935.
Best Regards,
TsT
--
www.letsgozik.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: OpenPGP digital signature
Url : http://lists.alioth.debian.org/pipermail/logcheck-devel/attachments/20051029/495b01be/attachment.pgp
More information about the Logcheck-devel
mailing list