Eine andere Methode, auf die ich vor einiger Zeit in diesem Blogbeitrag von Brendan Gregg gestoßen bin, ist die Verwendung von Capabilities Tracer - capable .
Unten ist eine Beispielausgabe:
$ 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
Es hat einen erheblichen Vorteil, dass es Fähigkeitsprüfungen aufzeichnet, die vom Kernel für einen bestimmten Prozess durchgeführt werden. Dies ermöglicht es, die Anwendung anhand der Fähigkeiten zu profilieren, die sie tatsächlich benötigt, z. um die Privilegien einzugrenzen und als unprivilegierter Benutzer auszuführen.
Während pscap erlaubt, die effektiven aufzulisten Fähigkeiten aller laufenden Prozesse bietet es keine verlässliche Methode, um zu überprüfen, welche Fähigkeiten tatsächlich vom Prozess benötigt werden, weil:
- Ein Prozess kann die Fähigkeit X in seiner zulässigen Menge haben und sie nur für kurze Zeit auf die effektive Menge erhöhen, um eine privilegierte Operation auszuführen.
- Ein Prozess hätte mit einem breiteren Satz von Fähigkeiten gestartet, die Initialisierung mit erhöhten Rechten durchführen und einige (oder alle) Fähigkeiten fallen lassen können (z. B. Ping zum Öffnen eines Raw-Sockets).
- Es funktioniert nur für Prozesse, die bereits funktionsbasiert ausgeführt werden. Was wäre, wenn Sie die für Ihre neu entwickelte Anwendung erforderlichen Mindestfunktionen bestimmen müssten?
- Es erlaubt nicht, die für die Anwendung durchgeführten Berechtigungsprüfungen mit den Operationen zu korrelieren, die es ausführt, mit capable Sie erhalten Zeitstempel für jeden einzelnen Check.
Die Quellen für fähig sind auf github verfügbar. Installationsanweisungen für BCC (einschließlich fähiger ) sind hier verfügbar. Für eine weitere Beschreibung lesen Sie bitte den eingangs erwähnten Blog-Beitrag, bitte beachten Sie auch, dass Capable Kernel 4.4+ erfordert, eine Alternative für ältere Kernel ist ebenfalls im Blog-Beitrag verfügbar.
Hinweis:Ich bin weder der Autor, noch bin ich in irgendeiner Weise mit den Tool-Entwicklern verbunden. Ich wollte es nur einem breiteren Publikum zugänglich machen, da ich es persönlich verwendet habe, um ein Funktionsprofil für eine komplexe Überwachungsanwendung zu entwickeln, für deren Ausführung zuvor volle Root-Rechte erforderlich waren, und fand, dass dieser Tracer eine enorme Hilfe ist.
Es stellt sich heraus, dass es einfacher ist als erwartet. Installieren Sie libcap-ng (https://people.redhat.com/sgrubb/libcap-ng/) und verwenden Sie pscap
.
In Ubuntu 16.04 kann es installiert werden mit:
sudo apt-get install libcap-ng-utils
Beispielausgabeauszug:
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
Basierend auf dem letzten libcap2-Update
1:(Kurze Option):getpcaps
Beschreibung:
Von hier:
getpcaps zeigt die Fähigkeiten der Prozesse an, die durch die in der Befehlszeile angegebenen pid-Werte angegeben werden.
Beispiel:
$ 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:(Etwas längere Option):/proc status and capsh
Beschreibung:
proc ist ein Prozessinformations-Pseudo-Dateisystem oder mit anderen Worten – ein Verzeichnis, in dem Sie Informationen zu allen Prozessen einsehen können.
Über capsh:
Die Unterstützung und Verwendung von Linux-Funktionen kann mit diesem Tool untersucht und eingeschränkt werden. Dieses Tool bietet einen praktischen Wrapper für bestimmte Arten von Fähigkeitstests und die Erstellung von Umgebungen.
Es bietet auch einige Debugging-Funktionen, die für die Zusammenfassung des Fähigkeitsstatus nützlich sind.
Beispiel:
$ cat /proc/<PID>/status | grep Cap
Und Sie erhalten (auf den meisten Systemen):
CapInh: 00000000a80425fb (Inherited capabilities)
CapPrm: 0000000000000000 (Permitted capabilities)
CapEff: 0000000000000000 (Effective capabilities)
CapBnd: 00000000a80425fb (Bounding set)
CapAmb: 000000000000000 (Ambient capabilities set)
Verwenden Sie die capsh
Dienstprogramm zum Decodieren von Hexadezimalzahlen in den Capability-Namen:
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
(*) Sie können capsh
herunterladen mit:sudo apt-get install git libpcap-dev
.