Lanzan la primera versión estable de sudo-rs, una implementación de sudo con seguridad de memoria
(memorysafety.org)- sudo-rs, una nueva implementación en Rust de sudo usada para cambiar límites de privilegios, fue publicada en su primera versión estable
- Se estima que cerca de un tercio de los bugs de seguridad del sudo original estaban relacionados con problemas de gestión de memoria, y ese fue el motivo principal detrás de la reescritura en Rust
- sudo-rs reduce la superficie de ataque al excluir funciones menos utilizadas, y su suite de pruebas también sirvió para encontrar bugs en el sudo original
- Wolfi Linux OS ya incluye sudo-rs, y Chainguard considera que mejorar herramientas de seguridad críticas puede influir en toda la industria
- Está previsto que una auditoría de seguridad externa comience en septiembre de 2023, y después el trabajo avanzará hacia el Milestone 4, centrado en funciones empresariales
sudo-rs reimplementado en Rust
- Prossimo publicó la primera versión estable de sudo-rs
- sudo-rs es un proyecto que reimplementa en Rust la utilidad sudo, usada comúnmente en Linux para cruzar el límite de privilegios entre una cuenta de usuario y una cuenta de administrador
- El proyecto sudo-rs está enfocado en mejorar la seguridad frente al sudo original
- Usa Rust para garantizar seguridad de memoria
- El punto de partida fue la estimación de que cerca de un tercio de los bugs de seguridad del sudo original se debían a problemas de gestión de memoria
- Reduce la superficie de ataque al excluir funciones menos comunes
- Se desarrolló una amplia suite de pruebas, y estas pruebas también encontraron bugs en el sudo original
Adopción y próximos pasos
- Wolfi Linux OS ya incluye sudo-rs
- Dan Lorenc, CEO y cofundador de Chainguard, considera que la seguridad de memoria fue la máxima prioridad al crear Wolfi, y que mejorar una herramienta de seguridad crítica como sudo puede tener un gran impacto en toda la industria
- sudo-rs fue desarrollado por un equipo conjunto de Tweede Golf y Ferrous Systems bajo contrato con Prossimo
- El proyecto comenzó en diciembre de 2022, y está previsto que una auditoría de seguridad externa del código de sudo-rs comience en septiembre de 2023
- Después de la auditoría, el equipo pasará al Milestone 4 del plan de trabajo, una etapa enfocada en funciones empresariales
- La utilidad sudo original basada en C ha sido mantenida durante mucho tiempo por Todd C. Miller, quien también aportó asesoría para la implementación de sudo-rs
- NLnet Foundation financió la auditoría de sudo-rs, y Amazon Web Services apoya este trabajo y la transición hacia software con seguridad de memoria
1 comentarios
Opiniones de Hacker News
Como uno de los desarrolladores originales de sudo (https://en.wikipedia.org/wiki/Sudo), he visto durante los últimos 43 años cómo se ha reescrito casi por completo y se le han corregido errores continuamente.
Podría decirse que, entre los comandos de UNIX, es el que más revisión ha recibido por fallas de seguridad, y las fallas encontradas se han ido corrigiendo.
Me pregunto si es posible que un solo equipo de desarrollo reimplemente por completo una herramienta que han revisado miles de desarrolladores y expertos en seguridad sin introducir ni uno o dos bugs nuevos.
Me pregunto si el lenguaje Rust tiene algo que elimine mágicamente toda posibilidad de introducir bugs.
Desde el lado de quienes hacemos sudo-rs, nunca hemos intentado invalidar el trabajo existente, y somos muy conscientes de que, sobre todo al principio, nuestra implementación no estará libre de bugs.
En lo personal, al crear una versión en Rust pude abordar áreas que normalmente me habría costado tocar, porque no tengo mucha confianza en poder escribir código C relativamente seguro.
Como mínimo, gracias a este trabajo ya encontramos algunos bugs en el sudo existente, y aunque se haya venido corrigiendo durante 43 años, mientras cambie el entorno que lo rodea es difícil que un software así llegue a estar completamente libre de bugs.
Mientras colaboremos y aprendamos del trabajo y los errores de los demás, no tiene nada de malo que haya algunas alternativas.
Al hacer RiiR, lo mejor que puede hacer un desarrollador es seguir buenas prácticas y aprender de errores pasados.
En 43 años se ha avanzado mucho, y solo con abandonar el manejo de cadenas de C se eliminan innumerables bugs incluso antes de hablar de seguridad de memoria.
Hoy, quien quiera crear un reemplazo seguro de sudo podría hacerlo mucho mejor que antes incluso usando solo C, y el proyecto OpenBSD lo demuestra bastante bien.
Si a nivel de lenguaje se eliminan muchas de las aristas peligrosas que el código de OpenBSD evita, se parte con ventaja, pero aun así se necesita mucha atención y experiencia, y un lenguaje de programación no puede reemplazar eso.
Como mínimo vale la pena revisarlo seriamente, aunque me parece que por ahora no debería distribuirse como opción predeterminada.
Hoy eso está en el plan de estudios de secundaria; si lo apruebas puedes desempeñarte bastante bien, y con un poco más de esfuerzo puedes manejar muy bien aquello que a ellos les llevó toda una vida.
Esto se debe a que podemos pararnos sobre hombros de gigantes, contamos con retrospectiva y mejores tecnologías y métodos de aprendizaje, y no necesitamos repetir todos sus errores.
Si el desarrollador original reescribiera sudo desde cero hoy, con su experiencia y conocimientos actuales, probablemente lo haría en mucho menos tiempo y de forma más limpia y simple.
No se trata de menospreciar el esfuerzo y la experiencia existentes, sino de decir que no es imposible convertir esa experiencia en algo mejor en menos tiempo.
Aun así, al reemplazar sudo u otras herramientas escritas en C, vulnerabilidades como punteros nulos o mal uso de buffers fácilmente representan el 50% del total.
Creo que los dos puntos que destaca este proyecto suelen pasarse por alto incluso más que el uso de Rust.
Reducir la superficie de ataque eliminando funciones poco usadas, y desarrollar un conjunto amplio de pruebas que incluso ha encontrado bugs en el sudo existente.
Al escribir código crítico para la seguridad, estos aspectos son incluso más importantes que reescribirlo en Rust.
Demostrarlo con Coq, un sistema de gestión de pruebas formales: https://coq.inria.fr/
Para casos reales, se puede ver https://aws.amazon.com/security/provable-security/, y también vale la pena revisar la verificación asistida por computadora (CAV).
Suponiendo que el objetivo de este proyecto sea reemplazar a sudo, me preocupa un poco pasar por alto lo de “excluir funciones menos usadas”
Importa cuáles son esas funciones, qué tan poco se usan y de qué manera falla en configuraciones que las usan
Edición: parece que algunas limitaciones están resumidas en el README de GitHub, https://github.com/memorysafety/sudo-rs#differences-from-ori...
sudoeditosudo -eSe usa mucho para editar archivos dentro de /etc o archivos para los que mi usuario no tiene permisos; esta bandera primero copia el archivo a una ubicación temporal donde mi usuario pueda editarlo, y luego ejecuta el editor de texto con los permisos de mi usuario, sin privilegios de sudo
El editor se define con la variable de entorno
$SUDO_EDITORy, después de cerrarlo, solo si hubo cambios vuelve a copiar el archivo con los permisos originalesLo bueno es que ejecuta el editor como mi usuario, no como root, así que carga mi configuración y mis plugins de usuario
make me a sandwich(https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)En el sudo normal se pueden administrar los privilegios de sudo de toda la red desde una configuración LDAP central, y también crear de forma centralizada reglas limitadas por tiempo, host, usuario y comando
Sin la posibilidad de que un simple error de sintaxis arruine toda la configuración; en ese caso, simplemente se ignora esa regla
Seguramente habrá muy buena documentación técnica, y esto es un lanzamiento promocional, así que no creo que sea el lugar para buscar una lista de funciones faltantes
Al ver la diferencia entre
Apache-2.0+MITyGPL-2.0, se puede obtener un su/sudo-rs con seguridad de memoria, pero quien lo distribuya en forma binaria no tiene la obligación de publicar el código fuente usado para compilarlo ni posibles modificacionesMe preocupa mucho que la tendencia a desplazar herramientas GPL con reescrituras en Rust bajo licencias MIT/Apache algún día termine llevando a un Linux propietario, pero sudo originalmente no es GPL
Es una licencia estilo ISC/MIT [1]
Justamente por el motivo mencionado arriba, y lo dejo para subrayar ese problema
su sí parece ser GPL
[0]: https://www.sudo.ws/about/license/
Tienes la libertad de no usar una distribución así
Desde el punto de vista de la seguridad, un actor malicioso también podría mostrar un código fuente distinto del binario que distribuye
Lo mismo da si es GPL o no
En el ámbito de los sistemas operativos libres y de código abierto tipo UNIX para IoT, todos los candidatos, incluido ZephyrOS patrocinado por la Linux Foundation, usan una mezcla de licencias Apache, MIT y BSD
Cuando desaparezca la generación GPL, no tardará en surgir un sistema operativo tipo UNIX con una licencia más atractiva para las grandes empresas como otra alternativa de entidad mantenedora del kernel Linux
Sería interesante ver una derivada de Debian que combine esto con GNU Coreutils implementado en Rust
Podría traer grandes beneficios en seguridad de memoria y rendimiento
[1] https://github.com/uutils/coreutils
Al menos no hará falta implementar un compilador de C
¿Es como sacarle brillo a una mierda?
Claro que una mejor reimplementación está bien, pero ¿no les sorprendió leer las funciones raras de sudo?
Incluso las partes que parecen normales son muy extrañas y sutiles, y por eso son vulnerables
Quien use sudo “a fondo” haría bien en pensar si hay otra forma
Estaría bueno tener una bandera o herramienta de validación/verificación que haga una prueba con la configuración actual de sudo y muestre qué partes no soporta sudo-rs
En proyectos así hace falta un asistente de portabilidad para que la transición sea fluida
Si no recuerdo mal, las vulnerabilidades recientes de sudo fueron todas errores de lógica, no problemas de seguridad de memoria
Reescribirlo está bien, pero no hay que fingir que no pueden introducirse nuevos bugs por malentender cómo funciona algo o por un simple error común
2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
Veo muchas afirmaciones sobre seguridad de memoria, pero no parece que este proyecto diga que otros tipos de bugs queden eliminados con certeza
Reducir la superficie de ataque mediante comprobaciones estáticas parece una mejor apuesta a largo plazo
doas es una herramienta mucho más simple que hace lo mismo
No entiendo muy bien por qué no se usa más
doas ocupa 43184 bytes y hace todo lo que necesito
Ese exploit de sudo fue una llamada de atención
Si todavía no te has cambiado, vale la pena probar opendoas (paquete de Debian)
No está protegido contra ataques de tty pushback: https://github.com/Duncaen/OpenDoas/issues/106
Es un problema de seguridad pendiente bastante serio