SCW 아이콘
영웅 배경, 구분선 없음
블로그

Rust es el lenguaje de programación más querido por quinta vez. ¿Es nuestro nuevo salvador de seguridad?

마티아스 마두, Ph.
게시일 : 2020년 6월 18일
마지막 업데이트: 2026년 3월 6일

Durante los últimos años, parece que los ingenieros de software de todo el mundo no se cansan de usar Rust para programar. Este lenguaje de programación de sistemas relativamente nuevo, producido por Mozilla, ha conquistado los corazones de la comunidad de Stack Overflow y, como cohorte, es muy poco probable que sufra a los tontos, cuando votan por algo, el»lenguaje de programación más querido«cinco años seguidos, es hora de que todos nos sentemos y tomemos nota.

El lenguaje de programación Rust incorpora elementos conocidos y funcionales de los lenguajes de uso común, siguiendo una filosofía diferente que elimina la complejidad, al tiempo que introduce rendimiento y seguridad. Es una curva de aprendizaje y muchos desarrolladores no tienen la oportunidad de jugar mucho con ella - solo el 5,1% de los encuestados en Stack Overflow lo usaba comúnmente. Sin embargo, aparte de eso, no se puede negar que es un lenguaje interesante y con mucha más potencia de seguridad que sus predecesores, como C y C++. La adopción masiva va a requerir algunos cambios, tanto de comportamiento como tecnológicos... pero, en este momento, sigue captando la atención de los desarrolladores a nivel teórico.

... pero espera, necesitamos arrojar luz sobre una cosa más: es importante tener en cuenta que Rust es un lenguaje de programación que prioriza la seguridad de la memoria y la erradicación de los errores de seguridad relacionados con problemas comunes de administración de la memoria. Estos problemas son graves (y, sin duda, causan más de un par de problemas al equipo de AppSec), pero no son los únicos desafíos de codificación segura a los que nos enfrentamos.

¿Qué es lo que previene la oxidación exactamente? ¿Y en qué aspectos del panorama de la seguridad aún estamos expuestos? Analicemos el último unicornio de la programación:

La nueva frontera de la programación de sistemas modernos y seguros para la memoria

El equipo de investigación y desarrollo de Mozilla ha trabajado en algunos proyectos increíbles, e invertir en la programación de Rust como pionero del código abierto no es una excepción. Sus vídeo introductorio proporciona una idea de su ética, con el tema clave muy claro: el enfoque actual de la seguridad del software es defectuoso y Rust está diseñado para resolver gran parte de ese problema.

Parece demasiado simplista, sobre todo porque nos enfrentamos a enormes filtraciones de datos cada dos días, al igual que el reciente y terrible error denunciado por easyJet. Millones de registros de datos se ven comprometidos con frecuencia, casi siempre debido a una vulnerabilidad de una aplicación web, mala configuración de seguridad, o ataque de suplantación de identidad, y lenguajes como C++ existen desde hace décadas. Sin embargo, este tiempo no ha sido suficiente para que los desarrolladores los dominen hasta el punto de implementar las mejores prácticas de codificación segura. ¿Por qué debería ser diferente Rust? Ya han aparecido nuevos lenguajes, y no es que hayan encontrado una forma de erradicar las vulnerabilidades más comunes o de garantizar que cualquier código escrito sea mágicamente perfecto cuando se compila.

Por muy simple que sea el concepto, a veces son las respuestas simples las que superan las preguntas complejas. Rust es, en todo el sentido de la palabra, una revolución en la programación de sistemas con memoria segura que cumple sus promesas de muchas maneras... y, sin duda, salva el trabajo de los desarrolladores, que son propensos a introducir errores que pueden causar grandes problemas si no se detectan. Java, C, C++ e incluso lenguajes más nuevos, como Kotlin y Golang, siguen siendo bastante implacables para los desarrolladores que no se preocupan por la seguridad. Con ellos, no hay advertencias ni señales particulares de que la increíble función que se acaba de compilar tenga a un gremlin de la seguridad escondido bajo el capó.

Entonces, profundicemos más:

¿Qué hace que Rust sea tan seguro?

Por lo general, un desarrollador tiene el objetivo principal de crear funciones, garantizar que sean funcionales y fáciles de usar, tal vez incluso motivos de orgullo de los que estarían encantados de mostrar en su currículum. Es totalmente normal que un desarrollador cree un software excelente, lo publique y pase al siguiente gran proyecto. En este punto, los equipos de seguridad comprueban si hay vulnerabilidades y, si las encuentran, su aplicación «finalizada» podría ser enviada a su equipo para corregirla. El problema puede ser simple o puede estar fuera del alcance razonable para que un desarrollador lo solucione.

El problema es que, a primera vista, los errores de seguridad no eran evidentes en absoluto y, si el escaneo, las pruebas y la revisión manual del código no los detectan, un atacante podría aprovechar esa pequeña oportunidad para aprovechar el error.

Ahora, Rust busca evitar que muchas vulnerabilidades lleguen al código desde el principio: simplemente no se compilará si hay errores de sintaxis u otros errores de seguridad de la memoria que causan problemas de producción a lo largo del SDLC. Se trata de una programación diseñada para proteger la memoria, lo que garantiza que no haya acceso a memoria no válida (sin importar cómo se ejecute el software). ¿Y con El 70% de todos los errores de seguridad son el resultado de problemas relacionados con la administración de la memoria, es una gran hazaña.

El óxido marcará y evitará:

  • Desbordamiento de búfer
  • Úselo después de que esté gratis
  • Doble gratis
  • Desreferencia de puntero nulo
  • Uso de memoria no inicializada

Si comparamos un fragmento de código de Rust con C++, se hará evidente que uno es seguro por defecto. Mira este ejemplo de un error de desbordamiento de búfer:

#include<iostream></iostream>
#include<string.h></string.h>
int main (void) {
char a [3] = «12";
char b [4] = «123";
strcpy (a, b);//desbordamiento de búfer cuando len of b es mayor que a
std: :cout << a << «;" << b << std: :endl;
}

대.

pub fan main () {
deje que sea: [char; 2] = [1, 2];
sea b: [char; 3] = [1, 2, 3];
a.copiar_desde_rebanada (&b);
}
러스트 코드 스니펫 비교

Rust lanza una advertencia de seguridad y entra en pánico al llegar a la función copy_from_slice en tiempo de ejecución para evitar el desbordamiento del búfer, pero no en tiempo de compilación.

