Virus.Win9x.CIH

Дата обнаружения 20/11/2002
Класс Virus
Платформа Win9x
Описание

Technical Details

Также известен как «Чернобыль». Резидентный вирус, работает только под Windows95/98 и заражает PE-файлы
(Portable Executable). Имеет довольно небольшую длину — около 1Кб. Был
обнаружен «в живом виде» на Тайване в июне 1998 — автор вируса заразил
компьютеры в местном университете, где он (автор вируса) в то время
проходил обучение. Через некоторое время зараженные файлы были (случайно?)
разосланы в местные Интернет-конференции, и вирус выбрался за пределы
Тайваня: за последующую неделю вирусные эпидемии были зарегистрированы в
Австрии, Австралии, Израиле и Великобритании. Затем вирус был обнаружен и в
нескольких других странах, включая Россию.

Примерно через месяц зараженные файлы были обнаружены на нескольких
американских Web-серверах, распространяющих игровые программы. Этот факт,
видимо, и послужил причиной последовавшей глобальной вирусной эпидемии. 26
апреля 1999 года (примерно через год после появления вируса) сработала
«логическая бомба», заложенная в его код. По различным оценкам, в этот день
по всему миру пострадало около полумиллиона компьютеров — у них оказались
уничтожены данные на жестком диске, а на некоторых плюс к тому испорчено
содержимое микросхем BIOS на материнских платах. Данный инцидент стал настоящей
компьютерной катастрофой — вирусные эпидемии и их последствия никогда до
того не были столь масштабными и не приносили таких убытков.

Видимо, по тем причинам, что 1) вирус нес реальную угрозу компьютерам во
всем мире и 2) дата срабатывания вируса (26 апреля) совпадает с датой
аварии на Чернобыльской атомной электростанции, вирус получил свое второе
имя — «Чернобыль» (Chernobyl).

Автор вируса, скорее всего, никак не связывал Чернобыльскую трагедию со
своим вирусом и поставил дату срабатывания «бомбы» на 26 апреля по совсем
другой причине: именно 26 апреля в 1998 году он выпустил первую версию
своего вируса (которая, кстати, так и не вышла за пределы Тайваня) — 26
апреля вирус «CIH» отмечает подобным образом свой «день рождения».

Как вирус работает

При запуске зараженного файла вирус инсталлирует свой код в память Windows,
перехватывает обращения к файлам и при открытии PE EXE-файлов записывает в
них свою копию. Содержит ошибки и в некоторых случаях завешивает систему
при запуске зараженных файлов. В зависимости от текущей даты стирает Flash
BIOS и содержимое дисков.

Запись в Flash BIOS возможна только на соответсвующих типах материнских
плат и при разрешающей установке соответственного переключателя. Этот
переключатель обычно установлен в положение «только чтение», однако это
справедливо не для всех производителей компьютеров. К сожалению Flash BIOS
на некоторых современных материнских платах не может быть защищена
переключателем: одни из них разрешают запись в Flash при любом положении
переключателя, на других защита записи в Flash может быть отменена программно.

После успешного стирания Flash-памяти вирус переходит к другой
деструктивной процедуре: стирает информацию на всех установленных
винчестерах. При этом вирус использует прямой доступ к данным на диске и
тем самым обходит встроенную в BIOS стандартную антивирусную защиту от
записи в загрузочные сектора.

Известно три основные («авторские») версии вируса. Они достаточно похожи
друг на друга и отличаются лишь незначительными деталями кода в различных
подпрограммах. Версии вируса имеют различные длины, строки текста и дату
срабатывания процедуры стирания дисков и Flash BIOS:


Длина Текст Дата срабатывания Обнаружен «в живом виде»
1003 CIH 1.2 TTIT 26 апреля Да
1010 CIH 1.3 TTIT 26 апреля Нет
1019 CIH 1.4 TATUNG 26 каждого месяца Да — во многих странах

Технические детали

При заражении файлов вирус ищет в них «дыры» (блоки неспользуемых данных) и
записывает в них свой код. Присутствие таких «дыр» обусловлено структурой
PE-файлов: позиция каждой секции в файле выравнена на определенное
значение, указанное в PE-заголовке, и в большинстве случаев между концом
предыдущей секции и началом последующей есть некоторое количество байт,
которые не используются программой. Вирус ищет в файле такие неиспользуемые
блоки, записывает в них свой код и увеличивает на необходимое значение
размер модифицированной секции. Размер заражаемых файлов при этом не увеличивается.

Если в конце какой-либо секции присутствует «дыра» достаточного размера,
вирус записывает в нее свой код одним блоком. Если же такой «дыры» нет,
вирус дробит свой код на блоки и записывает их в конец различных секций
файла. Таким образом, код вируса в зараженных файлах может быть обнаружен
и как единый блок кода, и как несколько несвязанных между собой блоков.

Вирус также ищет неиспользуемый блок данных в PE-заголовке. Если в конце
заголовка есть «дыра» размером не менее 184 байт, вирус записывает в нее
свою startup-процедуру. Затем вирус изменяет стартовый адрес файла:
записывает в нее адрес своей startup-процедуры. В результате такого приема
структура файла становится достаточно нестандартной: адрес стартовой
процедуры программы указывает не в какую-либо секцию файла, а за пределы
загружаемого модуля — в заголовок файла. Однако Windows95 не обращает
внимания на такие «странные» файлы, грузит в память заголовок файла, затем
все секции и передает управление на указанный в заголовке адрес — на
startup-прецедуру вируса в PE-заголовке.

Получив управление, startup-процедура вируса выделяет блок памяти
VMM-вызовом PageAllocate, копирует туда свой код, затем определяет адреса
остальных блоков кода вируса (расположенных в конце секций) и дописывает их
к коду своей startup-процедуры. Затем вирус перехватывает IFS API и
возвращает управление программе-носителю.

С точки зрения операционной системы эта процедура наиболее интересна в
вирусе: после того, как вирус скопировал свой код в новый блок памяти и
передал туда управление, код вируса исполняется как приложение Ring0, и
вирус в состоянии перехватить AFS API (это невозможно для программ,
выполняемых в Ring3).

Перехватчик IFS API обрабатывает только одну функцию — открытие файлов.
Если открывается файл с расширением EXE, вирус проверяет его внутренний
формат и записывает в файл свой код. После заражения вирус проверяет
системную дату и вызывает процедуру стирания Flash BIOS и секторов диска (см. выше).

При стирании Flash BIOS вирус использует соответствующие порты
чтения/записи, при стирании секторов дисков вирус вызывает VxD-функцию
прямого обращения к дискам IOS_SendCommand.

Известные варианты вируса

Автор вируса не только выпустил копии зараженных файлов «на свободу», но и
разослал исходные ассемблерные тексты вируса. Это привело к тому, что эти
тексты были откорректированы, откомпилированы и вскоре появились
модификации вируса, имевшие различные длины, однако по функциональности они
все соответствовали своему «родителю». В некоторых вариантах вируса была
изменена дата срабатывания «бомбы», либо этот участок вообще никогда не вызывался.

Известно также об «оригинальных» версиях вируса, срабатывающих в дни,
отличные от 26 [апреля]. Данный факт объясняется тем, что проверка даты в
коде вируса происходит по двум константам. Естественно, что для того, чтобы
поставить таймер «бомбы» на любой заданный день, достаточно поменять лишь
два байта в коде вируса.