Хакер - Спецвыпуск журнала «Хакер» #47, октябрь 2004 г.
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 ([email protected])
Бэкдор (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) – взлом «грубой силой», основанный на тупом (не всегда, чаще – упорядоченном) переборе пароля в лоб. Если взломщик добыл парольный хэш, он может осуществить брутфорс по словарю либо по произвольным символам. Исход брутфорса никто предугадать не может: в случае действительно сложного и длинного пароля взломщику понадобится много (миллионов) лет, чтобы перебрать все возможные варианты.