En ese sentido, es en gran medida uno de los lenguajes de «inicio a la izquierda». Resaltará los errores y forzará a los desarrolladores a aprender a escribir código para evitar introducir errores de seguridad relacionados con la memoria, por lo que cumplir con los plazos depende de que el programador preste atención, corrija y se mantenga fiel a la ruta de entrega.

El enfoque de este lenguaje parece simple, pero habría sido una hazaña increíble hacerlo funcionar con esta poderosa lógica, y lo hace con el ejemplo. Rust es, desde el punto de vista de la seguridad, un gran avance... si tan solo lo usaran más personas. Empresas como Dropbox son pioneras en su uso a gran escala corporativa, y es fantástico comprobarlo. Sin embargo, hay más consideraciones antes de llegar a la conclusión de que lo único que nos impide lograr un futuro más seguro es una cuestión de adopción.

El ajuste de cuentas de Rust.

Hay un par de problemas pequeños (bueno, grandes), a saber, que la programación en Rust tiene más flexibilidad para introducir errores de lo que parece. Lo hará no corrija las 10 principales vulnerabilidades más importantes de OWASP que siguen provocando brechas, retrasos y una cultura general de técnicas de codificación inseguras. También hay una especie de dinámica entre ángeles y demonios, o, como se le conoce más ampliamente: Óxido seguro contra óxido inseguro.

Como se explica en el documentación oficial, Safe Rust es la versión «verdadera» de Rust, y Unsafe Rust incluye funciones que se consideran «definitivamente no seguras», aunque a veces son necesarias, por ejemplo, si se requiere la integración con algo en otro idioma. Sin embargo, incluso con Unsafe Rust, la lista de funcionalidades adicionales sigue siendo limitada. En Unsafe Rust, es posible hacer lo siguiente dentro de bloques inseguros:

  • Desreferenciar punteros sin procesar
  • Llame a funciones no seguras (incluidas las funciones de C, los elementos intrínsecos del compilador y el asignador sin procesar)
  • Implemente rasgos inseguros
  • Estática mutada
  • Acceda a los campos de los sindicatos.

Incluso en el llamado modo «inseguro», uno de los superpoderes de la programación de Rust sigue funcionando: el «comprobador de préstamos». Por lo general, este método evita problemas de memoria, colisiones en los cálculos paralelos y muchos otros errores mediante el análisis de código estático. Este análisis seguirá comprobando si un bloque no es seguro. Solo que se necesita mucho más trabajo para escribir construcciones no seguras sin que el compilador intervenga como guía en determinadas situaciones.

Esto no parece ser un gran problema para la mayoría de los desarrolladores experimentados (al fin y al cabo, se nos conoce por hacer pequeños retoques para sacar el máximo provecho de nuestras aplicaciones y abrir algunas funciones interesantes), pero puede abrir un agujero negro que puede provocar graves errores de configuración y vulnerabilidades de seguridad: un comportamiento indefinido. La programación en Rust (incluso cuando se usa de forma insegura) bloquea bastante bien las posibilidades de vulnerabilidades en comparación con C o C++, pero invocar un comportamiento indefinido puede ser un riesgo.

¿Es este el fin de la confianza en la codificación segura dirigida por los desarrolladores?

¿Recuerdas cuando dije que Rust tiene componentes de lenguajes conocidos? Una de las principales vulnerabilidades de seguridad de Rust es que, bueno, tiene componentes de lenguajes muy conocidos, a saber, C.

Rust sigue siendo un «lenguaje de programación seguro», pero una vez más, la introducción de un usuario es donde las cosas pueden despegarse. El desarrollador aún puede modificarlo para que funcione sin detectar errores (una propuesta atractiva, ya que esto desbloquea más capacidades) y, en esencia, incluso en un estado seguro, los desarrolladores pueden seguir siendo tan «inseguros» como quieran, ya que tienen un nivel de orientación y protección antes de que las cosas salgan bien.

Y los dos escenarios anteriores se vuelven más peligrosos a medida que profundizamos, ya que los resultados de Rust son similares a los de las herramientas de escaneo, del mismo modo que no existe ninguna herramienta SAST/DAST/RAST/IAST del ejército suizo que analice todas las vulnerabilidades, todos los vectores de ataque y todos los problemas, Rust tampoco. Incluso con Rust algunas vulnerabilidades aún se pueden introducir con bastante facilidad.

El riesgo de comportamiento indefinido al ejecutar Unsafe Rust puede generar problemas de desbordamiento de enteros, mientras que, en general, ni siquiera las configuraciones seguras evitarán el error humano en las configuraciones incorrectas de seguridad. lógica empresarial, o usar componentes con vulnerabilidades conocidas. Estos problemas siguen representando una amenaza muy real si no se solucionan, y en un entorno que se considera «seguro», como el verdadero Rust, puede incluso provocar cierto grado de autocomplacencia si un programador cree que todos los problemas importantes se solucionarán de todos modos.

He descubierto que Rust no es diferente a un mentor de programación: un ingeniero sénior que se ha tomado el tiempo de sentarse junto a un programador con menos experiencia, revisar su trabajo y mostrarle posibles errores, señalar las eficiencias y, en algunos casos, asegurarse de que no se compila hasta que esté bien. Sin embargo, es mucho mejor para los programadores de Rust aprender la teoría y comprometerse ellos mismos con las mejores prácticas, ya que ese mentor podría simplemente cortar los hilos del delantal y no querrás quedarte colgado.

¿Estás listo para encontrar y corregir las vulnerabilidades comunes de Rust ahora mismo? Juega el desafío.
리소스 보기
리소스 보기

Rust incorpora elementos conocidos y funcionales de los lenguajes de uso común, siguiendo una filosofía diferente que elimina la complejidad, al tiempo que introduce rendimiento y seguridad.

더 알고 싶으신가요?

마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

더 알아보세요

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기
공유하기:
링크드인 브랜드사회적x 로고
저자
마티아스 마두, Ph.
게시일: 2020년 6월 18일

마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

Matias는 15년 이상의 소프트웨어 보안 경험을 가진 연구원이자 개발자입니다. 그는 Fortify 소프트웨어와 같은 회사와 자신의 회사를 위한 솔루션을 개발했습니다. Sensei 안전. 그의 경력을 통해, Matias는 상용 제품으로 주도하고 자신의 벨트 아래 10 개 이상의 특허를 자랑하는 여러 응용 프로그램 보안 연구 프로젝트를 주도하고있다. 마티아스는 책상에서 떨어져 있을 때 고급 응용 프로그램 보안 교육을 위한 강사로 일했습니다. courses RSA 컨퍼런스, 블랙 햇, 데프콘, BSIMM, OWASP AppSec 및 브루콘을 포함한 글로벌 컨퍼런스에서 정기적으로 강연합니다.

