проследить соединение II
Saturday, 30 January 2010 01:12![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Разгадка загадки, на утро для блоггеров-юниксоидов .
Активное соединение отследить можно.
Вводные
Есть хост X ("бастион") на который люди ходят под персональными учётными записями.
Есть промежуточный сервер Y, на который можно попасть только с бастиона и куда все ходят как sysop. С него зато можно попасть на разные другие сервера.
Есть сервер Z, на котором сидит некто с промежуточного сервера Y. На Y в списке процессов виден sysop pts/0 "ssh Z", который в свою очередь пришёл с бастиона.
Задача: узнать, под кем этот пользователь сидит на бастионе.
Решение
Пусть промежуточный сервер Y имеет адрес 172.16.10.251, а X ("bastion") 172.16.10.201. И допустим, мы знаем что соединение с бастиона на Y:tcp/22 шло с source port 34581. Узнать это можно по логам sshd на Y, по netstat -a, или заглянув в environ шелла:
Итак, sshd форкнулся в привилегированный 6988 который форкнул 6993, который сбросил привилегии и запустил шелл 6994. Находим соединение записанное на 6988:
Итак, на бастионе у врага исходящий порт 32784.
Ещё это можно узнать из энвайрон шелла, куда добрый openssh выставляет SSH_CLIENT и SSH_CONNECTION :
[ всего этого можно не делать, если sshd на промежуточном сервере пишет логи - там будет видно с какого порта подключились и какой pts получен ]
А теперь на бастионе находим какой процесс владеет сокетом tcp/32784 :
... и выясняем кому на бастионе принадлежит процесс 17299:
Вот он, мерзавец!
Разумеется, цепочка хостов может быть сколь угодно длинной - просто понадобится больше времени. На X находим родительский "sshd [priv]" процесса 17299, выясняем с какого хоста и порта он пришёл, идём туда, смотрим кто владеет этим исходящим портом, и так далее.
Активное соединение отследить можно.
Вводные
Есть хост X ("бастион") на который люди ходят под персональными учётными записями.
Есть промежуточный сервер Y, на который можно попасть только с бастиона и куда все ходят как sysop. С него зато можно попасть на разные другие сервера.
Есть сервер Z, на котором сидит некто с промежуточного сервера Y. На Y в списке процессов виден sysop pts/0 "ssh Z", который в свою очередь пришёл с бастиона.
Задача: узнать, под кем этот пользователь сидит на бастионе.
Решение
Пусть промежуточный сервер Y имеет адрес 172.16.10.251, а X ("bastion") 172.16.10.201. И допустим, мы знаем что соединение с бастиона на Y:tcp/22 шло с source port 34581. Узнать это можно по логам sshd на Y, по netstat -a, или заглянув в environ шелла:
[root@Y ~] # who | grep 172.16.10.201 sysop pts/0 Jan 29 23:17 (172.16.10.201) [root@Y] # ps auxf | grep -v grep | grep -C 1 'sysop@pts/0' root 6988 0.0 0.2 8388 2684 ? Ss 23:17 0:00 \_ sshd: sysop [priv] sysop 6993 0.0 0.1 8388 1660 ? S 23:17 0:00 | \_ sshd: sysop@pts/0 sysop 6994 0.0 0.1 5668 1844 pts/0 Ss+ 23:17 0:00 | \_ -bash
Итак, sshd форкнулся в привилегированный 6988 который форкнул 6993, который сбросил привилегии и запустил шелл 6994. Находим соединение записанное на 6988:
[root@Y ~] # netstat -apn | grep 6988 | grep tcp tcp 0 0 172.16.10.251:22 172.16.10.201:32784 ESTABLISHED 6988/sshd: sysop
Итак, на бастионе у врага исходящий порт 32784.
Ещё это можно узнать из энвайрон шелла, куда добрый openssh выставляет SSH_CLIENT и SSH_CONNECTION :
[root@Y ~] # cat /proc/6994/environ | tr '\0' '\n' | grep SSH_CLIENT SSH_CLIENT=172.16.10.201 32784 22
[ всего этого можно не делать, если sshd на промежуточном сервере пишет логи - там будет видно с какого порта подключились и какой pts получен ]
А теперь на бастионе находим какой процесс владеет сокетом tcp/32784 :
[root@X ~] # netstat -apn | grep 32784 tcp 0 0 172.16.10.201:32784 172.16.10.251:22 ESTABLISHED 17299/ssh
... и выясняем кому на бастионе принадлежит процесс 17299:
[root@X ~] # ps -ef | grep 17299 | grep 'ssh sysop@172.16.10.251' gns 17299 17057 0 23:11 pts/6 00:00:00 ssh sysop@172.16.10.251
Вот он, мерзавец!
Разумеется, цепочка хостов может быть сколь угодно длинной - просто понадобится больше времени. На X находим родительский "sshd [priv]" процесса 17299, выясняем с какого хоста и порта он пришёл, идём туда, смотрим кто владеет этим исходящим портом, и так далее.