Written by: on 14/06/2023 @ 08:00

El arte de la prueba de fuzzing es una práctica esencial en la caja de herramientas de cualquier profesional de la ciberseguridad. Aunque la base de esta técnica, suministrar entradas aleatorias o «fuzz» a un sistema para identificar errores, es simple, las aplicaciones avanzadas de fuzzing pueden ser complejas y matizadas. En este artículo, exploraremos las técnicas avanzadas de fuzzing aplicadas al código JavaScript y a las URLs, utilizando las herramientas jsfuzz y wfuzz, respectivamente.

Fuzzing en JavaScript con jsfuzz

Paso 1: Configuración de jsfuzz

La instalación de jsfuzz se realiza a través de npm, utilizando el comando npm install -g jsfuzz. Asegúrate de tener Node.js instalado en tu sistema antes de proceder.

Paso 2: Desarrollo de un harness avanzado

La implementación de un harness para jsfuzz debe ser más que una simple función; es necesario considerar diferentes estrategias para ejercer presión sobre las diversas partes del código objetivo. Por ejemplo, podrías crear un harness que explore las diferentes formas de interactuar con un objeto de tu código:

javascriptCopy code// harness.js

const MyObject = require('./MyObject');

module.exports = {
    fuzz: function(data) {
        let obj = new MyObject();
        data = new Uint8Array(data);
        let methodIndex = data[0] % 3;
        let arg = data[1];

        switch(methodIndex) {
            case 0:
                obj.method1(arg);
                break;
            case 1:
                obj.method2(arg);
                break;
            case 2:
                obj.method3(arg);
                break;
        }
    }
};

En este ejemplo, el harness intenta llamar a tres métodos diferentes en un objeto con argumentos aleatorios. La variedad y la aleatoriedad son claves en el fuzzing eficaz.

Paso 3: Ejecución y análisis

Ejecuta jsfuzz en la línea de comandos, proporcionando la ubicación del código de prueba y los datos de prueba iniciales. Analiza los resultados con atención, no sólo buscando errores sino también observando comportamientos inesperados.

Fuzzing en URLs con wfuzz

Paso 1: Preparación de wfuzz

Puedes instalar wfuzz utilizando pip, el gestor de paquetes de Python. Usa el comando pip install wfuzz.

Paso 2: Técnicas avanzadas de fuzzing

A continuación, te mostramos cómo utilizar wfuzz de manera más efectiva en el fuzzing de URLs. Puedes aplicar múltiples payloads y utilizar filtros y scripts personalizados para crear pruebas de fuzzing más eficientes. Aquí te mostramos un ejemplo avanzado de cómo usar wfuzz:

cssCopy codewfuzz -c -z file,wordlist1.txt -z file,wordlist2.txt --script=html --hc 404 http://example.com/FUZZ/FUZ2Z

En este ejemplo, utilizamos dos listas de palabras para aplicar más variaciones en las pruebas. --script=html le dice a wfuzz que utilice un script personalizado (en este caso, un script que analiza HTML) para analizar las respuestas.

Consideraciones éticas y legales

A pesar de su utilidad, recuerda que el fuzzing no es una panacea. No detectará todas las vulnerabilidades y puede dar lugar a falsos positivos. Por lo tanto, deberías combinar el fuzzing con otras técnicas de prueba de seguridad.

Además, es crucial obtener el consentimiento antes de realizar pruebas de seguridad en sistemas ajenos. Participar en programas de recompensas por errores, o «bug bounty», puede ser una excelente manera de aplicar tus habilidades de fuzzing de forma ética y beneficiosa.

Fuzzing como Etapa en el Proceso de Integración y Entrega Continua (CI/CD)

Incorporar el fuzzing en el pipeline de Integración y Entrega Continua (CI/CD) puede fortalecer enormemente el proceso de desarrollo de software. Al hacerlo, se pueden detectar automáticamente las vulnerabilidades y errores de seguridad antes de que el código llegue a producción.

Considera el fuzzing como una etapa de pruebas automatizadas en tu pipeline de CI/CD. Después de las pruebas unitarias y de integración, pero antes de la entrega o despliegue, puedes ejecutar tus harness de fuzzing. Esto podría ser tan simple como un script de shell que ejecuta jsfuzz o wfuzz, o podría implicar el uso de una herramienta de CI/CD que integra las pruebas de fuzzing, como Jenkins con su plugin fuzzing.

Además, el fuzzing continuo también proporciona una retroalimentación útil para el proceso de desarrollo, permitiendo que los desarrolladores vean rápidamente si un cambio reciente ha introducido nuevas vulnerabilidades.

Al final, incorporar el fuzzing en tu pipeline de CI/CD permite un enfoque más proactivo hacia la seguridad, facilitando la detección temprana de vulnerabilidades y ayudando a mantener la integridad de tu código a medida que evoluciona y crece.

Catogories: Otros

Leave a Reply