Errores de seguridad en el código Scala

4

Actualmente estoy leyendo "Software Security: Build Security In" de Gary McGraw, y él hace la distinción entre errores de seguridad y fallas de seguridad. Los errores de seguridad son errores de implementación en el código y fallas en el aspecto de arquitectura / diseño del software. Escribe cómo los defectos de seguridad tienden a estar alrededor de una división 50/50 entre errores y fallas.

Sin embargo, esto fue escrito en 2006, y menciona lenguajes como C y C ++. Se habla mucho de desbordamientos de búfer, por ejemplo. Mi pregunta es la siguiente: ¿qué tan pertinente es esto para Scala? Obviamente, los errores en la implementación aún pueden causar riesgos de seguridad, pero tener un lenguaje administrado en la JVM que hace el control de límites parece que mitigaría una gran clase de errores de los que habla McGraw. ¿Es una afirmación razonable que Software Security, en un lenguaje como Scala, se ha orientado más hacia el lado arquitectónico y lógico de las cosas? O, para ser más específico, ¿es el análisis de código estático en Scala menos importante para la seguridad que para lenguajes como C y C ++? Si no, ¿por qué no?

    
pregunta Nathan 12.06.2015 - 21:33
fuente

2 respuestas

4

En cuanto a los problemas relacionados con la memoria, todavía hay problemas, por ejemplo, Aún puede encontrar un puntero nulo, usar un índice de recopilación fuera de límites, compartir accidentalmente datos mutables con otras clases, hacer que la aplicación use toda su memoria asignada o, en algunos casos, donde se usa casi toda la memoria y muchas nuevas. se crean objetos temporales, el GC puede ocupar casi todo el tiempo de ejecución, pero la mayoría de estos son excepciones / errores en la JVM, y pueden manejarse, aunque deben evitarse con la configuración y la codificación cuidadosa, si es posible.

Además, en scala null está mal visto a favor de Option, y mutable state a favor de immutable, por lo que con un estilo funcional idiomático, los problemas de null y mutability se reducen aún más.

Hay algunas herramientas de análisis estático de scala (descargo de responsabilidad: soy el mantenedor de Linter), pero no están No se especializa en seguridad. Dicho esto, a menudo encuentran problemas que podrían bloquear la aplicación en tiempo de ejecución, hacer que se ejecute más lentamente de lo necesario o encontrar un código que lógicamente no tenga sentido, todo esto es una fuente potencial de problemas de seguridad. Me gustaría mencionar a Wartremover, que incluye verificaciones que restringen el lenguaje a un subconjunto más seguro / puro.

También puede usar las herramientas que se ejecutan en el bytecode JVM, por ejemplo. Find-sec-bugs plugin para Findbugs. Las comprobaciones predeterminadas de Findbugs también funcionan, pero son activadas por el código scala generado, por lo que hay muchos falsos positivos. Los autores de los idiomas miran estos resultados y los arreglan si encuentran algo, pero desafortunadamente los falsos positivos hacen que los Findbugs sean menos útiles para el resto de nosotros.

(Estoy muy interesado en escuchar si alguien ha usado alguna otra herramienta con Scala en los comentarios)

    
respondido por el HairyFotr 13.06.2015 - 11:37
fuente
3

Si bien es justo decir que los lenguajes administrados son menos propensos a ciertas clases de problemas, en comparación con lenguajes como c / c ++, todavía hay varias clases de errores de software que pueden aplicarse a Java / Scala y otros lenguajes que se ejecutan en entornos administrados.

Esto puede variar desde problemas de validación de entrada como inyección de SQL y secuencias de comandos entre sitios hasta problemas de manejo de errores y mal uso de la criptografía. Una fuente de información es esta taxonomía de problemas de seguridad, que muestra una amplia gama que afecta a Java. Obviamente, Scala no sufrirá todos los mismos problemas, pero le brinda la imagen de que los lenguajes administrados aún pueden beneficiarse del análisis estático.

    
respondido por el Rоry McCune 12.06.2015 - 21:52
fuente

Lea otras preguntas en las etiquetas