¿Mi pentester, mi enemigo? Los desarrolladores revelan lo que realmente piensan sobre el pentesting y los resultados del análisis estático
Un desarrollador, en su hábitat natural, a menudo se encuentra en un estado de profunda concentración, codificando características impresionantes con plazos ajustados. La creación de funciones suele ser nuestra parte favorita del trabajo y, en realidad, es el resultado fundamental del ciclo de vida del desarrollo de software (SDLC).
Sin embargo, como hemos comentado antes, muchos de nosotros seguimos dando prioridad a las funciones sobre las mejores prácticas de seguridad. Después de todo, en la mayoría de las organizaciones, está configurado para ser el trabajo de otra persona y la formación de seguridad adecuada para nosotros es limitada. Las pruebas de penetración y las herramientas de escaneo de análisis estático (más conocidas como SAST) son sólo una parte del proceso general para mitigar los riesgos de seguridad, operando de forma bastante independiente de lo que hacemos... hasta que el código nos llega de vuelta para las correcciones, por supuesto.
Y es en ese momento cuando muchos desarrolladores piensan:"¿Me odian los pentesters?".
Estas interacciones suelen definir un equipo, una cultura. Lo preocupante es que la falta de comunicación, entendimiento y colaboración en general ha creado tensiones, al menos en el lado del desarrollador. Piénsalo: Imagínate que has pasado unos cientos de horas esculpiendo una estatua maravillosa, y entonces llega alguien con un martillo y empieza a romper trozos de ella después de haberte dicho que sus cimientos no están a la altura. Esa es la dinámica que se percibe entre un probador y un desarrollador: este último ve cómo su software es masacrado por una persona ajena que no ha trabajado en el proceso con él; en cambio, ha ampliado la carga de trabajo y retrasado la satisfacción de enviar el código.
Al haber entrado en el espacio de la seguridad hace tiempo, puedo ver ambos lados de la historia. Y no, los pentesters no odian a los desarrolladores. El pentester está, con toda probabilidad, sobrecargado de trabajo y bajo mucha presión. Por ello, un flujo constante de errores de seguridad comunes que podrían arreglarse fácilmente a nivel de código le quitan tiempo, recursos y espacio para pensar en los problemas realmente serios.
Siempre vi a los pentesters como una especie de padres. Quieren que te vaya bien, y cuando no lo haces... no se enfadan, solo se decepcionan.
Ahora que he puesto esa imagen (quizás un poco injusta) en tu mente, vamos a explorar esto un poco más a fondo. ¿Qué ha provocado esta visión del mundo entre los desarrolladores?
"Por supuesto que me pongo a la defensiva; ¡me están diciendo cómo hacer mi trabajo!"
A nadie le gusta sentir que ha hecho un mal trabajo, o que a alguien no le gusta su trabajo. Desgraciadamente, cuando los desarrolladores reciben los resultados de los análisis estáticos y los pentest, pueden sentirse como si se tratara de un boletín de notas. Les han puesto notas bajas, pero al final del día, sus jefes les evalúan por las características que han construido y el tiempo que han entregado, no por si había elementos vulnerables en el software o no.
Para el pobre pentester, este es un caso de "no disparar al mensajero". No es nada personal: su misión es encontrar bugs, y los han encontrado. Es cierto que, de persona a persona, puede que algunos pentesters sean más gruñones que otros, pero no pretenden (o no deberían) crucificar a los equipos de desarrollo. Sería mucho más fácil para ambos equipos si estuvieran en la misma página con lo que constituye la mejor práctica de seguridad. Y no se espera que los desarrolladores sean perfectos; siendo realistas, el equipo de pruebas está ahí para protegerlos de la entrega de código vulnerable.
"Me han dicho que arregle todos estos problemas menores, ¿no saben que hay prioridades mayores? ¿Y por qué no me ayudan a arreglarlos si les importa tanto?"
Es cierto: la máxima prioridad de un desarrollador siempre será la creación de funcionalidades, y en este loco mundo de rápida digitalización, tendrá que hacerse a toda velocidad. Aunque algunos programadores tienen un interés personal en la seguridad y la codificación segura, el sentimiento general es que la seguridad es "problema de otros", lo que inevitablemente incluye a los pentesters.
La mayoría de las vulnerabilidades comunes son, de hecho, problemas menores para remediar - una vez conocidos, las correcciones son simples de ejecutar para cosas como el cross-site scripting (XSS) y la inyección SQL... el problema es que muchos desarrolladores no se dan cuenta de que los están introduciendo en primer lugar, y estos problemas aparentemente menores son la pequeña ventana de oportunidad que un atacante necesita para causar problemas devastadores para una empresa. Según Akamai, entre noviembre de 2017 y marzo de 2019, las vulnerabilidades de inyección SQL representaron el 65% de todos los vectores de ataque basados en la web. Para una vulnerabilidad que tiene una solución conocida desde hace más de veinte años, es una estadística aleccionadora.
Algunos equipos de pentest ayudan a remediar los fallos de seguridad, pero otros proporcionan un informe con las malas noticias y esperan que los desarrolladores trabajen en las correcciones, incluso si se han trasladado a un proyecto diferente para cuando esto sucede. Y en algunos casos, el equipo de desarrollo puede enfrentarse a un informe que incluya fallos que no pueden (o no se debe esperar que los solucionen); aun así, debe formar parte de las conclusiones y, de nuevo, no debe tomarse como algo personal.
El "término medio" para esto sería que los pentesters, el personal de seguridad y los directores de desarrollo actuaran más bien como mentores para garantizar que el equipo tiene lo que necesita en términos de formación y herramientas eficaces, dando a los codificadores individuales la mejor oportunidad de tener éxito y codificar de forma segura desde el principio del SDLC. Ambos equipos deberían reunirse a mitad de camino para garantizar que la seguridad se tiene en cuenta desde el principio, como parte de una práctica saludable de DevSecOps.
"Tengo muchos más conocimientos de seguridad de los que se me atribuyen; estos informes son en su mayoría falsos positivos, o no son importantes".
El análisis estático es un elemento del proceso de seguridad en el SDLC, y las herramientas de escaneo de análisis estático (SAST) juegan un papel fundamental. Y sí, los falsos positivos son un problema con estos y otros tipos (DAST/IAST/RAST) de escáneres. Es una molestia en lo que ya es un proceso lento, que requiere la revisión manual del código y presiona tanto a los desarrolladores como a los pentesters. El personal de pentesting se ha tomado el tiempo de configurar meticulosamente las reglas personalizadas para evitar lecturas inexactas y ha proporcionado orientación específica para la empresa, sin embargo, algunas lecturas falsas se cuelan y terminan frente a un desarrollador que se rasca la cabeza.
Este proceso no es perfecto, pero el otro problema es que muchos desarrolladores carecen de conocimientos suficientes para mitigar muchas de las vulnerabilidades más comunes de forma constante. Dado que la formación en seguridad es escasa en la educación terciaria y que la formación en el puesto de trabajo varía en cuanto a su eficacia, es lógico que también haya un cierto exceso de confianza (y no es culpa de ellos: nosotros, como industria, tenemos que mejorar para dotarles de lo que necesitan).
"No sabía que esta aplicación iba a ser probada, pero ahora estoy atascado con las tareas de corrección".
A veces, los ingenieros sobrecargados de trabajo asumen que los pentesters están esperando el momento de probar una aplicación y arruinar el desfile del equipo de desarrollo. Están probando en exceso, son puntillosos, están creando trabajo extra.
El único problema es que ellos también están sobrecargados de trabajo (más aún, de hecho, la escasez de habilidades de ciberseguridad está en niveles terribles y empeorando) y simplemente no tienen tiempo para hacer pruebas sin razón. No son los únicos que toman la decisión de dar prioridad a las pruebas; pueden haber sido solicitadas por la alta dirección, un cliente, como parte de una auditoría de seguridad o incluso determinadas como resultado de un programa de recompensas por errores.
Para un desarrollador, ser retirado de los sprints de creación de características actuales para trabajar en correcciones de seguridad es molesto, especialmente si no es su trabajo. Tal vez un equipo anterior hizo la última actualización, u otro proveedor. Sin embargo, la seguridad es un problema de todos. Eso no significa que todos los desarrolladores tengan que apropiarse de los errores de seguridad como si los hubieran hecho ellos mismos, pero sí tienen que participar en la fiesta en términos de que la seguridad es una responsabilidad compartida.
¿A dónde vamos a partir de aquí?
A veces, un cambio de mentalidad puede ser todo lo que se necesita para avanzar significativamente en la solución de un problema. Ya hemos hablado de la reacción más bien fría que tiene un desarrollador ante los resultados menos favorables de un pentest, pero ¿qué pasaría si pudiera convertirlo en un reto? Tal vez podrían pensar en el pentester como un competidor amistoso; alguien a quien pueden vencer en su propio juego. Después de todo, un desarrollador consciente de la seguridad que puede eliminar los errores comunes mientras escribe el código va a hacer su trabajo mucho más difícil. Por el contrario, un desarrollador que no se centra en la seguridad va a ser ampliamente superado por sus homólogos pentester cuando puedan romper fácilmente su software.
Puede que los pentesters y los desarrolladores no estén unidos en armonía el 100% de las veces, pero su relación puede mejorar enormemente cuando una organización aborda la seguridad como una prioridad clave, y empodera a los equipos con los conocimientos y las herramientas adecuadas para tener éxito, especialmente a los desarrolladores. Todo se reduce a si una cultura de seguridad positiva en toda la empresa es una prioridad, y si vamos a luchar la batalla (actualmente) perdida contra las vulnerabilidades comunes, absolutamente debería serlo.
Las pruebas de penetración y las herramientas de escaneo de análisis estático (más conocidas como SAST) son sólo una parte del proceso general para mitigar los riesgos de seguridad, que operan de forma bastante independiente de lo que hacemos - ¡hasta que el código nos llega de vuelta para las correcciones, por supuesto!
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.
Un desarrollador, en su hábitat natural, a menudo se encuentra en un estado de profunda concentración, codificando características impresionantes con plazos ajustados. La creación de funciones suele ser nuestra parte favorita del trabajo y, en realidad, es el resultado fundamental del ciclo de vida del desarrollo de software (SDLC).
Sin embargo, como hemos comentado antes, muchos de nosotros seguimos dando prioridad a las funciones sobre las mejores prácticas de seguridad. Después de todo, en la mayoría de las organizaciones, está configurado para ser el trabajo de otra persona y la formación de seguridad adecuada para nosotros es limitada. Las pruebas de penetración y las herramientas de escaneo de análisis estático (más conocidas como SAST) son sólo una parte del proceso general para mitigar los riesgos de seguridad, operando de forma bastante independiente de lo que hacemos... hasta que el código nos llega de vuelta para las correcciones, por supuesto.
Y es en ese momento cuando muchos desarrolladores piensan:"¿Me odian los pentesters?".
Estas interacciones suelen definir un equipo, una cultura. Lo preocupante es que la falta de comunicación, entendimiento y colaboración en general ha creado tensiones, al menos en el lado del desarrollador. Piénsalo: Imagínate que has pasado unos cientos de horas esculpiendo una estatua maravillosa, y entonces llega alguien con un martillo y empieza a romper trozos de ella después de haberte dicho que sus cimientos no están a la altura. Esa es la dinámica que se percibe entre un probador y un desarrollador: este último ve cómo su software es masacrado por una persona ajena que no ha trabajado en el proceso con él; en cambio, ha ampliado la carga de trabajo y retrasado la satisfacción de enviar el código.
Al haber entrado en el espacio de la seguridad hace tiempo, puedo ver ambos lados de la historia. Y no, los pentesters no odian a los desarrolladores. El pentester está, con toda probabilidad, sobrecargado de trabajo y bajo mucha presión. Por ello, un flujo constante de errores de seguridad comunes que podrían arreglarse fácilmente a nivel de código le quitan tiempo, recursos y espacio para pensar en los problemas realmente serios.
Siempre vi a los pentesters como una especie de padres. Quieren que te vaya bien, y cuando no lo haces... no se enfadan, solo se decepcionan.
Ahora que he puesto esa imagen (quizás un poco injusta) en tu mente, vamos a explorar esto un poco más a fondo. ¿Qué ha provocado esta visión del mundo entre los desarrolladores?
"Por supuesto que me pongo a la defensiva; ¡me están diciendo cómo hacer mi trabajo!"
A nadie le gusta sentir que ha hecho un mal trabajo, o que a alguien no le gusta su trabajo. Desgraciadamente, cuando los desarrolladores reciben los resultados de los análisis estáticos y los pentest, pueden sentirse como si se tratara de un boletín de notas. Les han puesto notas bajas, pero al final del día, sus jefes les evalúan por las características que han construido y el tiempo que han entregado, no por si había elementos vulnerables en el software o no.
Para el pobre pentester, este es un caso de "no disparar al mensajero". No es nada personal: su misión es encontrar bugs, y los han encontrado. Es cierto que, de persona a persona, puede que algunos pentesters sean más gruñones que otros, pero no pretenden (o no deberían) crucificar a los equipos de desarrollo. Sería mucho más fácil para ambos equipos si estuvieran en la misma página con lo que constituye la mejor práctica de seguridad. Y no se espera que los desarrolladores sean perfectos; siendo realistas, el equipo de pruebas está ahí para protegerlos de la entrega de código vulnerable.
"Me han dicho que arregle todos estos problemas menores, ¿no saben que hay prioridades mayores? ¿Y por qué no me ayudan a arreglarlos si les importa tanto?"
Es cierto: la máxima prioridad de un desarrollador siempre será la creación de funcionalidades, y en este loco mundo de rápida digitalización, tendrá que hacerse a toda velocidad. Aunque algunos programadores tienen un interés personal en la seguridad y la codificación segura, el sentimiento general es que la seguridad es "problema de otros", lo que inevitablemente incluye a los pentesters.
La mayoría de las vulnerabilidades comunes son, de hecho, problemas menores para remediar - una vez conocidos, las correcciones son simples de ejecutar para cosas como el cross-site scripting (XSS) y la inyección SQL... el problema es que muchos desarrolladores no se dan cuenta de que los están introduciendo en primer lugar, y estos problemas aparentemente menores son la pequeña ventana de oportunidad que un atacante necesita para causar problemas devastadores para una empresa. Según Akamai, entre noviembre de 2017 y marzo de 2019, las vulnerabilidades de inyección SQL representaron el 65% de todos los vectores de ataque basados en la web. Para una vulnerabilidad que tiene una solución conocida desde hace más de veinte años, es una estadística aleccionadora.
Algunos equipos de pentest ayudan a remediar los fallos de seguridad, pero otros proporcionan un informe con las malas noticias y esperan que los desarrolladores trabajen en las correcciones, incluso si se han trasladado a un proyecto diferente para cuando esto sucede. Y en algunos casos, el equipo de desarrollo puede enfrentarse a un informe que incluya fallos que no pueden (o no se debe esperar que los solucionen); aun así, debe formar parte de las conclusiones y, de nuevo, no debe tomarse como algo personal.
El "término medio" para esto sería que los pentesters, el personal de seguridad y los directores de desarrollo actuaran más bien como mentores para garantizar que el equipo tiene lo que necesita en términos de formación y herramientas eficaces, dando a los codificadores individuales la mejor oportunidad de tener éxito y codificar de forma segura desde el principio del SDLC. Ambos equipos deberían reunirse a mitad de camino para garantizar que la seguridad se tiene en cuenta desde el principio, como parte de una práctica saludable de DevSecOps.
"Tengo muchos más conocimientos de seguridad de los que se me atribuyen; estos informes son en su mayoría falsos positivos, o no son importantes".
El análisis estático es un elemento del proceso de seguridad en el SDLC, y las herramientas de escaneo de análisis estático (SAST) juegan un papel fundamental. Y sí, los falsos positivos son un problema con estos y otros tipos (DAST/IAST/RAST) de escáneres. Es una molestia en lo que ya es un proceso lento, que requiere la revisión manual del código y presiona tanto a los desarrolladores como a los pentesters. El personal de pentesting se ha tomado el tiempo de configurar meticulosamente las reglas personalizadas para evitar lecturas inexactas y ha proporcionado orientación específica para la empresa, sin embargo, algunas lecturas falsas se cuelan y terminan frente a un desarrollador que se rasca la cabeza.
Este proceso no es perfecto, pero el otro problema es que muchos desarrolladores carecen de conocimientos suficientes para mitigar muchas de las vulnerabilidades más comunes de forma constante. Dado que la formación en seguridad es escasa en la educación terciaria y que la formación en el puesto de trabajo varía en cuanto a su eficacia, es lógico que también haya un cierto exceso de confianza (y no es culpa de ellos: nosotros, como industria, tenemos que mejorar para dotarles de lo que necesitan).
"No sabía que esta aplicación iba a ser probada, pero ahora estoy atascado con las tareas de corrección".
A veces, los ingenieros sobrecargados de trabajo asumen que los pentesters están esperando el momento de probar una aplicación y arruinar el desfile del equipo de desarrollo. Están probando en exceso, son puntillosos, están creando trabajo extra.
El único problema es que ellos también están sobrecargados de trabajo (más aún, de hecho, la escasez de habilidades de ciberseguridad está en niveles terribles y empeorando) y simplemente no tienen tiempo para hacer pruebas sin razón. No son los únicos que toman la decisión de dar prioridad a las pruebas; pueden haber sido solicitadas por la alta dirección, un cliente, como parte de una auditoría de seguridad o incluso determinadas como resultado de un programa de recompensas por errores.
Para un desarrollador, ser retirado de los sprints de creación de características actuales para trabajar en correcciones de seguridad es molesto, especialmente si no es su trabajo. Tal vez un equipo anterior hizo la última actualización, u otro proveedor. Sin embargo, la seguridad es un problema de todos. Eso no significa que todos los desarrolladores tengan que apropiarse de los errores de seguridad como si los hubieran hecho ellos mismos, pero sí tienen que participar en la fiesta en términos de que la seguridad es una responsabilidad compartida.
¿A dónde vamos a partir de aquí?
A veces, un cambio de mentalidad puede ser todo lo que se necesita para avanzar significativamente en la solución de un problema. Ya hemos hablado de la reacción más bien fría que tiene un desarrollador ante los resultados menos favorables de un pentest, pero ¿qué pasaría si pudiera convertirlo en un reto? Tal vez podrían pensar en el pentester como un competidor amistoso; alguien a quien pueden vencer en su propio juego. Después de todo, un desarrollador consciente de la seguridad que puede eliminar los errores comunes mientras escribe el código va a hacer su trabajo mucho más difícil. Por el contrario, un desarrollador que no se centra en la seguridad va a ser ampliamente superado por sus homólogos pentester cuando puedan romper fácilmente su software.
Puede que los pentesters y los desarrolladores no estén unidos en armonía el 100% de las veces, pero su relación puede mejorar enormemente cuando una organización aborda la seguridad como una prioridad clave, y empodera a los equipos con los conocimientos y las herramientas adecuadas para tener éxito, especialmente a los desarrolladores. Todo se reduce a si una cultura de seguridad positiva en toda la empresa es una prioridad, y si vamos a luchar la batalla (actualmente) perdida contra las vulnerabilidades comunes, absolutamente debería serlo.
Un desarrollador, en su hábitat natural, a menudo se encuentra en un estado de profunda concentración, codificando características impresionantes con plazos ajustados. La creación de funciones suele ser nuestra parte favorita del trabajo y, en realidad, es el resultado fundamental del ciclo de vida del desarrollo de software (SDLC).
Sin embargo, como hemos comentado antes, muchos de nosotros seguimos dando prioridad a las funciones sobre las mejores prácticas de seguridad. Después de todo, en la mayoría de las organizaciones, está configurado para ser el trabajo de otra persona y la formación de seguridad adecuada para nosotros es limitada. Las pruebas de penetración y las herramientas de escaneo de análisis estático (más conocidas como SAST) son sólo una parte del proceso general para mitigar los riesgos de seguridad, operando de forma bastante independiente de lo que hacemos... hasta que el código nos llega de vuelta para las correcciones, por supuesto.
Y es en ese momento cuando muchos desarrolladores piensan:"¿Me odian los pentesters?".
Estas interacciones suelen definir un equipo, una cultura. Lo preocupante es que la falta de comunicación, entendimiento y colaboración en general ha creado tensiones, al menos en el lado del desarrollador. Piénsalo: Imagínate que has pasado unos cientos de horas esculpiendo una estatua maravillosa, y entonces llega alguien con un martillo y empieza a romper trozos de ella después de haberte dicho que sus cimientos no están a la altura. Esa es la dinámica que se percibe entre un probador y un desarrollador: este último ve cómo su software es masacrado por una persona ajena que no ha trabajado en el proceso con él; en cambio, ha ampliado la carga de trabajo y retrasado la satisfacción de enviar el código.
Al haber entrado en el espacio de la seguridad hace tiempo, puedo ver ambos lados de la historia. Y no, los pentesters no odian a los desarrolladores. El pentester está, con toda probabilidad, sobrecargado de trabajo y bajo mucha presión. Por ello, un flujo constante de errores de seguridad comunes que podrían arreglarse fácilmente a nivel de código le quitan tiempo, recursos y espacio para pensar en los problemas realmente serios.
Siempre vi a los pentesters como una especie de padres. Quieren que te vaya bien, y cuando no lo haces... no se enfadan, solo se decepcionan.
Ahora que he puesto esa imagen (quizás un poco injusta) en tu mente, vamos a explorar esto un poco más a fondo. ¿Qué ha provocado esta visión del mundo entre los desarrolladores?
"Por supuesto que me pongo a la defensiva; ¡me están diciendo cómo hacer mi trabajo!"
A nadie le gusta sentir que ha hecho un mal trabajo, o que a alguien no le gusta su trabajo. Desgraciadamente, cuando los desarrolladores reciben los resultados de los análisis estáticos y los pentest, pueden sentirse como si se tratara de un boletín de notas. Les han puesto notas bajas, pero al final del día, sus jefes les evalúan por las características que han construido y el tiempo que han entregado, no por si había elementos vulnerables en el software o no.
Para el pobre pentester, este es un caso de "no disparar al mensajero". No es nada personal: su misión es encontrar bugs, y los han encontrado. Es cierto que, de persona a persona, puede que algunos pentesters sean más gruñones que otros, pero no pretenden (o no deberían) crucificar a los equipos de desarrollo. Sería mucho más fácil para ambos equipos si estuvieran en la misma página con lo que constituye la mejor práctica de seguridad. Y no se espera que los desarrolladores sean perfectos; siendo realistas, el equipo de pruebas está ahí para protegerlos de la entrega de código vulnerable.
"Me han dicho que arregle todos estos problemas menores, ¿no saben que hay prioridades mayores? ¿Y por qué no me ayudan a arreglarlos si les importa tanto?"
Es cierto: la máxima prioridad de un desarrollador siempre será la creación de funcionalidades, y en este loco mundo de rápida digitalización, tendrá que hacerse a toda velocidad. Aunque algunos programadores tienen un interés personal en la seguridad y la codificación segura, el sentimiento general es que la seguridad es "problema de otros", lo que inevitablemente incluye a los pentesters.
La mayoría de las vulnerabilidades comunes son, de hecho, problemas menores para remediar - una vez conocidos, las correcciones son simples de ejecutar para cosas como el cross-site scripting (XSS) y la inyección SQL... el problema es que muchos desarrolladores no se dan cuenta de que los están introduciendo en primer lugar, y estos problemas aparentemente menores son la pequeña ventana de oportunidad que un atacante necesita para causar problemas devastadores para una empresa. Según Akamai, entre noviembre de 2017 y marzo de 2019, las vulnerabilidades de inyección SQL representaron el 65% de todos los vectores de ataque basados en la web. Para una vulnerabilidad que tiene una solución conocida desde hace más de veinte años, es una estadística aleccionadora.
Algunos equipos de pentest ayudan a remediar los fallos de seguridad, pero otros proporcionan un informe con las malas noticias y esperan que los desarrolladores trabajen en las correcciones, incluso si se han trasladado a un proyecto diferente para cuando esto sucede. Y en algunos casos, el equipo de desarrollo puede enfrentarse a un informe que incluya fallos que no pueden (o no se debe esperar que los solucionen); aun así, debe formar parte de las conclusiones y, de nuevo, no debe tomarse como algo personal.
El "término medio" para esto sería que los pentesters, el personal de seguridad y los directores de desarrollo actuaran más bien como mentores para garantizar que el equipo tiene lo que necesita en términos de formación y herramientas eficaces, dando a los codificadores individuales la mejor oportunidad de tener éxito y codificar de forma segura desde el principio del SDLC. Ambos equipos deberían reunirse a mitad de camino para garantizar que la seguridad se tiene en cuenta desde el principio, como parte de una práctica saludable de DevSecOps.
"Tengo muchos más conocimientos de seguridad de los que se me atribuyen; estos informes son en su mayoría falsos positivos, o no son importantes".
El análisis estático es un elemento del proceso de seguridad en el SDLC, y las herramientas de escaneo de análisis estático (SAST) juegan un papel fundamental. Y sí, los falsos positivos son un problema con estos y otros tipos (DAST/IAST/RAST) de escáneres. Es una molestia en lo que ya es un proceso lento, que requiere la revisión manual del código y presiona tanto a los desarrolladores como a los pentesters. El personal de pentesting se ha tomado el tiempo de configurar meticulosamente las reglas personalizadas para evitar lecturas inexactas y ha proporcionado orientación específica para la empresa, sin embargo, algunas lecturas falsas se cuelan y terminan frente a un desarrollador que se rasca la cabeza.
Este proceso no es perfecto, pero el otro problema es que muchos desarrolladores carecen de conocimientos suficientes para mitigar muchas de las vulnerabilidades más comunes de forma constante. Dado que la formación en seguridad es escasa en la educación terciaria y que la formación en el puesto de trabajo varía en cuanto a su eficacia, es lógico que también haya un cierto exceso de confianza (y no es culpa de ellos: nosotros, como industria, tenemos que mejorar para dotarles de lo que necesitan).
"No sabía que esta aplicación iba a ser probada, pero ahora estoy atascado con las tareas de corrección".
A veces, los ingenieros sobrecargados de trabajo asumen que los pentesters están esperando el momento de probar una aplicación y arruinar el desfile del equipo de desarrollo. Están probando en exceso, son puntillosos, están creando trabajo extra.
El único problema es que ellos también están sobrecargados de trabajo (más aún, de hecho, la escasez de habilidades de ciberseguridad está en niveles terribles y empeorando) y simplemente no tienen tiempo para hacer pruebas sin razón. No son los únicos que toman la decisión de dar prioridad a las pruebas; pueden haber sido solicitadas por la alta dirección, un cliente, como parte de una auditoría de seguridad o incluso determinadas como resultado de un programa de recompensas por errores.
Para un desarrollador, ser retirado de los sprints de creación de características actuales para trabajar en correcciones de seguridad es molesto, especialmente si no es su trabajo. Tal vez un equipo anterior hizo la última actualización, u otro proveedor. Sin embargo, la seguridad es un problema de todos. Eso no significa que todos los desarrolladores tengan que apropiarse de los errores de seguridad como si los hubieran hecho ellos mismos, pero sí tienen que participar en la fiesta en términos de que la seguridad es una responsabilidad compartida.
¿A dónde vamos a partir de aquí?
A veces, un cambio de mentalidad puede ser todo lo que se necesita para avanzar significativamente en la solución de un problema. Ya hemos hablado de la reacción más bien fría que tiene un desarrollador ante los resultados menos favorables de un pentest, pero ¿qué pasaría si pudiera convertirlo en un reto? Tal vez podrían pensar en el pentester como un competidor amistoso; alguien a quien pueden vencer en su propio juego. Después de todo, un desarrollador consciente de la seguridad que puede eliminar los errores comunes mientras escribe el código va a hacer su trabajo mucho más difícil. Por el contrario, un desarrollador que no se centra en la seguridad va a ser ampliamente superado por sus homólogos pentester cuando puedan romper fácilmente su software.
Puede que los pentesters y los desarrolladores no estén unidos en armonía el 100% de las veces, pero su relación puede mejorar enormemente cuando una organización aborda la seguridad como una prioridad clave, y empodera a los equipos con los conocimientos y las herramientas adecuadas para tener éxito, especialmente a los desarrolladores. Todo se reduce a si una cultura de seguridad positiva en toda la empresa es una prioridad, y si vamos a luchar la batalla (actualmente) perdida contra las vulnerabilidades comunes, absolutamente debería serlo.
Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Ver el informeReservar una demostraciónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.
Un desarrollador, en su hábitat natural, a menudo se encuentra en un estado de profunda concentración, codificando características impresionantes con plazos ajustados. La creación de funciones suele ser nuestra parte favorita del trabajo y, en realidad, es el resultado fundamental del ciclo de vida del desarrollo de software (SDLC).
Sin embargo, como hemos comentado antes, muchos de nosotros seguimos dando prioridad a las funciones sobre las mejores prácticas de seguridad. Después de todo, en la mayoría de las organizaciones, está configurado para ser el trabajo de otra persona y la formación de seguridad adecuada para nosotros es limitada. Las pruebas de penetración y las herramientas de escaneo de análisis estático (más conocidas como SAST) son sólo una parte del proceso general para mitigar los riesgos de seguridad, operando de forma bastante independiente de lo que hacemos... hasta que el código nos llega de vuelta para las correcciones, por supuesto.
Y es en ese momento cuando muchos desarrolladores piensan:"¿Me odian los pentesters?".
Estas interacciones suelen definir un equipo, una cultura. Lo preocupante es que la falta de comunicación, entendimiento y colaboración en general ha creado tensiones, al menos en el lado del desarrollador. Piénsalo: Imagínate que has pasado unos cientos de horas esculpiendo una estatua maravillosa, y entonces llega alguien con un martillo y empieza a romper trozos de ella después de haberte dicho que sus cimientos no están a la altura. Esa es la dinámica que se percibe entre un probador y un desarrollador: este último ve cómo su software es masacrado por una persona ajena que no ha trabajado en el proceso con él; en cambio, ha ampliado la carga de trabajo y retrasado la satisfacción de enviar el código.
Al haber entrado en el espacio de la seguridad hace tiempo, puedo ver ambos lados de la historia. Y no, los pentesters no odian a los desarrolladores. El pentester está, con toda probabilidad, sobrecargado de trabajo y bajo mucha presión. Por ello, un flujo constante de errores de seguridad comunes que podrían arreglarse fácilmente a nivel de código le quitan tiempo, recursos y espacio para pensar en los problemas realmente serios.
Siempre vi a los pentesters como una especie de padres. Quieren que te vaya bien, y cuando no lo haces... no se enfadan, solo se decepcionan.
Ahora que he puesto esa imagen (quizás un poco injusta) en tu mente, vamos a explorar esto un poco más a fondo. ¿Qué ha provocado esta visión del mundo entre los desarrolladores?
"Por supuesto que me pongo a la defensiva; ¡me están diciendo cómo hacer mi trabajo!"
A nadie le gusta sentir que ha hecho un mal trabajo, o que a alguien no le gusta su trabajo. Desgraciadamente, cuando los desarrolladores reciben los resultados de los análisis estáticos y los pentest, pueden sentirse como si se tratara de un boletín de notas. Les han puesto notas bajas, pero al final del día, sus jefes les evalúan por las características que han construido y el tiempo que han entregado, no por si había elementos vulnerables en el software o no.
Para el pobre pentester, este es un caso de "no disparar al mensajero". No es nada personal: su misión es encontrar bugs, y los han encontrado. Es cierto que, de persona a persona, puede que algunos pentesters sean más gruñones que otros, pero no pretenden (o no deberían) crucificar a los equipos de desarrollo. Sería mucho más fácil para ambos equipos si estuvieran en la misma página con lo que constituye la mejor práctica de seguridad. Y no se espera que los desarrolladores sean perfectos; siendo realistas, el equipo de pruebas está ahí para protegerlos de la entrega de código vulnerable.
"Me han dicho que arregle todos estos problemas menores, ¿no saben que hay prioridades mayores? ¿Y por qué no me ayudan a arreglarlos si les importa tanto?"
Es cierto: la máxima prioridad de un desarrollador siempre será la creación de funcionalidades, y en este loco mundo de rápida digitalización, tendrá que hacerse a toda velocidad. Aunque algunos programadores tienen un interés personal en la seguridad y la codificación segura, el sentimiento general es que la seguridad es "problema de otros", lo que inevitablemente incluye a los pentesters.
La mayoría de las vulnerabilidades comunes son, de hecho, problemas menores para remediar - una vez conocidos, las correcciones son simples de ejecutar para cosas como el cross-site scripting (XSS) y la inyección SQL... el problema es que muchos desarrolladores no se dan cuenta de que los están introduciendo en primer lugar, y estos problemas aparentemente menores son la pequeña ventana de oportunidad que un atacante necesita para causar problemas devastadores para una empresa. Según Akamai, entre noviembre de 2017 y marzo de 2019, las vulnerabilidades de inyección SQL representaron el 65% de todos los vectores de ataque basados en la web. Para una vulnerabilidad que tiene una solución conocida desde hace más de veinte años, es una estadística aleccionadora.
Algunos equipos de pentest ayudan a remediar los fallos de seguridad, pero otros proporcionan un informe con las malas noticias y esperan que los desarrolladores trabajen en las correcciones, incluso si se han trasladado a un proyecto diferente para cuando esto sucede. Y en algunos casos, el equipo de desarrollo puede enfrentarse a un informe que incluya fallos que no pueden (o no se debe esperar que los solucionen); aun así, debe formar parte de las conclusiones y, de nuevo, no debe tomarse como algo personal.
El "término medio" para esto sería que los pentesters, el personal de seguridad y los directores de desarrollo actuaran más bien como mentores para garantizar que el equipo tiene lo que necesita en términos de formación y herramientas eficaces, dando a los codificadores individuales la mejor oportunidad de tener éxito y codificar de forma segura desde el principio del SDLC. Ambos equipos deberían reunirse a mitad de camino para garantizar que la seguridad se tiene en cuenta desde el principio, como parte de una práctica saludable de DevSecOps.
"Tengo muchos más conocimientos de seguridad de los que se me atribuyen; estos informes son en su mayoría falsos positivos, o no son importantes".
El análisis estático es un elemento del proceso de seguridad en el SDLC, y las herramientas de escaneo de análisis estático (SAST) juegan un papel fundamental. Y sí, los falsos positivos son un problema con estos y otros tipos (DAST/IAST/RAST) de escáneres. Es una molestia en lo que ya es un proceso lento, que requiere la revisión manual del código y presiona tanto a los desarrolladores como a los pentesters. El personal de pentesting se ha tomado el tiempo de configurar meticulosamente las reglas personalizadas para evitar lecturas inexactas y ha proporcionado orientación específica para la empresa, sin embargo, algunas lecturas falsas se cuelan y terminan frente a un desarrollador que se rasca la cabeza.
Este proceso no es perfecto, pero el otro problema es que muchos desarrolladores carecen de conocimientos suficientes para mitigar muchas de las vulnerabilidades más comunes de forma constante. Dado que la formación en seguridad es escasa en la educación terciaria y que la formación en el puesto de trabajo varía en cuanto a su eficacia, es lógico que también haya un cierto exceso de confianza (y no es culpa de ellos: nosotros, como industria, tenemos que mejorar para dotarles de lo que necesitan).
"No sabía que esta aplicación iba a ser probada, pero ahora estoy atascado con las tareas de corrección".
A veces, los ingenieros sobrecargados de trabajo asumen que los pentesters están esperando el momento de probar una aplicación y arruinar el desfile del equipo de desarrollo. Están probando en exceso, son puntillosos, están creando trabajo extra.
El único problema es que ellos también están sobrecargados de trabajo (más aún, de hecho, la escasez de habilidades de ciberseguridad está en niveles terribles y empeorando) y simplemente no tienen tiempo para hacer pruebas sin razón. No son los únicos que toman la decisión de dar prioridad a las pruebas; pueden haber sido solicitadas por la alta dirección, un cliente, como parte de una auditoría de seguridad o incluso determinadas como resultado de un programa de recompensas por errores.
Para un desarrollador, ser retirado de los sprints de creación de características actuales para trabajar en correcciones de seguridad es molesto, especialmente si no es su trabajo. Tal vez un equipo anterior hizo la última actualización, u otro proveedor. Sin embargo, la seguridad es un problema de todos. Eso no significa que todos los desarrolladores tengan que apropiarse de los errores de seguridad como si los hubieran hecho ellos mismos, pero sí tienen que participar en la fiesta en términos de que la seguridad es una responsabilidad compartida.
¿A dónde vamos a partir de aquí?
A veces, un cambio de mentalidad puede ser todo lo que se necesita para avanzar significativamente en la solución de un problema. Ya hemos hablado de la reacción más bien fría que tiene un desarrollador ante los resultados menos favorables de un pentest, pero ¿qué pasaría si pudiera convertirlo en un reto? Tal vez podrían pensar en el pentester como un competidor amistoso; alguien a quien pueden vencer en su propio juego. Después de todo, un desarrollador consciente de la seguridad que puede eliminar los errores comunes mientras escribe el código va a hacer su trabajo mucho más difícil. Por el contrario, un desarrollador que no se centra en la seguridad va a ser ampliamente superado por sus homólogos pentester cuando puedan romper fácilmente su software.
Puede que los pentesters y los desarrolladores no estén unidos en armonía el 100% de las veces, pero su relación puede mejorar enormemente cuando una organización aborda la seguridad como una prioridad clave, y empodera a los equipos con los conocimientos y las herramientas adecuadas para tener éxito, especialmente a los desarrolladores. Todo se reduce a si una cultura de seguridad positiva en toda la empresa es una prioridad, y si vamos a luchar la batalla (actualmente) perdida contra las vulnerabilidades comunes, absolutamente debería serlo.
Índice
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.
Reservar una demostraciónDescargarRecursos para empezar
Evaluación comparativa de las competencias en materia de seguridad: optimización del diseño seguro en la empresa
El movimiento Secure-by-Design es el futuro del desarrollo de software seguro. Conozca los elementos clave que las empresas deben tener en cuenta cuando piensan en una iniciativa Secure-by-Design.
DigitalOcean reduce su deuda de seguridad con Secure Code Warrior
El uso por parte de DigitalOcean de la formación Secure Code Warrior ha reducido significativamente la deuda de seguridad, permitiendo a los equipos centrarse más en la innovación y la productividad. La mejora de la seguridad ha reforzado la calidad de sus productos y su ventaja competitiva. De cara al futuro, SCW Trust Score les ayudará a seguir mejorando las prácticas de seguridad y a continuar impulsando la innovación.
Recursos para empezar
La puntuación de confianza revela el valor de las iniciativas de mejora de la seguridad mediante el diseño
Nuestra investigación ha demostrado que la formación en código seguro funciona. Trust Score, que utiliza un algoritmo basado en más de 20 millones de puntos de datos de aprendizaje procedentes del trabajo de más de 250 000 alumnos en más de 600 organizaciones, revela su eficacia a la hora de reducir las vulnerabilidades y cómo hacer que la iniciativa sea aún más eficaz.
Seguridad reactiva frente a seguridad preventiva: Prevenir es mejor que curar
La idea de introducir la seguridad preventiva en el código y los sistemas heredados al mismo tiempo que en las aplicaciones más recientes puede parecer desalentadora, pero un planteamiento basado en el diseño seguro, aplicado mediante la mejora de las competencias de los desarrolladores, puede aplicar las mejores prácticas de seguridad a esos sistemas. Es la mejor oportunidad que tienen muchas organizaciones de mejorar su seguridad.
Ventajas de la evaluación comparativa de las competencias de seguridad de los desarrolladores
La creciente atención que se presta al código seguro y a los principios del diseño seguro exige que los desarrolladores reciban formación en ciberseguridad desde el principio del proceso de desarrollo de software, con herramientas como Secure Code Warrior's Trust Score, que ayudan a medir y mejorar sus progresos.
Impulsando iniciativas de seguridad por diseño para empresas con éxito significativo
Nuestro último documento de investigación, Benchmarking Security Skills: Streamlining Secure-by-Design in the Enterprise, es el resultado de un análisis profundo de iniciativas reales de Secure-by-Design a nivel empresarial y de la derivación de enfoques de mejores prácticas basados en hallazgos basados en datos.