Объяснительная записка 23.03.2004 Андрей Соколов
Самый простой и очевидный способ получения несанкционированного доступа к чужому компьютеру — лобовые атаки уязвимых сервисов ОС1.
В количественном отношении именно такие атаки представляют наибольшую угрозу безопасности пользователям домашних компьютеров. Это основной способ размножения автономных сетевых червей вроде знаменитого MS Blast, принесшего многомиллиардные убытки. Лобовые атаки — первый (и, как правило, единственный) аргумент взломщика-любителя, которому по каким-либо причинам потребовалось получить несанкционированный доступ к чужому компьютеру.
Действительно, не нужно быть семи пядей во лбу, чтобы отыскать, скачать и скомпилировать повсеместно доступные эксплойты2, реализующие ту или иную лобовую атаку на открытый вовне уязвимый сервис ОС Windows. И даже этого часто не требуется: многие эксплойты доступны в виде уже скомпилированных программ класса «нажал кнопку — получил результат».

Стандартный набор сервисов и соответствующих им портов в дефолтной инсталляции ОС Windows XP таков (см. табл. выше).
Не мудрствуя лукаво я скачал из Интернета несколько эксплойтов, реализующих лобовые атаки на сервисы ОС Windows XP. Часть из них была сделана «под Linux», поэтому для их компиляции я использовал среду cygwin, позволяющую портировать ПО из Linux в Windows. Для компиляции «родных» Windows-эксплойтов применялся компилятор Microsoft Visual C++ 6.0.
Тест на проникновение
Задача теста на проникновение, который обычно выполняет консалтинговая компания: полностью имитируя действия взломщика, осуществить атаку из Интернета на корпоративную сеть, веб-сервер, сервер приложений или баз данных.
Цель теста на проникновение: обнаружить слабые места в защите, осуществив показательный взлом системы.
По результатам тестов на проникновение формируется отчет, в котором поэтапно описываются действия команды аналитиков в процессе тестового взлома и указываются слабые места в защите, из-за которых атака либо потенциально возможна, либо была успешна проведена.
Тесты на проникновение являются начальным этапом полного аудита безопасности автоматизированной системы компании, на основании которого возможна разработка политики информационной безопасности и внедрение комплекса мер по защите ИТ-ресурсов компании.
Типичным заблуждением является сравнение тестов на проникновение, которые проводятся квалифицированными аналитиками, с запуском автоматизированного сканера. Подобное сравнение неуместно: это все равно что сравнивать прием таблетки обезболивающего средства с работой врача-анестезиолога. Сканер поиска уязвимостей может помочь только в тривиальных случаях, когда, что называется, дыры налицо. Такая ситуация в реальных тестах на проникновение в корпоративные системы встречается крайне редко. Сканер способен дать не более чем черновой срез существующего состояния системы и зачастую может просто ввести в заблуждение, указывая на наличие уязвимостей, которые на самом деле в данной ситуации невозможно проэксплойтить. Тест на проникновение в корпоративную сеть, в отличие от сканирования, занимает не меньше месяца работы группы квалифицированных аналитиков: от них требуется провести полный анализ всех деталей исследуемого объекта, учесть человеческий фактор, выбрать подходящий сценарий атаки, разработать уникальное в каждом случае ПО для попытки осуществления доступа в систему.
Илья Медведовский [idm at dsec.ru] |
В успехе первой атаки можно было не сомневаться: в дефолтной инсталляции ОС Windows XP имеется уязвимость, активно используемая пресловутым сетевым червем MS Blast. Суть ее заключается в возможности переполнения буфера в службе RPC DCOM сервиса SVCHOST3. Итак, я компилирую программу:
privacy@tinyghost/ $gcc oc192-dcom.c -o oc192-dcom.c запускаю ее: D:\cygwin>a.exe -d XXX.X.XXX.XX -t 0 -p 135 -l 2000 RPC DCOM remote exploit — .:[oc192.us]:. Security [+] Resolving host.. [+] Done. – Target: [Win2k-Universal]:127.0.0.1:135, Bindshell:2000, RET=[0x0018759f] и спустя пару секунд, получаю… [+] Connected to bindshell.. – bling bling – Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\WINNT\system32> …доступ к командной строке.
Рассматриваемую уязвимость можно, без сомнения, назвать академической. Поэтому рассмотрю эксплойт в подробностях. - Создается очередь пакетов для провокации сервиса RPC DCOM по какому-либо из доступных на удаленной системе TCP-портов (в моем случае был выбран дефолтный 135-й) по протоколу RPC DCOM. Подготавливается шеллкод4, который должен исполниться после успешной атаки сервиса (удачное исполнение шеллкода и есть условие успеха атаки).
1 Под сервисом операционной системы понимается особый системный процесс, работающий с правами администратора и находящийся в состоянии приема внешних сетевых соединений. «Вступив в особые взаимоотношения с сервисом», взломщик может добиваться исполнения атакуемым сервисом нужного машинного кода и таким образом получать несанкционированный доступ к системе. Результатом успешной лобовой атаки может быть возврат соединения с командной строкой удаленной системе или создание дополнительного пользователя, которым взломщик может воспользоваться для дальнейшего проникновения в систему. 2 Сообщения о найденных уязвимостях распространяются в двух видах: Proof of Concept Theory (доказательство уязвимости в теории) и Proof of Concept Code (доказательство уязвимости в виде реализующего ее использование программного кода). Под эксплойтом, как правило, понимают последнее. 3 RPC DCOM (Remote Procedure Calls Distributed Common Object Model) — основная служба ОС Windows XP, предоставляющая унифицированный интерфейс доступа к ресурсам операционной системы. Посредством сетевых взаимоотношений через эту службу (tcp- и udp-порты 135, 139 и 445) решается широкий спектр задач, начиная от доступа к файлам и заканчивая администрированием системы. 4 Термин «шеллкод» (англ. shell code), дословно «код оболочки», исторически означает машинный код, предоставляющий доступ взломщику к командной строке взламываемой системы. В настоящее время под ним понимают любой машинный код, отправленный взломщиком и исполняемый на атакуемой системе. Почти все современные шеллкоды «завернуты» в XOR/ROR-обертки, модифицирующие внешний вид кода (но не причиняющие ущерба его содержанию), чтобы избегать специальных символов, которые могут оказаться специальными символами-разделителями (символы NULL, CR/LF, etc.) и спровоцировать буквальное их восприятие функцией, обрабатывающей переполняемый буфер.
|