textfiles/virus/comp.vir

166 lines
8.1 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From cucard!rockyd!cmcl2!phri!sci.ccny.cuny.edu!rpi!zaphod.mps.ohio-state.edu!swrinde!ucsd!rutgers!netnews.upenn.edu!vax1.cc.lehigh.edu!cert.sei.cmu.edu!krvw Fri Apr 20 16:55:42 1990
Path: dasys1!cucard!rockyd!cmcl2!phri!sci.ccny.cuny.edu!rpi!zaphod.mps.ohio-state.edu!swrinde!ucsd!rutgers!netnews.upenn.edu!vax1.cc.lehigh.edu!cert.sei.cmu.edu!krvw
From: peter@ficc.uu.net (Peter da Silva)
Newsgroups: comp.virus
Subject: Usenet "virus" {Ed. HOAX - no, that's *not* a UNIX variant...}
Message-ID: <0009.9004231214.AA04329@ubu.cert.sei.cmu.edu>
Date: 20 Apr 90 20:55:42 GMT
Sender: Virus Discussion List <VIRUS-L@IBM1.CC.Lehigh.EDU>
Lines: 152
Approved: krvw@sei.cmu.edu
> I have to believe that the same yahoos who think viruses are fun
> things on single-user OS machines like PCs and Macs would love to
> infect Unix and VMS systems, if they could.
They can.
> I really do believe that these systems are more difficult to
> circumvent, and this has, to some extent, accounted for great disparity
> in the number of successful attacks on these systems as compared to the
> single-user boxes.
I believe you're right, *but* source code has little to do with it.
It's been at least 6 months since I posted this little fable.
The Usenet virus: a case history.
A cautionary tale.
The Usenet virus was detected when a user discovered that
a program he had received from the net seemed to have two
versions of malloc included with the source. One version of
malloc might be odd, but people have never tired of reinventing
the wheel. Two versions were suspicious, particularly since they
lead to a name conflict when the program was linked.
The first, lmalloc.c, seemed to be identical to the
malloc listed in Kernighan and Ritchie. The second, bmalloc.c,
was rather strange, so we concentrated our efforts on it... this
time was later found to have been wasted.
After a little work during spare moments over the course
of a week we decided it was actually a clumsy version of the
buddy system (a fast but space-inefficient method of memory
allocation). It might make a good example of how not to write
readable code in some textbook, but it wasn't anything to get
worried about.
Back to the first. It made use of a routine named
speedhack() that was called before sbrk() the first time the
malloc() was called. There was a file speedhack.c, but it didn't
contain any code at all, just a comment saying that it would be
implemented in a future version. After some further digging,
speedhack was found at the end of main.c. The name was disguised
by some clever #defines, so it never showed up in tags and
couldn't be found just by grepping the source.
This program turned out to be a slow virus. When it was
run, it looked for a file 'lmalloc.c'. If it found it, or it
didn't find Makefile, it returned. From then on malloc ran
normally.
If it didn't find it, it reconstructed it using a series
of other routines with innocuous names tagged on to the end of
other files. This was apparently an attempt to avoid overly
increasing the size of any one of the files in the directory.
Then it went into Makefile or makefile (it looked for
both) and added lmalloc.o onto the end of the first list of '.o'
files it found. It then reconstructed each of the extra routines,
and speedhack itself, using techniques familiar to any reader of
the obfuscated 'C' contest. These were tagged onto the ends of
the '.c' files that corresponded to the '.o' files in this same
list. The program was now primed to reconstruct the virus.
On inspection, we discovered that about 40% of the
sources on our system were infected by the speedhack virus, We
also found it in one set of shell archives that we'd received
but never unpacked or used, which we took as evidence that it had
spread to a number of other systems.
We have no idea how our system was infected. Given the
frequency with which we make modifications and updates, it's
likely that the original speedhacked code is no longer on the
system. We urge you to inspect your programs for this virus in
an attempt to track it to its source. It almost slipped by
us... if the author had actually put a dummy speedhack in
speedhack.c we would have merely taken lmalloc.o out of the
Makefile and defused *this* copy of the virus without being any
the wiser.
There are other failings in this program that we have
thought of. We have decided not to describe them to avoid giving
the author of this program ideas we might regret. Some ways that
programs like this can be defeated include 'crc' checks of source
files and, of course, careful examination of sources received
from insecure sites.
- -----
Now I have to make a confession. This whole document is a hoax intended
to dramatize the problems involved with viruses and Usenet. I suspect that
most of you were clued to this by the Keywords line. While playing with the
idea and writing this article several things occurred to me:
First of all, this virus is a much more complex program than any of the
viruses that have been spotted on personal computers. I think it has to be,
based on the design goals that a REAL UNIX virus must satisfy. I have not
attempted to actually implement it because of this.
It must be small, to avoid detection. It must not cause files to
grow without bound.
It must infect foreign files, otherwise it's not a virus... just a
Trojan Horse (like the bogus ARC and FLAG programs on the PC). Trojan horses
are a dime-a-dozen.
It must infect source files, since this is the primary software
distribution channel for UNIX. A virus stuck on one machine is a boring
one.
It must not break the infected program (other than what it might
care to do deliberately).
It must not be obvious from a simple examination of the source (like,
changing main to Main and having a virus-main call Main).
I believe that given these goals (which are, of course, subject to
debate) a simpler program would be successful in infesting more than a
small fraction of the machines that (say) comp.sources.misc reaches.
There are systems immune to this particular attack, of course. Ones not
running UNIX, so sbrk() doesn't work. Or ones with radically different
versions of malloc(). Ones with no 'c' compiler. They are in the minority,
though.
On the other hand a virus of this type could infest a large proportion
of the net before it was found. The virus I described does not cause any
direct damage, except for using up a relatively small amount of disk
space. A more vicious virus is possible.
Other variations of this virus are obviously possible. For example, it
could be tagged onto any standard 'C' library routine... I chose malloc
merely because source was available and because it's something that people
complain about, so they wouldn't be likely to find an extra copy suspicious.
Another good routine would be perror(), for the same reason. This would have
the additional benefit of making the spread of the infection dependent on
an additional random factor, making it harder to detect the virus.
Do I think something like this is likely? No. Especially not now that
I've written this little piece of science fiction. I'm sure that
eventually someone will try something unlike this, I suspect that their
virus would get caught much sooner than 'speedhack', because I think
that more people look at the source than conventional wisdom would lead
you to believe. But, again, this is just my personal opinion. Debate is
welcomed... that's why I did this in the first place: to inject some
sense into the debate currently raging in comp.sys.amiga.
- --
_--_|\ `-_-' Peter da Silva. +1 713 274 5180. <peter@ficc.uu.net>
/ \ 'U` Have you hugged your wolf today? <peter@sugar.hackercorp.com>
\_.--._/
v Disclaimer: People have opinions, organisations have policy.