linux file capabilities

Stavo dando un’occhiata alle nuove (dal kernel 2.6.24) file capabilities di linux (molto comode in fase di hardening per eliminare il setuid root da alcuni binari tipo su,passwd,traceroute,ecc.. o per permettere ad alcuni demoni di girare con uid diverso da 0) quando, in casi non banali tipo traceroute (basta la CAP_NET_RAW) o di un qualsiasi demone cui serva uid 0 esclusivamente per fare bind su porta privilegiata (basta la CAP_NET_BIND_SERVICE), mi son reso conto che non è molto comodo cercare di ricavarsi quali siano le capabilities necessarie a un dato binario (affinche’ la sua istanza possa girare con uid diverso da 0) a colpi di strace/ltrace; quindi ho scritto un piccolo LKM con una jprobe nella cap_capable() che permette di ricavarsi quali sono le capabilities di cui fa uso un determinato binario; nel caso possa tornare utile a qualcuno, riporto di seguito i link al sorgente e al relativo Makefile (ovviamente vi serve un kernel con CONFIG_KPROBES abilitato :) )

trace_cap_capable.c
Makefile

P.S. se dovete testare le capabilities richieste da tanti binari, non vi conviene fare ogni volta rmmod e modprobe del LKM, cambiando di volta in volta il paramentro ‘progname’, è possibile modificare il parametro mentre il modulo è caricato, scrivendo direttamente in /sys in questo modo:

echo -e “nome_binario\c” > /sys/module/trace_cap_capable/parameters/progname