마티아스는 겐트 대학교에서 컴퓨터 공학 박사 학위를 취득했으며, 프로그램 난독화를 통해 응용 프로그램 보안을 연구하여 응용 프로그램의 내부 작동을 숨깁니다.

공유하기:
링크드인 브랜드사회적x 로고

Durante los últimos años, parece que los ingenieros de software de todo el mundo no se cansan de usar Rust para programar. Este lenguaje de programación de sistemas relativamente nuevo, producido por Mozilla, ha conquistado los corazones de la comunidad de Stack Overflow y, como cohorte, es muy poco probable que sufra a los tontos, cuando votan por algo, el»lenguaje de programación más querido«cinco años seguidos, es hora de que todos nos sentemos y tomemos nota.

El lenguaje de programación Rust incorpora elementos conocidos y funcionales de los lenguajes de uso común, siguiendo una filosofía diferente que elimina la complejidad, al tiempo que introduce rendimiento y seguridad. Es una curva de aprendizaje y muchos desarrolladores no tienen la oportunidad de jugar mucho con ella - solo el 5,1% de los encuestados en Stack Overflow lo usaba comúnmente. Sin embargo, aparte de eso, no se puede negar que es un lenguaje interesante y con mucha más potencia de seguridad que sus predecesores, como C y C++. La adopción masiva va a requerir algunos cambios, tanto de comportamiento como tecnológicos... pero, en este momento, sigue captando la atención de los desarrolladores a nivel teórico.

... pero espera, necesitamos arrojar luz sobre una cosa más: es importante tener en cuenta que Rust es un lenguaje de programación que prioriza la seguridad de la memoria y la erradicación de los errores de seguridad relacionados con problemas comunes de administración de la memoria. Estos problemas son graves (y, sin duda, causan más de un par de problemas al equipo de AppSec), pero no son los únicos desafíos de codificación segura a los que nos enfrentamos.

¿Qué es lo que previene la oxidación exactamente? ¿Y en qué aspectos del panorama de la seguridad aún estamos expuestos? Analicemos el último unicornio de la programación:

La nueva frontera de la programación de sistemas modernos y seguros para la memoria

El equipo de investigación y desarrollo de Mozilla ha trabajado en algunos proyectos increíbles, e invertir en la programación de Rust como pionero del código abierto no es una excepción. Sus vídeo introductorio proporciona una idea de su ética, con el tema clave muy claro: el enfoque actual de la seguridad del software es defectuoso y Rust está diseñado para resolver gran parte de ese problema.

Parece demasiado simplista, sobre todo porque nos enfrentamos a enormes filtraciones de datos cada dos días, al igual que el reciente y terrible error denunciado por easyJet. Millones de registros de datos se ven comprometidos con frecuencia, casi siempre debido a una vulnerabilidad de una aplicación web, mala configuración de seguridad, o ataque de suplantación de identidad, y lenguajes como C++ existen desde hace décadas. Sin embargo, este tiempo no ha sido suficiente para que los desarrolladores los dominen hasta el punto de implementar las mejores prácticas de codificación segura. ¿Por qué debería ser diferente Rust? Ya han aparecido nuevos lenguajes, y no es que hayan encontrado una forma de erradicar las vulnerabilidades más comunes o de garantizar que cualquier código escrito sea mágicamente perfecto cuando se compila.

Por muy simple que sea el concepto, a veces son las respuestas simples las que superan las preguntas complejas. Rust es, en todo el sentido de la palabra, una revolución en la programación de sistemas con memoria segura que cumple sus promesas de muchas maneras... y, sin duda, salva el trabajo de los desarrolladores, que son propensos a introducir errores que pueden causar grandes problemas si no se detectan. Java, C, C++ e incluso lenguajes más nuevos, como Kotlin y Golang, siguen siendo bastante implacables para los desarrolladores que no se preocupan por la seguridad. Con ellos, no hay advertencias ni señales particulares de que la increíble función que se acaba de compilar tenga a un gremlin de la seguridad escondido bajo el capó.

Entonces, profundicemos más:

¿Qué hace que Rust sea tan seguro?

Por lo general, un desarrollador tiene el objetivo principal de crear funciones, garantizar que sean funcionales y fáciles de usar, tal vez incluso motivos de orgullo de los que estarían encantados de mostrar en su currículum. Es totalmente normal que un desarrollador cree un software excelente, lo publique y pase al siguiente gran proyecto. En este punto, los equipos de seguridad comprueban si hay vulnerabilidades y, si las encuentran, su aplicación «finalizada» podría ser enviada a su equipo para corregirla. El problema puede ser simple o puede estar fuera del alcance razonable para que un desarrollador lo solucione.

El problema es que, a primera vista, los errores de seguridad no eran evidentes en absoluto y, si el escaneo, las pruebas y la revisión manual del código no los detectan, un atacante podría aprovechar esa pequeña oportunidad para aprovechar el error.

Ahora, Rust busca evitar que muchas vulnerabilidades lleguen al código desde el principio: simplemente no se compilará si hay errores de sintaxis u otros errores de seguridad de la memoria que causan problemas de producción a lo largo del SDLC. Se trata de una programación diseñada para proteger la memoria, lo que garantiza que no haya acceso a memoria no válida (sin importar cómo se ejecute el software). ¿Y con El 70% de todos los errores de seguridad son el resultado de problemas relacionados con la administración de la memoria, es una gran hazaña.

El óxido marcará y evitará:

  • Desbordamiento de búfer
  • Úselo después de que esté gratis
  • Doble gratis
  • Desreferencia de puntero nulo
  • Uso de memoria no inicializada

Si comparamos un fragmento de código de Rust con C++, se hará evidente que uno es seguro por defecto. Mira este ejemplo de un error de desbordamiento de búfer:

#include<iostream></iostream>
#include<string.h></string.h>
int main (void) {
char a [3] = «12";
char b [4] = «123";
strcpy (a, b);//desbordamiento de búfer cuando len of b es mayor que a
std: :cout << a << «;" << b << std: :endl;
}

대.

pub fan main () {
deje que sea: [char; 2] = [1, 2];
sea b: [char; 3] = [1, 2, 3];
a.copiar_desde_rebanada (&b);
}
러스트 코드 스니펫 비교

Rust lanza una advertencia de seguridad y entra en pánico al llegar a la función copy_from_slice en tiempo de ejecución para evitar el desbordamiento del búfer, pero no en tiempo de compilación.

