Seccomp
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Seccomp, che sta per Secure Computing mode, è una funzionalità di sicurezza del kernel Linux progettata per filtrare le chiamate di sistema. Limita i processi a un insieme ristretto di chiamate di sistema (exit()
, sigreturn()
, read()
e write()
per i descrittori di file già aperti). Se un processo tenta di chiamare qualsiasi altra cosa, viene terminato dal kernel utilizzando SIGKILL o SIGSYS. Questo meccanismo non virtualizza le risorse ma isola il processo da esse.
Ci sono due modi per attivare seccomp: attraverso la chiamata di sistema prctl(2)
con PR_SET_SECCOMP
, o per i kernel Linux 3.17 e superiori, la chiamata di sistema seccomp(2)
. Il metodo più vecchio di abilitare seccomp scrivendo in /proc/self/seccomp
è stato deprecato a favore di prctl()
.
Un miglioramento, seccomp-bpf, aggiunge la capacità di filtrare le chiamate di sistema con una politica personalizzabile, utilizzando regole Berkeley Packet Filter (BPF). Questa estensione è sfruttata da software come OpenSSH, vsftpd e i browser Chrome/Chromium su Chrome OS e Linux per un filtraggio delle syscall flessibile ed efficiente, offrendo un'alternativa a systrace ora non supportato per Linux.
In questa modalità Seccomp consente solo le syscall exit()
, sigreturn()
, read()
e write()
per i descrittori di file già aperti. Se viene effettuata qualsiasi altra syscall, il processo viene terminato utilizzando SIGKILL
Questa modalità consente il filtraggio delle chiamate di sistema utilizzando una politica configurabile implementata utilizzando le regole del Berkeley Packet Filter.
Seccomp-bpf è supportato da Docker per limitare le syscalls dai container, riducendo efficacemente la superficie di attacco. Puoi trovare le syscalls bloccate per default in https://docs.docker.com/engine/security/seccomp/ e il profilo seccomp di default può essere trovato qui https://github.com/moby/moby/blob/master/profiles/seccomp/default.json. Puoi eseguire un container docker con una politica seccomp diversa con:
Se vuoi, ad esempio, vietare a un container di eseguire alcune syscall come uname
, puoi scaricare il profilo predefinito da https://github.com/moby/moby/blob/master/profiles/seccomp/default.json e semplicemente rimuovere la stringa uname
dalla lista.
Se vuoi assicurarti che alcun binario non funzioni all'interno di un container docker, puoi usare strace per elencare le syscall che il binario sta utilizzando e poi vietarle.
Nell'esempio seguente vengono scoperte le syscall di uname
:
Se stai usando Docker solo per avviare un'applicazione, puoi profilare con strace
e consentire solo le syscalls di cui ha bisogno
Per illustrare la funzionalità Seccomp, creiamo un profilo Seccomp che disabilita la chiamata di sistema “chmod” come di seguito.
Nel profilo sopra, abbiamo impostato l'azione predefinita su "allow" e creato una lista nera per disabilitare "chmod". Per essere più sicuri, possiamo impostare l'azione predefinita su drop e creare una lista bianca per abilitare selettivamente le chiamate di sistema. L'output seguente mostra la chiamata "chmod" che restituisce un errore perché è disabilitata nel profilo seccomp.
Il seguente output mostra il “docker inspect” che visualizza il profilo:
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)