Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
ssh-tpm-agent — Agente SSH che crea e gestisce chiavi sigillate TPM per l'autenticazione vincolata all'hardware, supportando generazione, importazione, wrapping, protezione tramite PIN e fallback proxy. | Kitploit
Strumenti/GitHubGitHub/foxboron/ssh-tpm-agent
Strumenti di Crittografia/DecrittografiaSicurezza CloudDevSecOpsSicurezza HardwareGestione Identità e Accessi (IAM)Autenticazione
GitHubfoxboron/ssh-tpm-agent

ssh-tpm-agent

Agente SSH che crea e gestisce chiavi sigillate TPM per l'autenticazione vincolata all'hardware, supportando generazione, importazione, wrapping, protezione tramite PIN e fallback proxy.

Vedi Repository
7433919 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

SSH agent per TPM

ssh-tpm-agent è un agente compatibile con ssh-agent che consente di creare chiavi tramite il Trusted Platform Module (TPM) per l'autenticazione verso server SSH.

Le chiavi sigillate dal TPM sono chiavi private create all'interno del Trusted Platform Module (TPM) e sigillate in file con suffisso .tpm. Sono legate all'hardware su cui vengono prodotte e non possono essere trasferite ad altre macchine.

Ciò consente di utilizzare un client nativo invece di dover caricare lateralmente librerie PKCS11 esistenti nell'ssh-agent e/o nel client ssh.

Il progetto utilizza TPM 2.0 Key Files implementati tramite il progetto go-tpm-keyfiles.

Funzionalità

  • Un ssh-agent funzionante.
  • Creazione di chiavi ssh protette sul TPM.
  • Creazione di chiavi SSH impacchettate da remoto per l'importazione.
  • Supporto PIN, la protezione da attacchi di dizionario del TPM consente di utilizzare PIN a bassa entropia invece di password.
  • Crittografia delle sessioni TPM.
  • Supporto proxy verso altri server ssh-agent per fallback.

Supporto SWTPM

Invece di utilizzare direttamente il TPM, puoi usare --swtpm o export SSH_TPM_AGENT_SWTPM=1 per creare un'identità basata su swtpm che verrà archiviata in /var/tmp/ssh-tpm-agent.

Nota che swtpm non fornisce alcuna proprietà di sicurezza e dovrebbe essere usato solo per test.

Installazione

Il modo più semplice per installare questo plugin è eseguire il seguente comando:

root@kitploit:~
go install github.com/foxboron/ssh-tpm-agent/cmd/...@latest

In alternativa, scarica i binari precompilati.

Utilizzo

root@kitploit:~
# Crea chiave
$ ssh-tpm-keygen
Generazione di una coppia di chiavi ecdsa pubblica/privata sigillata.
Inserisci il file in cui salvare la chiave (/home/fox/.ssh/id_ecdsa):
Inserisci la passphrase (vuota per nessuna passphrase):
Inserisci di nuovo la stessa passphrase:
La tua identificazione è stata salvata in /home/fox/.ssh/id_ecdsa.tpm
La tua chiave pubblica è stata salvata in /home/fox/.ssh/id_ecdsa.pub
L'impronta della chiave è:
SHA256:NCMJJ2La+q5tGcngQUQvEOJP3gPH8bMP98wJOEMV564
L'immagine randomart della chiave è il colore della televisione, sintonizzata su un canale morto.

$ cat /home/fox/.ssh/id_ecdsa.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOTOsMXyjTc1wiQSKhRiNhKFsHJNLzLk2r4foXPLQYKR0tuXIBMTQuMmc7OiTgNMvIjMrcb9adgGdT3s+GkNi1g=

# Utilizzo del socket
$ ssh-tpm-agent -l /var/tmp/tpm.sock

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh [email protected]

Nota: Per ssh-tpm-agent puoi specificare la password del proprietario del TPM usando i flag della riga di comando -o o --owner-password, che sono preferiti. In alternativa, puoi usare la variabile d'ambiente SSH_TPM_AGENT_OWNER_PASSWORD.

Importazione di una chiave esistente

Utile se vuoi eseguire il backup della chiave in un archivio remoto sicuro mentre la usi quotidianamente dal TPM.