En ese sentido, es en gran medida uno de los lenguajes de «inicio a la izquierda». Resaltará los errores y forzará a los desarrolladores a aprender a escribir código para evitar introducir errores de seguridad relacionados con la memoria, por lo que cumplir con los plazos depende de que el programador preste atención, corrija y se mantenga fiel a la ruta de entrega.

El enfoque de este lenguaje parece simple, pero habría sido una hazaña increíble hacerlo funcionar con esta poderosa lógica, y lo hace con el ejemplo. Rust es, desde el punto de vista de la seguridad, un gran avance... si tan solo lo usaran más personas. Empresas como Dropbox son pioneras en su uso a gran escala corporativa, y es fantástico comprobarlo. Sin embargo, hay más consideraciones antes de llegar a la conclusión de que lo único que nos impide lograr un futuro más seguro es una cuestión de adopción.

El ajuste de cuentas de Rust.

Hay un par de problemas pequeños (bueno, grandes), a saber, que la programación en Rust tiene más flexibilidad para introducir errores de lo que parece. Lo hará no corrija las 10 principales vulnerabilidades más importantes de OWASP que siguen provocando brechas, retrasos y una cultura general de técnicas de codificación inseguras. También hay una especie de dinámica entre ángeles y demonios, o, como se le conoce más ampliamente: Óxido seguro contra óxido inseguro.

Como se explica en el documentación oficial, Safe Rust es la versión «verdadera» de Rust, y Unsafe Rust incluye funciones que se consideran «definitivamente no seguras», aunque a veces son necesarias, por ejemplo, si se requiere la integración con algo en otro idioma. Sin embargo, incluso con Unsafe Rust, la lista de funcionalidades adicionales sigue siendo limitada. En Unsafe Rust, es posible hacer lo siguiente dentro de bloques inseguros:

  • Desreferenciar punteros sin procesar
  • Llame a funciones no seguras (incluidas las funciones de C, los elementos intrínsecos del compilador y el asignador sin procesar)
  • Implemente rasgos inseguros
  • Estática mutada
  • Acceda a los campos de los sindicatos.

Incluso en el llamado modo «inseguro», uno de los superpoderes de la programación de Rust sigue funcionando: el «comprobador de préstamos». Por lo general, este método evita problemas de memoria, colisiones en los cálculos paralelos y muchos otros errores mediante el análisis de código estático. Este análisis seguirá comprobando si un bloque no es seguro. Solo que se necesita mucho más trabajo para escribir construcciones no seguras sin que el compilador intervenga como guía en determinadas situaciones.

Esto no parece ser un gran problema para la mayoría de los desarrolladores experimentados (al fin y al cabo, se nos conoce por hacer pequeños retoques para sacar el máximo provecho de nuestras aplicaciones y abrir algunas funciones interesantes), pero puede abrir un agujero negro que puede provocar graves errores de configuración y vulnerabilidades de seguridad: un comportamiento indefinido. La programación en Rust (incluso cuando se usa de forma insegura) bloquea bastante bien las posibilidades de vulnerabilidades en comparación con C o C++, pero invocar un comportamiento indefinido puede ser un riesgo.

¿Es este el fin de la confianza en la codificación segura dirigida por los desarrolladores?

¿Recuerdas cuando dije que Rust tiene componentes de lenguajes conocidos? Una de las principales vulnerabilidades de seguridad de Rust es que, bueno, tiene componentes de lenguajes muy conocidos, a saber, C.

Rust sigue siendo un «lenguaje de programación seguro», pero una vez más, la introducción de un usuario es donde las cosas pueden despegarse. El desarrollador aún puede modificarlo para que funcione sin detectar errores (una propuesta atractiva, ya que esto desbloquea más capacidades) y, en esencia, incluso en un estado seguro, los desarrolladores pueden seguir siendo tan «inseguros» como quieran, ya que tienen un nivel de orientación y protección antes de que las cosas salgan bien.

Y los dos escenarios anteriores se vuelven más peligrosos a medida que profundizamos, ya que los resultados de Rust son similares a los de las herramientas de escaneo, del mismo modo que no existe ninguna herramienta SAST/DAST/RAST/IAST del ejército suizo que analice todas las vulnerabilidades, todos los vectores de ataque y todos los problemas, Rust tampoco. Incluso con Rust algunas vulnerabilidades aún se pueden introducir con bastante facilidad.

El riesgo de comportamiento indefinido al ejecutar Unsafe Rust puede generar problemas de desbordamiento de enteros, mientras que, en general, ni siquiera las configuraciones seguras evitarán el error humano en las configuraciones incorrectas de seguridad. lógica empresarial, o usar componentes con vulnerabilidades conocidas. Estos problemas siguen representando una amenaza muy real si no se solucionan, y en un entorno que se considera «seguro», como el verdadero Rust, puede incluso provocar cierto grado de autocomplacencia si un programador cree que todos los problemas importantes se solucionarán de todos modos.

He descubierto que Rust no es diferente a un mentor de programación: un ingeniero sénior que se ha tomado el tiempo de sentarse junto a un programador con menos experiencia, revisar su trabajo y mostrarle posibles errores, señalar las eficiencias y, en algunos casos, asegurarse de que no se compila hasta que esté bien. Sin embargo, es mucho mejor para los programadores de Rust aprender la teoría y comprometerse ellos mismos con las mejores prácticas, ya que ese mentor podría simplemente cortar los hilos del delantal y no querrás quedarte colgado.

¿Estás listo para encontrar y corregir las vulnerabilidades comunes de Rust ahora mismo? Juega el desafío.
리소스 보기
리소스 보기

다음 양식을 작성하여 보고서를 다운로드하십시오.

귀하의 허락을 받아 당사 제품 또는 안전한 암호화 관련 주제에 대한 정보를 보내드리고자 합니다. 귀하의 개인정보는 항상 최대한 신중하게 처리하며, 마케팅 목적으로 타사에 판매하지 않을 것을 약속드립니다.

보내기
scw 성공 아이콘
scw 오류 아이콘
양식을 보내려면 '분석' 쿠키를 활성화하세요. 완료 후에는 언제든지 다시 비활성화해도 됩니다.

Durante los últimos años, parece que los ingenieros de software de todo el mundo no se cansan de usar Rust para programar. Este lenguaje de programación de sistemas relativamente nuevo, producido por Mozilla, ha conquistado los corazones de la comunidad de Stack Overflow y, como cohorte, es muy poco probable que sufra a los tontos, cuando votan por algo, el»lenguaje de programación más querido«cinco años seguidos, es hora de que todos nos sentemos y tomemos nota.

