Основные контрмеры против атак, направленных на расширение привилегий

Как же избавиться от всех программ, установленных в ходе изучения вами данной главы, и "залатать" все оставшиеся "дыры" в защите? Поскольку многие из них были созданы с доступом на уровне администратора, что позволяет использовать все аспекты архитектуры NT, а большинство нужных нам файлов могли быть переименованы и (или) настроены десятками различных способов, эта задача довольно нетривиальна. Мы предлагаем следующие решения общего характера, затрагивающие четыре основные области, к которым так или иначе относятся описываемые в данной главе вопросы: имена файлов, параметры системного реестра, процессы и порты.

Для ознакомления с некоторыми дополнительными контрмерами против описанных атак мы настоятельно рекомендуем прочитать о "потайных ходах" в главе 14.

Если взломщику удалось получить привилегии администратора, то лучшим выходом из ситуации является полная переустановка системного программного обеспечения с использованием проверенных носителей. Искушенный взломщик может настолько хорошо скрыть определенные "потайные ходы", что их не удастся обнаружить даже опытным исследователям. Этот совет дан в основном для создания полноты картины. Его не рекомендуется применять при организации подобных атак.

Имена файлов


Контрмеры, построенные на использовании имен файлов, по всей видимости, наименее эффективны, поскольку любой мало-мальски соображающий взломщик либо переименует файлы, либо предпримет другие меры, чтобы скрыть их (см. ниже раздел "Сокрытие следов"). Тем не менее, обезопасив себя в этом отношении, вы сможете еще на "дальних подступах" обнаружить хотя бы наименее изобретательных взломщиков.
Мы уже перечисляли имена файлов, на которые необходимо обратить внимание в первую очередь: remote.exe, пс.exe (netcat), rinetd.exe, NBSvr.exe и patch.exe (серверы NetBus), WinVNC.exe, VNCHooks.dll и omnithread_rt.dll. Если вы обнаружите, что данные файлы появились на сервере без вашего ведома, тут же начните расследование — по "горячим следам" легче установить, кто и зачем это сделал.
Кроме того, будьте очень внимательны к любым файлам, которые находятся в разных каталогах вида Start Menu\PROGRAMS\STARTUP\%username% (расположенных в каталоге %SYSTEMROOT%\PROFILES). Все программы, помещенные в такие папки, будут автоматически запускаться в процессе загрузки (позднее мы еще вернемся к этому вопросу).
Хорошей превентивной мерой, позволяющей идентифицировать изменения файловой системы, является использование средств подсчета контрольных сумм, подобных тем, которым посвящен раздел "Набор Rootkit — Полный Взлом Системы" ниже в этой главе.

Параметры системного реестра


В отличие от утомительного поиска файлов с определенными именами в надежде, что они не были изменены, поиск параметров системного реестра может оказаться особенно эффективным, поскольку большинство из рассмотренных программ помешает строго определенные параметры в строго определенные места системного реестра. Хорошим местом для начала поиска являются группы параметров HKLM\SOFTWARE и HKEY_USERS\ .DEFAULT\Software, в которых большинство устанавливаемых приложений помещают свои параметры. В частности, утилиты NetBus Pro и WinVNC сохраняют свои параметры следующим образом.

  •  HKEY_USERS\.DEFAULTASoftware\ORL\WinVNC3
  •  HKEY_LOCAL_MACHINE\SOFTWARE\NetSolutions\NetBus Server
С помощью утилиты командной строки REG.EXE, входящей в состав NTRK, удалить данные параметры из реестра довольно просто, в том числе и на удаленных компьютерах. При этом используется следующий синтаксис.
reg delete [параметр] \\компьютер
Например: С:\>reg delete HKEY_USERS\.DEFAULT\Sofware\ORL\WinVNC3 \\192.168.202.33

Параметры системного реестра, управляющие запуском программ в процессе загрузки


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

  •  HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, а также RunOnce, RunOnceEx, RunServices.
Кроме того, необходимо как можно жестче ограничить доступ пользователей к этим группам параметров. По умолчанию группа EVERYONE имеет разрешения Set value к группе параметров HKLM\ . . \. . \Run. Для того чтобы отменить эти привилегии, воспользуйтесь командой Security>Permissions в редакторе системного реестра regedt32.
Рассмотрим небольшой пример. На приведенном ниже рисунке показано окно редактора системного реестра, в котором отображается информация о программе netcat, запускающейся при каждой загрузке Windows (группа параметров HKLM\ . . \ . . \Run) для прослушивания порта 8080.


