Další metodou, se kterou jsem se před chvílí setkal v tomto blogovém příspěvku od Brendana Gregga, je použití traceru schopností - schopný .
Níže je ukázkový výstup:
$ sudo /usr/share/bcc/tools/capable
TIME UID PID COMM CAP NAME AUDIT
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:54 0 2467 capable 21 CAP_SYS_ADMIN 1
11:31:59 1000 2468 ls 1 CAP_DAC_OVERRIDE 1
11:31:59 1000 2468 ls 2 CAP_DAC_READ_SEARCH 1
11:32:02 0 1421 timesync 25 CAP_SYS_TIME 1
11:32:05 1000 2469 sudo 7 CAP_SETUID 1
11:32:05 0 2469 sudo 6 CAP_SETGID 1
Má významnou výhodu v tom, že zaznamenává kontroly schopností prováděné jádrem pro daný proces. To umožňuje profilovat aplikaci podle schopností, které skutečně vyžaduje, např. zúžit oprávnění a spustit jej jako neprivilegovaný uživatel.
Zatímco pscap umožňuje vypsat efektivní schopnosti všech běžících procesů, nenabízí spolehlivou metodu kontroly, které schopnosti jsou ve skutečnosti procesem vyžadovány, protože:
- Proces může mít schopnost X ve své povolené sadě a zvýšit ji na efektivní sadu pouze na krátkou dobu, aby provedl privilegovanou operaci.
- Proces mohl začít s širší sadou schopností, provést inicializaci vyžadující zvýšená oprávnění a vypustit některé (nebo všechny) schopnosti (např. příkaz ping otevřít nezpracovaný soket).
- Funguje pouze pro procesy, které již běží způsobem založeným na schopnostech. Co kdybyste museli určit minimální sadu schopností vyžadovanou pro vaši nově vyvinutou aplikaci?
- Neumožňuje korelovat kontroly oprávnění provedené pro aplikaci s operacemi, které provádí, s schopným získáte časová razítka pro každou jednotlivou kontrolu.
Zdroje pro schopné jsou k dispozici na githubu. Pokyny k instalaci pro BCC (včetně schopných ) jsou k dispozici zde. Další popis naleznete v příspěvku na blogu uvedeném na začátku, všimněte si také, že schopný vyžaduje jádro 4.4+, alternativa pro starší jádra je k dispozici také v příspěvku na blogu.
Poznámka:Nejsem autorem ani nejsem žádným způsobem spojen s vývojáři nástrojů. Jen jsem ho chtěl přiblížit širšímu publiku, protože jsem ho osobně používal k vývoji profilu schopností pro komplexní monitorovací aplikaci, která dříve ke svému běhu vyžadovala plná oprávnění root, a zjistil jsem, že tento sledovač je ohromným pomocníkem.
Ukázalo se, že je to jednodušší, než se očekávalo. Nainstalujte libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) a použijte pscap
.
V Ubuntu 16.04 jej lze nainstalovat pomocí:
sudo apt-get install libcap-ng-utils
Ukázkový úryvek z výstupu:
ppid pid name command capabilities
1 468 root systemd-journal chown, dac_override, dac_read_search, fowner, setgid, setuid, sys_ptrace, sys_admin, audit_control, mac_override, syslog, audit_read
1 480 root lvmetad full
1 492 root systemd-udevd full
1 1040 root rpc.idmapd full
1 1062 root rpc.gssd full
1 1184 messagebus dbus-daemon audit_write +
1 1209 root NetworkManager dac_override, kill, setgid, setuid, net_bind_service, net_admin, net_raw, sys_module, sys_chroot, audit_write
Na základě nedávné aktualizace libcap2
1:(Krátká možnost):getpcaps
Popis:
Odtud:
getpcaps zobrazuje schopnosti procesů indikovaných hodnotou (hodnotami) thepid zadanou na příkazovém řádku.
Příklad:
$ getpcaps <PID>
PID: = cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap+i
2:(Trochu delší možnost):/proc status and capsh
Popis:
proc je pseudosouborový systém s informacemi o procesech nebo jinými slovy - adresář, kde si můžete prohlížet informace o všech procesech.
O caph:
Pomocí tohoto nástroje lze prozkoumat a omezit podporu a použití schopností Linuxu. Tento nástroj poskytuje praktický obal pro určité typy testování schopností a vytváření prostředí.
Poskytuje také některé funkce ladění užitečné pro shrnutí stavu schopností.
Příklad:
$ cat /proc/<PID>/status | grep Cap
A dostanete (na většině systémů):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
Použijte capsh
nástroj pro dekódování z hexadecimálních čísel do názvu schopností:
capsh --decode=00000000a80425fb
0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap
(*) Můžete si stáhnout capsh
s:sudo apt-get install git libpcap-dev
.