El lenguaje de programación Rust incorpora elementos conocidos y funcionales de los lenguajes de uso común, siguiendo una filosofía diferente que elimina la complejidad, al tiempo que introduce rendimiento y seguridad. Es una curva de aprendizaje y muchos desarrolladores no tienen la oportunidad de jugar mucho con ella - solo el 5,1% de los encuestados en Stack Overflow lo usaba comúnmente. Sin embargo, aparte de eso, no se puede negar que es un lenguaje interesante y con mucha más potencia de seguridad que sus predecesores, como C y C++. La adopción masiva va a requerir algunos cambios, tanto de comportamiento como tecnológicos... pero, en este momento, sigue captando la atención de los desarrolladores a nivel teórico.

... pero espera, necesitamos arrojar luz sobre una cosa más: es importante tener en cuenta que Rust es un lenguaje de programación que prioriza la seguridad de la memoria y la erradicación de los errores de seguridad relacionados con problemas comunes de administración de la memoria. Estos problemas son graves (y, sin duda, causan más de un par de problemas al equipo de AppSec), pero no son los únicos desafíos de codificación segura a los que nos enfrentamos.

¿Qué es lo que previene la oxidación exactamente? ¿Y en qué aspectos del panorama de la seguridad aún estamos expuestos? Analicemos el último unicornio de la programación:

La nueva frontera de la programación de sistemas modernos y seguros para la memoria

El equipo de investigación y desarrollo de Mozilla ha trabajado en algunos proyectos increíbles, e invertir en la programación de Rust como pionero del código abierto no es una excepción. Sus vídeo introductorio proporciona una idea de su ética, con el tema clave muy claro: el enfoque actual de la seguridad del software es defectuoso y Rust está diseñado para resolver gran parte de ese problema.

Parece demasiado simplista, sobre todo porque nos enfrentamos a enormes filtraciones de datos cada dos días, al igual que el reciente y terrible error denunciado por easyJet. Millones de registros de datos se ven comprometidos con frecuencia, casi siempre debido a una vulnerabilidad de una aplicación web, mala configuración de seguridad, o ataque de suplantación de identidad, y lenguajes como C++ existen desde hace décadas. Sin embargo, este tiempo no ha sido suficiente para que los desarrolladores los dominen hasta el punto de implementar las mejores prácticas de codificación segura. ¿Por qué debería ser diferente Rust? Ya han aparecido nuevos lenguajes, y no es que hayan encontrado una forma de erradicar las vulnerabilidades más comunes o de garantizar que cualquier código escrito sea mágicamente perfecto cuando se compila.

Por muy simple que sea el concepto, a veces son las respuestas simples las que superan las preguntas complejas. Rust es, en todo el sentido de la palabra, una revolución en la programación de sistemas con memoria segura que cumple sus promesas de muchas maneras... y, sin duda, salva el trabajo de los desarrolladores, que son propensos a introducir errores que pueden causar grandes problemas si no se detectan. Java, C, C++ e incluso lenguajes más nuevos, como Kotlin y Golang, siguen siendo bastante implacables para los desarrolladores que no se preocupan por la seguridad. Con ellos, no hay advertencias ni señales particulares de que la increíble función que se acaba de compilar tenga a un gremlin de la seguridad escondido bajo el capó.

Entonces, profundicemos más:

¿Qué hace que Rust sea tan seguro?

Por lo general, un desarrollador tiene el objetivo principal de crear funciones, garantizar que sean funcionales y fáciles de usar, tal vez incluso motivos de orgullo de los que estarían encantados de mostrar en su currículum. Es totalmente normal que un desarrollador cree un software excelente, lo publique y pase al siguiente gran proyecto. En este punto, los equipos de seguridad comprueban si hay vulnerabilidades y, si las encuentran, su aplicación «finalizada» podría ser enviada a su equipo para corregirla. El problema puede ser simple o puede estar fuera del alcance razonable para que un desarrollador lo solucione.

El problema es que, a primera vista, los errores de seguridad no eran evidentes en absoluto y, si el escaneo, las pruebas y la revisión manual del código no los detectan, un atacante podría aprovechar esa pequeña oportunidad para aprovechar el error.

Ahora, Rust busca evitar que muchas vulnerabilidades lleguen al código desde el principio: simplemente no se compilará si hay errores de sintaxis u otros errores de seguridad de la memoria que causan problemas de producción a lo largo del SDLC. Se trata de una programación diseñada para proteger la memoria, lo que garantiza que no haya acceso a memoria no válida (sin importar cómo se ejecute el software). ¿Y con El 70% de todos los errores de seguridad son el resultado de problemas relacionados con la administración de la memoria, es una gran hazaña.

El óxido marcará y evitará:

  • Desbordamiento de búfer
  • Úselo después de que esté gratis
  • Doble gratis
  • Desreferencia de puntero nulo
  • Uso de memoria no inicializada

Si comparamos un fragmento de código de Rust con C++, se hará evidente que uno es seguro por defecto. Mira este ejemplo de un error de desbordamiento de búfer:

#include<iostream></iostream>
#include<string.h></string.h>
int main (void) {
char a [3] = «12";
char b [4] = «123";
strcpy (a, b);//desbordamiento de búfer cuando len of b es mayor que a
std: :cout << a << «;" << b << std: :endl;
}

대.

pub fan main () {
deje que sea: [char; 2] = [1, 2];
sea b: [char; 3] = [1, 2, 3];
a.copiar_desde_rebanada (&b);
}
러스트 코드 스니펫 비교

Rust lanza una advertencia de seguridad y entra en pánico al llegar a la función copy_from_slice en tiempo de ejecución para evitar el desbordamiento del búfer, pero no en tiempo de compilación.

En ese sentido, es en gran medida uno de los lenguajes de «inicio a la izquierda». Resaltará los errores y forzará a los desarrolladores a aprender a escribir código para evitar introducir errores de seguridad relacionados con la memoria, por lo que cumplir con los plazos depende de que el programador preste atención, corrija y se mantenga fiel a la ruta de entrega.

El enfoque de este lenguaje parece simple, pero habría sido una hazaña increíble hacerlo funcionar con esta poderosa lógica, y lo hace con el ejemplo. Rust es, desde el punto de vista de la seguridad, un gran avance... si tan solo lo usaran más personas. Empresas como Dropbox son pioneras en su uso a gran escala corporativa, y es fantástico comprobarlo. Sin embargo, hay más consideraciones antes de llegar a la conclusión de que lo único que nos impide lograr un futuro más seguro es una cuestión de adopción.

