Gefahr der dritten Art: Jetzt greifen Viren die Hardware an

Die Bedrohung durch Computerviren ist breit gefächert. Erst trieben »Fun-Viren« ihre Späße, dann zerstörten Software-Viren Programme und Daten. Doch nun geht es ans Eingemachte: Informatiker Marcus Unterberg schildert, wie neue Killer-Viren die Hardware Ihres ST vernichten können.

Wie konkret ist die Gefahr, wie greift ein Hardware-Virus Ihren Computer an? Welche Abwehrmaßnahmen gibt es, um Ihren ST zu schützen?

Marcus Unterberg Stefan Perschke

Vielleicht erinnern Sie sich noch daran, daß viele ältere Hercules-Grafikkarten für MS-DOS-Computer eine Programmierung des Zeilentrafos zuließen. So war es nicht schwierig, den Frequenzpegel soweit anzuheben, daß genügend starke Wirbelströme im Trafo auftraten, um diesen zu überhitzen und nach einiger Zeit zu zerstören. Anwender hatten nicht nur den unmittelbaren Schaden: In der Bundesrepublik war kein Ersatz für diesen Trafo zu finden.

Der Betrieb von Monitoren am Atari ST ist hingegen unproblematisch. So ist zum Beispiel das Senden des höherfrequenten Monochrom-Signals an einen Farbmonitor nicht möglich, da der ST bekanntlich den Monitor-Typ beim System-Start abfragt und eine Fehlbedienung nicht zuläßt. Ein derartiger Schutz durch den Hersteller ist jedoch leider nie 100prozentig. Ein totaler Schutz der Hardware hätte eine sehr unflexible Rechner-Architektur zur Folge — der Computer ließe sich kaum verkaufen.

Doch wo liegen die Achillesfersen des ST? Welche Tricks könnten sich Viren-Programmierer in ihrem Wahn noch ausdenken?

Gefährdet: Das Diskettenlaufwerk

