Si rooteo sin sistema (no se realizó ninguna modificación en la /system
partición) de un dispositivo Nexus, ¿podría establecer capacidades en ejecutables sin cambiar el binario original del núcleo?
A menudo quiero administrar archivos sin restricciones desde mi terminal (requiere CAP_DAC_READ_SEARCH
) . Sin embargo, tampoco quiero usar el superusuario.
Las cosas requeridas son herramientas para establecer límites a lo largo del soporte del kernel para usarlas (no depende de otras cosas del espacio del usuario) .
El problema es que no tengo ese dispositivo. Así que no puedo decir si funcionaría en alguno de ellos Nexus 5X Nexus 6P Nexus 9 Pixel C
.
rooting
root-access
security
file-system
kernel
usuario2284570
fuente
fuente
/system/bin/ping
comando no está configurado en mi dispositivo Samsung real, lo que sugiereCAP_NET_RAW
. Sin embargo, no rootearé un dispositivo real y no sé qué herramienta puedo usar para ver la información relevante, por lo que no puedo verificarlo.Respuestas:
Aunque la pregunta es antigua, sigue apareciendo sobre las preguntas sin respuesta (mis etiquetas) . Así que creo que debería responder esto :)
APOYO DE AOSP A LAS CAPACIDADES:
La pregunta es específicamente sobre los dispositivos de Google, nunca he usado un dispositivo de Google. Sin embargo, lo que puedo decir con certeza es que las capacidades de Linux (proceso) deben haberse habilitado en la mayoría de los dispositivos (si no todos) que se ejecutan tan bajo como Android 1.6. Se encuentra referencia en
init
ysystem_server
, ambos componentes muy primarios de AOSP. En Android 4.2, por ejemplo,installd
otro componente central, se hizo funcionar con capacidades caídas.Las capacidades del sistema de archivos fueron una de las principales mejoras de seguridad en Android 4.3 que eliminaron
set-uid
/set-gid
de los archivos binariosrun-as
, como configurar las capacidades de los archivos en ellos. Esto causó cambios revolucionarios en el viaje de rooteo de Android.Se agregó soporte para capacidades ambientales en Android 8, lo que desalienta el uso de capacidades de archivo:
Muchos
init
servicios dependen de ellosstoraged
, por ejemplo , incluido el míosshd
y losdnscrypt-proxy
servicios.APOYO DE KERNEL A LAS CAPACIDADES:
Llegando a la parte del kernel, construir kernel sin capacidades no es opcional:
Y:
La versión de kernel común más antigua en los repositorios de Android es 2.6.39, que también incluye soporte para capacidades de archivo.
El soporte para las capacidades del sistema de archivos en el lado del kernel debe haberse retrasado por parte de algunos OEM pero tuvieron que cambiar, porque de lo contrario las funcionalidades se romperían. Por ejemplo
surfaceflinger
(el compositor de superficie de Android ) no funcionará sin capacidades de archivo desde Android 7.1.Mainline Linux kernel 4.3 fue parcheado en Sep'15 para capacidades Ambient (proceso), retroportado a Android kernel 3.18 y 4.1 en 2016. Por lo tanto, son necesariamente una parte del kernel.
CONCLUSIÓN:
En las distribuciones de Linux, muy pocos programas hacen uso de las capacidades de Linux. Aunque no es
pam_cap
, en su mayoría (o todos)? Distribuciones siguen utilizandoset-uid
ensu
,sudo
,ping
,mount
,passwd
y así sucesivamente. Pero las capacidades de Android están profundamente integradas en el marco y los servicios básicos. Eliminarlos requeriría editar cientos o pueden ser miles de líneas en AOSP y en la fuente del núcleo. No tiene sentido que un OEM (especialmente Google, que desarrolló y modificó AOSP núcleo de Linux para Android) no hace uso de esta libre de costo característica de seguridad cuando está fácilmente disponible en Android kernel. Es una característica pura relacionada con el sistema operativo, no requiere ningún soporte de hardware adicional. Por lo tanto, cualquier teléfono de cualquier fabricante debe tener capacidades compatibles.PREGUNTAS
Sí, debes serlo.
He estado usando
capsh
,getcap
,setcap
,getpcaps
delibcap
ynetcap
,pscap
a partirlibcap-ng
sin ningún problema. Pero prefiero las capacidades ambientales, que son fáciles de configurar y no dependen de ninguna función del sistema de archivos, como los atributos extendidos, como en el caso de las capacidades de archivo. También se puede utilizarlistxattr
,getxattr
,setxattr
yremovexattr
herramientas dexattr_syscall_wrapper
manipularsecurity.capability
o de cualquier otra xattr directamente.De tu comentario:
El ping de Android no tiene
set-uid
niCAP_NET_RAW
. Crea un socket especial no RAWIPPROTO_ICMP
que, a diferencia deIPPROTO_RAW
, no requiere ningún privilegio.MÁS REFERENCIAS:
Además de más de 10 referencias dadas anteriormente, aquí hay algunas otras partes del código AOSP que admiten y hacen uso de las capacidades de Linux:
libc
,init
,trusty
(SO)libcap
,libcap-ng
zygote
(aplicaciones bifurcadas ysystem_server
),hostapd
,wpa_supplicant
,dnsmasq
,logd
,netd
(NetLink
gerente, DNS privada),debuggerd
(prueba),sdcard
demonio,performanced
,incidentd
,mtpd
,traced_probes
(perfetto),racoon
(IPSec),wificond
un número de demonios HAL incluidosrild
.reboot
(init),dumpstate
,tcpdump
,strace
,iputils
(ping
,traceroute
etc.)adbd
hace uso de esta biblioteca para eliminar privilegios.capability
clase para otorgar / negar capacidades a los dominios.Concluye que Android depende en gran medida de las capacidades de Linux, no es una característica poco utilizada .
RELACIONADO:
fuente