В данном случае взломщик в любой момент может скрытно подключиться к системе, по крайней мере до тех пор, пока администратор, взявшись за ум, не проверит системный реестр и не удалит из него соответствующий параметр.
Кроме того, не забудьте проверить также каталоги %systemroot%\profiles\ %sername%\Start Menu\programs\startupV Любые помещенные в них исполняемые файлы будут автоматически запускаться при каждой загрузке!

Процессы


Для обнаружения тех хакерских инструментов, которые нельзя переименовать или скрыть каким-либо другим способом, можно проанализировать список выполняющихся на компьютере процессов. Например, с помощью команды AT можно запланировать задание, которое просматривает список процессов и удаляет из него такие обнаруженные процессы, как remote.exe или пс.ехе. Поскольку для использования сервера remote в системном администрировании нет особых причин (особенно, если учесть, что эта утилита не выполняет аутентификации), то для периодического удаления ее из списка процессов можно использовать команду kill.exe из набора NTRK. В следующем примере показано, как с помощью команды AT запланировать задание, которое будет выполняться каждый день в шесть часов утра и удалять процесс remote. Это немного грубо, но зато эффективно — вам остается лишь настроить время запуска в соответствии со своими предпочтениями.

C:\>at 6А /е:1
""kill remote.exe""

Added a new job with job ID = 12
C:\>at Status ID Day Time Command Line
12 Each 1 6:00 AM kill remote.exe
C:\>kill remote.exe
process #236 [remote.exe] killed

Для этих же целей можно использовать утилиту rkill.exe из набора NTRK. Она отличается от kill. exe тем, что может выполняться на удаленном компьютере, а также тем, что в отличие от утилиты kill.exe, нуждается в предоставлении ей в качестве параметра идентификатора удаляемого процесса (PID — Process ID). PID процесса удаленного компьютера можно получить с помощью утилиты pulist.exe, которая также входит в состав NTRK. Можно создать целую автоматизированную систему, в которой регулярно запускается утилита pulist и собирает информацию о выполняющихся на узлах сети запрещенных процессах с последующей передачей этой информации rkill. Конечно, еще раз нужно оговориться, что такую систему очень легко обойти, присвоив выполняемому файлу remote.exe какое-нибудь другое, не вызывающее подозрений имя, например WINLOG.EXE. Однако она сможет эффективно противостоять процессам, которые нельзя переименовывать, например winVNC. EXE.

Порты


Даже если такие утилиты, как remote или пс, были переименованы, утилита netstat поможет выявить их присутствие по наличию портов, находящихся в состоянии ожидания или соединения. Периодический запуск netstat с целью проверки подобных соединений — это иногда наилучший способ найти их. В следующем примере показано, как утилита netstat, запущенная на целевом сервере в то время, когда взломщик подключился к нему с помощью утилит remote, nc и установил соединение с портом 8080, отображает результаты опроса портов (описание параметра -an можно узнать, введя в командной строке команду netstat /?). Обратите внимание, что в соединении remote используется порт TCP 139, а утилита netcat находится в состоянии ожидания и имеет одно установленное соединение с портом TCP 8080 (остальные данные, отображаемые netstat, удалены для наглядности).

С:\> netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 192.168.202.44:139 0.0.0.0:0 LISTENING
TCP 192.168.202.44:139 192.168.202.37:1817 ESTABLISHED
TCP 192.168.202.44:8080 0.0.0.0:0 LISTENING
TCP 192.168.202.44:8080 192.168.202.37:1784 ESTABLISHED

Из приведенного фрагмента листинга команды netstat видно, что наилучшей защитой против использования утилиты remote является блокирование доступа к портам 135-139 потенциальных целей или на уровне брандмауэра либо отключение привязки NetBIOS для незащищенных адаптеров, как описывалось в разделе "Контрмеры: Защита От Подбора Пароля" выше в данной главе.
С помощью конвейера, организованного между командами netstat и find, можно получить данные об определенных портах. Так, с помощью следующей команды выполняется поиск серверов NetBus, прослушивающих порт по умолчанию, netstat -an| find "12345"
Утилита fport от компании Foundstone (http://www.foundstone.com) позволяет получить комбинированную информацию о процессах и портах. Она предоставляет перечень всех активных сокетов и идентификаторов процессов, использующих соединение. Вот пример ее результатов.

FPORT - Process port mapper
Copyright (с) 2000, Foundstone, Inc.
http://www.foundstone.com
PID NAME TYPE PORT
184 IEXPLORE UDP 1118
249 OUTLOOK UDP 0
265 MAPISP32 UDP 1104
265 MAPISP32 UDP 0