El ajuste de cuentas de Rust.

Hay un par de problemas pequeños (bueno, grandes), a saber, que la programación en Rust tiene más flexibilidad para introducir errores de lo que parece. Lo hará no corrija las 10 principales vulnerabilidades más importantes de OWASP que siguen provocando brechas, retrasos y una cultura general de técnicas de codificación inseguras. También hay una especie de dinámica entre ángeles y demonios, o, como se le conoce más ampliamente: Óxido seguro contra óxido inseguro.

Como se explica en el documentación oficial, Safe Rust es la versión «verdadera» de Rust, y Unsafe Rust incluye funciones que se consideran «definitivamente no seguras», aunque a veces son necesarias, por ejemplo, si se requiere la integración con algo en otro idioma. Sin embargo, incluso con Unsafe Rust, la lista de funcionalidades adicionales sigue siendo limitada. En Unsafe Rust, es posible hacer lo siguiente dentro de bloques inseguros:

  • Desreferenciar punteros sin procesar
  • Llame a funciones no seguras (incluidas las funciones de C, los elementos intrínsecos del compilador y el asignador sin procesar)
  • Implemente rasgos inseguros
  • Estática mutada
  • Acceda a los campos de los sindicatos.

Incluso en el llamado modo «inseguro», uno de los superpoderes de la programación de Rust sigue funcionando: el «comprobador de préstamos». Por lo general, este método evita problemas de memoria, colisiones en los cálculos paralelos y muchos otros errores mediante el análisis de código estático. Este análisis seguirá comprobando si un bloque no es seguro. Solo que se necesita mucho más trabajo para escribir construcciones no seguras sin que el compilador intervenga como guía en determinadas situaciones.

Esto no parece ser un gran problema para la mayoría de los desarrolladores experimentados (al fin y al cabo, se nos conoce por hacer pequeños retoques para sacar el máximo provecho de nuestras aplicaciones y abrir algunas funciones interesantes), pero puede abrir un agujero negro que puede provocar graves errores de configuración y vulnerabilidades de seguridad: un comportamiento indefinido. La programación en Rust (incluso cuando se usa de forma insegura) bloquea bastante bien las posibilidades de vulnerabilidades en comparación con C o C++, pero invocar un comportamiento indefinido puede ser un riesgo.

¿Es este el fin de la confianza en la codificación segura dirigida por los desarrolladores?

¿Recuerdas cuando dije que Rust tiene componentes de lenguajes conocidos? Una de las principales vulnerabilidades de seguridad de Rust es que, bueno, tiene componentes de lenguajes muy conocidos, a saber, C.

Rust sigue siendo un «lenguaje de programación seguro», pero una vez más, la introducción de un usuario es donde las cosas pueden despegarse. El desarrollador aún puede modificarlo para que funcione sin detectar errores (una propuesta atractiva, ya que esto desbloquea más capacidades) y, en esencia, incluso en un estado seguro, los desarrolladores pueden seguir siendo tan «inseguros» como quieran, ya que tienen un nivel de orientación y protección antes de que las cosas salgan bien.

Y los dos escenarios anteriores se vuelven más peligrosos a medida que profundizamos, ya que los resultados de Rust son similares a los de las herramientas de escaneo, del mismo modo que no existe ninguna herramienta SAST/DAST/RAST/IAST del ejército suizo que analice todas las vulnerabilidades, todos los vectores de ataque y todos los problemas, Rust tampoco. Incluso con Rust algunas vulnerabilidades aún se pueden introducir con bastante facilidad.

El riesgo de comportamiento indefinido al ejecutar Unsafe Rust puede generar problemas de desbordamiento de enteros, mientras que, en general, ni siquiera las configuraciones seguras evitarán el error humano en las configuraciones incorrectas de seguridad. lógica empresarial, o usar componentes con vulnerabilidades conocidas. Estos problemas siguen representando una amenaza muy real si no se solucionan, y en un entorno que se considera «seguro», como el verdadero Rust, puede incluso provocar cierto grado de autocomplacencia si un programador cree que todos los problemas importantes se solucionarán de todos modos.

He descubierto que Rust no es diferente a un mentor de programación: un ingeniero sénior que se ha tomado el tiempo de sentarse junto a un programador con menos experiencia, revisar su trabajo y mostrarle posibles errores, señalar las eficiencias y, en algunos casos, asegurarse de que no se compila hasta que esté bien. Sin embargo, es mucho mejor para los programadores de Rust aprender la teoría y comprometerse ellos mismos con las mejores prácticas, ya que ese mentor podría simplemente cortar los hilos del delantal y no querrás quedarte colgado.

¿Estás listo para encontrar y corregir las vulnerabilidades comunes de Rust ahora mismo? Juega el desafío.
웹 세미나 보기
시작하다
더 알아보세요

아래 링크를 클릭하고 이 자료의 PDF를 다운로드하세요.

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

보고서 보기데모 예약하기
리소스 보기
공유하기:
링크드인 브랜드사회적x 로고
더 알고 싶으신가요?

공유하기:
링크드인 브랜드사회적x 로고
저자
마티아스 마두, Ph.
게시일: 2020년 6월 18일

마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

Matias는 15년 이상의 소프트웨어 보안 경험을 가진 연구원이자 개발자입니다. 그는 Fortify 소프트웨어와 같은 회사와 자신의 회사를 위한 솔루션을 개발했습니다. Sensei 안전. 그의 경력을 통해, Matias는 상용 제품으로 주도하고 자신의 벨트 아래 10 개 이상의 특허를 자랑하는 여러 응용 프로그램 보안 연구 프로젝트를 주도하고있다. 마티아스는 책상에서 떨어져 있을 때 고급 응용 프로그램 보안 교육을 위한 강사로 일했습니다. courses RSA 컨퍼런스, 블랙 햇, 데프콘, BSIMM, OWASP AppSec 및 브루콘을 포함한 글로벌 컨퍼런스에서 정기적으로 강연합니다.

마티아스는 겐트 대학교에서 컴퓨터 공학 박사 학위를 취득했으며, 프로그램 난독화를 통해 응용 프로그램 보안을 연구하여 응용 프로그램의 내부 작동을 숨깁니다.

공유하기:
링크드인 브랜드사회적x 로고

Durante los últimos años, parece que los ingenieros de software de todo el mundo no se cansan de usar Rust para programar. Este lenguaje de programación de sistemas relativamente nuevo, producido por Mozilla, ha conquistado los corazones de la comunidad de Stack Overflow y, como cohorte, es muy poco probable que sufra a los tontos, cuando votan por algo, el»lenguaje de programación más querido«cinco años seguidos, es hora de que todos nos sentemos y tomemos nota.

