Ядерные шалости

Крис Касперски ака мыщъх

Хакер, номер #091, стр. 091-082-1

Хак ядра NT

Ядро операционной системы — это место, куда стекаются хакеры, черви, rootkit'ы, брандмауэры, протекторы исполняемых файлов, защиты от копирования, антивирусы и прочая нечисть, ведущая между собой жестокую борьбу за выживание. Как захачить ядро по всем правилам? Так, чтобы без конфликтов?

Прежде чем вторгаться в ядро, попробуем разобраться, зачем это вообще нужно и нельзя ли обойтись «демократичным» прикладным уровнем.

Черви, вирусы и rootkit'ы стремятся в ядро затем, чтобы дотянуться до функций, работающих с памятью, файлами, сетевыми соединениями и процессами на самом низком уровне, перехватив которые, можно надежно замаскировать свое присутствие в системе. Аналогичными приемами пользуются протекторы исполняемых файлов типа Themida (бывший eXtreme Protector), защиты лазерных дисков от копирования (Star-Force, SONY и т. д.) Методика та же самая, что и в Stealth-вирусах 10-15-летней давности, только программные реализации другие. Кстати говоря, после громкого скандала и судебного разбирательства SONY признала свою неправоту, отозвав свыше 30-ти наименований защищенных дисков. А ребята из Star-Force продолжают использовать вирусные методики, до сих пор регулярно роняя пользовательские системы в голубой экран и отказываясь работать с новыми версиями Windows без обновления самой Star-Force.

Методы модификации ядра

Перехват системных функций, взлом защитных механизмов — все эти действия требуют модификации ядра, сосредоточенного в файле ntoskl.exe. Модифицировать ядро можно как на диске (off-line patch), так и в памяти (on-line patch). Каждый способ имеет свои достоинства и недостатки, поэтому опытный хакер должен в равной мере владеть и тем, и другим.

On-line patch возможен только из драйвера или из прикладного режима через псевдоустройство DevicePhysicalMemory, которое вплоть до Windows 2003 Server SP1 было доступно администратору, а после — закрыто даже для пользователя типа «system» (см. www.microsoft.com/technet/prodtechnol/windowsserver2003/library/BookofSP1/e0f862a3-cf16-4a48-bea5-f2004d12ce35.mspx, заметка под именем Changes to Functionality in Microsoft Windows Server 2003 Service Pack 1 DevicePhysicalMemory Object). Драйвера (и тем более прикладные программы!) грузятся после ядра, которое их может вообще не грузить, если отсутствует цифровая подпись или ядру что-то «не нравится». Кроме того, любой, успешно загруженный драйвер, может заблокировать загрузку всех последующих или помешать им осуществить перехват системных функций, равно как и любую другую намеченную ими операцию. В борьбе с малварью и антивирусными сторожами очередность загрузки становится очень актуальной, но ни у одной из сторон нет 100% гарантии того, что ее драйвер загрузится первым. К тому же если ядро сообщает о завершении испытательного срока или отправляет систему в reboot еще до загрузки любых драйверов (что практиковалось в ранних версиях NT), то никакой on-line patch тут не поможет! Кстати говоря, факт вмешательства в ядро легко обнаруживается тривиальным сравнением образа ntoskl.exe с дисковым файлом. Дезактивация перехвата осуществляется восстановлением «испорченных» байт, позаимствованных из оригинала. И хотя перехватчик, желающий остаться незамеченным, может (и должен!) отслеживать все обращения к ntoskl.exe – многие разработчики об этом забывают...

Содержание  Вперед на стр. 091-082-2
ttfb: 2.7909278869629 ms