Shellcodes Eduardo Ruiz Duarte Rommel Sanchez Verdejo

Slides:



Advertisements
Presentaciones similares
Introducción a C#.
Advertisements

Introducción a JavaScript (js)
ÍNDICE Introducción. Trabajar con Applets. Definición de Applet.
Tecnologías para desarrollo de aplicaciones web. Un caso de uso
T5-multithreading SO-Grado Q1.
Informática II Clase 12: Flujos Diego Fernando Serna Restrepo
INTRODUCCIÓN A JAVA.
Arquitecturas de Computadoras Capítulo I. Abstracciones
INSTTUTO TECNOLOGICO DE APIZACO
Ing. Esp. Ricardo Cujar. El computador: es una máquina que permite hacer tareas aritmético y lógicas de una manera fácil, consta de software y hardware.
Temas Operaciones básicas Instalando el compilador
Funciones. Programación, Algoritmos y Estructuras de Datos.
DETECCIÓN DE INTRUSOS rodríguez García Juan Carlos 3812
Assembly y el Simulador SPIM
SISTEMAS DE DETECCIÓN DE INTRUSOS (IDS)
RMI Remote Method Invocation
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Programación 1 Introducción
Objetivo: Conocer los componentes hardware y software que constituyen un computador.
Algoritmos y Estructuras de Datos
BUFFER OVERFLOW Y EXPLOITS
Programación en Lenguaje Ensamblador.
METODOLOGIA DE LA PROGRAMACION
Excepciones y archivos Info 033. Exception El término Exception es la palabra corta para la frase "evento excepcional." Definition: Una excepción es un.
Composición Interna de un Procesador
Free Pascal 1. Introducción 2. Instalación 3. Uso 4. Documentación 5. Información Adicional.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
ESTRUCTURA DE LOS SISTEMAS OPERATIVOS
Unidad I Java y C++ : Similitudes y diferencias
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Programas informáticos. Software Se denomina software al conjunto de programas y procedimientos necesarios para hacer posible la realización de una tarea.
(C) Universidad de Las Palmas de Gran Canaria
Semana 5 Subprogramas..
Programación III Clase 07 Funciones.
STACK BUFFERS OVERFLOWS. Linux con nucleos 2.4 & 2.6 en arquitectura i386 y compatibles. strcpy(); ANSI C (string.h) David Reguera García.
Estructura de un programa C
Archivos.
Introducción a la Programación. Lenguaje de Máquina.
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Programación de Sistemas
Un programa no es nada mas que una serie de instrucciones dadas al ordenador en un lenguaje entendido por el, para decirle exactamente lo que queremos.
EXPLOITEXPLOIT Equipo 3Equipo 3. Exploit: Es un programa o código que "explota" una vulnerabilidad del sistema o de parte de él para aprovechar esta deficiencia.
Programación en MIPS.
LENGUAJE DE PROGRAMACIÓN
Archivos Programación I MC Beatriz Beltrán Martínez.
INTRODUCCIÓN A JAVA. Índice ¿Qué es Java? La plataforma Java 2 La Máquina Virtual de Java Características principales ¿Qué ventajas tengo como desarrollador?
Un ejemplo de uso de estos operadores: int a, b, c; a = 0xd3; b = 0xf5; c = 0x1e; d =a |b; d =b &c; d =a ^c; d = ~c; d =c 4 Equivale a
UD 1: “Adopción de pautas de seguridad informática” Análisis de las principales vulnerabilidades de un sistema informático. Luis Alfonso Sánchez Brazales.
introducción al lenguaje
software Tipos y clasificación Kiehnle Barocio Paola Félix Lucia
Sara Isabel Osorio Alacraz Ana Isabel Vallejo Grisales
HERRAMIENTAS DE SEGURIDAD
El núcleo del sistema operativo
PROGRAMAS INFORMATICOS
INTRODUCCION A SISTEMAS OPERATIVOS
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
1 Unidad I Panorama general de lenguajes de programación en aplicaciones mecatrónicas M.C. Juan Carlos Olivares Rojas.
SEMANA 01_2.
Johnny Alexander Salazar Jhon Fredy Giraldo Giraldo Sebastián Cardona.
Maquinas Digitales UNIDADES DE CONTROL.
María Camila Restrepo C. Mantener la Operatividad del sistema
Elementos y tipos de sistemas operativos
UNIDAD I INTRODUCCION A LOS S.O.
Unidad 1 Introduccion a los programas Concepto de Programa El término programa (del latín programma, que a su vez proviene de un vocablo griego) tiene.
Aprende el arte de la ingeniería inversa
MEMORIA DINÁMICA.
Visual Basic Prof.: Carol Briones García. Uso de Archivos  Definición  Es un conjunto de información que se almacena en algún medio de escritura que.
Introducción MSc. Rina Arauz.
Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)
Transcripción de la presentación:

