Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

TEMA 1 Introducción a la Programación Concurrente
Archivos de Texto. Introducción Los archivos son una secuencia de bits que se guarda en el disco duro. La ventaja de utilizar archivos es que los datos.
ESTRUCTURA DE LOS LENGUAJES DE PROGRAMACION
III - Gestión de memoria
Presentación: Rocío Tablado Martínez.
Subsistemas De un Sistema Operativo Celeste Domínguez Romo
INSTTUTO TECNOLOGICO DE APIZACO
Clase 3: Punteros y Referencias
Introducción a Programación Concurrente
Programación I Teoría III
Resolución de Problemas y Algoritmos Buffer - Read & Readln
Modelo de procesos de dos estados
66.20 Organización de Computadoras
RMI Remote Method Invocation
Windows XP sp3.
Teoría de lenguajes y compiladores
BUFFER OVERFLOW Y EXPLOITS
Programación en Lenguaje Ensamblador.
Almacenamiento virtual de sitios web: «Hosts» virtuales Gustavo Antequera Rodríguez.
Unidad 3 Punteros.
Estructuración y modularidad de los programas Fundamentos de Programación/ Programación I
Material de apoyo Unidad 2 Estructura de datos
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Acceso a datos con ADO.NET
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA OCHO THREADS.
PROCESAMIENTO PARALELO.  Organización lógica ◦ Visión que tiene el programados  Capacidad de expresar tareas paralelas (Estructura de control)  Método.
Nombre, Alcance y Asociaciones (Bindings). Agenda Definición Nombre y Bindings Binding Time Importancia del Binding Time Eventos relacionados a la Asociación.
Práctica 7 AOC. Gestión de la pila Una pila es una estructura de datos caracterizada por que el último dato que se almacena es el primero que se obtiene.
Tema 10: Gestión de Memoria
MIPS Intermedio.
Sistemas Operativos Procesos.
Programación III Clase 07 Funciones.
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
Overview Sistemas Computacionales
Resolución de Problemas y Algoritmos Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Bahía Blanca - Argentina.
Asignación de Espacio No Contiguo
Administración de Memoria
Programación en MIPS.
Informática Ingeniería en Electrónica y Automática Industrial
Hebras Cecilia Hernández. Qué es un proceso? Consiste Espacio de direccionamiento Código a ejecutar Datos estáticos y dinámicos Pila o stack CPU: PC,
Aplicación de estructuras de datos
Tipos de Datos. Entrada-Salida.. La entrada-salida (I/O) le permite a un programa comunicarse con el mundo exterior. Esta comunicación puede realizarse.
Capítulo 7 Gestión de memoria.
APRENDIZ: SANDRA L. CAICEDO C. ORDEN: 20194
Informática Ingeniería en Electrónica y Automática Industrial
Universidad de Chile - Tupper 2007, Santiago - Fono/Fax: (56 2) cec.uchile.cl Módulo ECI - 11: Fundamentos de Redes de Computadores.
Recursividad (2 clases) 1. Nivelación Funciones Menú Vectores String
Elementos básicos del lenguaje
Administrador de procesos
Servicios en Red UT5. Servicios FTP.
CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO
Contenido:  ¿Qué son los Punteros?  Los Procedimientos: New y Dispose.
LABORATORIO DE ESTRUCTURA DE COMPUTADORES II Desarrollo de aplicación Cliente-Servidor.
Unidad 2 – Gestión de Procesos
Visual Basic FUNCIONES Y PROCEDIMIENTOS
S ERVICIOS DE RED E I NTERNET T EMA 4 : I NSTALACIÓN Y ADMINISTRACIÓN DE SERVICIOS W EB Nombre: Adrián de la Torre López.
File Transfer Protocol.
Teoría de lenguajes y compiladores
Teoría de Sistemas Operativos Memoria Departamento de Electrónica 2º Semestre, 2003 Gabriel Astudillo Muñoz
Johnny Alexander Salazar Jhon Fredy Giraldo Giraldo Sebastián Cardona.
Almacenamiento virtual de sitios web: «Hosts» virtuales
También es conocido como proceso ligero. Es una entidad básica de utilización de CPU y esta formado por un contador de programa, algunos registros y una.
MEMORIA DINÁMICA.
PUNTEROS. Los punteros son de amplia utilización en programación y muchos lenguajes permiten la manipulación directa o indirecta de los mismos. Su razón.
MIPS Intermedio.
Tema 1. Estructuras de datos Objetivo: Objetivo: El alumno resolverá problemas de almacenamiento, recuperación y ordenamiento de datos y las técnicas de.
Gestión de Memoria – Parte 2
GENERALIDADES DEL NIVEL ISA DE LA MAQUINA VIRTUAL JAVA (JVM) Generalidades del nivel ISA.
Katty Evangelina Hipólito Chi.   Aunque cada maquina tiene un lenguaje ensamblador distinto, el proceso de ensamblador tiene suficiente similitudes.
Transcripción de la presentación:

