home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chaos Computer Club 1997 February
/
cccd_beta_feb_97.iso
/
chaos
/
habi1
/
txt
/
hb1_93.txt
< prev
next >
Wrap
Text File
|
1997-02-28
|
14KB
|
396 lines
Virus- Programme
Quelle: BA FRISCHE NR. 3
Virus-Programmestelleneinhäutig unbekanntesoderzumindest
unbeachtetes (verdrangtes ?) Risiko für Grossrechenanlagen
bzw. deren Betreiber dar. Da diese Problematik in der bundes-
deutschen Fachpresse bisher so gut wie gar nicht angesprochen
wurde, geben wir im folgenden einen kleinen Überblick:
Ein VlRUS-Progran~m ist ein Programm, das in einem Gross-
rechner angesiedelt sich in andere. im selben Rechner befind"
liche Programme reinkopiert und aus diesen so auch Viren
macht. Dabei kann das neu. oder. um bei der Analogie zu
bleiben, infizierte Programm, auch eine weiterentwickelte Art
des Virus darstellen Solche Programme können lange Zeit
unbemerkt in dem Rechner umherwandern. wodurch auch die
regelmassig gezogenen Backups mit Viren durchsetzt sind. Erst
wenn ein Auslöser dazukommt, wird die eigentliche Zerstörung
vorgenommen. In pascal-ähnlicher Notation könnte so ein Virus
folgendermessen aussehen-
program virus:=
(123456;7,
subroutine infizieren-exec:=
(loop: fiie = Öffne Exec-File;
if erste Zeile = 1234567 then
goto loop;
Virus vorne an File anhängen:
subroutine zerstoren:-
(Zerstoren, was zerstört
werden soll)
Salbroutine Auslöser:=
Wird TRU, falls Auslöser
gedruckt)
main-program: =
(infizieren-exec,
if ausloser then zerstören;
gato next;)
next
(1) Einfaches Beispielt Virus "Y"
Dieser Virus durchsucht alle ExecProgramme (ausführbaren
Programme) ob in deren erster Zeile 1234567 steht d.h. das
Programm bereits infiziert ist. Falls nicht, wird das Programm
ebenfalls infiziert.
Das Interessante an dieser Art von Programmen ist, dass sie
sich auch durch Netzwerke rasch fortpflanzen können: Sobald
User B am Rechner Y das (infizierte) Programm von User A auf
seinem Rechner laufen lässt, sind auch alle Programme von
User A infiziert.
Allerdings lässt sich so ein Virus auch für nicht-zerstorerische
Zwecke verwenden Wird ein Kompressionsprogramm als Virus
verwendet, so werden automatisch alle Fiies verkleinert, und
das Virusprogramm setzt sich als Dekompressor vor das ge-
schrumpfte Programm. Allerdings mussdas Programm vor jeder
Infektion nochmals nachfragen, da sich sonst wieder unvorher-
sehbare Ergebnisse einstellen Ronnen, Nach Versuchen zu
urteilen, kann eine Platzersparnis bis zu 50% erreicht werden,
wobei die Ausführungsgeschwindigkeit wegen der Dekompres-
sion etwas absinkt. Beispieb
program compress-virus:=
(01 234567:
subroutine infizieren-exec:=
(loop:file = öffne exec-file
if erste Zeile = 01234567 then
goto loop;
compress file:
decompress an file
vorneanstellen;
)
main-program: =
(if erlaubnis then
infizieren-exec;
decompress rest-der-file:
tecompresste file ausführen;
12} Virus zum Komprimieren ''C"
Um nun ein Timesharing-System ZU einem vorgegebenen Zeit-
punkt unbenutzbar zu machen. kann man Virus V folgenderrnas-
sen abwandeln:
subroutine zerstören:=
(loop: gato loop;)
subroutine auslöser:=
(if jahr ~ 1r9&4 then
TRUE eise FALSE;
(31 Modifiziertes Programm V
Am 1.1.1985 wären alle infizierten Programme, sobald sie
aufgerufen werden, dazu übergegangen, nur noch leere Schlei-
fen aufzufuhren (Hubroutine zerstören). Wenn der Auslosezeit-
punkt genügend spät nach der ersten Infektion des Systems
angelegt ist, so dass man sicher sein kann, dass praktisch alle
Programme verseucht sind. ist der Fehler wohl nur noch sehr
schlecht wieder rauszukriegen, da auch alle dazu nötigen
UtilitiesYersautsind.Werdendiesewiedervoneiner"sauberen"
Qelle reinkopiert, so sind sie im Nu auch wieder angesteckt,
sobald irgend ein infiziertes Programm im betreffenden Benut-
zerbereich aufgerufen wird.
if file = P2 then print
"if D(P1,P2) then print 0;"; ~ Öl,
Schutz vor Viren
Durch die Vernetzung und gleichzeitige Benutzung derselben
Daten und Programme ist prinzipiell jede Multiuser-
Rechenanlage gegen Viren anfällig, da der Rechner intern
"durchlässig" ist. Die sicherste Methode des Schutzes vor Viren
ist demnach die Abschottung des Rechners gegenüber anderen
Benutzern und Rechnern, was aber in den meisten Fällen dem
Sinn der Übung zuwider läuh.
Jedoch kann man den Benutzerkreis in einzelne. und nun
zwingend völlig getrennte Bereiche aufteilen, so dass ein infi-
zierter Bereich nicht auch noch die anderen anstecken kann
Fuhrt man zugleich auch noch verschiedene Schutzcodes für
die Files ein (z.B. durch den Benutzer nur ausführbar. weder
lesbar noch beshreibbar>, so ist wieder eine gewisse Barriere
gegen die Infeftion errichtet. Wobei diese natürlich wieder durch
einen Virus, der diese Schwelle zuerst runtersetzt, sich dann
reinkopiert, und dann den ursprünglichen Zustand wieder her-
steilt, umgangen werden kann.
Behebung der Infektion
Analog zum biologischen Modell kann man in Rechnern die
eingedrungenen Viren wieder unschädlich machen Dazu muss
man zuerst feststellen, ob ein Programm ein Virus ist, um dann
eine Möglichkeit zu finden, den Virus unschädlich zu machen.
Um festzustellen, dass ein Programm P einen Virus darstellt,
muss man überprüfen, ob P andere Programme infiziert. Dies
geht aber auch nicht so einfach, da man den Virus V wieder so
modifizieren konnte, dass er nur dann andere Programme
infiziert, wenn eine VirusPrüfroutine D angezeigt hat, dass V
kein Virus ist.
program kein─virus:=
mal n-program: =
(if D(kein-virus) then
(infizieren;
if ausloser then
zerstören;
goto next; +
)
)
{4) Unauffindbarer Virus KV
Nun wird der neu Virus KV nur dann andere Programme
infizieren und als Virus arbeiten, wenn die Entscheidungsroutine
D festgestellt hat, dass KV eben kein Virus ist.
Evolution von Viren
Um die Auffindbarkeif von Viren zu erschweren kann man sich
selbst modifizierbare Virusprogramme einsetzen:
program evolutions-virus:=
Hubroutine print-zutalls-befehl =
Sprint Zufall Is─variablen namen,
Zurkalis─variablennamen;
loop: i1 zufalls-bit = ü then
(print zufalls-operator,
Zufalls -variabienname,
goto loop;)
print Strichpunkt;
)
Hubroutine kopiere - zufal I - in─virus: =
Sloop: copy evolutions virus to
virus till strichpunkt-
if zulalls-bit = 1 then
print Zufalls─befehl
i1 end-of-input-fiie goto loop;
main - program =
(kopiere-zufall - in -virus;
infizieren;
if auslöser then zerstören;
goto next;
next;)
(5) Selbstmodifizierender Virus EV
Dieser Virus kann auch mit einem Vergleichsprogramm das
zwei Programme vergleicht nicht gefunden werden da der
kopierte Virus immer eine neÜ Anweisung enthält, die zwar auf
den Programmablauf keinen Einfluss hat, aber die Viren unter-
schiedlich aussehen lässt.
Man kann aber noch weitergehen Sind zwei Programme gleich,
so fuhren sie verschiedene Operationen aus, während zwei
verschiedene Programme die gleichen Operationen ausfuhren:
program unauffindbarer-virus:=
1
suhroutine kopiere-unauffindbar:=
(copy unauffindbarer-virus
to fälle
tili zeilenbeginn = zzz,
copy unauffindbarer virus
to file
till end-of─Input─file;
mein - program, =
(if random─bit = 0 then
file = P1 eise
file= P2
kopiere─unauffi ndbar;
zzz;
infizieren;
if ausloser then zerstören;
goto next;
next;)
~-
-
~ MIO
t"
Y
U
(6) Unauffindbarer, selbstmoditizierender Virus UEV
Das Programm UEV entwickelt sich zu zwei Programmtypen P1
und P2. Ist das Programm vom Typ P1, wird die Zeile zzz zu: if
D(P1,P2) then print 1; und wenn das Programm vom Typ P2 ist,
wird dieselbe Zeile zu: D(P1,P2) then print 0 Beide Programme
benutzen eine Entscheidungsroutine D die bestimmt ob die
Programme gleich sind. Sagt D, dass beide gleich sind, so gibt
P1 eine I aus und P2 eine 0 was der Aussage von D widerspricht.
Damit ist die Routine D zum Auffinden der Viren für die Katz.
Da P1 und P2 Weiterentwicklungen desselben Programmes sind,
ist die Ähnlichkeit der Weiterentwicklungen eines Programmes
nicht vorhersagbar Anstall zu versuchen, Viren durch Uberein-
stimmung der Programme zu finden, kann man auch versuchen,
siedurchVergleichderTätigkeitenzweierProgrammezufinden.
Da aber ein Virus als Teil eines Benutzerprogrammes auftritt
und auch selbst nur Zulässige Operationen ausführt, ist auch
dies Eßnegermassen schwierig.
Wie gezeigt, istes nahezu unmöglich, in einem einmal infizierten
System alle enthaltenen Viren zu finden und auszumerzen.
Bestenfalls kann man ein Gleichgewicht zwischen Viren und
Heilungsprogrammen erreicht werden speziell dann, wenn
beide Programmarten selbstmodifizierend arbeiten. Eine noch
relativ gute Möglichkeit, um wenigstens das Ausmass der
Infektion überprüfen zu kcinnen, ist eine Aufzeichnung. wer von
wo aus welches Programm wann aufgerufen hat. Solche Mog-
lichkeiten bieten bisher aber nur einige wenige Systeme.
PRAXIS
Der erste Virus wurde am 3. 11. 1J83 auf einer VAX 111750 unter
Unix geboren. Er wurde zunächst ins Programm "vd", das die
File-Strukturen unter Unix grafisch anzeigt, eingebunden (und
den Benutzern bekanntgegeben, da es ja nur ein Experiment
sein sollte). Der Virus war, wie bei den gezeigten Beispielen.
am Anfang des Programmes angesiedelt. Um die Infektion
nachverfolgen zu können, wurden einige Vorsichtsmassnahmen
verwirklicht: Alle Infektionen mussten per Hand bestätigt werden
und es wurde nichts zerstört. In den fünf ausgeführten Experi-
menten wurden dem Eindringling für weniger als eine Stunde
allePrivilegienzugestanden.DiekürzesteZeitiagbei5Minuten
der Durchschnitt unter einer halben Stunde. Das Ergebnis war
so verheerend, dass die Flechnerbetreiber die Experimente
daraufhin stoppen liessen. (Typisches Verhalten, wenn Fehler
in Systemen entdeckt werden besser zudecken als beheben.. ).
Weitere Versuche wurden auf einem TOPS-20 (DEC-20), einer
anderen VAX unter VMS und einer IBM/370 unter VM/370
geplant Ein erfahrener TOP~21tProgrammierer hatte den ent-
sprechenden Virus in 6 Stunden fertig, ein VMf37}Neuling
brauchte 30 Stunden mit Beistand eines erfahrenen Program-
mierers, und ein VMS-Anfanger hatte binnen ZU Stunden seinen
Prototypen am Laufen Aber leider wurden auch hier die ent-
sprechenden Versuche von den Rechnerbetreibern bald unter-
sagt.
Ein weiterer Vi rus-Angriff wurde im Marz 1984 gestartet Beglei-
tumstär.'de sehr behindernd Nur 26 Stunden Zugang zum Rech-
ner für einen 1108 ungewohnten Benutzer und einen Program-
mierer der 5 Jahre lang keine 1108 mehr bedient hatte Jedoch
stand der erste Virus bereits nach 18 Stunden. Nach weiteren 8
Stunden wurden die Ergebnisse den Programmierern, Verwal-
tern und Sicherheitsbeauftragten vorgetuhrt: Der Virus bewegte
sich ohne Probleme über die Grenzen der Benutzerbereiche
hinweg und erreichte höhere Prioritäten. wodurch das gesamte
System infiziert werden kann Der Virus bestand aus 5 Zeilen
Assembler, ca. 200Zeien Fortran und etwa 50 Kommandozeilen
Im August 1984 konnte ein weiterer Versuch auf einer VAX unter
Unix gestartet werden Sobald der Virus auch den Bereich des
Sysops erreicht hatte, war er im Nu (unter einer Minute} über
das gesamte System verteilt Als beste Möglichkeit, den Sysop
zu erreichen, stellte sich das Anbieten eines infizierten Pro-
gramms im Bulletin Board des Systems heraus, da die Sysops
neugierig wie immer, so schnell wie möglich diese Programme
ausprobieren wollen.
Zusammenfassung
Virusprogramme können in relativ kurzer Zeit entwickelt werden
es ist einfach, sie so zu gestalten, dass sie nur wenige oder gar
keine Spuren hinterlassen, und sie können ohne grosse Proble-
me die vom System errichteten Schranken umgehen Genauso,
wie sie sich in einem Computer verbreiten können, können sie
auch durch Netzwerke wandern Absoluten Schutz bieten nur
völlig abgeschottete Systeme. Alle anderen Verfahren sind
entweder extrem zeitaufwendig oder ungenau
Und nun ganz zum Schluss noch ein Bonbon für alle, die bis
hierher durchgehalten haben- Eine Anwendung eines sehr
speziellen, aber Überaus praktischen Virus ist ein geänderter
C-Compiler in einem Unix-System, der immer dann, wenn das
Login-Programm Kompiliert werd, einen neuen User JOSHUA
hinzufugt. Sowas soll - unbestätigten Meldungen zufolge - in der
amerikanischen National Secority Agency {NSA - US Verfas-
sungsschutz) schon laufen
Die Bayrische Hackerpost erscheint in unregelmäßigen Abstan-
den Für nen kleinen Mauen gibt's 5 Ausgaben
BHP Wo Basis, Adalbertstr 41b, ~8000 München 40
viris1h1 ws
if file = P1 then print
"if D(P1,P2) then print 1;''; ~,
Wie ~4nt)rinc~e ~nc~er~popt
·. D.' lnfornationchlatt fier den lahenabaJahanden DFü - Brnut~ar
Frelc. O't~tcchicnd 18 2,-1 Icherle Wir 2,~0 / U111 Tüc I talein I ~pplrkcrt'
C,tlkl'tC Wallecho Emirat. 21~1loe. f lleocpur I 4 IC. ~ W11R 1 lO10-iople
~ 93 1