C seguro sin Rust: un criptógrafo escéptico evaluó Fil-C — y, por primera vez en décadas, afirmó: «Se puede confiar en este código»

C seguro sin Rust: un criptógrafo escéptico evaluó Fil-C — y, por primera vez en décadas, afirmó: «Se puede confiar en este código»

Hace 16 años que espera que aparezca una vulnerabilidad en su código, pero está dispuesto a poner sus servidores en manos de un nuevo compilador.

image

Uno de los criptógrafos y programadores más conocidos del mundo, Daniel J. Bernstein, probó el nuevo compilador con seguridad de tipos Fil-C, diseñado para los lenguajes C y C++. Y aunque él mismo describió los resultados simplemente como «notas sobre el uso de Fil-C», su valoración resultó sorprendentemente positiva.

Bernstein señala que el compilador ofrece un alto grado de compatibilidad: la mayoría de bibliotecas y aplicaciones con las que experimentó funcionaron con Fil-C sin cambios. Allí donde se necesitaban ajustes, se pudieron realizar rápidamente. El investigador recopila sus propias observaciones en una página aparte y admite que, ante todo, quiere proteger los servidores que administra, trasladándolos poco a poco a código compilado con el nuevo compilador.

Fil-C es un proyecto que se mencionó por primera vez hace un año. Se basa en Clang, el front-end del compilador LLVM, desarrollado por Apple y ampliamente utilizado en el ecosistema de lenguajes C. La idea es hacer que el habitual C y C++ sean más seguros sin cambiar radicalmente la sintaxis y sin introducir extensiones externas como Rust.

Fil-C no es la única herramienta que intenta resolver el problema. Casi al mismo tiempo apareció otro compilador, TrapC, creado por Robin Rowe. En el nivel de hardware, proyectos como CHERI y OMA (Object Memory Architecture) persiguen objetivos similares. El primero se desarrolla con el apoyo de la Universidad de Cambridge e introduce extensiones en la arquitectura del procesador para prevenir errores de acceso a la memoria. El segundo surgió de la tesis doctoral de Ed Natting, dedicada a un recolector de basura por hardware, y recientemente el propio autor lo comparó con CHERI en un blog bajo el título Two Paths to Memory Safety.

La seguridad de la memoria sigue siendo uno de los temas más acuciantes en la industria. Miles de millones de líneas de código en C, escritas durante décadas, contienen vulnerabilidades que obligan a las empresas a publicar actualizaciones sin fin. Por eso la aparición de herramientas como Fil-C despierta un gran interés: son capaces de detectar clases enteras de errores —desde desbordamientos de arreglos hasta el uso de memoria ya liberada.

El autor de Fil-C, el ingeniero Philip Pizlo, ha explicado en varias ocasiones en qué se diferencia su enfoque de la competencia. A diferencia de CHERI, Fil-C no cambia el tamaño del puntero (sizeof(void*)), por lo que ofrece mejor compatibilidad con programas existentes. Por ejemplo, se consiguió ejecutar el intérprete CPython con Fil-C sin modificaciones, algo que aún no es posible en la plataforma CHERI. Además, el compilador maneja correctamente los casos de acceso repetido a memoria ya liberada —uno de los errores más peligrosos en código C.

Por supuesto, Fil-C no está exento de inconvenientes. Los programas compilados con él funcionan más lentos que los habituales, y la compatibilidad binaria con el C clásico (que el propio Pizlo llama en broma Yolo-C) no es completa. No es posible simplemente recompilar un sistema operativo entero y ejecutarlo sin adaptación, pero se pueden hacer más seguros componentes aislados de grandes proyectos sin reescribirlos en Rust o Zig. En ese sentido, Fil-C devuelve competitividad al viejo C en la era de los lenguajes con protección de memoria integrada.

Lo que hace la reseña de Bernstein especialmente relevante es su propia reputación. Autor de algunas de las implementaciones de servicios de red más seguras, desde 2009 ofrece mil dólares a cualquiera que encuentre una vulnerabilidad en su servidor DNS djbdns o en su agente de correo qmail. Dieciséis años después, los premios siguen sin reclamarse. Ya en los años 1990 entró en la historia de la criptografía con sus trabajos sobre algoritmos y bibliotecas de seguridad, y entre sus colegas obtuvo el apodo abreviado DJB, convirtiéndose en una de las leyendas de tres letras del mundo hacker —junto a RMS, ESR y JWZ.

Por eso su opinión sobre el nuevo compilador se percibe no como una reseña particular, sino como una señal de confianza por parte de una persona que ha dedicado toda su carrera a buscar errores y vulnerabilidades. Y si incluso DJB está dispuesto a trasladar sus sistemas a Fil-C, ese proyecto tiene claramente la posibilidad de convertirse en un hito importante en la historia de los lenguajes C.

Las huellas digitales son tu debilidad, y los hackers lo saben

¡Suscríbete y descubre cómo borrarlas!