Builder vs. Breaker - ¿Los desarrolladores son buenos probadores de lápiz y viceversa?

4

¿Los desarrolladores necesariamente hacen buenos probadores de penetración & viceversa?

La razón por la que lo pregunto es que me parece que tengo una habilidad mucho mayor para descubrir cómo funciona una pieza de software existente y puedo manipularla que diseñar y desarrollar cosas por mí mismo.

Puedo programar y diría que tengo un nivel intermedio de experiencia pero me cuesta mucho pasar de la idea al proyecto terminado. Estoy mucho más motivado y siento que estoy mucho más en un estado mental de flow al intentar Para hacer ingeniería inversa, está funcionando algo que tengo delante de mí.

Creo que es una idea similar a la de un escritor o pintor que habla sobre la ansiedad de mirar una página en blanco. Siento que cuando estoy trabajando hacia atrás desde una pieza de software existente, ya existen restricciones y contexto que me dan algo con lo que me aferro mentalmente. Mientras que cuando se desarrolla un software en una página en blanco y todas las formas posibles de diseñar e implementar algo, mi mente da vueltas y analiza todas las posibilidades.

He visto esto discutido en los círculos de seguridad como constructores contra interruptores. La idea de que algunas personas están más conectadas para construir cosas con los rasgos que favorecen eso y otras para señalar qué está mal con eso.

En su experiencia, ¿es esto algo real o simplemente una falsa dicotomía?

¿Qué tan esenciales son las habilidades de desarrollo para las pruebas de penetración?

Definitivamente disfruto mucho aprender cómo se implementan las cosas y no soy tímido de leer la fuente para averiguarlo. Me gusta escribir scripts más pequeños y herramientas que tienen un propósito específico, pero están llenos de proyectos de programación con muchas abstracciones de arquitectura que a menudo termino perdiendo interés e ímpetu.

¿Cuánto debo dejar que esto me moleste si mi objetivo es hacer pruebas de pluma en lugar de una posición de desarrollo real?

    
pregunta MTLPhil 15.01.2014 - 00:17
fuente

2 respuestas

8

En términos generales, para ser un buen pentester, debes dominar algunas de las habilidades que se requieren para ser un buen programador. La experiencia de desarrollo sólido sobre los posibles errores de programación es muy útil, ya que muchos intentos se refieren a la búsqueda de casos de esquina en los que el programador no pensó, es decir, errores. Esto va en ambos sentidos: un buen desarrollador debe tener algunas habilidades de prueba porque hacer un código robusto implica cuidar de condiciones anómalas, el tipo de cosas que el pentester (y los posibles atacantes) intentan disparar.

Hay facetas del desarrollo de software que no ayudan directamente con el pentesting; en particular, las habilidades estructurales como saber cómo diseñar una API simple, elegante y extensible, o ser bueno en la documentación de código.

Hay facetas de pentesting que no ayudan directamente con el desarrollo, p. ej. Todo lo que equivale a la ingeniería social.

En cuanto a los rasgos psicológicos, diría que no es realmente una cuestión de construir contra romper; al menos no se trata de ser bueno al construir o romper. Se trata más bien de divertirse al construir o romper. Hacer la prueba puede ser frustrante, especialmente si estás en el lado "creativo" de las personas, porque pasas todo el día tratando con código mal escrito y sabes puedes hacerlo mucho mejor, pero ese no es tu trabajo. Por otro lado, una intrusión exitosa en un servidor aparentemente robusto es intelectualmente gratificante; Pentesting es una batalla de ingenio, donde luchas contra la mente de los desarrolladores, mientras que el desarrollo es una batalla contra las leyes de la física, que a veces puede ser desalentadora. Desarrollo o prueba, puede hacerlo durante mucho tiempo solo si la actividad le resulta placentera.

Alexander the Great fue un desarrollador; Machiavelli fue un pentester. Genghis Khan fue a la vez.

    
respondido por el Thomas Pornin 15.01.2014 - 00:42
fuente
4

El Oso ya ha dado una gran respuesta, pero permítame intentar responder esto desde la perspectiva de un pentestro que se ilumina como desarrollador.

Hay múltiples aspectos para las pruebas de penetración. Conozco algunos pentesters que son absolutamente increíbles a nivel de sistema y nivel de seguridad de red, mientras que hay otros que se centran principalmente en la seguridad de aplicaciones. En mi experiencia, los primeros generalmente provienen de un equipo de soporte de escritorio / ingeniero de redes / administrador de sistemas. Los últimos, la mayoría de las veces, provienen de un fondo de desarrollo. * Eso, para mí, lo ha estado diciendo de muchas maneras. Como se indicó en la otra respuesta, un probador de penetración con experiencia en desarrollo suele ser bueno para encontrar fallas en el software, especialmente si han pasado mucho tiempo en la industria; solo se necesita cierta capacitación para pensar como Un hacker para encontrar fallas de seguridad en código y aplicaciones. Estos muchachos también serán buenos para revisar el código por problemas de seguridad y encontrarán soluciones elegantes para estos defectos que un desarrollador que de otra manera no tendría experiencia no podría implementar.

La otra ventaja que tienen las personas de seguridad de aplicaciones, y en general, los probadores de penetración con experiencia en desarrollo es la capacidad de desarrollar sus propias herramientas cuando están probando código. En algún momento, se le acabarán las herramientas disponibles para hacer su trabajo, y va a piratear el código de alguien o escribir su propio código para hacer lo que quiera. Si bien he visto a personas con habilidades básicas de python hacer esto, las herramientas más elegantes y bellamente hechas provienen de personas con un fondo de desarrollo clásico.

Dicho esto, también he visto algunos desarrolladores de explotación e ingenieros de ingeniería inversa que, aunque son buenos para escribir código, realmente no quieren hacerlo. Pero son increíbles en lo que hacen y su conocimiento como desarrollador les facilita revertir el código, analizar el malware o incluso escribir su propio malware.

Al final del día, en mi experiencia personal, saber escribir y leer el código es de suma importancia, especialmente si está interesado en ingresar a la seguridad de la aplicación. Entender cómo funcionan las aplicaciones definitivamente me ha facilitado la posibilidad de romper aplicaciones.

Para resumir, si usted es bueno al escribir código, tiene una ventaja sobre muchas personas en el campo: muchos buenos chicos de seguridad de aplicaciones que conozco absolutamente chupan a escribir buen código. Si estás más interesado en hackear otras aplicaciones para hacer lo que quieres que hagan, sigue haciéndolo. Si escribir código desde una plataforma de papel en blanco te asusta ... bueno, intenta trabajarlo y ganar confianza, porque no es difícil una vez que obtienes algo de experiencia. Todo es un proceso de aprendizaje, ¡así que sigue aprendiendo!

    
respondido por el Karthik Rangarajan 15.01.2014 - 02:34
fuente

Lea otras preguntas en las etiquetas