День рождения WIN95.CIH

День рождения WIN95.CIH

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

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

Видимо, по тем причинам, что 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 [апреля]. Данный факт объясняется тем, что проверка даты в коде вируса происходит по двум константам. Естественно, что для того, чтобы поставить таймер "бомбы" на любой заданный день, достаточно поменять лишь два байта в коде вируса.