root@kitploit:~
# Crea una chiave, o usane una esistente
$ ssh-keygen -t ecdsa -f id_ecdsa
Generazione di una coppia di chiavi ecdsa pubblica/privata.
Inserisci la passphrase (vuota per nessuna passphrase):
Inserisci di nuovo la stessa passphrase:
La tua identificazione è stata salvata in id_ecdsa
La tua chiave pubblica è stata salvata in id_ecdsa.pub
L'impronta della chiave è:
SHA256:bDn2EpX6XRX5ADXQSuTq+uUyia/eV3Z6MW+UtxjnXvU fox@framework
L'immagine randomart della chiave è:
+---[ECDSA 256]---+
|           .+=o..|
|           o. oo.|
|          o... .o|
|       . + ..  ..|
|        S .   . o|
|       o * . oo=*|
|        ..+.oo=+E|
|        .++o...o=|
|       .++++. .+ |
+----[SHA256]-----+

# Importa la chiave
$ ssh-tpm-keygen --import id_ecdsa
Sigillatura di una coppia di chiavi ecdsa pubblica/privata esistente.
Inserisci la passphrase (vuota per nessuna passphrase):
Inserisci di nuovo la stessa passphrase:
La tua identificazione è stata salvata in id_ecdsa.tpm
L'impronta della chiave è:
SHA256:bDn2EpX6XRX5ADXQSuTq+uUyia/eV3Z6MW+UtxjnXvU
L'immagine randomart della chiave è il colore della televisione, sintonizzata su un canale morto.

Installazione del servizio utente

I servizi attivati tramite socket consentono di avviare ssh-tpm-agent quando necessario per il tuo sistema.

root@kitploit:~
# Utilizzo del socket
$ ssh-tpm-agent --install-user-units
Installato /home/fox/.config/systemd/user/ssh-tpm-agent.socket
Installato /home/fox/.config/systemd/user/ssh-tpm-agent.service
Abilita con: systemctl --user enable --now ssh-tpm-agent.socket

$ systemctl --user enable --now ssh-tpm-agent.socket

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh [email protected]

Supporto proxy

root@kitploit:~
# Avvia il solito ssh-agent
$ eval $(ssh-agent)

# Crea una chiave RSA forte
$ ssh-keygen -t rsa -b 4096 -f id_rsa -C ssh-agent
...
L'impronta della chiave è:
SHA256:zLSeyU/6NKHGEvyZLA866S1jGqwdwdAxRFff8Z2N1i0 ssh-agent

$ ssh-add id_rsa
Identità aggiunta: id_rsa (ssh-agent)

# Stampa la chiave looooonnnga
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]8TWynQ== ssh-agent

# Crea chiave sul TPM
$ ssh-tpm-keygen -C ssh-tpm-agent
Generazione di una coppia di chiavi ecdsa pubblica/privata sigillata.
Inserisci il file in cui salvare la chiave (/home/fox/.ssh/id_ecdsa):
Inserisci la passphrase (vuota per nessuna passphrase):
Conferma passphrase:
La tua identificazione è stata salvata in /home/fox/.ssh/id_ecdsa.tpm
La tua chiave pubblica è stata salvata in /home/fox/.ssh/id_ecdsa.pub
L'impronta della chiave è:
SHA256:PoQyuzOpEBLqT+xtP0dnvyBVL6UQTiQeCWN/EXIxPOo
L'immagine randomart della chiave è il colore della televisione, sintonizzata su un canale morto.

# Avvia ssh-tpm-agent con un socket proxy
$ ssh-tpm-agent -A "${SSH_AUTH_SOCK}" &

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

# ssh-tpm-agent sta facendo da proxy per le chiavi da ssh-agent
$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]8TWynQ== ssh-agent
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNo[...]q4whro= ssh-tpm-agent

ssh-tpm-add

root@kitploit:~
$ ssh-tpm-agent --no-load &
2023/08/12 13:40:50 In ascolto su /run/user/1000/ssh-tpm-agent.sock

$ export SSH_AUTH_SOCK="$(ssh-tpm-agent --print-socket)"

$ ssh-add -L
L'agente non ha identità.

$ ssh-tpm-add $HOME/.ssh/id_ecdsa.tpm
Identità aggiunta: /home/user/.ssh/id_ecdsa.tpm

$ ssh-add -L
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBJCxqisGa9IUNh4Ik3kwihrDouxP7S5Oun2hnzTvFwktszaibJruKLJMxHqVYnNwKD9DegCNwUN1qXCI/UOwaSY= test

Creare e impacchettare una chiave privata per una macchina client su un server remoto

Sul lato client crea una chiave primaria sotto una gerarchia. Questo esempio utilizzerà la gerarchia del proprietario con un SRK.

Il file di output srk.pem deve essere trasferito all'estremità remota che crea la chiave. Questo potrebbe essere fatto come parte del provisioning del client.