Shellcodes Eduardo Ruiz Duarte Rommel Sanchez Verdejo

Agenda ● Definiciones – Shellcode – Exploit – Syscalls ● Creando Shellcodes – Ejemplo ● Polimorfismo ● Deteccion

Definiciones: Shellcode ● Shellcodes: Son pequenos programas escritos en ensamblador que, en la mayoria de los casos, ejecutan una linea de comandos propia del sistema operativo para el cual han sido escritos. ● Generalmente los Shellcodes son parte del codigo de un exploit.

Definiciones: Exploit ● Un exploit es un programa, escrito en cualquier lenguaje de programacion, que pretende tomar ventaja sobre algun error o descuido en la programacion de cualquier otro software. ● Generalmente escritos para obtener privilegio sin autorizcion o inhabilitar cualquier equipo de computo.

Exploits ● Dos tipos de exploits – Locales : Se tiene acceso previo al equipo de computo afectado. – Remotos : Nunca se ha tenido accesso al equipo de computo. ● Vulberabilidades frecuentes: – Buffer Overflow – Format String – Heap Overflow – Cross Site Scripting.

Apariencia de un Shellcode static char shellcode[] = "\x31\xc0\x89\xc3\x89\xd9\x89\xca\xb0\x04\xb3\x01\x68\x68\x6f\x6c \x61\x89\xe1\xb2\x04\xcd\x80\xb0\x01\xcd\x80";

Syscalls © Una vez que un Sistema Operativo toma el control, existen dos modos en los que cualquier programa se puede ejecutar, el modo de kernel y el modo de usuario (kernel mode, user mode, respectivamente); la mayor parte del tiempo el código que ejecutamos esta en modo de usuario. Pero se ahcen referencias exahustivas al modo kernel. Código como lo son controladores de dispositivos están siempre en modo kernel. © Las llamadas a sistema son las que proveen una interfaz entre el modo de usuario y el modo de kernel. © La definición de syscalls para Linux (LSB) se encuentra en : © {$INCLUDEDIR}/asm/unistd.h

Creando shellcode write():... Synopsis: ssize_t write(int fd, const void *buf, size_t count);... Codigo en C: int main ( void ) { write (1, “hola”, 4); return 1; } $gcc -S write.c.file "write.c".section.rodata.LC0:.string "hola".text.globl main.type main: pushl %ebp movl %esp, %ebp subl $24, %esp andl $-16, %esp movl $0, %eax subl %eax, %esp movl $4, 8(%esp) movl $.LC0, 4(%esp) movl $1, (%esp) call write leave ret.size "GCC: (GNU) (Gentoo Linux r1, ssp , pie )"

Creando Shellcode : int $0x80.globl main main: xor %eax, %eax mov %eax, %ebx mov %ebx, %ecx mov %ecx, %edx mov $4,%al mov $1,%bl push $0x616c6f68 mov %esp, %ecx mov $4, %dl int $0x80 mov $1, %eax int $0x80 en Linux,... Cuando una aplicación del espacio de usuario realiza una llamada del sistema, los argumentos son pasados a través de los registros y la aplicación ejecuta la instrucción 'int 0x80'. Esto causa un reajuste en el modo núcleo y el procesador salta al punto de entrada system_call en entry.S....

