Спецвыпуск журнала «Хакер» 47, октябрь 2004 г.
Шрифт:
Q: Можно ли «выключить» установленный на сервере фаервол?
A: Еще как! Для этого хакеру нужны минимальные права, а также дырка в сервере :). Допустим, на машине крутится бажное ядро, а взломщик имеет доступ к Web-шеллу. Чтобы деактивировать фаервол, он заливает на сервер ptrace-эксплоит (либо какой-нибудь другой) со слегка измененным кодом. Вместо запуска /bin/sh будет стартоваться сценарий, который обращается к /etc/init.d/iptables с параметром stop. Как правило, запуск внешней команды не выносится в shell-код, так что исправить сишник сможет даже темный человек :). После компиляции и запуска сплоита фаервол должен выключиться.
Q:
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
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'а).