El lenguaje de programación Rust incorpora elementos conocidos y funcionales de los lenguajes de uso común, siguiendo una filosofía diferente que elimina la complejidad, al tiempo que introduce rendimiento y seguridad. Es una curva de aprendizaje y muchos desarrolladores no tienen la oportunidad de jugar mucho con ella - solo el 5,1% de los encuestados en Stack Overflow lo usaba comúnmente. Sin embargo, aparte de eso, no se puede negar que es un lenguaje interesante y con mucha más potencia de seguridad que sus predecesores, como C y C++. La adopción masiva va a requerir algunos cambios, tanto de comportamiento como tecnológicos... pero, en este momento, sigue captando la atención de los desarrolladores a nivel teórico.

... pero espera, necesitamos arrojar luz sobre una cosa más: es importante tener en cuenta que Rust es un lenguaje de programación que prioriza la seguridad de la memoria y la erradicación de los errores de seguridad relacionados con problemas comunes de administración de la memoria. Estos problemas son graves (y, sin duda, causan más de un par de problemas al equipo de AppSec), pero no son los únicos desafíos de codificación segura a los que nos enfrentamos.

¿Qué es lo que previene la oxidación exactamente? ¿Y en qué aspectos del panorama de la seguridad aún estamos expuestos? Analicemos el último unicornio de la programación:

La nueva frontera de la programación de sistemas modernos y seguros para la memoria

El equipo de investigación y desarrollo de Mozilla ha trabajado en algunos proyectos increíbles, e invertir en la programación de Rust como pionero del código abierto no es una excepción. Sus vídeo introductorio proporciona una idea de su ética, con el tema clave muy claro: el enfoque actual de la seguridad del software es defectuoso y Rust está diseñado para resolver gran parte de ese problema.

Parece demasiado simplista, sobre todo porque nos enfrentamos a enormes filtraciones de datos cada dos días, al igual que el reciente y terrible error denunciado por easyJet. Millones de registros de datos se ven comprometidos con frecuencia, casi siempre debido a una vulnerabilidad de una aplicación web, mala configuración de seguridad, o ataque de suplantación de identidad, y lenguajes como C++ existen desde hace décadas. Sin embargo, este tiempo no ha sido suficiente para que los desarrolladores los dominen hasta el punto de implementar las mejores prácticas de codificación segura. ¿Por qué debería ser diferente Rust? Ya han aparecido nuevos lenguajes, y no es que hayan encontrado una forma de erradicar las vulnerabilidades más comunes o de garantizar que cualquier código escrito sea mágicamente perfecto cuando se compila.

Por muy simple que sea el concepto, a veces son las respuestas simples las que superan las preguntas complejas. Rust es, en todo el sentido de la palabra, una revolución en la programación de sistemas con memoria segura que cumple sus promesas de muchas maneras... y, sin duda, salva el trabajo de los desarrolladores, que son propensos a introducir errores que pueden causar grandes problemas si no se detectan. Java, C, C++ e incluso lenguajes más nuevos, como Kotlin y Golang, siguen siendo bastante implacables para los desarrolladores que no se preocupan por la seguridad. Con ellos, no hay advertencias ni señales particulares de que la increíble función que se acaba de compilar tenga a un gremlin de la seguridad escondido bajo el capó.

Entonces, profundicemos más:

¿Qué hace que Rust sea tan seguro?

Por lo general, un desarrollador tiene el objetivo principal de crear funciones, garantizar que sean funcionales y fáciles de usar, tal vez incluso motivos de orgullo de los que estarían encantados de mostrar en su currículum. Es totalmente normal que un desarrollador cree un software excelente, lo publique y pase al siguiente gran proyecto. En este punto, los equipos de seguridad comprueban si hay vulnerabilidades y, si las encuentran, su aplicación «finalizada» podría ser enviada a su equipo para corregirla. El problema puede ser simple o puede estar fuera del alcance razonable para que un desarrollador lo solucione.

El problema es que, a primera vista, los errores de seguridad no eran evidentes en absoluto y, si el escaneo, las pruebas y la revisión manual del código no los detectan, un atacante podría aprovechar esa pequeña oportunidad para aprovechar el error.

Ahora, Rust busca evitar que muchas vulnerabilidades lleguen al código desde el principio: simplemente no se compilará si hay errores de sintaxis u otros errores de seguridad de la memoria que causan problemas de producción a lo largo del SDLC. Se trata de una programación diseñada para proteger la memoria, lo que garantiza que no haya acceso a memoria no válida (sin importar cómo se ejecute el software). ¿Y con El 70% de todos los errores de seguridad son el resultado de problemas relacionados con la administración de la memoria, es una gran hazaña.

El óxido marcará y evitará:

  • Desbordamiento de búfer
  • Úselo después de que esté gratis
  • Doble gratis
  • Desreferencia de puntero nulo
  • Uso de memoria no inicializada

Si comparamos un fragmento de código de Rust con C++, se hará evidente que uno es seguro por defecto. Mira este ejemplo de un error de desbordamiento de búfer:

#include<iostream></iostream>
#include<string.h></string.h>
int main (void) {
char a [3] = «12";
char b [4] = «123";
strcpy (a, b);//desbordamiento de búfer cuando len of b es mayor que a
std: :cout << a << «;" << b << std: :endl;
}

대.

pub fan main () {
deje que sea: [char; 2] = [1, 2];
sea b: [char; 3] = [1, 2, 3];
a.copiar_desde_rebanada (&b);
}
러스트 코드 스니펫 비교

Rust lanza una advertencia de seguridad y entra en pánico al llegar a la función copy_from_slice en tiempo de ejecución para evitar el desbordamiento del búfer, pero no en tiempo de compilación.

En ese sentido, es en gran medida uno de los lenguajes de «inicio a la izquierda». Resaltará los errores y forzará a los desarrolladores a aprender a escribir código para evitar introducir errores de seguridad relacionados con la memoria, por lo que cumplir con los plazos depende de que el programador preste atención, corrija y se mantenga fiel a la ruta de entrega.

El enfoque de este lenguaje parece simple, pero habría sido una hazaña increíble hacerlo funcionar con esta poderosa lógica, y lo hace con el ejemplo. Rust es, desde el punto de vista de la seguridad, un gran avance... si tan solo lo usaran más personas. Empresas como Dropbox son pioneras en su uso a gran escala corporativa, y es fantástico comprobarlo. Sin embargo, hay más consideraciones antes de llegar a la conclusión de que lo único que nos impide lograr un futuro más seguro es una cuestión de adopción.

