Virus- Programme Quelle: BA FRISCHE NR. 3 Virus-Programmestelleneinh„utig unbekanntesoderzumindest unbeachtetes (verdrangtes ?) Risiko fr 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 (ausfhrbaren 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 fr 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 Ausfhrungsgeschwindigkeit 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 ausfhren; 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 gengend 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 gegenber 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 fr die Files ein (z.B. durch den Benutzer nur ausfhrbar. weder lesbar noch beshreibbar>, so ist wieder eine gewisse Barriere gegen die Infeftion errichtet. Wobei diese natrlich wieder durch einen Virus, der diese Schwelle zuerst runtersetzt, sich dann reinkopiert, und dann den ursprnglichen 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 berprfen, 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 VirusPrfroutine 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 fr 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 ausfhrt, 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 berprfen 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 fnf ausgefhrten Experi- menten wurden dem Eindringling fr weniger als eine Stunde allePrivilegienzugestanden.DiekrzesteZeitiagbei5Minuten 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 fr 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 fr 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 Fr nen kleinen Mauen gibt's 5 Ausgaben BHP Wo Basis, Adalbertstr 41b, ~8000 Mnchen 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 Tc I talein I ~pplrkcrt' C,tlkl'tC Wallecho Emirat. 21~1loe. f lleocpur I 4 IC. ~ W11R 1 lO10-iople ~ 93 1