Sebbene la domanda sia vecchia, continua ad apparire in cima alle domande senza risposta (i miei tag) . Quindi penso che dovrei rispondere a questo :)
IL SUPPORTO DI AOSP PER LE CAPACITÀ:
La domanda riguarda in particolare i dispositivi Google, non ho mai usato un dispositivo Google. Tuttavia, ciò che posso dire con certezza è che le funzionalità di Linux (processo) devono essere state abilitate sulla maggior parte dei dispositivi (se non tutti) in esecuzione su Android 1.6. Il riferimento si trova in init
e system_server
, entrambi i componenti primari di AOSP. In Android 4.2, ad esempio, installd
- un altro componente principale - è stato realizzato per funzionare con funzionalità scartate.
Le funzionalità del filesystem sono state uno dei principali miglioramenti della sicurezza in Android 4.3 che ha rimosso set-uid
/ set-gid
da file binari come run-as
, impostando le funzionalità dei file su di essi. Ciò ha causato cambiamenti rivoluzionari nel percorso di rooting di Android.
Il supporto per le funzionalità Ambient è stato aggiunto in Android 8 che scoraggia l'uso delle funzionalità dei file:
Le funzionalità dei file, a loro volta, presentano un rischio per la sicurezza poiché qualsiasi processo che esegue un file con funzionalità di file sarà in grado di ottenere tali funzionalità.
Molti init
servizi dipendono da essi storaged
, ad esempio , compresi i miei sshd
e i miei dnscrypt-proxy
servizi.
SUPPORTO DEL KERNEL PER LE CAPACITÀ:
Venendo alla parte del kernel, la compilazione del kernel senza funzionalità non è facoltativa:
Dal kernel 2.5.27 al kernel 2.6.26, le funzionalità erano un componente del kernel opzionale e potevano essere abilitate / disabilitate tramite l' opzione di configurazione del kernel CONFIG_SECURITY_CAPABILITIES .
E:
Nei kernel precedenti a Linux 2.6.33, le funzionalità dei file erano una funzione opzionale configurabile tramite l' opzione CONFIG_SECURITY_FILE_CAPABILITIES . Da Linux 2.6.33, l'opzione di configurazione è stata rimossa e le capacità dei file fanno sempre parte del kernel.
La versione più vecchia del kernel comune nei repository Android è 2.6.39 che include anche il supporto per le funzionalità dei file.
Il supporto per le capacità del filesystem sul lato kernel deve essere stato ritardato da alcuni OEM, ma hanno dovuto cambiare, perché altrimenti le funzionalità non funzionerebbero. Ad esempio surfaceflinger
( compositore di superfici Android ) non funzionerà senza funzionalità di file da Android 7.1.
Il kernel 4.3 di Mainline Linux è stato patchato in settembre 15 per le funzionalità Ambient (di processo), trasferito nel kernel Android 3.18 e 4.1 nel 2016. Quindi fanno necessariamente parte del kernel.
CONCLUSIONE:
Nelle distribuzioni Linux, pochissimi programmi fanno uso delle funzionalità di Linux. Anche se non v'è pam_cap
, in gran parte (o tutti?) Distribuzioni usano ancora set-uid
su su
, sudo
, ping
, mount
, passwd
e così via. Ma su Android le funzionalità sono profondamente integrate nel framework e nei servizi di base. La loro rimozione richiederebbe la modifica di centinaia o potrebbe essere migliaia di righe in AOSP e sorgente del kernel. Non ha senso che un OEM (in particolare Google, che ha sviluppato AOSP e modificata del kernel di Linux per Android) non fa uso di questo free-of-costo funzione di sicurezza quando è prontamente disponibile in Android kernel. È una pura funzionalità relativa al sistema operativo, non richiede alcun supporto hardware aggiuntivo. Pertanto, qualsiasi telefono di qualsiasi produttore deve avere funzionalità supportate.
DOMANDE:
sarei in grado di impostare le capacità sugli eseguibili senza modificare il binario del kernel originale?
Sì, devi esserlo.
Le cose richieste sono strumenti per impostare i limiti ...
Sono stato con capsh
, getcap
, setcap
, getpcaps
da libcap
e netcap
, pscap
da libcap-ng
senza problemi. Ma preferisco le capacità Ambient, quelle sono facili da configurare e non dipendono da alcuna funzionalità del filesystem come Attributi estesi come nel caso delle capacità dei file. È inoltre possibile utilizzare listxattr
, getxattr
, setxattr
e removexattr
gli strumenti da xattr_syscall_wrapper
manipolare security.capability
o qualsiasi altro XATTR direttamente.
Dal tuo commento:
Ho appena notato che il /system/bin/ping
comando non è setuid
sul mio vero dispositivo Samsung, suggerendoCAP_NET_RAW
Il ping di Android non ha set-uid
né CAP_NET_RAW
. Crea uno speciale socket non RAWIPPROTO_ICMP
che - a differenza IPPROTO_RAW
- non richiede alcun privilegio.
ULTERIORI RIFERIMENTI:
Oltre ai riferimenti 10+ sopra riportati, ecco alcune altre parti del codice AOSP che supportano e fanno uso delle funzionalità di Linux:
- I componenti principali: Bionic
libc
, init
, trusty
(OS)
- Componenti esterni:
libcap
,libcap-ng
- Demoni / servizi:
zygote
(applicazioni biforcuta e system_server
), hostapd
, wpa_supplicant
, dnsmasq
, logd
, netd
( NetLink
manager, DNS privato), debuggerd
(test), sdcard
daemon, performanced
, incidentd
, mtpd
, traced_probes
(perfetto), racoon
(IPSec), wificond
un certo numero di demoni HAL compreso rild
.
- Eseguibili:
reboot
(init), dumpstate
, tcpdump
, strace
, iputils
( ping
, traceroute
ecc)
- Minijail: uno strumento e una libreria sandbox dedicati dedicati alle funzionalità.
adbd
fa uso di questa libreria per eliminare i privilegi.
- SELinux usa la
capability
classe per concedere / negare le capacità ai domini.
Conclude che Android dipende fortemente dalle funzionalità di Linux, non è una funzionalità poco utilizzata .
RELAZIONATO: