gns_ua: (Default)
[personal profile] gns_ua
Разгадка загадки, на утро для блоггеров-юниксоидов .

Активное соединение отследить можно.

Вводные

Есть хост 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, выясняем с какого хоста и порта он пришёл, идём туда, смотрим кто владеет этим исходящим портом, и так далее.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
No Subject Icon Selected
More info about formatting

Profile

gns_ua: (Default)
gns_ua

April 2017

M T W T F S S
     12
3456789
10111213141516
17181920212223
24252627282930

Expand Cut Tags

No cut tags