El ajuste de cuentas de Rust.

Hay un par de problemas pequeños (bueno, grandes), a saber, que la programación en Rust tiene más flexibilidad para introducir errores de lo que parece. Lo hará no corrija las 10 principales vulnerabilidades más importantes de OWASP que siguen provocando brechas, retrasos y una cultura general de técnicas de codificación inseguras. También hay una especie de dinámica entre ángeles y demonios, o, como se le conoce más ampliamente: Óxido seguro contra óxido inseguro.

Como se explica en el documentación oficial, Safe Rust es la versión «verdadera» de Rust, y Unsafe Rust incluye funciones que se consideran «definitivamente no seguras», aunque a veces son necesarias, por ejemplo, si se requiere la integración con algo en otro idioma. Sin embargo, incluso con Unsafe Rust, la lista de funcionalidades adicionales sigue siendo limitada. En Unsafe Rust, es posible hacer lo siguiente dentro de bloques inseguros:

  • Desreferenciar punteros sin procesar
  • Llame a funciones no seguras (incluidas las funciones de C, los elementos intrínsecos del compilador y el asignador sin procesar)
  • Implemente rasgos inseguros
  • Estática mutada
  • Acceda a los campos de los sindicatos.

Incluso en el llamado modo «inseguro», uno de los superpoderes de la programación de Rust sigue funcionando: el «comprobador de préstamos». Por lo general, este método evita problemas de memoria, colisiones en los cálculos paralelos y muchos otros errores mediante el análisis de código estático. Este análisis seguirá comprobando si un bloque no es seguro. Solo que se necesita mucho más trabajo para escribir construcciones no seguras sin que el compilador intervenga como guía en determinadas situaciones.

Esto no parece ser un gran problema para la mayoría de los desarrolladores experimentados (al fin y al cabo, se nos conoce por hacer pequeños retoques para sacar el máximo provecho de nuestras aplicaciones y abrir algunas funciones interesantes), pero puede abrir un agujero negro que puede provocar graves errores de configuración y vulnerabilidades de seguridad: un comportamiento indefinido. La programación en Rust (incluso cuando se usa de forma insegura) bloquea bastante bien las posibilidades de vulnerabilidades en comparación con C o C++, pero invocar un comportamiento indefinido puede ser un riesgo.

¿Es este el fin de la confianza en la codificación segura dirigida por los desarrolladores?

¿Recuerdas cuando dije que Rust tiene componentes de lenguajes conocidos? Una de las principales vulnerabilidades de seguridad de Rust es que, bueno, tiene componentes de lenguajes muy conocidos, a saber, C.

Rust sigue siendo un «lenguaje de programación seguro», pero una vez más, la introducción de un usuario es donde las cosas pueden despegarse. El desarrollador aún puede modificarlo para que funcione sin detectar errores (una propuesta atractiva, ya que esto desbloquea más capacidades) y, en esencia, incluso en un estado seguro, los desarrolladores pueden seguir siendo tan «inseguros» como quieran, ya que tienen un nivel de orientación y protección antes de que las cosas salgan bien.

Y los dos escenarios anteriores se vuelven más peligrosos a medida que profundizamos, ya que los resultados de Rust son similares a los de las herramientas de escaneo, del mismo modo que no existe ninguna herramienta SAST/DAST/RAST/IAST del ejército suizo que analice todas las vulnerabilidades, todos los vectores de ataque y todos los problemas, Rust tampoco. Incluso con Rust algunas vulnerabilidades aún se pueden introducir con bastante facilidad.

El riesgo de comportamiento indefinido al ejecutar Unsafe Rust puede generar problemas de desbordamiento de enteros, mientras que, en general, ni siquiera las configuraciones seguras evitarán el error humano en las configuraciones incorrectas de seguridad. lógica empresarial, o usar componentes con vulnerabilidades conocidas. Estos problemas siguen representando una amenaza muy real si no se solucionan, y en un entorno que se considera «seguro», como el verdadero Rust, puede incluso provocar cierto grado de autocomplacencia si un programador cree que todos los problemas importantes se solucionarán de todos modos.

He descubierto que Rust no es diferente a un mentor de programación: un ingeniero sénior que se ha tomado el tiempo de sentarse junto a un programador con menos experiencia, revisar su trabajo y mostrarle posibles errores, señalar las eficiencias y, en algunos casos, asegurarse de que no se compila hasta que esté bien. Sin embargo, es mucho mejor para los programadores de Rust aprender la teoría y comprometerse ellos mismos con las mejores prácticas, ya que ese mentor podría simplemente cortar los hilos del delantal y no querrás quedarte colgado.

¿Estás listo para encontrar y corregir las vulnerabilidades comunes de Rust ahora mismo? Juega el desafío.

목차

PDF 다운로드
리소스 보기
더 알고 싶으신가요?

마티아스 마두는 보안 전문가, 연구원, CTO이자 Secure Code Warrior 의 공동 설립자입니다. 마티아스는 겐트 대학교에서 정적 분석 솔루션에 중점을 둔 애플리케이션 보안 박사 학위를 취득했습니다. 이후 미국의 Fortify에 입사하여 개발자의 보안 코드 작성을 지원하지 않고 코드 문제만 탐지하는 것만으로는 충분하지 않다는 것을 깨달았습니다. 이를 계기로 개발자를 지원하고 보안에 대한 부담을 덜어주며 고객의 기대를 뛰어넘는 제품을 개발하게 되었습니다. 팀 어썸의 일원으로 책상에 앉아 있지 않을 때는 RSA 컨퍼런스, 블랙햇, 데프콘 등의 컨퍼런스에서 무대에 올라 발표하는 것을 즐깁니다.

더 알아보세요

Secure Code Warrior 귀사의 조직이 소프트웨어 개발 라이프사이클 전반에 걸쳐 코드를 보호하고 사이버보안을 최우선으로 하는 문화를 조성하도록 Secure Code Warrior . AppSec 관리자, 개발자, CISO 또는 보안 관련 담당자라면 누구든, 저희는 귀사의 조직이 안전하지 않은 코드와 관련된 위험을 줄일 수 있도록 돕습니다.

데모 예약하기다운로드
공유하기:
링크드인 브랜드사회적x 로고
자원 센터

시작하기 위한 자료

더 많은 게시물
자원 센터

시작하기 위한 자료

더 많은 게시물