5 puntos por GN⁺ 2024-09-27 | 1 comentarios | Compartir por WhatsApp

Eliminar la causa raíz de las vulnerabilidades de seguridad de memoria

Un resultado paradójico

  • Cuando crece una base de código escrita en lenguajes sin seguridad de memoria, migrar las nuevas funcionalidades a lenguajes con seguridad de memoria reduce de forma significativa las vulnerabilidades de seguridad de memoria
  • Esto se debe a que las vulnerabilidades disminuyen de manera exponencial con el tiempo

Explicación matemática

  • La vida útil de las vulnerabilidades sigue una distribución exponencial
  • Las vulnerabilidades se generan principalmente en el código nuevo, y con el tiempo el código se vuelve más seguro
  • La densidad de vulnerabilidades en código con 5 años de antigüedad es entre 3.4 y 7.4 veces menor que en el código nuevo

Caso real en Android

  • Desde 2019, el equipo de Android comenzó a trasladar el nuevo desarrollo a lenguajes con seguridad de memoria
  • En 2024, las vulnerabilidades de seguridad de memoria se redujeron de 76% a 24%
  • A medida que disminuyeron las vulnerabilidades de seguridad de memoria, también bajó el riesgo total de seguridad

Evolución de la estrategia de seguridad de memoria

  • 1.ª generación: parches reactivos - un enfoque de encontrar y corregir vulnerabilidades
  • 2.ª generación: mitigación preventiva - un enfoque para dificultar la explotación de vulnerabilidades
  • 3.ª generación: detección preventiva de vulnerabilidades - un enfoque para encontrar vulnerabilidades por adelantado
  • 4.ª generación: prevención de alta confianza - un enfoque para prevenir que las vulnerabilidades ocurran cambiando a lenguajes con seguridad de memoria

Ventajas de la prevención de alta confianza

  • Rompe la competencia interminable entre defensores y atacantes
  • Mejora la seguridad y reduce costos mediante lenguajes con seguridad de memoria
  • Aumenta la corrección del código y la productividad de los desarrolladores

De las lecciones a la práctica

  • No es necesario desechar ni reescribir todo el código existente sin seguridad de memoria
  • Mejorar la interoperabilidad acelera la transición hacia lenguajes con seguridad de memoria
  • Desarrollo de herramientas para mejorar la interoperabilidad entre Rust y C++, y entre Rust y Kotlin

El papel de las generaciones anteriores

  • Uso selectivo de mitigación preventiva y detección
  • A medida que se avanza hacia código con seguridad de memoria, disminuye la necesidad de mitigación y detección

Conclusión

  • Usar lenguajes con seguridad de memoria en el código nuevo hace que las vulnerabilidades disminuyan de forma exponencial
  • Más de 6 años de resultados consistentes en Android demuestran la efectividad de este enfoque

Resumen de GN⁺

  • Es importante migrar a lenguajes con seguridad de memoria para reducir las vulnerabilidades de seguridad de memoria
  • El caso del equipo de Android muestra una gran reducción en las vulnerabilidades de seguridad de memoria
  • Mejorar la interoperabilidad es más práctico que reescribir por completo el código existente
  • Usar lenguajes con seguridad de memoria como Rust puede mejorar al mismo tiempo la seguridad y la productividad

1 comentarios

 
GN⁺ 2024-09-27
Comentarios de Hacker News
  • Cambiar el desarrollo nuevo a lenguajes con seguridad de memoria puede aportar una mejora significativa
    • Es mucho más fácil y barato que portar todo
  • El gráfico del artículo es claro y conciso
    • Una selección cuidadosa de datos y del etiquetado puede transmitir fácilmente la idea deseada
  • Las vulnerabilidades disminuyen exponencialmente
    • Es importante enfocarse en el código nuevo
    • Los proyectos indiscriminados de RiiR son un desperdicio de recursos
    • La estrategia recomendada por expertos en Rust es la más efectiva para minimizar las vulnerabilidades de memoria
  • El equipo de Android observó que la tasa de rollback de cambios en Rust es menos de la mitad que en C++
  • Hay una correlación entre el código nuevo y las vulnerabilidades de memoria
    • El código relacionado con nuevas funciones concentra más vulnerabilidades
    • En el código antiguo, los casos límite se descubren mediante el uso real
  • Es difícil afirmar categóricamente que el código nuevo cause vulnerabilidades de memoria
    • Existen vulnerabilidades de alto impacto como el bug Heartbleed
  • Las vulnerabilidades disminuyen exponencialmente
    • Dejar de agregar nuevas funciones podría ser mejor para la seguridad
    • Es posible que Windows LTSC sea la versión más segura
  • La programación segura mejora la corrección del código y la productividad de los desarrolladores
    • Adelanta el descubrimiento de bugs a antes del check-in del código
    • El equipo de Android observó que la tasa de rollback de cambios en Rust es menos de la mitad que en C++
  • Después de descubrir Rust, recuperé la pasión por programar
  • Entre los lenguajes con seguridad de memoria (MSL), solo se menciona Rust
    • También se mencionó Kotlin, pero sus funciones de seguridad de memoria no son tan sólidas como las de Rust
  • La vida útil de las vulnerabilidades sigue una distribución exponencial
    • Garantizar la seguridad de memoria en el código nuevo tiene muchísimo valor
    • También es útil incluso en bases de código legacy a gran escala
  • Puede que el código antiguo no haya sido revisado lo suficiente
    • Reviso con más frecuencia los logs de commits recientes
  • Diferencias en los lenguajes usados para escribir código en Mac y Windows
    • Mac usa Swift, que es seguro en memoria, mientras que Windows usa principalmente C o C++
  • Cuanto más raras se vuelven las vulnerabilidades, más valiosas son
    • Es probable que las vulnerabilidades restantes sean usadas por actores estatales contra objetivos de alto valor
    • Podrían necesitarse funciones como Lockdown Mode de iOS
    • Los usuarios conscientes de la seguridad marcan una casilla de seguridad a cambio de una menor performance
    • Detecta ataques y los envía al equipo de seguridad para su análisis
    • Envía alertas al usuario para informarle que se detectó un ataque
    • En lugar de monitorear pasivamente la actividad del usuario, se le notifica cuando se detecta un ataque