LK-reducer, una simple herramienta para optimizar el Kernel de Android
Android es el sistema operativo más utilizado en todo tipo de dispositivos móviles como smartphones y tablets. Este sistema operativo utiliza como base, o núcleo, un Kernel Linux, siendo este crucial para la seguridad al ser el responsable de controlar el acceso a todo el sistema. Por ello, es de vital importancia auditar y optimizar al máximo este núcleo de manera que reduzca al mínimo la probabilidad de que un fallo pueda brindar permisos especiales a un atacante que pueda salir del sandbox del sistema y tener acceso completo a todos los componentes del sistema, y esto es lo que busca evitar LK-reducer.
No es la primera vez que un fallo en el Kernel permite a usuarios y a procesos no autorizados conseguir permisos administrativos en el sistema, salirse del espacio aislado y seguro e incluso acceder directamente al hardware del dispositivo. En los últimos años, el Kernel de Linux ha crecido considerablemente, llegando a ocupar más de 700 megas, por lo que las probabilidades de que se descubra un error en los millones y millones de líneas de código de este son muy elevadas.
Linux Kernel Reducer, conocida como LK-reducer, es una herramienta diseñada para ayudarnos a auditar la seguridad del Kernel Linux cuando lo compilamos para Android evitando compilar cualquier módulo innecesario para este sistema operativo, reduciendo así tanto el tamaño final del Kernel (mejorando, además, su rendimiento) y la probabilidad de que pueda existir algún fallo de seguridad en el mismo.
LK-reducer hace el Kernel de Android 600 megas más pequeño
A grandes rasgos, esta herramienta se encarga de eliminar todo lo innecesario del kernel y lo compila con lo mínimo necesario (funciones, librerías, controladores, etc) para funcionar en un smartphone Android. De esta manera, con LK-reducer es posible reducir el tamaño del kernel completo Linux, que son 729 megas, en tan solo 132 megas, un kernel totalmente optimizado para Android que mejora tanto la seguridad como el rendimiento del dispositivo. Al fin y al cabo, este es el concepto en el que se basan otros sistemas como macOS o iOS, un kernel con lo estrictamente necesario para funcionar en un hardware determinado y nada más.
Si queremos probar esta herramienta, podemos descargarla de forma totalmente gratuita desde GitHub, encontrando en dicho portal, además, una documentación que nos indicará cómo utilizarla de la mejor forma posible.
Todos los cambios se van registrando en el terminal del compilador, por lo que analizándolo podemos ver lo que se ha incluido, o eliminado, en una pantalla que será similar a la siguiente.
dev:0:msm$ du -hs --exclude .git .
750M .
dev:0:msm$ lk-reducer
dropping you into an interactive shell now. compile the project, then exit the shell.
dev:0:msm$ make marlin_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
SHIPPED scripts/kconfig/zconf.hash.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
drivers/soc/qcom/Kconfig:381:warning: choice value used outside its choice group
drivers/soc/qcom/Kconfig:386:warning: choice value used outside its choice group
#
# configuration written to .config
#
dev:0:msm$ make -j30 > ../msm-marlin-make.out 2>&1
dev:0:msm$ make mrproper
CLEAN .
CLEAN arch/arm64/kernel/vdso
CLEAN arch/arm64/kernel
CLEAN crypto/asymmetric_keys
CLEAN kernel/time
CLEAN kernel
CLEAN lib
CLEAN net/wireless
CLEAN security/selinux
CLEAN usr
CLEAN arch/arm64/boot/dts/htc
CLEAN arch/arm64/boot
CLEAN .tmp_versions
CLEAN scripts/basic
CLEAN scripts/dtc
CLEAN scripts/kconfig
CLEAN scripts/mod
CLEAN scripts/selinux/genheaders
CLEAN scripts/selinux/mdp
CLEAN scripts
CLEAN include/config include/generated arch/arm64/include/generated
CLEAN .config .version include/generated/uapi/linux/version.h Module.symvers
dev:0:msm$ exit
exit
processing remaining events...
inotify event collection phase is over, dumping results to "lk-reducer.out"...
cleanup complete
dev:0:msm$ grep -h ^A lk-reducer.out | sort -u | cut -c 3- | grep -v '\./\.git\/' > lk-reducer-keep.out
dev:0:msm$ mkdir ../msm-marlin-reduced
dev:0:msm$ tar cf - -T lk-reducer-keep.out | tar xf - -C ../msm-marlin-reduced/
dev:0:msm$ du -hs ../msm-marlin-reduced/
132M ../msm-marlin-reduced/
Esta herramienta está pensada principalmente para desarrolladores de Android bastante avanzados, ya que debe controlarse muy de cerca porque al eliminar partes de código, en teoría, innecesarias, podemos hacer que algunas funciones u opciones de configuración sí dependan en realidad de ellas y tengamos problemas.
¿Qué te parece LK-reducer? ¿Crees que, aunque Android esté basado en Linux, debería contar con un Kernel especial optimizado y con una seguridad reforzada?
Via: www.redeszone.net
