Текст книги "Спецвыпуск журнала «Хакер» 47, октябрь 2004 г."
Автор книги: Хакер Журнал
сообщить о нарушении
Текущая страница: 16 (всего у книги 21 страниц)
В архиве обнаружился только файл кода на языке С и хедер. Добавить make программистам уже не хватило сил, поэтому компилировать программу следует так: «gcc vanish2.c -o vanish2».
Очень грамотная чистка как текстовых, так и бинарных логов всей системы. Основное внимание следует обратить на чистки журналов messages, secure и httpd.access_log. С этой задачей ПО справилось очень хорошо: все чисто и ровно. Также к сильной стороне чистильщика следует отнести и отсутствие временных файлов после работы, они создаются во время чистки, но удаляются по ее завершении. Если процесс будет прибит, а анализ журнала не закончен, то останутся временные файлы, по которым можно вычислить, что работал логвайпер. Отсутствовали и core-файлы, то есть после работы в системе не остается практически никаких следов.
Пожалуй, единственный недостаток – это скорость работы. Полный анализ двухнедельных логов сервера занял около 10 минут.
Must have. Лучший чистильщик из всех предложенных. С задачей сокрытия следов твоей деятельности справится очень хорошо, правда, затратив на это уйму времени.
SendIP
(http://www.earth.li/projectpurple/progs/sendip.html)
Размер очень маленький, а возможности интересные. Главная задача данного ПО – это отправлять пакеты на определенный IP с измененным адресом возврата. Возможность отправки пакетов от других IP-адресов поможет тебе скрыть свою активность в сети. Например, если появятся признаки того, что тебя засекли, просто запускаешь программу, указываешь ей необходимые параметры… В результате на жертву обрушиваются пакеты как будто от вполне миролюбивого хоста, что легко может сбить с толку админа. Но следует учитывать, что правильно расставленные админом сниферы выдадут тебя с потрохами «благодаря» этой софтине.
Очень общие настройки параметров исходящих пакетов, что не позволяет использовать эту программу против грамотных админов и IT-специалистов.
Если намечается атака на защищенный UNIX-хост, то запастись программой крайне желательно. При правильном использовании удастся сбить с толку подавляющее большинство администраторов. Запас беды не чинит, поэтому не поленись скачать, скомпилить и научиться пользоваться данной программой – на войне все средства хороши.
PATH (Perl Advanced TCP Hijacking)
(www.p-a-t-h.sourceforge.net)
Это целый набор хакера, написанный на языке Perl. Для работы достаточно иметь на машине интерпретатор Perl, и уже можно исследовать сети.
В дистрибутиве, датированном 09.11.2003, содержатся следующие утилиты: программа-генератор произвольных пакетов, неплохой снифер, ICMP и ARP-роутер. Что интересно, этот комплекс комплектуется как консольной версией, так несложным GUI-интерфейсом. Нас, прежде всего, интересует консоль, которая реализована очень хорошо. А функциональности всего комплекса я бы поставил твердую «троечку». Просто аналогичных утилит очень много, причем они включаются как в состав целых комплексов, так и плавают по интернету в виде отдельных бинарников. Основной плюс (а часто минус) этого комплекта – это использование интерпретируемого языка для выполнения своей работы.
Требуется интерпретатор Perl.
Если тебя интересуют маленькие и могучие программы на Perl или твоя задача – разобраться с работой сниферов, то этот набор для тебя. Если нет – его легко можно заменить бинарниками, описанными выше.
FAQ / Спрашивали? Отвечаем!
Докучаев Дмитрий aka Forb (forb@real.xakep.ru)
Q: Как определить, пересылаются ли логи на другие машины в сети или нет?
A: Функцию пересылки логов поддерживает демон syslogd. Во-первых, обрати внимание на процесс сервиса. Если он запущен с параметром –ss, можешь не волноваться – пересылки логов нет. Если параметры опущены, загляни в /etc/syslog.conf и поищи подстроку «@адрес_системы». Если таковая имеется, можно сделать вывод, что логи пересылаются на сторонний сервер в автоматическом режиме.
Q: Что может светить за нелегальное сканирование портов?
A: Сканирование портов – нарушение порядка в сети. Ты можешь возмутиться, мол, я же ничего не сделал – просто посмотрел состояние портов. В лучшем случае админ удаленного сервера ничего не заметит, но, если на сервере стоит утилита, отслеживающая скан, сисадм может пресечь твою деятельность, отписав провайдеру. Часто у провайдера имеется так называемый регламент, в котором есть пункт, оговаривающий сканирование. Так что, учитывая серьезность ситуации, тебя могут отключить от сети. Впрочем, физическое отключение – довольно редкое явление, но все же я рекомендую сканировать порты с удаленного шелла консольной программой (например, nmap’ом).
Q: Существуют ли специальные услуги по проверке серверов на прочность?
A: Да, такие услуги оказываются. Например, компания Positive Technologies (www.ptsecurity.ru) предлагает взломать сервер всего за $1000. Сотрудники компании пытаются хакнуть заказчика, получить там шелл и стащить конфиденциальную информацию, которая бы являлась доказательством того, что взлом удался. Эта услуга была названа «penetration testing». Естественно, проверить свой сервер на дырки – удовольствие дорогое. Клиентами займутся сотрудники PT и SecurityLab. Они гарантируют абсолютную конфиденциальность и полноту тестирования. На рынке присутствуют и другие компании: Digital Security (www.dsec.ru), НПО «Информзащита» (www.infosec.ru). Впрочем, можно пойти другим путем – пригласить знакомого хакера, если таковой имеется.
Q: Я залил руткит на сервер, а новые бинарники перестали запускаться. Что мне теперь делать?
A: Искать бэкапы. Руткиты, выполненные в виде прекомпиленных бинарных файлов, ненадежны. То есть вполне возможно, что кит не переварится новыми глибсами. Бывает, что бинарник объявит об отсутствии какой-либо библиотеки, а иногда может вообще не запуститься. В этом случае ищи бэкап системы на другом носителе либо вручную переустанавливай испорченные файлы. А затем воспользуйся другим руткитом, на основе LKM, например.
Q: Что такое LKM-руткит?
A: Это очень полезная штука! LKM – Linux Kernel Module, руткит, построенный на нем, представляет собой набор ядерных модулей, которые после загрузки перехватывают системные вызовы, стирают себя из списка модулей и т.д. Преимущество налицо: руткит не заменяет никаких файлов, поэтому даже после переустановки бинарников хакерские модули будут работать. Только вот незадача: существует софт, который позволяет увидеть установленный в системе LKM-руткит.
Q: Наша сеть строится на хабах. Как можно фаерволом заблокировать нелегальную попытку смены IP-адреса?
A: В этом случае нужно оформлять статическую прописку ARP-таблицы. Но, раз уж ты заговорил о фаерволе, поделюсь правилом, которое привяжет нужный IP-адрес к MAC. Это достигается при помощи модуля mac.so. Рулес будет выглядеть следующим образом:
iptables –A INPUT –s 192.168.0.1 –m mac –mac-source 00:C0:DF:10:19:FB –j ACCEPT.
При желании ты можешь указать параметр -mac-desitination, чтобы разрешить соединение с узлом, имеющим определенный MAC.
Q: Хочу, чтобы мой *nix-сервер жил только на CD. Порекомендуй хороший живой дистрибутив.
A: Из «компактных» пингвинов я сталкивался только с SuSE и Knoppix. Второй порадовал меня больше: система полностью русифицирована, грузится сразу в Иксы, имеет возможность сохранять настройки на жестком диске, снабжена всеми необходимыми сервисами. Словом, то, что доктор прописал :).
Q: Я нашел бажный скрипт, но добился выполнения только команды в одно слово. Со вторым параметром запрос просто игнорируется. Что можешь посоветовать в этом случае?
A: В списке переменных окружения присутствует так называемая пустая строка $IFS. Ее и следует использовать в запросе. То есть, если бажный скрипт file.cgi имеет параметр file, принимающий лишь одно слово, реквест будет выглядеть следующим образом: http://host.com/cgi-bin/file.cgi?file=|uname$ifs-a|.
Q: Можно ли «выключить» установленный на сервере фаервол?
A: Еще как! Для этого хакеру нужны минимальные права, а также дырка в сервере :). Допустим, на машине крутится бажное ядро, а взломщик имеет доступ к Web-шеллу. Чтобы деактивировать фаервол, он заливает на сервер ptrace-эксплоит (либо какой-нибудь другой) со слегка измененным кодом. Вместо запуска /bin/sh будет стартоваться сценарий, который обращается к /etc/init.d/iptables с параметром stop. Как правило, запуск внешней команды не выносится в shell-код, так что исправить сишник сможет даже темный человек :). После компиляции и запуска сплоита фаервол должен выключиться.
Q: Я взломал сервер одной крутой компании. Уверен, что админы защитили машину на все 100%. На какие секурные процессы мне следует обратить особое внимание?
A: На машине могут стоять утилиты, тестирующие систему на безопасность. Обращай внимания на запущенные программы tripwire, portcentry, различные IDS, а также на программу chkrootkit, которая может и не светиться в процесс-листе.
Q: В моей системе стали спонтанно пропадать файлы. Вернее, файл существует, но /bin/ls его не показывает! С чем это связано?
A: На ум сразу приходит: тебя взломали. Тестируй сервер на наличие руткитов и выявляй злоумышленника. Хакер, видимо, прописал в конфиг руткита маску, под которую попал системный файл. В результате этого файл исчез из поля зрения ls. Впрочем, такая аномалия может возникнуть, если на винте имеются бэды. На всякий случай запусти fsck и удостоверься, что файловая система в норме.
Q: Когда я просматривал таблицы MySQL на взломанном сервере, то напоролся на какие-то учетные записи. Только вот пароли там зашифрованы, и я не могу их взломать.
A: Ты наткнулся на MD5-хэши. MD5 является необратимым алгоритмом, поэтому единственный способ расшифровать пароль – воспользоваться программой-брутфорсером. Таких программ много, могу порекомендовать md5crack и md5Inside. Вторая софтина имеет графический интерфейс и поддерживает потоки, так что расшифровка займет не очень много времени.
Q: В каталоге /tmp я обнаружил странноватый файл .bugtraq. Все бы ничего, но его владелец – юзер nobody. Меня взломали?
A: Да, к сожалению, тебя взломали. Файл, который ты обнаружил, является частью системы для проведения DDoS. Иными словами, твою машину попросту зомбировали через баг в httpd. Немедленно удали этот файл и переустанови Apache на более свежий релиз. Кроме этого, проверь систему на наличие руткита – возможно, взломщик до сих пор использует ресурсы твоего сервера.
Q: Хочу для грамотной защиты организовать в сети машинку только для логов. Как заставить syslogd удаленно пересылать на нее данные?
A: Для пересылки логов syslogd открывает 514 udp-порт, который служит для приема данных. Установи сервис с открытым портом на машине для хранения журналов (запускай демон с параметром –r). Затем занеси в /etc/syslog.conf (на серверах, с отсылаемыми логами) строку вида *.* @адрес_системы, и все журналы будут передаваться на удаленный сервер.
Q: Как закачать файл на сервер через бажный WWW-скрипт, если на машине отсутствует wget?
A: Существует несколько способов заливки файлов через уязвимые скрипты. Даже если на сервере отсутствует wget, проверь наличие fetch или get. Можно использовать FTP-сценарий и вытянуть нужный файл через /usr/bin/ftp. При этом используй опцию –n, чтобы передать логин и пароль в одной строке. Сам сценарий запиши построчно в файл с помощью команды /bin/echo.
Q: Я коннекчусь к серверу через бэкдор, а затем запускаю логклинер. Процесс зачистки логов занимает около 5 минут, так как wtmp весит порядка 500 Мб. Можно ли как-нибудь ускорить очистку?
A: Ни в коем случае не удаляй /var/log/wtmp, так как администратор сразу почует неладное. Выбери другой логклинер. Дело в том, что логвайпер, который ты используешь, начинает искать записи с начала файла. Однако в сети много чистильщиков, которые ставят указатель в конец wtmp, а затем начинают поиск. Такой алгоритм используется, например, в утилите grlogwipe. Бьюсь об заклад, что ты юзаешь vanish2, так как именно он очищает wtmp с самого начала.
Q: Нашел старенький Linux в локальной сети. На сервере крутится DNS и больше ничего. У меня есть эксплоит для bind, но я не знаю его версию. Можно ли ее определить какой-нибудь утилитой?
A: Запусти утилиту dig с параметром «@адрес_сервера chaos txt version.bind», и увидишь версию сервера. Можно отфильтровать вывод по шаблону VERSION.BIND, тогда ответ займет всего одну строку. Набери man dig, и узнаешь, что еще можно сделать с помощью этой чудесной утилиты.
Q: Есть ли способ узнать, находится ли взломщик в консоли, если он установил руткит и логклинер?
A: Есть один верный способ, определяющий левых юзеров даже после зачистки логов. Выполни команду ls –la /dev/pts и сравни число открытых псевдоустройств с числом активных юзеров. Если ты обнаружишь пару лишних псевдотерминалов, знай, что на твоей машине хостится хакер :). Правда, некоторые процессы, например radius, берут для себя pts, но это исключение из правил.
Q: Посоветуй простой бэкдор, который бы удаленно открывал порт на взломанной через WWW машине.
A: Пожалуйста! Можешь воспользоваться моим любимым перловым бэкдором. Скрипт открывает порт 37900 и при подключении запускает /bin/sh в интерактивном режиме. Сценарий весит всего 317 байт, забирай его с моего сервера http://forb.convex.ru/bd.pl.
Глоссарий / Основные понятия по взлому *nix-систем
Докучаев Дмитрий aka Forb (forb@real.xakep.ru)
Бэкдор (backdoor) – небольшая программа, оставляющая лазейку для удачливого злоумышленика на взломанной им системе. Бэкдор может представлять собой уже скомпилированный файл или сценарий на подручном языке, например, на Perl. Как правило, бэкдор открывает порт на сервере и ожидает подключения. Если коннект произошел, запускается /bin/sh. Навороченные бэкдоры имеют возможность закрыть соединение по тайм-ауту в целях безопасности.
Руткит (rootkit) – комплект, предназначенный для сокрытия взломщиком своего пребывания на сервере. Благодаря установке руткита все действия хакера остаются засекреченными: открытые порты не светятся в netstat, /bin/ls не показывает определенные файлы, /bin/ps скрывает процессы и т.п. Если говорить о том, какими бывают руткиты, то можно выделить два вида: изготовленные в форме прекомпиленных бинарников либо изготовленные в форме ядерных модулей. Второй вариант предпочтительнее и безопаснее, ибо LKM подменяет системные вызовы, а затем стирает себя из таблицы загруженных модулей. Соответственно, все бинарники остаются старыми, а утилиты типа chkrootkit говорят, что система в полном порядке :) (это справедливо лишь для самых тривиальных утилит подобного рода – прим. AvaLANche'а).
Chkrootkit – специальная программа, позволяющая проверить систему на наличие установленного руткита. Прога поставляется с базой всех известных хакерских комплектов. По этой базе и ведется сканирование. Также chkrootkit обращает внимание на наличие сниферов и исследует MD5-сумму бинарных файлов. В случае ее изменения программа оповещает админа о возможном вторжении хакера.
Logwiper (logcleaner) – небольшая программа, позволяющая чистить системные журналы (логи). Обычно logwiper'ы создаются для бинарных логов (/var/log/wtmp, /var/run/utmp/, /var/log/lastlog), которые вычистить не так-то просто. Для обращения к этим логам нужно знать специальную структуру utmp, которая описана в хидере /usr/include/utmp.h. Именно поэтому большинство logwiper'ов написано на Си. В качестве примеров могу привести три хороших logcleaner'а: Vanish2, grlogwipe и Zap2.
Аккаунт (account) – учетная запись на сервере. Один из фактов взлома – получение валидного аккаунта. При этом слово «валидный» означает то, что юзер должен иметь хороший командный интерпретатор (/bin/sh, /bin/bash и т.д.) в качестве оболочки. В противном случае взломщику нет никакой выгоды от добытого аккаунта.
Дефейс (deface) – замена главной HTML-страницы на web-сайте. Несмотря на то что дефейс – удел скрипткидисов (script-kiddies – подвид мегахакеров, умеющих использовать только известные баги и готовые эксплоиты), на популярных порталах по безопасности вывешен TOP дефейсов известных сайтов. Но, по мнению серьезных хакеров, дефейс – это просто ребячество. Настоящий взлом должен приводить к абсолютным правам на атакуемом сервере.
Хэш (hash) – значение некоторой (однозначной, в противном случае происходит коллизия) фунции (хэш-функции) какого-либо аргумента. Причем по хэшу, даже зная вид функции, нельзя вичислить ее аргумент (то есть то, от чего «берется хэш»). Звучит немного запутанно, но именно эта формулировка наиболее точно описывает то, что сейчас называют хэшем. Хэширование в последнее время применяют для «шифрования» паролей: в системе хранится только значение хэш-функции от текстовой строки – самого пароля. При антентификации заново вычисляется хэш от вводимого пользователем пароля, и если он совпадает с хранящимся в системе, ползователь «пускается» в систему. Хэширование может осуществляться каким угодно алгоритмом, но если говорить о *nix-системах (да и не только о них), наиболее распространенным является MD5. Он нашел свое применение в шифровании теневых (shadow) паролей, а также паролей, хранящихся в MySQL.
Зарутать (порутать) – получить права root в *nix-системе каким-нибудь методом, будь то локальная или удаленная атака.
Задосить – провести DoS/DDoS-атаку. Такое нападение приводит к тому, что атакуемый сервер перестает нормально функционирвать (виснет, перестает отвечать на удаленные запросы). Оно и понятно, ведь DoS чаще всего основывается на беспорядочном флуде (посылке огромного количества сетевых пакетов), в результате которого сервер просто захлебывается в приходящем мусоре и не успевает анализировать данные.
Эксплоит, сплоит (exploit) – программа, реализующая какую-то ошибку в сервисе или системном бинарнике. Сплоит можно назвать эффективным, если он ломает удаленный демон, открывая на машине удаленный рутовый шелл. Но реальных эксплоитов очень мало, обычно рядовые сплоиты основаны на срыве буфера (buffer overflow) у локальных файлов или добыче прав nobody через модуль HTTPD.
Маскарад (masquerade) – не только веселый праздник, но и подмена внутреннего IP-адреса хостов, находащихся в «виртуальной» сети (типа 10.0.0.0, 192.168.0.0), IP-адресов шлюза, посредствам которого эта сеть подключена в интернет. В результате чего локальные машины (часто говорят: «С нереальными адресами») получают право использовать интернет на полную катушку.
Фаервол, брандмауэр, сетевой экран (firewall) – программное или аппаратное средство, предназначенное для защиты компьютера (компьютерной сети) от внешних вторжений. В аппаратном виде фаервол представляет собой отдельный компьютер (или устройство), специально предназначенный для обработки сетевых пакетов. Как правило, такие машины снабжены операционкой реального времени (с минимальными задержками между командами), поэтому они могут справиться с масштабной DDoS-атакой. Понятно, что их цена очень высока. В локальных сетях общего назначения применяются программные фаерволы. В Linux такая программа называется iptables, в FreeBSD – ipfw, в OpenBSD – pf. Эти проги выполняют одну роль – анализируют заголовки пакетов и принимают различные решения на основе правил, написанных системным администратором.
Рулес (от rule) – правило, которое записывается в таблицы фаервола. Рулесы могут задаваться как для разрешения, так и для запрещения приема/отправки пакета. Обычно подобное правило включает в себя адрес отправителя/получателя и порт назначения, а также политику. Однако рулесы могут включать в себя очень много параметров, а могут не включать ничего, кроме политики. Все зависит от админа и его умственных способностей :).
Брутфорс (brute force) – взлом «грубой силой», основанный на тупом (не всегда, чаще – упорядоченном) переборе пароля в лоб. Если взломщик добыл парольный хэш, он может осуществить брутфорс по словарю либо по произвольным символам. Исход брутфорса никто предугадать не может: в случае действительно сложного и длинного пароля взломщику понадобится много (миллионов) лет, чтобы перебрать все возможные варианты.
Брутфорсер (bruteforcer) – программа, позволяющая организовать длительный процесс брутфорса. Если говорить об удаленном переборе (когда негодяй подбирает пароль на определенный удаленный сервис), хорошим брутфорсером является софтина Brutus под Win32 и hydra под UNIX. Хотя никто не мешает написать собственный брутфорсер и отточить его под конкретный сервис. Так делают многие хакеры. В случае локальных атак, когда у злоумышленника имеется парольный хэш, он прибегает к утилитам MD5Inside, John The Ripper или L0phtcrack.
Вордлист (word list) – словарь, по которому ведется перебор паролей. Не думай, что он содержит беспорядочный набор английских слов – вордлисты могут составляться по определенной тематике. Скажем, получил взломщик права на итальянском сервере, а затем добыл /etc/shadow. 99%, что пароль админа состоит из итальянского слова. Взломщик ищет иностранный вордлист, качает его и скармливает John The Ripper'у. Через несколько часов брутфорсер объявляет, что пароль успешно подобрался (если админ попался ушастый). В принципе, язык не единственный критерий сортировки, иногда вордлисты состоят из списка женских имен или названий городов. Некоторые словари ты можешь найти на сайте www.nsd.ru.
Бот (bot, от robot)– специальная программа-робот, послушно выполняющяя удаленные команды хозяина (ботовода), чаще всего через IRC. Как только команда поступает, бот осуществляет злые действия – проводит DoS, ищет баги в софте, закидывает приватами жертву и т.д. Ситуация усугубляется, когда на одном канале находятся до тысячи ботов. Все они, как ты уже догадался, запущены на взломанных серверах (или затрояненных десктопах).
Авторутер (autorooter) – софтина, ищущая баг в сервисах и автоматически его эксплуатирующая. Как правило, авторутер снабжен сканером и эксплоитом. После запуска сканер находит IP-адрес с уязвимым сервисом. Затем запускается эксплоит, который делает свое черное дело и создает хакерский аккаунт на удаленной системе, а затем отчитывается об успешной работе аттакующему. После всего процесс повторяется. Авторутеры используются при эпидемиях, когда мир узнает о масштабной уязвимости в операционной системе. Бывает, что авторутерами снабжаются боты, сидящие в IRC. При этом робот ищет новую жертву, затем устанавливает на машине копию и запускает ее. Словом, размножается как кролик :).
Пайп (pipe) – символ «|», применяющийся в Perl-сценариях (и командах *nix shell – прим. ред.). Если передать функции open() файл blabla.txt с пайпом на конце, он будет открыт в режиме исполнения. То есть в случае, когда взломщик найдет скрипт, принимающий параметр в виде имени файла, он может изменить имя на |команда| и тем самым добиться выполнения произвольной команды. Это самая распространенная ошибка в CGI-приложениях.
Баннер (banner) – заголовок какого-либо сервиса. Баннер по умолчанию выводит полную информацию о названии и версии службы, а также может содержать данные об операционной системе. Небезопасно, правда? Именно поэтому баннеры стараются подменять или урезать. Если админ назовет бажный ProFTPD защищенным VsFTPD, это отпугнет неопытного взломщика, и сервер сломают не так быстро. Часто администраторы заменяют баннер у HTTPd, FTPd и SMTPd.
Снифинг (sniffing) – перехват данных при помощи специальных программ – сниферов. Как правило, они устанавливаются на маршрутизаторе и перехватывают пакеты во всей локальной сети. В пакетах может содержаться как мусор, так и важная информация, но взломщиков интересуют обычно только пароли на различные сервисы. Именно эти данные снифер и старается поймать. Правда, ему не всегда это удается – часто админы запускают сервисы через защищенное SSL-соединение. Можешь ознакомиться со сниферами под *тшч на странице http://packetstormsecurity.nl/sniffers.
Спуфинг (spoofing) – подмена адреса (обычно обратного) в сетевом пакете. Особый интерес в последнее время представляет ARP-спуфинг, позволяющий заниматься снифингом даже в коммутируемых сетях.







