Pruebas de inyección continua de SQL

7

Tenemos un conjunto de aplicaciones web internas de Python / Django que están bastante bien probadas en cuanto a funcionalidad, pero de vez en cuando descubrimos vulnerabilidades y, específicamente, lugares donde pueden ocurrir SQL y otros tipos de inyecciones. Actualmente, este es un proceso muy manual que requiere el conocimiento del sistema (caja blanca).

Pero, ¿hay alguna manera de realizar una prueba de inyección SQL automatizada de todos nuestros puntos finales de API de las aplicaciones que se están probando?

Supongo que algunas de las cosas que no entiendo ahora son: ¿deberíamos escribir la lógica de estas pruebas y ejemplos para ellas y usarlas, por ejemplo, Python unittest framework, o hay una manera de especificar puntos finales y posibles parámetros y deje que algún marco de prueba de seguridad genere las entradas con formato incorrecto para probar las inyecciones de SQL ( sqlmap ?) (la pregunta es en cierto sentido si sería una prueba basada en el Ejemplo o Pruebas basadas en la propiedad )

    
pregunta alecxe 19.12.2017 - 02:57
fuente

3 respuestas

1

Me gustaría ver este problema desde un punto de vista diferente.

Ha dicho que encontró muchas SQLI en diferentes puntos finales de API en su aplicación.

¿Cuál fue exactamente la solución / mitigación para tal problema? ¿Y cómo es posible que incluso después de esta solución se hayan encontrado otros problemas en otros puntos finales en la misma aplicación?

¿Cómo se estructura exactamente la aplicación?

Mi idea fue construir como un túnel donde todas las solicitudes de API pasan primero y verificar la cadena de caracteres contra una lista blanca de caracteres, por ejemplo. Creo que hay bibliotecas que también podrían hacer eso bastante bien.

También la mayoría de los ORM en la actualidad están haciendo este trabajo por usted.

Quizás también sería interesante saber cómo se construye exactamente la capa de acceso a datos en su aplicación y tratar de refactorizarla y seguir la Cheatsheet OWASP en la mitigación de SQLis.

No estoy sugiriendo ignorar la parte de pruebas de automatización. Tengo más curiosidad por saber por qué sigue existiendo este problema después de solucionarlo muchas veces.

También es imposible decir que puede eliminar totalmente estos problemas, por eso incluso después de encontrar una solución genérica para toda la aplicación, es posible que aún necesite estas pruebas automatizadas.

    
respondido por el shawkyz1 31.12.2017 - 14:22
fuente
2

Podrías crear un script de ejemplo basado en pruebas con bastante facilidad. Con una solicitud de muestra, sqlmap puede hacer el resto. Lo único que no hace por defecto, creo, son los parámetros de ruta, pero eso también podría incorporarse en su script. El problema con esto es que aumentará exponencialmente la cantidad de tiempo que se tarda en ejecutar las pruebas unitarias y, por lo general, no se realiza de esta manera. Depende de usted y sus desarrolladores determinar si el tiempo agregado es aceptable. En mi experiencia, generalmente no lo es. También puede generar algo que inicie el mapa de SQL en un hilo separado, por ejemplo, cuando se implemente algo en la etapa, y alertar a la seguridad si se encuentra algo. De esta forma no bloquearías tu construcción. Sin embargo, las pruebas basadas en ejemplos serían la respuesta a tu pregunta.

    
respondido por el joe 19.12.2017 - 07:46
fuente
1

¡Pregunta interesante!

Necesitará automatizar múltiples procesos para que esto funcione. No hay ningún producto mágico (que yo sepa) que haga esto, pero aquí hay un algoritmo:

  1. Reúna información sobre los servidores web que ejecutan sus aplicaciones SQL. Esto se puede hacer fácilmente a través de nmap -sS host-range -oX output.xml -p 80,443,8080,1080

  2. De estas aplicaciones encontradas, se reúnen los parámetros POST / GET del archivo output.xml para ponerlos a prueba. Esto se puede hacer a través de curl y algunos scripts bash, o el analizador python XML con la ayuda de curl o wget .

  3. Utilice la lista de parámetros de POST / GET reunidos para alimentar a SQLMap para las pruebas de Inyecciones SQL. Algo como esto:

    para cada POST / REQUEST en la lista {     ejecute SQLMap -u link_from_list --risk 3 --level 3     si está marcado como inyección SQL     {report ()} }

  4. Investiga el informe; elimine los falsos positivos y finalice un informe para que el equipo de desarrollo lo corrija

  5. ¡Parche, parche, parche!

  6. Comience de nuevo en el paso [1]

respondido por el AK_ 31.12.2017 - 12:23
fuente

Lea otras preguntas en las etiquetas