Desbordamiento de buffer remoto Conceptos básicos (CPU Intel x86)

Ventajas del método: ● No necesita cuenta de usuario en la máquina a asaltar como la necesitaría una escalada de privilegios. ● Los exploits suelen ser bastante compactos y no muy extensos. ● El código de Windows...

Tipos de Desbordamiento ● Tres tipos : – Desbordamiento de buffer en stack (machacar dirección de retorno en el stack). < – Desbordamiento de “heap memory” (machacar “header” de espacio libre, la función de asignación machaca dirección de retorno de función). – Desbordamiento en segmento de datos (machacar puntero a función).

Código y datos de sólo lectura Variables estáticas (espacio reservado y valores de inicialización) Pila (stack) Memoria dinámica (heap) Parte alta de memoria Parte baja de memoria Regiones de un proceso en memoria:

... buff_aux_local Dirección de Retorno Parámetro 1 Parte alta de la pila Stack pointer Parte alta de memoria Parte baja de memoria Parte baja de la pila función(char *parametro1,...) { char buff_aux_local[N];... procesa la petición del usuario del servicio: parte de la info se mete en buff_aux_local; } main() {... char buff_pet_usuario[SIZE];... apertura de un socket, asociado a un puerto donde se presta el servicio; escucha en el socket y lo que reciba lo mete en buffer buff_pet_usuario;... función(buff_pet_usuario,...);... } buff_pet_usuario... MAINMAIN FUNCIONFUNCION Saved Frame Pointer

Buffer local, es desbordado y en la posición de la dirección de retorno de la función, metemos una dirección que apunta a una posición dentro de buff_pet_usuario, a un lugar que nos interese en el shellcode. ¡ Dirección de retorno machacada! buff_aux_local... Info... Dirección dentro de buff_pet_usuario Parámetro 1... Info... Shellcode buff_pet_usuario La función copia parte de la petición a buff_aux_local Info a copiar en buff_aux_local 1) 2) 3) STACK OVERFLOW

Shellcode ● Escucha en otro puerto diferente al del servicio o aplicación. ● Asocia una “shell” de commandos interactiva a ese puerto. ● Con un poco de suerte... ¡ se ejecutará con privilegios de administrador!

Requisitos del shellcode: ● El paso a ensamblador de la shellcode debe cumplir con el requisito de no tener caracteres nulos intermedios, pues podrían ser entendidos como final del string que se mete en el buffer (p.ej: MOVL %EBX,0x0 -> XOR %EBX,%EBX). ● La estructura de la información en el buffer a desbordar, dependerá de la aplicación o servicio a ser atacado. Normalmente el código de la shellcode, y la información necesaria para desbordar el buffer local de la función vulnerable, se integrarán en una petición “válida” para esa aplicación o servicio. ● No sabemos donde está el buffer en el que colocamos el shellcode: todos los direccionamientos deben ser relativos.

buff_pet_usuario: NOP NOP... JMP CALLZ (salto relativo) - sacar de la pila dirección del string “/bin/sh” y meterlo en un registro. - apertura de un socket en un puerto predefinido, - espera conexiones en ese puerto. - ejecutar la shell CALL START CALLZ START Dirección de salto: algún lugar entre los NOPs “/bin/sh” Dirección en pila,como dirección de retorno de CALL START No sabemos en qué sitio de la memoria va a estar el string “/bin/sh” Info de la petición Info a copiar a buff_aux_local SHELLCODESHELLCODE

En un caso real (I): ● Para una aplicación/versión/S.O. determinados que queremos atacar, podemos averiguar donde comienza la pila. A partir de ahí intentar caer en los NOPs de relleno que hemos colocado con el shellcode en el buffer. ● El fin de los NOPs es aumentar la probabilidad de acertar en el sitio adecuado con el salto.

En un caso real (II): ● Connect back shells: – Abren conexiones a puertos predefinidos de la máquina atacante. – El objetivo es burlar posibles firewalls intermedios. ● En desbordamientos de buffer locales, usar variables de entorno si no cabe el shellcode en el buffer donde se realiza la petición del usuario: – Las variables de entorno se cargan a principio de la pila del programa.

Referencias: ● : – Smashing the stack for fun and profit. ● – How to write buffer overflows. ● – Writing buffer overflows exploits – a tutorial for beginners. ● – How to write secure code. ● ●

FIN de la primera parte ¡Que no nos pase nada!

Demo de Exploits: ● Microsoft IIS 5.x SSL PCT1.0 Remote Windows 2K/XP Exploit (MS04-011). ● KAHT II Massive DCOM RPC Exploit (MS03-026). ● Microsoft Internet Explorer.ANI Files Handling Exploit (MS ). ● LSASS.EXE Win2K Pro Remote Denial-of-Service (MS04-007). ● Metasploit (version 2.4 : 77 exploits).