[comp.virus] 4096 Virus and Checksums

70033.1271@CompuServe.COM (Steve Albrecht) (08/03/90)

In browsing through the April 1990 issue of Computers and Security,
Volume 9, No. 2, I read the following comments of Dr. Harold
Highland on the 4096 virus:

     "This recently published computer virus is particularly
     disturbing in that...checksum techniques likewise appear to
     be useless, the virus `disappears' during the checksum
     process..."

Can someone please elaborate on how the virus avoids the checksum
process, or perhaps direct me to more detailed information on this
virus?

In particular, does it avoid all checksum algorithms, or only
certain ones?  How does it avoid detection from the checksum
operation?

Any help would be most appreciated.


Steve Albrecht
MIS Field Services
PLAN International
70033,1271@compuserve.com

RADAI@HUJIVMS.BITNET (Y. Radai) (08/09/90)

  Steve Albrecht asks about the following statement by Dr. Highland on
the 4096 virus:
>    "This recently published computer virus is particularly
>    disturbing in that...checksum techniques likewise appear to
>    be useless, the virus `disappears' during the checksum
>    process..."
>
>Can someone please elaborate on how the virus avoids the checksum
>process, or perhaps direct me to more detailed information on this
>virus?
>
>In particular, does it avoid all checksum algorithms, or only
>certain ones?  How does it avoid detection from the checksum
>operation?

The virus "disappears during the checksum process" only in the sense
that files infected by this virus do not appear to have been altered
*IF THE VIRUS IS IN MEMORY WHEN CHECKSUMMING IS PERFORMED*.  Didn't
Dr. Highland mention this in his article?  The same is true of some
other viruses, incl. EDV and Number of the Beast (V512).  From this it
is obvious that the answer to your question  whether it avoids *all*
checksum algorithms  is affirmative.  But this is only under the above
circumstances.

  The remedy is obvious: Instead of performing checksumming from your
hard disk, do it only after cold booting from your original (write-
protected) DOS diskette, with the checksum program and database also
on a diskette.  This will ensure that RAM is uninfected when the check-
sum program is run.  (At least it's much surer than depending on checks
such as those advocated by Jim Molini and Chris Ruhl on this forum
several months ago.)

                                     Y. Radai
                                     Hebrew Univ. of Jerusalem, Israel
                                     RADAI@HUJIVMS.BITNET
                                     (Note new address)

vail@tegra.com (Johnathan Vail) (08/10/90)

70033.1271@CompuServe.COM (Steve Albrecht) writes:

   In browsing through the April 1990 issue of Computers and Security,
   Volume 9, No. 2, I read the following comments of Dr. Harold
   Highland on the 4096 virus:

	"This recently published computer virus is particularly
	disturbing in that...checksum techniques likewise appear to
	be useless, the virus `disappears' during the checksum
	process..."

   Can someone please elaborate on how the virus avoids the checksum
   process, or perhaps direct me to more detailed information on this
   virus?

Back when it was fun to hack with viral code I thought it would be
necessary to avoid the checksum built into the .EXE header.  The first
approach was to compute a new checksum based on the entire new file.

A better and more efficient way is to simple force the checksum of the
actual added virus code be zero.  That way, any checker will take the
CS of the original file data and add it to the CS of the added virus
code.  This being zero it will result in the same CS as the original.
This method will easily spoof checksums but not CRCs or LRCs.  And I
still don't know how to spoof a combination of these.

I think that there are programs that will wrap around an executable
and detect any changes made to itself.  These can't be beat by the
method described above.  Probably what happens here is the the virus
code gets executed first after being loaded.  It then relocates itself
and hides its tracks.  Then it can pass control back to whatever
program it has infected.  The resulting load image is the same as it
would have been without a virus.

Just some random musings...  jv

[Ed. Unless I'm mistaken, the 4096 doesn't use this sort of mechanism
to hide from checksums; it traps the interrupts that read files and
disinfects files on the fly so that a checksum/crc/whatever actually
sees the non-infected files.]

The inability of snakes to count is actually a refusal, on their part,
    to appreciate the Cardinal Number system. -- "Actual Facts"
 _____
|     | Johnathan Vail | n1dxg@tegra.com
|Tegra| (508) 663-7435 | N1DXG@448.625-(WorldNet)
 -----  jv@n1dxg.ampr.org {...sun!sunne ..uunet}!tegra!vail

CHESS@YKTVMV.BITNET (David.M.Chess) (08/13/90)

To reply to some of Johnathan Vail's points:

  - As you probably know (I couldn't quite tell from your posting!)
    the checksum field in the header of EXE files is completely ignored
    by the operating system, so a virus infecting an EXE file
    doesn't have to worry about fixing it, or about leaving the
    file's checksum unchanged (some viruses use the field as the
    place to put their own self-id marker).
  - Since the checksum field in the EXE header is ignored, the kinds of
    checks that are useful in protecting against viruses are CRCs
    performed by an anti-virus utility that looks for file
    modifications.   Since there are lots and lots of possible
    CRCs, and a virus writer has no way of knowing in advance
    which ones his virus will encounter, it's not really possible
    to write a virus that makes modifications to a file in such a
    way as to fool any significant number of different CRC checks.
    (I agree that it's easy for a virus to fool a simple add-up-
    the-words checksum in the way you describe, but those are
    so insecure that no one uses them, as far as I know.)
  - Programs that check themselves for virus infection generally
    do it by examining themselves *on disk*, not by examining
    the in-RAM copy, for just the reasons that you give; the virus
    will generally fix the in-RAM copy to look normal before
    passing control to the "host".

As Ken points out, the 4096 (and other "stealth" viruses) defeats CRC
checks (and other modification-detectors) that are run while the virus
is in memory, by "lying" to programs about the contents of files.  As
Mr. Radai says, the best way to protect against this is to get the
machine into a trusted state before running the modification detector.
On the PC, this involves a cold boot from a trusted floppy; not
exactly convenient, but worth the trouble for critical systems...

DC