[vox-tech] Easy tripwire alternative

vox-tech@lists.lugod.org vox-tech@lists.lugod.org
Sat, 14 Dec 2002 14:27:40 -0500


On Fri, Dec 13, 2002 at 02:41:00PM -0800, Rod Roark wrote:
> why it has to be so complicated.

Rod,
  It doesn't have to be complicated... 

> Any comments or suggestions for improvement will be much appreciated:

0 - The md5sum binary and the bash scripts you are running can not 
    be entirely trusted, because they are running on a possibly tainted 
    system.  If you want more certainty, I would recommend customizing
    a bootable rescue CD to have the commands you want which feeds off
    of a floppy for the dynamic data, this way you can trust the kernel
    and environment your checking system runs in.  Maybe have a small
    bootup menu which asks for 'check floppy against current system',
    'archive partition Foo state to floppy'... etc.

1 - You most likely will want to include files that aren't executable in
    your system md5sum database.  Things like /lib don't have to be 
    executable but if they are changed can easily provide any backdoors 
    required...

2 - The following find may work quicker, because it doesn't fork once
    per file...
    find / -xdev -type f -perm +111 -print0 | xargs -0 md5sum

    [when tested on the demo box the -exec method takes 55 seconds
     of CPU time, but runs about 5:20.  the xargs method takes 38 seconds
     of CPU time, and runs in 5:40... so it's faster CPU wise, but probably
     because of additional seeking slower wall clock]

3 - If you have multiple processors... or have some sort of RAID being
    attacked (so multiple IOs aren't going to slow you down)...
    you can get xargs to run multiple md5sum worker jobs:
    find / -xdev -type f -perm +111 -print0 | xargs -0 -P 4 md5sum

4 - If you find a significant speedup doing the xargs style md5sums
    the following may speed up finding the bad files:
    sort -k 2 < md5sum.old > old
    sort -k 2 < md5sum.new > new
    diff -u 1 old new | perl -ne 's/^+\S+\s+// or next; print $_;';

5 - Bzip2 compressing the md5sum list before storing on the floppy will 
    greatly increase your available archive area...

6 - While looking around at the md5sum source code I noticed that if the
    complete path name of a file to check is over 255 characters, when 
    reading the input file of checksums for the '-c' option, that line 
    will *silently* be ignored...
      /usr/local/lib/some_one_put_trojans_here/plus_200_charac...ters/foo

      Also since the -c option works by reading lines it doesn't handle 
    file names with newline characters in their names.  If may be possible
    to play some games with newlines that prevent detection of changed
    files.  Since it will also silently ignore any line that doesn't 
    parse right... you may want to use something other than -c to check.
    [the sort above also expects newlines on a line... but at least 
     diff will still find something has changed if anything fishy happened].

  I think I should stop now...

    TTFN,
      Mike

[ps: if you are interested in a patch to md5sum that fixes the silent 
dropping of long lines and unparsed lines... I could supply something]