224 lines
12 KiB
Plaintext
224 lines
12 KiB
Plaintext
|
////////////////////////////////////////////////////////////////////////////
|
||
|
from Meridian Systems, Haslett (Lansing), Michigan
|
||
|
multi-line service
|
||
|
Dr. Gordon Williams sysop (517) 339-3783
|
||
|
(517) 339-0091, etc., overflow
|
||
|
|
||
|
Meridian systems serves as the format for State Senator William Sederburg's
|
||
|
"Political Forum". Dr. Williams and Dr. Ken Salzman host a Human Services
|
||
|
Forum. Dr. Glenn Keeney of MSU's Computer Science department hosts discussion
|
||
|
of programming and provides downloads from "Computer Language" and "AI Expert"
|
||
|
magazines.
|
||
|
|
||
|
UPCO is a local computer user group that contracted BBS services in order to
|
||
|
support their club. Message base 8 was opened for discussion of viruses.
|
||
|
|
||
|
Lawrence Kestenbaum served as a County Commissioner for several years before
|
||
|
moving on to grad school at Cornell. He provided a copy of the Jerusalem B
|
||
|
virus.
|
||
|
|
||
|
Mike Marotta (:-) is a technical writer. His works have appeared in magazines
|
||
|
for IBM and Data General users, Defense Computing, Plan & Print, etc. He is
|
||
|
the author of a book on codes and ciphers.
|
||
|
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
|
||
|
|
||
|
Msg#:39943 *UPCO Discussion*
|
||
|
09-24-89 13:03:21
|
||
|
From: MIKE MAROTTA
|
||
|
To: LAWRENCE KESTENBAUM (Rcvd)
|
||
|
Subj: JERUSALEM B
|
||
|
I spent the morning with Jerusalem B and these are my preliminary results.
|
||
|
Naturally, I made backups, etc. I even made a new DOS diskette to use.
|
||
|
I gathered to this diskette some utilities such as LW86 (displays assembler
|
||
|
mnemonics and their syntax), CALC (for hex arithmetic), LIST and BROWSE,
|
||
|
FSDEBUG and plain old DEBUG, etc. I used the infected files to build a "dirty"
|
||
|
diskette with NU.EXE, COMP, and some of my own COM and EXE programs. XDIR.EXE
|
||
|
was written in C by a friend of mine. I wrote RED.COM, BLUE.COM and
|
||
|
PRTSCR.COM. RED and BLUE are 32 bytes each and change the screen colors.
|
||
|
PRTSCR is 4 bytes and does a "print screen".
|
||
|
I found that NU.EXE reaches a top limit of 155k bytes (started at
|
||
|
148K). About 5 re-infections seems to be the limit. COM files were infected
|
||
|
just once each. Re-infection, growth in file size) did not occur.
|
||
|
Here's what I see happening. You run a dirty program. It goes to
|
||
|
MEMORY and alters the image of COMMAND.COM. When you run a clean program, it
|
||
|
gets infected. When the date is Oct 13, 1989 and you run an EXE or a COM, the
|
||
|
file deletes itself. Some of these (XDIR, e.g.) ran once on "Oct 13" but then
|
||
|
erased themselves on the second call.
|
||
|
Here is what is NOT happening. You run a dirty program and it infects
|
||
|
all COM and EXE files. I ran NU.EXE time after time. WHile NU got bigger,
|
||
|
nothing else did.
|
||
|
If you run a clean program AFTER a dirty program has been run, the
|
||
|
clean program gets infected.
|
||
|
Because PRTSCR.COM, etc., are so small, I'll know in a few spare time
|
||
|
hours, just what the viral code is. (more later)
|
||
|
|
||
|
|
||
|
Msg#:39950 *UPCO Discussion*
|
||
|
09-25-89 01:05:45
|
||
|
From: MIKE MAROTTA
|
||
|
To: LAWRENCE KESTENBAUM (Rcvd)
|
||
|
Subj: JERUSALEM B
|
||
|
(Jesuralem is also easy to type and it even contains JESU...)
|
||
|
*
|
||
|
I spent a total of 8 hours with JB, drank a beer, passed out and here I
|
||
|
am 6 hours later. Some details. EXEs keep getting infected, at least some of
|
||
|
them can. COMs get infected once. I wrote a program to output the letter A.
|
||
|
As a COM file it grew once. The program to output the letter Z, left as an
|
||
|
EXE grew until it crashed. (CLean it took only 32 bytes. Maybe the small
|
||
|
size, you see.) Now, ATTRIB.EXE grows forever, but it starts at, what? 6K? I
|
||
|
got it up to 22K and still hoggin'. The increment is 1808 bytes.
|
||
|
*
|
||
|
I listed the disassembled code (hope that doesn't violate the implicit
|
||
|
contract I entered into when I took the diskette out of the sleeve) via
|
||
|
DIS86PC. (Some work here...Data and Code being equal, DIS86PC had some
|
||
|
interesting opinions about how to "execute" the "program fragment" COMMAND.COM)
|
||
|
The virus opens with a JUMP, so I took it from that argument, byte 195 forward.
|
||
|
*
|
||
|
I found the TSR function, a DATE function, lots of read and write
|
||
|
functions, a few interrrupt vectors and lots of calls to memory locations near
|
||
|
0000:0000 to 0000:001F. (Oddly enough the DATE checks only for the YEAR 1987.
|
||
|
I have yet to find 0A 0D = 10 13 but we'll see what tomorrow brings.)
|
||
|
You know that looks a lot like 0D 0A, the CR LF pair ...
|
||
|
|
||
|
|
||
|
Msg#:39952 *UPCO Discussion*
|
||
|
09-25-89 01:48:18
|
||
|
From: MIKE MAROTTA
|
||
|
To: GORDON WILLIAMS (Rcvd)
|
||
|
Subj: VIRUS, CONT.
|
||
|
I just rebooted and set the date to January 13th. (also a Friday) and the two
|
||
|
executables I ran deleted themselves.
|
||
|
*
|
||
|
The Jerusalem B virus looks for and sets the file attributes with function 43
|
||
|
of INT 21.
|
||
|
|
||
|
Msg#:39958 *UPCO Discussion*
|
||
|
09-25-89 18:58:45
|
||
|
From: MIKE MAROTTA
|
||
|
To: LAWRENCE KESTENBAUM (Rcvd)
|
||
|
Subj: JERUSALEM B
|
||
|
(It's getting easier to type Jerusalem... Let's hope no one invents a
|
||
|
Massachusetts or Connecticut virus...Then there's Azerbaidzhan and don't forget
|
||
|
Armenia's important city, Ordzhonikidze though perhaps virus wars would be
|
||
|
preferable to ethnic rioting...)
|
||
|
*
|
||
|
I found where JB looks for date and day. I'm about 2/3 through now
|
||
|
and I must say, I have respect for the programmer. Error trapping and
|
||
|
failsafes all over the place. The guy knows how to save a byte, also. If he
|
||
|
knew that the argument for a call is something, he moves the whole word into AX
|
||
|
instead of MOV AH,12 and MOV AL,34. He likes to PUSH and POP. This is the
|
||
|
"real programmer's" way. Me, I just MOV in again what I wished I'd PUSHed.
|
||
|
The program checks for disk type, and of course, changes the ATTRIButes of the
|
||
|
file. Lots of error trapping. And it's TSR. Neat.
|
||
|
*
|
||
|
Now the next phase is to write a counter-program. One that looks in
|
||
|
these places for this and that code and if the code is there, then you change
|
||
|
it so it's harmless. I already wrote some of this. I have a program called
|
||
|
FOXY that goes to COMMAND.COM on a floppy and changes the program with no
|
||
|
alteration in size or date. After being acted upon by FOXY, COMMAND.COM boots
|
||
|
with a message: "I am alive and I have rights."
|
||
|
*
|
||
|
By the way, the monstrous size of ATTRIB (now at 66K) indicates
|
||
|
Jerusalem B does NOT write to the "slack" area of a file. That in itself is a
|
||
|
challenge. You can't do all that error trapping in a 256 bytes. Also, the
|
||
|
reason that FOXY acts only on floppies (and B: at that!) is to avoid just such
|
||
|
hassles. The program is 32 bytes long and only because I allowed dead space
|
||
|
between the code and the message. I could still tighten it up... But that
|
||
|
would leave maybe 16 bytes for error trapping.
|
||
|
|
||
|
Msg#:40038 *UPCO Discussion*
|
||
|
10-01-89 09:33:31
|
||
|
From: MIKE MAROTTA
|
||
|
To: VIRUS HUNTERS
|
||
|
Subj: JERUSALEM B, CONT.
|
||
|
I must be making progress, I now have more questions than answers....
|
||
|
. sUMsDos is the virus identifier tag. At least this string appears at
|
||
|
the head and tail. Of course, we have seen that EXE files are always
|
||
|
re-infected, so this mechanism is not perfect. Also, near the tail of the
|
||
|
virus is the string EDLIN.
|
||
|
I looked at EDLIN and it has a lot of open space, most of it at the end
|
||
|
of the file. In all, EDLIN has about 2500 bytes available. The Jerusalem B
|
||
|
virus runs 1808 bytes. (This is hardcoded into the virus in several places,
|
||
|
e.g., MOV CX,0710 before an INT 21 function call.) I wonder if EDLIN.COM was
|
||
|
the first host, or perhaps the first intended host.
|
||
|
The string COMMAND.COM also shows up. However, infection of
|
||
|
COMMAND.COM doesn't go well. Mine crashed when I tried to invoke another DOS
|
||
|
shell.
|
||
|
It has been suggested that JB does NOT infect COMMAND.COM in order to
|
||
|
make it less detectable, especially asfter the discovery of the "40th
|
||
|
Anniversary Virus" which infected the command processor.
|
||
|
I have expressed by admiration for the great attention given to detail
|
||
|
in JB, but now I'm not so sure it is all necessary. Now that I have worked my
|
||
|
way 100% thru the disassembly, I find many block of code that make no sense.
|
||
|
They do work, but WHY is hardly clear. (How many times can you PUSH and POP a
|
||
|
register, load it, add to it and then not use it?
|
||
|
As for an antidote, Jerusalem B writes itself to the head of a file, or
|
||
|
if you like, it moves the original program down 1808 bytes. I believe that a
|
||
|
program that checks three small blocks of code can identify this virus and then
|
||
|
render it harmless by either filling those bytes with 00s, all 1808 of them, or
|
||
|
if more sophisticated, zero out only the bytes of code that do critical work.
|
||
|
We'll see.
|
||
|
|
||
|
Msg#:40219 *UPCO Discussion*
|
||
|
10-08-89 21:55:55
|
||
|
From: MIKE MAROTTA
|
||
|
To: DENNIS HILL
|
||
|
Subj: REPLY TO MSG# 40193 (SCAN VIRUS 40)
|
||
|
I tested SCAN40 on the Jerusalem B and it works. I also infected SCAN40 and
|
||
|
before it did anything else, it detected its own infection.
|
||
|
*
|
||
|
I went back to an article I wrote on viruses in January 1989 and found
|
||
|
that some of what I "discovered" about JB, I quoted earlier about JA.
|
||
|
*
|
||
|
I have some theories about undetectable viruses, by the way, which I
|
||
|
hesitate to share here. My concern is for Meridian's "right" to a good public
|
||
|
image.
|
||
|
*
|
||
|
One note: When the Academy of Sciences of the USSR was hit by a virus last
|
||
|
year (har! that's what they get for copying software!) they created an
|
||
|
anit-virus program which they immediately made a "state secret" (no SHAREware
|
||
|
in commieland). This program identifies " all twelve known viruses". Quite a
|
||
|
claim! (I forget the actual number they said. I almost got logged off taking
|
||
|
time to look but the article I quoted them in was edited for space their
|
||
|
hassles were not disclosed to the Data General usership...) Anyway, it seems
|
||
|
that by the standards of SCAN40, the Reds better get cracking on enhancing that
|
||
|
"state secret" so it can hold its own against the publicly available stuff in
|
||
|
the USA.
|
||
|
|
||
|
Msg#:40285 *UPCO Discussion*
|
||
|
10-10-89 10:41:58
|
||
|
From: MIKE MAROTTA
|
||
|
To: DISK DOCTORS
|
||
|
Subj: JERUSALEM B
|
||
|
With COM files you can diable the virus by changing the first instruction from
|
||
|
JMP 0195 to JMP 0810.
|
||
|
This fix can be automated. (I'm working on it, but got bogged down in
|
||
|
Disk Transfer Areas and File Control Blocks just as the lightning rolled
|
||
|
through town, so I quit.)
|
||
|
With EXE files, I haven't figured out a neat fix. I spent the morning
|
||
|
reading about EXEs. They start at location 0100 but then are relocated based
|
||
|
on data in their headers. The Waite Group's MS-DOS BIBLE had the nerve to call
|
||
|
this "better" than COM files which are "leftover" from CP/M.
|
||
|
|
||
|
Msg#:40301 *UPCO Discussion*
|
||
|
10-11-89 03:08:58
|
||
|
From: MIKE MAROTTA
|
||
|
To: GORDON WILLIAMS
|
||
|
Subj: REPLY TO MSG# 40290 (JERUSALEM B)
|
||
|
When it acts on COM (not EXE) files, Jerusalem B prepends itself to the
|
||
|
program, i.e., it writes itself to the first 1808 bytes, pushing the original
|
||
|
code down. The first command in JB is a jump, JMP 195. If you change this to
|
||
|
JMP 710 (710h = 1808 base 10) then your computer jumps over the infection and
|
||
|
continues processing normally. I did it with DEBUG; you can also use Norton's
|
||
|
etc. Change the 0195 to 0710. (Ah, maybe I should check -- as I recall, Intel
|
||
|
has this funny way of placing the Low byte first, so 0195 is really 9501 and
|
||
|
0710 is given as 1007. Anyway, you'll see it, if you look at the infected COM
|
||
|
file.
|
||
|
*
|
||
|
As I said before, I am still (ahem) hacking my way through the EXEs. For
|
||
|
reasons of their own, Intel and Microsoft define EXEs as the "default". An EXE
|
||
|
file header contains information for loading the program into memory. So some
|
||
|
of it is in one segment and some in another. (I had orginally thought this was
|
||
|
a function of the virus. (:-))
|
||
|
|