Betrachten wir zunächst das Diskettenlaufwerk des ST. Hier setzen tatsächlich sehr viele Viren an. Sie fahren den Schreib-Lese-Kopf gegen den Poller, versuchen also, die Trackgrenze nach innen (Track # -1) oder außen (meist ab Track # 86) zu überschreiten. Dadurch dejustieren sie das Laufwerk sehr schnell. Für diese Operation sind lediglich die TYP-1-Kommandos des FDC (Floppy-Disk-Controller) nötig. Diese sind von jeder Programmiersprache aus erreichbar, die Zugriffe im Supervisor-Mode auf die System-Variablen unterstützt. Konkret setzt man die Kommando-Register des FDC so, daß die Steprate 2 ms beträgt, Kommandos sofort ausgeführt werden und die Präkompensation deaktiviert ist. Die Kommandos »step-in« beziehungsweise »step-out« setzen den Kopf auf »imaginäre« Tracks.

Die TYP-2-Kommandos lassen sich dazu mißbrauchen, dem Motor des Diskettenlaufwerks Schaden zuzufügen. Da das Diskettenlaufwerk für den Schreib-Lese-Vorgang eine Nenndrehzahl von zirka 300 U/min aufweist, erhält der Antriebsmotor bei nicht aktivem Diskettenlaufwerk für einige 100 ms Ströme von bis zu 0,5 A. Schaltet man das Laufwerk nun schnell hintereinander ein und aus, indem man bei entsprechend gewählten Parametern liest und abschaltet, führt dies zu einem hörbaren Hochjaulen des Motors, was seine Lebensdauer verkürzt.

Nun wird sich der eine oder andere Leser fragen, wozu wir, bei solch erschreckenden Perspektiven (und diese sind noch relativ harmlos), irgendwelchen Viren-Programmierern auch noch Kochrezepte frei Haus liefern. Derartige Einwände sind berechtigt. Zum einen mag es Sie beruhigen, daß unsere Rezepte im Kern unvollständig bleiben. Ganz so einfach ist das Nachahmen für einen Normal-Programmierer nicht. Außerdem sind die hier verwerteten Informationen aus gängigen Büchern zu entnehmen.

Gefährdet: Die Schnittstellen

In jüngster Zeit erfuhren wir von Fällen, bei denen unerwartet die Schnittstelle des Druckers den Dienst verweigerte. Dies kann daran liegen, daß ein Virusprogramm den MFP-Pin 22 (Multi-Function-Peripheral), der das Busy-Signal des Druckers erhält, durch Umsetzen des DDR (Data-Direction-Register) mit dem Wert des GPIP-Registers besetzt hat. Danach »knallen« zwei Out-Pegel aufeinander und beschädigen eines der Geräte (Drucker oder ST). Unterliegt der MFP-Chip des ST, wird’s teuer.

Gefährdet: Die MMU

Auch die MMU (Memory-Management-Unit) ist verwundbar. Die MMU ist ein CMOS-Baustein. CMOS-Chips ziehen nur dann Strom, wenn sie im Einsatz sind. Ist dies der Fall, so ziehen sie kurzfristig respektable Ströme und erwärmen sich leicht. Da die MMU nur mäßig benutzt wird, besteht für sie nur dann Gefahr, wenn sich dieser Zustand drastisch ändert. So ist die MMU unter anderem für die Speichereinteilung und -Überwachung zuständig. Mit wenigen Befehlen läßt sich die MMU ständig auf Trab halten und so schließlich überhitzen.

Gefährdet: Die Festplatte

Lieblingskind vergangener Viren-Generationen war stets die Festplatte. Diese Viren schreiben lediglich nach Belieben auf die Platte — oft löschen sie dabei die Daten. In letzter Zeit ist die Rede von irreparablen Schäden bei Festplatten, die sich ebenfalls durch einen »simplen« Schreibvorgang hervorrufen lassen.

Festplatten haben vorformatierte Spuren für sogenannte Servo-Informationen, die zum Positionieren der Schreib-Lese-Köpfe unerläßlich sind. Der Benutzer einer Festplatte bemerkt davon nichts. Servo-Informationen enthalten zum Beispiel Index-Marken, die den Beginn einer Spur anzeigen. Gewöhnliche System-Schnittstellen bieten keinen Zugriff auf diese Spuren. Lediglich durch direkte Controller-Programmierung läßt sich bei manchen Platten diese Information löschen. Dadurch ist die Platte vollkommen unbrauchbar geworden, obwohl sie technisch einwandfrei arbeitet. Diesen Vorgang kann nur der Hersteller rückgängig machen. 20-MByte-Platten tragen die Servo-Informationen zumeist zwischen den Sektoren und sind somit vor einem Überschreiben sicher. Konkrete Ergebnisse stehen noch aus.

Sollten sich die oben gezeigten Horrorvisionen auch auf Ihrem ST ausbreiten, lieber Leser, muß ein hypothetisches Virusprogramm der gezeigten Art zunächst zu Ihrer Softwaresammlung durchstoßen. Zur Stunde gibt es lediglich Anzeichen für das Drucker-MFP-Virus.

Drei Virenarten, die hardwarezerstörende Routinen enthalten, sind für den ST relevant: Bootsektor-Viren, Link-Viren und Trojanische Pferde. Wie sehr müssen wir die Hardware-Viren fürchten, wie konkret ist die Gefahr?

Was Bootsektor-Viren betrifft, ist jegliche Gefahr gebannt sofern Sie jede neue, auf »harten Umwegen« beschaffte Originaldisk auf Bootsektor-Viren untersuchen. Bootsektor-Viren sind zahlenmäßig am häufigsten anzutreffen; der Grad ihrer Bedrohlichkeit hängt aber ausschließlich von der Sorgfalt eines jeden Computer-Freundes ab. Gute und nützliche (Boot-) Virenkiller sind als Public Domain-Software leicht zu erhalten.

Ein ernstzunehmendes Problem stellen lediglich Link-Viren und Trojanische Pferde dar, die wir im folgenden über einen Kamm scheren, da es unerheblich ist, wie sie sich an ein Programm anhängen. Diese Viren sind nicht so einfach zu lokalisieren wie ein Boot-Virus. Da sie sich an Programme hängen, kurz sind und schnell arbeiten, ist die Suche nach ihnen erst bei dem Verdacht auf ihre Existenz sinnvoll. Eine ständige Suche stellt einen unvertretbaren Aufwand dar. Abhilfe schafft man, indem man ihre Arbeitsweise analysiert. Im folgenden stellen wir einige, teils bereits verwirklichte Schutzmaßnahmen vor, die jeweils auf eine bestimmte Arbeitsweise zugeschnitten sind.

Geschützt durch Guard-Programm

Geschützt durch Codier-Programme

— Da eine Totalverschlüsselung lediglich für Festplatten-Backups zeitlich vertretbar ist, arbeiten wir gerade an einem reduzierten Verschlüsselungsmodell, das lediglich den File-Header beim Speichern eines Programms verschlüsselt und beim Laden vor dem Start wieder restauriert. Diese Aufgabe soll ein residentes Programm vornehmen. Sollte die Umsetzung zu einem Erfolg führen, so veröffentlichen wir den Quell-Code in einer der folgenden Ausgaben des ST-Magazins.

Zur Zeit arbeiten wir außerdem an einer weiteren Strategie, deren Realisierung in C voraussichtlich eine Frage von wenigen Wochen ist. Unser Programm nutzt die Tatsache aus, daß Linkviren die für ihre Verbreitung tauglichen Programme erst einmal finden müssen. In der Regel — uns ist kein gegenteiliger Fall bekannt — finden Linkviren ihre Wirtsprogramme anhand der Extension PRG, TTP oder TOS. Keine der Linkviren-Disassembles lud sukzessive den ersten Sektor eines jeden Files, um daran die Unterscheidung »Programm oder Datendatei« durchzuführen. Mehr zufällig fanden wir eine Methode, unter Beibehaltung der Desktop-Icons und sonstiger Desktop-Parameter, die Extension dieser Datei-Arten beliebig zu gestalten. Ein Programm kann dasselbe Icon beibehalten, jedoch beispielsweise mit der Extension PGM, COM oder CMD enden. Dieser Trick ist vermutlich nur vereinzelten ST-Profis bekannt, seine Nutzung ist neu. Nach unserer Auffassung wird dieses Programm, das wir ebenfalls in einer der nächsten Ausgaben veröffentlichen, alle bisher existierenden Linkviren mit vertretbarem Aufwand und einem Minimum an Flexibilitätsverlust neutralisieren.

Zusammengefaßt läßt sich sagen: Sowohl Chips als auch Peripherie-Geräte sind softwaremäßig verwundbar. Es ist offensichtlich, daß die Hersteller im allgemeinen bemüht sind, Fehlbedienungen ihrer Geräte abzufangen. Nicht jedes Laufwerk läßt sich gegen den Poller fahren. Andererseits muß die Architektur der Hardware flexibel genug bleiben, um individuelle Lösungen nicht der Programmierbarkeit zu entziehen sowie ein gewisses Maß an Kompatibilität zu wahren. Wer ärgert sich nicht, wenn es für sein Laufwerk, seinen Scanner, seinen Drucker keinerlei Treiber gibt? Wer ist schon gerne mit einer einzigen Herstellerfirma verheiratet?

Beruhigt und mit großer Befriedigung läßt sich feststellen, daß sich die überwiegende Mehrheit der Programmierer mit der Entwicklung von Schutzprogrammen befaßt. Hinsichtlich einer konkreten Gefährdung läßt sich sagen, daß momentan kein Grund zu übertriebener Sorge besteht.

Link-Viren sind nicht sehr verbreitet, da ihre Programmierung verhältnismäßig aufwendig ist. Mit den gängigen Viren-Killern und einer guten Portion Vorsicht schützen Sie Ihren Computer hinreichend vor Viren. Sollte unwahrscheinlicherweise ein Virus mit einer der oben beschriebenen Eigenschaften Ihr System befallen, empfiehlt sich schnelles Handeln: Schalten Sie sofort Ihren Computer aus. Natürlich erweist sich das Ausschalten nur bei einigen Viren (Floppy-Virus) als hilfreich: Ist die »File Allocation Table« (FAT) der Festplatte erst einmal gelöscht, hilft auch das nicht mehr.

Zur Zeit ist die Sorglosigkeit, mit der viele Computer-Freunde ihre auf langen Umwegen beschaffte Original-Software benutzen und kopieren, das wirkliche Problem. Lediglich Besitzern von Festplatten legen wir ein höheres Maß an Vorsicht nahe. Wer sich anhand von Zeitschriften und Mailboxen über den jeweiligen Stand der Dinge informiert, läuft nur selten Gefahr, von Viren ahnungslos überrannt zu werden.

(Tarik Ahmia/uh)

/********************************************/
/*                                          */
/* VECTOR - GUARDIAN */
/*                                          */
/********************************************/

#include <aesbind.h>
#include <osbind.h>

/* Vektoren fuer TOS auf ROM */
/* 06.02.86 22.04.87 */

#define VEC_BPB     0xfc0de6L /* 0xfc0fca */
#define VEC_RW      0xfc10d2L /* 0xfc12b6 */
#define VEC_BOOT    0xfc137cL /* 0xfc1560 */
#define VEC_MEDIACH 0xfc0f96L /* 0xfc117a */

/* Umstellung von peekl und pokel mittels casting 
   zur Vermeidung von Fehlfunktion bei Einsatz im 
   Supervisor-Modus */

#define peekl(lp) (*((long *)lp))
#define pokel(lp,l) (*((long *)lp) = l)

main()
{
    int dummy;

    long bpb   = VEC_BPB; 
    long rw    = VEC_RW; 
    long boot  = VEC_BOOT; 
    long media = VEC_MEDIACH;

    long *txt1 = "[2][Vector-Guardian aktiv| |M. Unterberg 1989| ][OK]'; 
    long *txt2 = "[2][Vektor(en) verbogen|Virus ?| ][ RÜCK | EGAL ]";


    appl_init(); /* Accessory-typische Applikations-Anmeldung */ 

    evnt_timer(10000,0); /* Warten auf "Systemberuhigung" */ 

    form_alert(1,txt1);  /* Aktivitätsmeldung */ 

    for(;;)
    { /* Accessory-typische Endlosschleife */

        evnt_timer(1000.0); /* Periodische Abfrage spart Zeit */

        /* Wenn Änderungen aufgetreten sind */
        if((pel(0x472L) != bpb) || (pel(0x476D != rw ) || 
          (pel(0x47aL) != boot) || (pel(0x47eL) != media))
          {
            dummy = form_alert(0,txt2); 
            switch (dummy)
            {
                /* Zurücksetzen gewünscht */ 
                case 1 :
                    pol(0x472L,bpb); 
                    pol(0x476L,rw); 
                    pol(0x47aL,boot); 
                    pol(0x47eL,media); 
                break;

                /* Übernahme gewünscht, z.B. bei Ram-Disk */ 
                case 2 :
                    bpb   = pel(0x472L); 
                    rw    = pel(0x476L); 
                    boot  = pel(0x47aL); 
                    media = pel(0x47eL); 
                break;
            }/* switch */

        }/* if */

    }/* for */

}/* main */

pel(vector)
long vector;
{
    long sp;
    long wert;

    sp = Super(0L);
    wert = peekl(vector);
    Super(sp);

    return(wert);
}


pol(vector,wert) 
long vector, wert;
{
    long sp;

    sp = Super(0L); 
    pokel(vector,wert); 
    Super(sp);
}

»Guard« warnt vor Linkviren (Zeilennummern nicht mit abtippen)



Links

Copyright-Bestimmungen: siehe Über diese Seite