root@kitploit:~
$ tpm2_createprimary -C o -G ecc -g sha256 -c prim.ctx -a 'restricted|decrypt|fixedtpm|fixedparent|sensitivedataorigin|userwithauth|noda' -f pem -o srk.pem

Sull'estremità remota creiamo una chiave ssh p256, senza password, e la impacchettiamo con ssh-tpm-keygen usando il srk.pem dal lato client.

root@kitploit:~
$ ssh-keygen -t ecdsa -b 256 -N "" -f ./ecdsa.key
# OPPURE con openssl
$ openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:prime256v1 -out ecdsa.key

# Impacchetta con ssh-tpm-keygen
$ ssh-tpm-keygen --wrap-with srk.pub --wrap ecdsa.key -f wrapped_id_ecdsa

Sul lato client possiamo spacchettare wrapped_id_ecdsa in una chiave caricabile.

root@kitploit:~
$ ssh-tpm-keygen --import ./wrapped_id_ecdsa.tpm -f id_ecdsa.tpm
$ ssh-tpm-add id_ecdsa.tpm

ssh-tpm-hostkey

ssh-tpm-agent supporta anche l'archiviazione delle chiavi host all'interno del TPM.

root@kitploit:~
$ sudo ssh-tpm-keygen -A
2023/09/03 17:03:08 INFO Generazione di una nuova chiave host ECDSA
2023/09/03 17:03:08 INFO Scritto /etc/ssh/ssh_tpm_host_ecdsa_key.tpm
2023/09/03 17:03:08 INFO Generazione di una nuova chiave host RSA
2023/09/03 17:03:15 INFO Scritto /etc/ssh/ssh_tpm_host_rsa_key.tpm

$ sudo ssh-tpm-hostkeys --install-system-units
Installato /usr/lib/systemd/system/ssh-tpm-agent.service
Installato /usr/lib/systemd/system/ssh-tpm-agent.socket
Installato /usr/lib/systemd/system/ssh-tpm-genkeys.service
Abilita con: systemctl enable --now ssh-tpm-agent.socket

$ sudo ssh-tpm-hostkeys --install-sshd-config
Installato /etc/ssh/sshd_config.d/10-ssh-tpm-agent.conf
Riavvia sshd: systemd restart sshd

$ systemctl enable --now ssh-tpm-agent.socket
$ systemd restart sshd

$ sudo ssh-tpm-hostkeys
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCLDH2xMDIGb26Q3Fa/kZDuPvzLzfAH6CkNs0wlaY2AaiZT2qJkWI05lMDm+mf+wmDhhgQlkJAHmyqgzYNwqWY0= root@framework
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDAoMPsv5tEpTDFw34ltkF45dTHAPl4aLu6HigBkNnIzsuWqJxhjN6JK3vaV3eXBzy8/UJxo/R0Ml9/DRzFK8cccdIRT1KQtg8xIikRReZ0usdeqTC+wLpW/KQqgBLZ1PphRINxABWReqlnbtPVBfj6wKlCVNLEuTfzi1oAMj3KXOBDcTTB2UBLcwvTFg6YnbTjrpxY83Y+3QIZNPwYqd7r6k+e/ncUl4zgCvvxhoojGxEM3pjQIaZ0Him0yT6OGmCGFa7XIRKxwBSv9HtyHf5psgI+X5A2NV2JW2xeLhV2K1+UXmKW4aXjBWKSO08lPSWZ6/5jQTGN1Jg3fLQKSe7f root@framework

$ ssh-keyscan -t ecdsa localhost
# localhost:22 SSH-2.0-OpenSSH_9.4
localhost ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCLDH2xMDIGb26Q3Fa/kZDuPvzLzfAH6CkNs0wlaY2AaiZT2qJkWI05lMDm+mf+wmDhhgQlkJAHmyqgzYNwqWY0=

ssh-config

È possibile utilizzare le chiavi pubbliche create da ssh-tpm-keygen all'interno delle configurazioni ssh.

L'esempio seguente utilizza ssh-tpm-agent e passa anche la chiave pubblica per garantire che non tutte le identità vengano divulgate dall'agente.

root@kitploit:~
Host example.com
    IdentityAgent $SSH_AUTH_SOCK

Host *
    IdentityAgent /run/user/1000/ssh-tpm-agent.sock
    IdentityFile ~/.ssh/id_ecdsa.pub

Licenza

Concesso in licenza con la licenza MIT. Vedi LICENSE o https://opensource.org/licenses/MIT

Scarica lo strumento