Shellcode: Apariencia ● char shellcode[] = "\x31\xc0\x89\xc3\x89\xd9\x89\xca\xb0\x04\xb3\x01\x68\x68\x6f\x6c\x61 \x89\xe1\xb2\x04\xcd\x80"; NOPShellcode Padding ret Exploit

Polimorfismo Existen formas para sobrepasar IDS’s ya que estos a veces detectan datos en la red por ejemplo si vemos pasar un \xcd\x80 y despues un /bin/sh, esto puede aletar a nuestro IDS por lo tanto se pueden emplear tecnicas de ofuscacion y/u otros tipos de nops (Un nop es una operación nula) Por ejemplo:

Polimorfismo Independientes: 1. mov %eax,%eax 2. xchgl %ebx,%ebx Nops dependientes de otros pueden ser 1. addw $-0xdead,%di subw $-0xdead,%di 2. xor %eax,%eax daa

ADMmutate ● Creada en 2001 con la finalidad de eludir intervenciones por IDS ● ADMmutate es un API para escribir “shellcode” polimorfico. bastan solo 12 lineas para poder crear un “engine” de la forma: NOP Engine Shellcode Padding ret encoded shellcode [24] = "\x8c\xbf\xa1\x64\xdf\x07\xb8\x64\xd6\x3e\x65\x5e\x1d\xe6\x09\x82" "\x70\xef\xe8\x0c\xae\x8a\xac\x6d" ENGINE[94] = "\xeb\x57\xc1\xc8\x0e\x83\xf8\x03\x8b\x34\x24\x83\xec\x04\xf7\xd0" "\x31\xc9\x99\x8c\xe0\x92\x87\xd2\xbb\x1c\x8e\x61\xed\x98\xc1\xc8" "\x5f\x99\x87\xdb\xb1\x09\xf5\x87\xc9\x8b\x06\x09\xd8\x21\x1e\xf7" "\x16\x21\x06\xb0\x07\x83\xc6\x01\x8c\xc0\xf8\x83\xc8\x1f\x8c\xc0" "\x83\xc6\x01\x97\x83\xe0\x9e\x96\x40\x96\xc1\xc0\x93\x3f\xb0\x5b" "\x96\x40\x96\xe2\xd4\xeb\x08\x8c\xc0\xe8\xaa\xff\xff\xff"

Deteccion ● Identificacion del Campo de NOPS * – Encontrar equivalencias NOP – Falsos positivos – No es posible manejar la posibilidad por paquete en tiempo real. ● Tecnicas de Emulacion de codigo en la maquina sensor. * ● Analisis de Espectro * ● “Data mining”

Deteccion IDS: NOPS ● Reglas dflt: ● alert ip $EXTERNAL_NET $SHELLCODE_PORTS -> $HOME_NET any (msg:"SHELLCODE x86 NOOP"; content:"| |"; depth:128; reference:arachnids,181; classtype:shellcode-detect; sid:648; rev: 7;) ● Existen mas de 50 equivalentes NOP. ● Segun R.L. Grossman, define al “data mining” como: "preocuparse de patrones, asociaciones, cambios, anomalias y estrcuturas con significado estadistico en la inforamcion de eventos” : En este caso, el “campo nop”

Referencias ● Tecnicas Polimorfismo: 0x09_Polymorphic_Shellcode_Engine.txt ● IA32 opcode : ● Linux int 0x80: LINUX/dentro-nucleo-linux-html/dentro-nucleo-linux-2.html ● G-con Secutiry Tips & Tricks: Buffer Overflows ● ● Real Time Polymorphic Shellcode Detection: radware ● Pollymorphic Buffer Overflow: Pallavi Garg ● ADMmutate: ktwo.ca/security.html: ● Shellforge:

Gracias! Rommel Sanchez: Eduardo Ruiz: Esta presentacion fue elaborada con Software Libre