Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #68, АВГУСТ 2004 г.

Штурм хостинга

Master-lame-master

Xakep, номер #068, стр. 068-046-3


Антивирусная атака

Да, система действительно была новой. Из активных процессов я узрел почтовик, самбу (интересно, зачем самба на хостинге?), апач и антивирус. Последний имел звучное имя clamd. Видимо, админ решил сэкономить на лицензиях и заюзать фриварный антивирус. Выполнив /usr/sbin/clamd -V, я узнал версию clamd. Ее счастливый номер равнялся 0.67: в моей памяти сразу всплыл текст, описывающий уязвимость в этом демоне.

Бьюсь об заклад, что ты не знаешь, к чему я клоню. Тем лучше, ты все поймешь после изучения моих действий. Пролистав /etc/clamav.conf, я проверил две важные опции. Во-первых, была заремена директива #User. Это означало, что вся рутинная работа по проверке файлов на вирусы ведется под рутом (это хорошо). Во-вторых, параметр VirusEvent имел вполне реальное значение. Демон честно сообщал админу, что в системе найден вирус. Мол, такой-то файл заражен такой-то венерической болезнью :). Все ничего, но имя файла может содержать почти все символы. Даже «;» и «|». Этим я и воспользовался. Чтобы демон запаниковал, мне нужно было подбросить ему паразита - искать и заливать вирь было в лом, поэтому я решил ограничиться тестовым вирусом, заголовком, который опознается всеми антивирусами как тестовая зараза. Я перешел в каталог /tmp и удостоверился, что могу создавать тут файлы. Затем поступила команда echo "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*" < ./trojan.exe. По всем понятиям, любой антивирус должен заругаться на присутствие заразы (пусть и безобидной). Но имя trojan.exe меня несколько не устраивало. Нужно было придумать что-нибудь этакое с символом «;», дабы выполнить нужную последовательность команд с рутовыми правами. Реальное западло тут было в том, что нельзя использовать backslash в названии файла (странно, если бы было иначе :) - прим. ред.). Иными словами, невозможно было указать путь к файлу и запустить его. По крайней мере, так показалось на первый взгляд ;).

Красивое решение

Давай подумаем, что было мне нужно. Во-первых, рутовые права поднимались не для ламерских "rm -rf /" и даже не для "id; uname -a" :). Я должен был каким-то образом активировать самопальный бэкдор, изменяющий uid и gid, а затем запускающий интерпретатор. Решение было красивым, но пришло в голову не сразу.

Изначально необходимо состряпать и скомпилировать бинарник. Его код не раз приводился на страницах этого журнала, поэтому повторяться не буду - рой старые номера Х. При выполнении команды gcc test.c -o test я жестоко обломался. На сервере не было компилятора gcc :). Да, действительно, какой здравый админ поставит компилятор на хостинговый сервер. Но совместимость бинарного формата никто не отменял, поэтому я собрал исходник на собственном сервере, а затем аккуратно перенес его, скачав wget'ом. Выполнив chmod +x test; ldd ./test, я лишний раз убедился - все действительно работает как надо.

Назад на стр. 068-046-2  Содержание  Вперед на стр. 068-046-4