Obwohl die Frage alt ist, wird sie weiterhin über den unbeantworteten Fragen (meinen Tags) angezeigt. Also ich denke ich sollte das beantworten :)
AOSP'S UNTERSTÜTZUNG FÜR FÄHIGKEITEN:
Die Frage bezieht sich speziell auf Google-Geräte. Ich habe noch nie ein Google-Gerät verwendet. Was ich jedoch mit Sicherheit sagen kann, ist, dass Linux- (Prozess-) Funktionen auf den meisten Geräten (wenn nicht allen) aktiviert sein müssen, auf denen nur Android 1.6 ausgeführt wird. Die Referenz finden Sie in init
und system_server
, den beiden wichtigsten Komponenten von AOSP. In Android 4.2 wurde zum Beispiel eine installd
weitere Kernkomponente erstellt, die mit fehlenden Funktionen ausgeführt werden kann.
Die Dateisystemfunktionen waren eine der wichtigsten Sicherheitsverbesserungen in Android 4.3, bei denen Binärdateien entfernt set-uid
bzw. set-gid
aus diesen entfernt und Dateifunktionen festgelegt wurden run-as
. Dies führte zu revolutionären Veränderungen in der Android-Rooting-Reise.
Unterstützung für Ambient - Funktionen wurde in Android 8 hinzugefügt , die schrecken die Verwendung von Datei - Funktionen:
Dateifunktionen stellen wiederum ein Sicherheitsrisiko dar, da jeder Prozess, der eine Datei mit Dateifunktionen ausführt, diese Funktionen nutzen kann.
Viele init
Dienste hängen von ihnen ab, z storaged
. B. meine eigenen sshd
und dnscrypt-proxy
Dienste.
KERNEL'S UNTERSTÜTZUNG FÜR FÄHIGKEITEN:
Im Kernel-Teil ist es nicht optional , einen Kernel ohne Fähigkeiten zu erstellen:
Von Kernel 2.5.27 bis Kernel 2.6.26 waren Funktionen eine optionale Kernelkomponente und konnten über die Kernelkonfigurationsoption CONFIG_SECURITY_CAPABILITIES aktiviert / deaktiviert werden .
Und:
In Kerneln vor Linux 2.6.33 waren Dateifunktionen eine optionale Funktion, die über die Option CONFIG_SECURITY_FILE_CAPABILITIES konfiguriert werden konnte . Seit Linux 2.6.33 wurde die Konfigurationsoption entfernt und Dateifunktionen sind immer Teil des Kernels.
Die älteste gemeinsame Kernel-Version auf Android-Repositories ist 2.6.39, die auch Dateifunktionen unterstützt.
Die Unterstützung von Dateisystemfunktionen auf der Kernelseite muss von einigen OEMs verzögert worden sein , sie mussten jedoch umsteigen, da sonst die Funktionalität beeinträchtigt würde. Zum Beispiel wird surfaceflinger
(Android's Surface Composer ) ohne Dateifunktionen seit Android 7.1 nicht mehr funktionieren.
Magistrale Linux - Kernel 4.3 in in Sep'15 gepatcht wurde für Ambient (Prozess) Fähigkeiten, zurückportiert zu Android - Kernel 3.18 und 4.1 in 2016. So sie unbedingt ein Teil des Kernels ist.
FAZIT:
In Linux-Distributionen nutzen nur wenige Programme Linux-Funktionen. Zwar gibt es pam_cap
, vor allem (oder alle?) Distros noch verwendet set-uid
auf su
, sudo
, ping
, mount
, passwd
und so weiter. Unter Android sind die Funktionen jedoch tief in das Framework und die Kerndienste integriert. Um sie zu entfernen, müssten Hunderte oder möglicherweise Tausende von Zeilen in AOSP- und Kernel-Quellen bearbeitet werden. Es macht keinen Sinn, dass ein OEM (insbesondere Google, das AOSP und einen modifizierten Linux-Kernel für Android entwickelt hat) diese kostenlose Sicherheitsfunktion nicht nutzt, wenn sie im Android-Kernel verfügbar ist. Es handelt sich um eine reine OS-bezogene Funktion, die keine zusätzliche Hardwareunterstützung erfordert. Daher muss jedes Telefon eines beliebigen Herstellers über unterstützte Funktionen verfügen.
FRAGEN:
Kann ich Funktionen für ausführbare Dateien festlegen, ohne die ursprüngliche Kernel-Binärdatei zu ändern?
Ja, das musst du sein.
Die erforderlichen Dinge sind Werkzeuge zum Setzen von Kappen ...
Ich habe mit capsh
, getcap
, setcap
, getpcaps
ab libcap
und netcap
, pscap
aus libcap-ng
ohne Probleme. Ich bevorzuge jedoch Ambient-Funktionen. Diese sind einfach zu konfigurieren und hängen nicht von Dateisystemfunktionen wie Extended Attributes ab, wie dies bei Dateifunktionen der Fall ist. Sie können auch verwendet werden listxattr
, getxattr
, setxattr
und removexattr
Werkzeuge aus xattr_syscall_wrapper
zu manipulieren security.capability
oder anderen xattr direkt.
Aus Ihrem Kommentar:
Ich habe gerade bemerkt, dass der /system/bin/ping
Befehl nicht setuid
auf meinem echten Samsung-Gerät ist, was darauf hindeutetCAP_NET_RAW
Android's Ping hat weder set-uid
noch CAP_NET_RAW
. Es wird ein spezieller Nicht-RAW- Socket erstellt, IPPROTO_ICMP
der - im Gegensatz zu IPPROTO_RAW
- keine Berechtigungen erfordert.
WEITERE REFERENZEN:
Zusätzlich zu mehr als 10 Referenzen, die oben angegeben wurden, sind hier einige andere Teile des AOSP-Codes, der Linux-Fähigkeiten unterstützt und nutzt:
- Kernkomponenten: Bionic
libc
, init
, trusty
(O)
- Externe Komponenten:
libcap
,libcap-ng
- Daemons / Dienstleistungen:
zygote
(gegabelt Anwendungen und system_server
) hostapd
, wpa_supplicant
, dnsmasq
, logd
, netd
( NetLink
Manager, private DNS), debuggerd
(Test), sdcard
Dämon performanced
, incidentd
, mtpd
, traced_probes
(perfetto), racoon
(IPSec), wificond
eine Reihe von HAL Daemons einschließlich rild
.
- Executables:
reboot
(init), dumpstate
, tcpdump
, strace
, iputils
( ping
, traceroute
etc.)
- Minijail: Ein dediziertes Sandbox-Tool und eine Bibliothek, die sich um Funktionen dreht.
adbd
verwendet diese Bibliothek, um Berechtigungen zu löschen.
- SELinux verwendet
capability
class, um Domänen Funktionen zu gewähren / zu verweigern.
Es kommt zu dem Schluss, dass Android in hohem Maße von Linux-Fähigkeiten abhängt, es ist keine wenig genutzte Funktion.
VERBUNDEN: