Presentación para el Hackmeeting III (MadHack 2002) que tuvo lugar entre los días 4 y 6 de octubre del 2002 en el Laboratorio 3 en Lavapies, Madrid. (v 1.0).
Describe los tipos de exploits más habituales, análisis de shellcodes comunes, sistemas de protección "anti-exploits", sistemas de evasión en shellcodes anti IDS y el código fuente contiene descripción detallada de su contenido.
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]RootedCON
Esta charla tratará de enseñar todos los conocimientos básicos para poder llevar a cabo el análisis de un programa dentro de un debugger. Para esto, se enseñará la arquitectura y el lenguaje ensamblador usados en el intel x86 de 32 bits, para después realizar un reversing de un binario para la resolución de un crackme. La teoría, así como las técnicas mostradas en esta charla, servirán a todos los oyentes como bases necesarias en el mundo del análisis de malware, así como en el mundo del exploiting. Es por tanto recomendable a todos los oyentes que quieran seguir el ejemplo que se verá, traer un ordenador portatil con windows (puede usarse una máquina virtual) ya sea de 64 o 32 bits, con el debugger OllyDBG o el debugger x64debugger instalados.
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Este documento describe los tipos de datos escalares en Python, incluyendo números enteros, flotantes, complejos, fraccionarios y lógicos. Explica las reglas para crear identificadores de variables y palabras reservadas. También cubre operaciones aritméticas, conversiones de tipos numéricos, y funciones matemáticas como redondeo en el módulo math.
Este documento proporciona una descripción de las bibliotecas estándar de C. Explica que las bibliotecas ANSI C se incluyen con todos los compiladores y no son imprescindibles para escribir programas en C. Además, incluye índices alfabéticos de funciones y archivos de encabezado para facilitar la consulta de cada función.
Este documento describe la estructura básica de un programa en C++, incluyendo secciones sobre archivos de cabecera, comentarios, directivas de preprocesador, la función main(), identificadores, entrada/salida mediante funciones como printf() y scanf(), variables y constantes, operadores, condicionales if-else y switch, bucles como for y while, y funciones. El documento ofrece una introducción general a los conceptos fundamentales de la programación en C++.
El documento describe las diferentes bibliotecas estándar de C++, incluyendo funciones para manipular ficheros, cadenas, matemáticas, tiempo y más. Explica las funciones incluidas en bibliotecas como iostream, string, cstdlib, ctime y otras, proporcionando ejemplos de su uso.
Librerias Básicas y sus Funciones Lenguaje de Programación CCristian Maza
Este documento describe las principales bibliotecas de C++ y sus funciones. Incluye iostream para entrada/salida, math para operaciones matemáticas, stdio para entrada/salida estándar, stdlib para gestión de memoria y procesos, y string para manipulación de cadenas. Cada biblioteca define funciones clave como cout, pow, printf, free y strcpy.
Las principales librerías estándar del lenguaje C incluyen funciones para E/S, cadenas, matemáticas, memoria, tiempo y más. Algunas definen macros, constantes y tipos. La mayoría contienen funciones para manipular cadenas, realizar conversiones, generar números aleatorios, trabajar con fechas y horas, y realizar tareas de E/S y memoria.
Eduardo Blázquez - Técnicas de Ingeniería Inversa I & II [rooted2018]RootedCON
Esta charla tratará de enseñar todos los conocimientos básicos para poder llevar a cabo el análisis de un programa dentro de un debugger. Para esto, se enseñará la arquitectura y el lenguaje ensamblador usados en el intel x86 de 32 bits, para después realizar un reversing de un binario para la resolución de un crackme. La teoría, así como las técnicas mostradas en esta charla, servirán a todos los oyentes como bases necesarias en el mundo del análisis de malware, así como en el mundo del exploiting. Es por tanto recomendable a todos los oyentes que quieran seguir el ejemplo que se verá, traer un ordenador portatil con windows (puede usarse una máquina virtual) ya sea de 64 o 32 bits, con el debugger OllyDBG o el debugger x64debugger instalados.
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Este documento describe los tipos de datos escalares en Python, incluyendo números enteros, flotantes, complejos, fraccionarios y lógicos. Explica las reglas para crear identificadores de variables y palabras reservadas. También cubre operaciones aritméticas, conversiones de tipos numéricos, y funciones matemáticas como redondeo en el módulo math.
Este documento proporciona una descripción de las bibliotecas estándar de C. Explica que las bibliotecas ANSI C se incluyen con todos los compiladores y no son imprescindibles para escribir programas en C. Además, incluye índices alfabéticos de funciones y archivos de encabezado para facilitar la consulta de cada función.
Este documento describe la estructura básica de un programa en C++, incluyendo secciones sobre archivos de cabecera, comentarios, directivas de preprocesador, la función main(), identificadores, entrada/salida mediante funciones como printf() y scanf(), variables y constantes, operadores, condicionales if-else y switch, bucles como for y while, y funciones. El documento ofrece una introducción general a los conceptos fundamentales de la programación en C++.
El documento describe las diferentes bibliotecas estándar de C++, incluyendo funciones para manipular ficheros, cadenas, matemáticas, tiempo y más. Explica las funciones incluidas en bibliotecas como iostream, string, cstdlib, ctime y otras, proporcionando ejemplos de su uso.
Librerias Básicas y sus Funciones Lenguaje de Programación CCristian Maza
Este documento describe las principales bibliotecas de C++ y sus funciones. Incluye iostream para entrada/salida, math para operaciones matemáticas, stdio para entrada/salida estándar, stdlib para gestión de memoria y procesos, y string para manipulación de cadenas. Cada biblioteca define funciones clave como cout, pow, printf, free y strcpy.
Las principales librerías estándar del lenguaje C incluyen funciones para E/S, cadenas, matemáticas, memoria, tiempo y más. Algunas definen macros, constantes y tipos. La mayoría contienen funciones para manipular cadenas, realizar conversiones, generar números aleatorios, trabajar con fechas y horas, y realizar tareas de E/S y memoria.
Este documento trata sobre registros, archivos y punteros en lenguaje C. Explica que los registros permiten definir nuevos tipos de datos compuestos, los archivos son utilizados para entrada y salida de datos, y los punteros almacenan direcciones de memoria y permiten acceder y modificar valores de variables.
El documento resume los principales hitos en la historia de la programación desde la década de 1940 hasta la actualidad. Se describen los primeros lenguajes de programación creados en los años 50, el desarrollo de nuevos lenguajes en las décadas siguientes, y el impacto de Internet en los años 90 al permitir nuevos tipos de programas.
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de namespaces como std. También explica qué son las bibliotecas, cómo incluirlas en un programa, y proporciona ejemplos de su uso.
Este documento presenta un resumen de 3 conceptos clave de C++:
1) Define los tipos de datos fundamentales como enteros, flotantes, caracteres y booleanos, y explica el tipo void.
2) Explica el concepto de clase en programación orientada a objetos y provee un ejemplo de clase Punto con atributos y métodos.
3) Introduce los constructores como métodos especiales que se ejecutan al crear un objeto y pueden inicializar sus atributos.
Este documento describe las principales librerías de la biblioteca estándar de C++, incluyendo stdio.h, stdlib.h, string.h y time.h, y sus funciones clave para entrada/salida, conversión de tipos, manipulación de cadenas y manejo de fecha y hora. También cubre librerías como assert.h, ctype.h, errno.h, limits.h y math.h y sus macros y funciones para diagnóstico, comprobación de tipos, manejo de errores y operaciones matemáticas.
Lenguaje C para Administradores de Red - Script II Punterossirfids
2da entrega que abarca el uso de punteros en el Lenguaje C de una forma muy sencilla. Dirigido a Administradores de Red que desean incursionar en la programación de este poderoso lenguaje
Este documento lista y describe funciones de la biblioteca estándar de C para operaciones de E/S, manejo de cadenas, matemáticas, memoria dinámica y más. Incluye funciones para abrir, cerrar y manipular archivos, leer y escribir datos, convertir entre tipos de datos, reservar memoria, ejecutar comandos externos y ordenar vectores.
El documento describe algunas de las bibliotecas más importantes en C++, incluyendo iostream para entrada y salida, math.h para funciones matemáticas, stdio.h para entrada y salida estándar, stdlib.h para funciones de memoria y procesos, y string.h para manipulación de cadenas. También proporciona ejemplos de uso de estas bibliotecas.
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura de un programa y función en C, el preprocesador de C y sus directivas como #define, #include y #if. También cubre temas como la lectura de datos desde la consola usando argc y argv, el uso de malloc para reservar memoria dinámica, y free para liberarla.
Este documento presenta las funciones de entrada y salida (E/S) en C, agrupadas en funciones de secuencias o flujos, bajo nivel y consola y puertos. Explica funciones como fopen para abrir archivos, printf para imprimir datos con formato, gets para leer una línea desde stdin y putc para escribir un carácter en un flujo.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
Las bibliotecas o librerías en C++ son archivos que contienen código precompilado para realizar tareas comunes como entrada/salida, funciones matemáticas, y más. Algunas bibliotecas estándares incluyen iostream, string, y math. Para usar una biblioteca, se debe incluir con #include al comienzo del código y se puede acceder a sus funciones a través del espacio de nombres std.
Este documento presenta una introducción al lenguaje de programación Python. Explica conceptos como la arquitectura de un computador, sistemas operativos, lenguajes de programación, compiladores e intérpretes. Luego se enfoca en Python, describiendo sus características, versiones, implementaciones como CPython e IDEs como Wing IDE y PyCharm. Finalmente, proporciona referencias y consejos para aprender Python.
Diapositivas de la formación de C++ que imparto de vez en cuando. No están totalmente actualizadas, pero cubren hasta C++ 11, las pequeñas mejoras en C++ 14 no están.
Este documento proporciona una introducción a la biblioteca SciPy para Python. SciPy es una biblioteca de herramientas numéricas que incluye módulos para optimización, integración, ecuaciones diferenciales, álgebra lineal y más. El documento explica algunas de las funciones básicas de SciPy como crear arrays, operaciones matriciales y funciones especiales como la función gamma.
Este documento presenta una sesión sobre programación estructurada en ANSI C. Cubre temas como elementos lexicográficos, datos escalares, selección, iteración, funciones, punteros, datos estructurados y otros aspectos de C. Explica en detalle conceptos como la definición, declaración y uso de funciones, el paso de argumentos por valor y referencia, el ámbito de variables, y el uso de punteros.
El documento describe diferentes representaciones intermedias utilizadas en la generación de código, incluyendo notación sufija, cuádruplas y tripletes. Explica cómo transformar expresiones de notación infija a sufija y cómo generar automáticamente cuádruplas mediante análisis sintáctico bottom-up o top-down. También cubre la semántica de instrucciones condicionales e etiquetas utilizando cuádruplas.
The document discusses hacking and web application security. It covers the security landscape, hacking techniques like information gathering, SQL injection, cross-site scripting, and security threats. It also discusses the philosophies of black hat, grey hat and white hat hackers. The presenter's agenda includes explaining hacking methodology and demonstrating security vulnerabilities to emphasize the importance of secure web application development.
This document discusses shellcodes, which are machine language payloads that are executed directly by the processor. It defines different types of shellcodes like local, remote, egg-hunt, and omelet shellcodes. It also explains the x86 and x86_64 calling conventions used in Linux and provides examples of x86 and x86_64 shellcode implementations. Additional resources on shellcodes are referenced at the end.
Este documento trata sobre registros, archivos y punteros en lenguaje C. Explica que los registros permiten definir nuevos tipos de datos compuestos, los archivos son utilizados para entrada y salida de datos, y los punteros almacenan direcciones de memoria y permiten acceder y modificar valores de variables.
El documento resume los principales hitos en la historia de la programación desde la década de 1940 hasta la actualidad. Se describen los primeros lenguajes de programación creados en los años 50, el desarrollo de nuevos lenguajes en las décadas siguientes, y el impacto de Internet en los años 90 al permitir nuevos tipos de programas.
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Si quiere descargar la presentación y los códigos fuente, dirijase a:
http://programaciondecomputadoresunalmzl.wikispaces.com/codigos_y_diapositivas
Le agradecería si me reporta los errores que encuentre en la diapositiva (daalvarez arroba unal punto edu punto co)
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de namespaces como std. También explica qué son las bibliotecas, cómo incluirlas en un programa, y proporciona ejemplos de su uso.
Este documento presenta un resumen de 3 conceptos clave de C++:
1) Define los tipos de datos fundamentales como enteros, flotantes, caracteres y booleanos, y explica el tipo void.
2) Explica el concepto de clase en programación orientada a objetos y provee un ejemplo de clase Punto con atributos y métodos.
3) Introduce los constructores como métodos especiales que se ejecutan al crear un objeto y pueden inicializar sus atributos.
Este documento describe las principales librerías de la biblioteca estándar de C++, incluyendo stdio.h, stdlib.h, string.h y time.h, y sus funciones clave para entrada/salida, conversión de tipos, manipulación de cadenas y manejo de fecha y hora. También cubre librerías como assert.h, ctype.h, errno.h, limits.h y math.h y sus macros y funciones para diagnóstico, comprobación de tipos, manejo de errores y operaciones matemáticas.
Lenguaje C para Administradores de Red - Script II Punterossirfids
2da entrega que abarca el uso de punteros en el Lenguaje C de una forma muy sencilla. Dirigido a Administradores de Red que desean incursionar en la programación de este poderoso lenguaje
Este documento lista y describe funciones de la biblioteca estándar de C para operaciones de E/S, manejo de cadenas, matemáticas, memoria dinámica y más. Incluye funciones para abrir, cerrar y manipular archivos, leer y escribir datos, convertir entre tipos de datos, reservar memoria, ejecutar comandos externos y ordenar vectores.
El documento describe algunas de las bibliotecas más importantes en C++, incluyendo iostream para entrada y salida, math.h para funciones matemáticas, stdio.h para entrada y salida estándar, stdlib.h para funciones de memoria y procesos, y string.h para manipulación de cadenas. También proporciona ejemplos de uso de estas bibliotecas.
Este documento presenta una introducción al lenguaje de programación C. Explica conceptos básicos como la estructura de un programa y función en C, el preprocesador de C y sus directivas como #define, #include y #if. También cubre temas como la lectura de datos desde la consola usando argc y argv, el uso de malloc para reservar memoria dinámica, y free para liberarla.
Este documento presenta las funciones de entrada y salida (E/S) en C, agrupadas en funciones de secuencias o flujos, bajo nivel y consola y puertos. Explica funciones como fopen para abrir archivos, printf para imprimir datos con formato, gets para leer una línea desde stdin y putc para escribir un carácter en un flujo.
Este documento describe diferentes tipos de bibliotecas en C++, incluyendo bibliotecas estándar como iostream y math, bibliotecas definidas por el programador, y el uso de prototipos y llamadas a funciones. También explica conceptos como el namespace std y ejemplos de uso común de bibliotecas.
Las bibliotecas o librerías en C++ son archivos que contienen código precompilado para realizar tareas comunes como entrada/salida, funciones matemáticas, y más. Algunas bibliotecas estándares incluyen iostream, string, y math. Para usar una biblioteca, se debe incluir con #include al comienzo del código y se puede acceder a sus funciones a través del espacio de nombres std.
Este documento presenta una introducción al lenguaje de programación Python. Explica conceptos como la arquitectura de un computador, sistemas operativos, lenguajes de programación, compiladores e intérpretes. Luego se enfoca en Python, describiendo sus características, versiones, implementaciones como CPython e IDEs como Wing IDE y PyCharm. Finalmente, proporciona referencias y consejos para aprender Python.
Diapositivas de la formación de C++ que imparto de vez en cuando. No están totalmente actualizadas, pero cubren hasta C++ 11, las pequeñas mejoras en C++ 14 no están.
Este documento proporciona una introducción a la biblioteca SciPy para Python. SciPy es una biblioteca de herramientas numéricas que incluye módulos para optimización, integración, ecuaciones diferenciales, álgebra lineal y más. El documento explica algunas de las funciones básicas de SciPy como crear arrays, operaciones matriciales y funciones especiales como la función gamma.
Este documento presenta una sesión sobre programación estructurada en ANSI C. Cubre temas como elementos lexicográficos, datos escalares, selección, iteración, funciones, punteros, datos estructurados y otros aspectos de C. Explica en detalle conceptos como la definición, declaración y uso de funciones, el paso de argumentos por valor y referencia, el ámbito de variables, y el uso de punteros.
El documento describe diferentes representaciones intermedias utilizadas en la generación de código, incluyendo notación sufija, cuádruplas y tripletes. Explica cómo transformar expresiones de notación infija a sufija y cómo generar automáticamente cuádruplas mediante análisis sintáctico bottom-up o top-down. También cubre la semántica de instrucciones condicionales e etiquetas utilizando cuádruplas.
The document discusses hacking and web application security. It covers the security landscape, hacking techniques like information gathering, SQL injection, cross-site scripting, and security threats. It also discusses the philosophies of black hat, grey hat and white hat hackers. The presenter's agenda includes explaining hacking methodology and demonstrating security vulnerabilities to emphasize the importance of secure web application development.
This document discusses shellcodes, which are machine language payloads that are executed directly by the processor. It defines different types of shellcodes like local, remote, egg-hunt, and omelet shellcodes. It also explains the x86 and x86_64 calling conventions used in Linux and provides examples of x86 and x86_64 shellcode implementations. Additional resources on shellcodes are referenced at the end.
This document provides an overview of shellcode mastering techniques. It discusses the basics of shellcode including features, types, and development tasks. It covers basic shellcode techniques like call/ret algorithms and delta offset approaches. Optimization techniques are explored like instruction format, opcode maps, and common rules. Examples of optimized shellcode from a past competition are analyzed to extract the optimization changes between versions. Practice tasks are provided to write shellcode that performs a reverse connect and executes a second stage payload. Questions from attendees are solicited at the end.
This document discusses buffer overflow exploits and format string vulnerabilities. It begins with an overview of ELF binaries and how programs are laid out in memory. It then covers the stack and how buffer overflows can be used to overwrite the return address on the stack to redirect program flow. The document introduces shellcode that can be used to spawn a shell. It provides examples of exploiting programs using buffer overflows and placing shellcode in environment variables or directly in buffers. The document also covers format string vulnerabilities and how extra format specifiers can be used to read/write memory to bypass the need for a buffer overflow in some cases.
The document discusses various types of shellcodes used in reverse engineering, including local shellcodes, remote shellcodes like reverse shellcodes and bindshell shellcodes, and other less common types. It provides details on the different techniques shellcodes use, such as staged shellcodes that download additional code in stages. The document also introduces the msfpayload command used to generate shellcodes in Metasploit and provides examples of configuring options and outputting shellcode in various formats.
One Shellcode to Rule Them All: Cross-Platform ExploitationQuinn Wilton
As the internet of things becomes less a buzzword, and more a reality, we're noticing that it's growing increasingly common to see embedded software which runs across different architectures -whether that's the same router firmware running across different models, or the operating system for a smart TV being used by different manufacturers. In a world where even your toaster might have internet access, we suspect that the ability to write cross-platform shellcode is going transition from being a merely neat trick, to a viable tool for attackers.
Writing cross-platform shellcode is tough, but there's a few techniques you can use to simplify the problem. We discuss one such method, which we used to great success during the DEFCON CTF qualifiers this year.
Presented by Tinfoil Security founder Michael Borohovski and engineer Shane Wilton at Secuinside 2014, in Seoul.
https://www.tinfoilsecurity.com/blog/cross-platform-exploitation
The course gives a professional and academic introduction to computer and information security using the ethical hacking approach, which enables improved defence thanks to adopting an attacker mindset when discovering vulnerabilities, hands-on experience with different attacks, facilitates linking theory and practice in significant areas of one’s digital literacy, and can therefore be utilized by (future) security professionals, (informed) decision-makers, (savvy) users and developers alike.
This document discusses Cisco IOS shellcoding and reverse engineering. It covers topics like Cisco IOS shellcodes that are image-independent by disassembling or interrupting hijacking. It also discusses Tcl shellcodes, Cisco IOS reverse engineering challenges including lack of modularity and APIs. The document details subsystems, registries, processes, command parser tree, debugging Cisco IOS, and magic numbers used in Cisco IOS.
Netcat is a tool that can be used for port scanning, banner grabbing, file transfer, remote shell access, and chatting over networks using TCP or UDP. It allows viewing open ports on a system through port scanning. Banner grabbing determines the service, version, and OS by connecting to an open port. File transfer and chat are done by setting up Netcat in server and client modes. Remote shell access can be provided through a bind shell, which binds a shell like cmd.exe to a port, or a reverse shell, which sends a shell from the client to a listening Netcat server.
Manual de integración de Latch en Mosquito MQTT BrokerTelefónica
Manual que describe cómo se integra y cómo funciona el sistema de seguridad Latch integrado con el proyecto Open Source Mosquito MQTT Broker para la gestión de dispositivos IoT para el hogar, los sistemas industriales y SCADA.
Historia de los buffer overflows por Juan SaccoJuan Sacco
Este documento resume la historia de los buffer overflows desde sus comienzos en la década de 1990 hasta las defensas actuales como ASLR y canarios de pila. A pesar de décadas de intentos por mitigarlos, los buffer overflows siguen siendo una amenaza debido a factores culturales como la priorización de la velocidad sobre la seguridad en el desarrollo de software. El documento concluye sugiriendo que una mayor capacitación y cambios en los procesos de desarrollo podrían ayudar a prevenir este tipo de vulnerabilidades
Este documento presenta una introducción al concepto de desbordamiento de buffer y cómo tomar el control del flujo de ejecución mediante esta vulnerabilidad. Explica conceptos técnicos como la pila del proceso, shellcodes y técnicas avanzadas como return-into-libc. El objetivo es ofrecer una comprensión de los aspectos técnicos subyacentes para poder subvertir el flujo de ejecución y ejecutar código arbitrario de forma segura.
Este documento proporciona una introducción al desarrollo de exploits en Windows 32 bits. Explica conceptos clave como vulnerabilidades, exploits y shellcodes. También cubre temas como la arquitectura x86, la pila, los registros de la CPU, buffer overflows y contramedidas como stack cookies, ASLR, SafeSEH y DEP. El objetivo final de un exploit es controlar el registro EIP para ejecutar código arbitrario.
En este taller práctico aprenderemos a desarrollar módulos de Kernel que funcionen como rootkits. Al final del taller el participante podrá mostrar un pequeño rootkit que funcione como keylogger. Entenderá y desarrollara técnicas para ocultarse y métodos anti-forenses.
Objetivo Principal:
Aprender las técnicas de desarrollo de Rootkits
Objetivos Secundarios:
Conocer las características del Kernel.
Aprender a generar módulos de Kernel
Conociendo algunas téncias (VFS Hijacking, Syscall Hijacking, StructTask Hijack, Infecting LKM’s)
Temario
Introducción a los Rootkits
Introducción a los Módulos de Kernel
Consideraciones de Programación
Parámetros de Módulos
Estructuras del Kernel
Hijacking
Prácticas
El módulo “Hello World”
Manejando Parámetros en el módulo.
Trabajando con la task_struct
Escondiendo módulos
Hijacking de /proc
Hijacking de syscall
Creando de un keylogger
Requisitos:
Conocimientos medios en C
Manejo básico/medio de linux
Una PC/Laptop con VirtualBox (Se entregará a cada participante una imágen con Debian 64Bits para que comiencen a desarrollar).
Este documento describe una técnica llamada "Shellcode ELF loader" para ejecutar programas de forma encubierta en un sistema comprometido sin dejar evidencias. La técnica utiliza un objeto llamado "lxobject" que contiene el código binario a ejecutar, el contexto de la pila y un cargador de shellcode. Una herramienta llamada "Builder" ensambla el lxobject y la shellcode "Jumper" lo transfiere y activa en la máquina remota simulando un "userland execve". Esto permite ej
Abel Valero - VM + VFS = The Wooden Horse [rooted2018]RootedCON
Se mostrara como analizar malware altamente ofuscado con tecnicas avanzadas como es la implementacion de una maquina virtual para evitar mostrar el codigo real.
El objetivo es descifrar todos y cada uno de los componentes de este malware obteniendo el codigo original antes de pasar por su VM.
Para ello se ha creado distintas herramientas que facilitan esta tarea, veremos como fueron implementandose.
Por ultimo analizaremos el payload final y las tecnicas que utiliza para realizar sus implantes en distintos procesos del sistema, como es el uso de un sistema de archivos virtual (VFS), utilizado para ocultar los distintos componentes.
Este documento habla sobre la construcción de rootkits básicos. Explica qué es un rootkit, los tipos comunes, y funciones como esconder procesos y archivos. Luego cubre consideraciones para desarrollo en kernel vs espacio de usuario, y ejemplos como módulos "Hello World" y manejo de parámetros. Por último, aborda temas avanzados como trabajar con la estructura de tareas, esconder el módulo cargado, y técnicas de hijacking como la tabla de syscalls y VFS.
1) El documento presenta un borrador de un capítulo sobre memoria compartida, semaforos y colas de mensajes en Unix.
2) Describe las tres formas de comunicación entre procesos en Unix (memoria compartida, semaforos y colas de mensajes) y las llamadas del sistema relacionadas.
3) Explica cómo crear canales de comunicación entre procesos usando las llamadas get y el comando ipcs para verificar el estado de los canales.
Este documento proporciona una guía sobre el compilador C18 de Microchip. Explica los tipos de datos soportados, incluyendo enteros y de punto flotante, así como las clases de almacenamiento y calificadores. También cubre temas como secciones de memoria, interrupciones, ensamblador en línea y divergencias respecto al estándar ISO.
Introducción a la programación en c++.
Contenido:
-Tipos de datos
-Entrada y salida por consola
-String
-Preprocesador
-Operadores y sentencias de control
-Punteros
-Arrays
-Cadenas de caracteres
-Memoria dinámica
-Introducción a la POO en c++
-Referencias
El documento presenta 20 ejemplos de programas en C que ilustran diferentes conceptos del lenguaje como la estructura básica de un programa, definición y uso de variables, tipos de datos, operadores, estructuras de control (if-else, switch, while, for), funciones, cadenas de caracteres y entrada/salida. Los ejemplos van desde programas sencillos hasta otros más complejos que muestran el uso combinado de diferentes características del lenguaje.
El documento describe los pasos en el proceso de generación de código máquina a partir de un programa fuente. Explica que el front-end genera un código intermedio que luego es traducido a código de ensamblador teniendo en cuenta la arquitectura de la máquina. Se dividen los bloques básicos y se genera código para cada uno asignando variables a registros y memoria de forma eficiente.
Manuel Blanco - GNU/Linux Binary Exploitation I&II [rooted2018]RootedCON
Taller introductorio a la explotación de software GNU/Linux. Se explicarán diversos tipos de vulnerabilidades (corrupciones de memoria, fugas de información, condiciones de carrera, etc...) siguiendo metodologías actuales del desarrollo de exploits donde se sortearán las protecciones del sistema operativo.
Este documento presenta la segunda clase de un taller de programación orientada a objetos. Explica conceptos como paradigmas de programación, instalación de herramientas de desarrollo Java, tipos de datos primitivos, operadores aritméticos y lógicos, condicionales if y retos de programación. También incluye código de ejemplo para ingreso de datos, cálculos matemáticos y comparaciones.
Este documento presenta la segunda clase de un taller de programación orientada a objetos. Explica conceptos como paradigmas de programación, instalación de herramientas de desarrollo Java, tipos de datos primitivos, operadores aritméticos y lógicos, condicionales if y retos de programación para identificar años bisiestos.
1) El documento describe la creación y gestión de procesos e hilos en Linux. Incluye ejemplos de cómo crear procesos con fork() y hilos con pthread_create(), y cómo comunicarlos y sincronizarlos con wait(), exit(), join() y otras funciones.
2) También explica conceptos básicos como los identificadores de proceso (pid), la estructura jerárquica de procesos, y cómo los procesos e hilos comparten y gestionan la memoria de forma independiente.
3) Finalmente, propone actividades prácticas
Este documento resume los componentes básicos del lenguaje C++, incluyendo tipos de datos, constantes y variables, operadores, instrucciones de control, funciones, arreglos, apuntadores, objetos, archivos de entrada y salida. Explica conceptos como tipos de datos primitivos, cadenas, manipulación de archivos, flujos de entrada y salida, y el operador de resolución de ámbito.
Topicos Avanzados - Sesion Nº 04. Aqui empieza la programación desde cero con php y a ver toda la potencialidad de este lenguaje de programacion web interpretado.
Este documento describe el formato de archivo ELF (Executable and Linking Format) utilizado comúnmente en sistemas tipo Unix como Linux. Explica las estructuras y segmentos de ELF, así como técnicas de hacking y seguridad relacionadas con ELF, incluyendo infección de malware, análisis de vulnerabilidades, firmas digitales y más. Finalmente, concluye que ELF es un formato complejo con valores que podrían ser modificados para violar la especificación.
Similar a Creacion de shellcodes para Exploits en Linux/x86 (20)
Las fuentes abiertas y las habilidades del analista OSINT, juegan un papel clave en la detección, defensa y respuesta ante las nuevas amenazas como la desinformación, las fake news o ataques a infraestructuras críticas, en los que intervienen actores tan diversos como el crimen organizado, el hacktivismo, el ciberterrorismo o los propios Estados, con la finalidad de detectar e identificar actividades que puedan resultar una amenaza, como el terrorismo yihadista o nacionalista.
En la exposición, se mostrarán ejemplos prácticos del uso de diversas técnicas OSINT e inteligencia artificial para adquirir y procesar grandes volúmenes de datos (tanto texto como contenido multimedia), con la finalidad de detectar e identificar actividades que puedan resultar una amenaza, como el terrorismo yihadista o nacionalista.
La ISO cuenta con estándares que especifican los requerimientos necesarios para las organizaciones al implementar sistemas de gestión, entre los cuales se tiene el estándar ISO/IEC 27001:2013 (Implementación de un Sistema de Gestión de Seguridad de la Información) el cual brinda un apoyo para poder lograr un cumplimiento de seguridad de la información en las compañías. Para esto, se debe seguir un proceso específico para poder lograr establecer de forma adecuada el sistema de gestión. Así mismo, el estándar ISO 22301:2012 plantea la gestión de continuidad del negocio el cual ayuda a buscar una operación continua del negocio a las compañías y es un ítem que hace parte de un SGSI. Se observarán el proceso de implementación de estos dos estándares para poder lograr un nivel de cumplimiento en cuanto a las mejores prácticas de seguridad de la información.
Durante el proceso de implementación de un SGSI o de un SGCN en contact centers o en BPOs, se presentan retos específicos de las realidades cambiantes de este tipo de negocios. El dinamismo que presentan hace que la implementación de estos sistemas requiera de una especial atención en los diferentes proyectos a los cuales se enfrentan las organizaciones, exploraremos de forma breve algunos de estos retos.
La nube es un término que agrega diferentes mecanismos de tercerización de los servicios de infraestructura o de aplicaciones, el uso de este tipo de servicios se está generalizando de manera que hoy en día muchas organizaciones que manejan datos sensibles están en proceso de definir una ruta para poder mover sus servicios de tecnología a proveedores de este tipo; sin embargo, estas migraciones conllevan retos importantes a nivel de seguridad, en especial para aquellas organizaciones que deben cumplir con PCI DSS. En esta presentación haremos un recorrido de los aspectos más relevantes a tener en cuenta antes de llevar a cabo una migración de este tipo manteniendo o consiguiendo el cumplimiento de este exigente estándar de seguridad prestando especial atención a aspecto entre los que se encuentran los Modelos de Despliegue y Servicio, las Consideraciones de Segmentación, la Delimitación del Ambiente CDE, etc.
Para los Contact Centers que procesan, trasmiten y/o almacenan datos de tarjetahabiente actualmente es obligatorio el cumplimiento en la normativa PCI DSS v 3.2. Para lograr esto, es necesario implementar controles procedimentales y técnicos los cuales implican esfuerzos y dedicaciones importantes. Al enfrentarse a este reto, surgen una serie de desafíos que varían de acuerdo a las plataformas y los diferentes ambientes, siendo necesario el definir estrategias adecuadas en cada caso para poder lograr el cumplimiento sin mayores impactos.
Se hace un repaso de la familia de normas PCI, el encaje del proceso PCI DSS dentro de estas y sus requerimientos. Se analizó porqué las empresas de Contact Center y BPO han de cumplir y los aspectos clave en este tipo de empresas en la afectación de PCI DSS. Además, se presentó la metodología desarrollada por Internet Security Auditors que permite alcanzar el cumplimiento llevada a cabo con éxito en multitud de clientes, de este y otros sectores afectados por la necesidad de cumplir con PCI DSS.
Tiene como objeto hacer un recuento de los principales fundamentos de las normas de protección de datos personales en Colombia y las obligaciones que de ellas surgen para las organizaciones que hacen tratamiento de datos de carácter personal. Además, se analizarán algunos casos que han derivado en sanciones impuestas por la autoridad administrativa (Superintendencia de Industria y Comercio), al considerar que han existido infracciones a la normativa de protección de datos personales. Finalmente, se expondrá brevemente la metodología utilizada por Internet Security Auditors y Summa Consultores para el desarrollo de proyectos de consultoría en la materia.
GigaTIC 2017 - Más allá del futuro: Negocio, tecnología y robótica. (Abril 2017)Internet Security Auditors
La dependencia cada vez mayor del software y la facilidad de explotación por cualquier actor, requiere incrementar los esfuerzos para minimizar los riesgos y la capacidad de impacto en el negocio. La conferencia presenta una evolución de las técnicas de seguridad en el software, desde las clásicas (Manual Inspections & Reviews, Threat Modeling, Code Review, Pentesting) hasta las más actuales relacionadas con IA y Machine Learning. Se enumeran herramientas de análisis de código basadas en técnicas de Machine Learning, y se presenta una visión respecto la influencia que las nuevas tecnologías y la Inteligencia Artificial pueden tener en el sector de la seguridad.
En la presentación expuesta se puede apreciar los resultados de las auditorias efectuadas a los dispositivos Smart TV (LG 43uf6407, SAMSUNG UE32F5500AW, Panasonic TX-40CX680E) y la Barra de sonido OKI SB Media Player 1g. Durante el workshop se pudieron apreciar fugas de información en las cabeceras de respuesta, servicios expuestos y componentes desactualizados. En el caso de la Barra de sonido OKI y en todos los mediacenter InOut TV las carencias en seguridad son acentuadas, ya que disponen de servicios como XAMPP, con credenciales por defecto, esto sumado la falta de actualizaciones supone un potencial riesgo que ello conlleva. Durante la auditoría también se efectuó una captura del tráfico, llegando en algunos casos a enviar la lista total de canales sintonizados y el orden en que están ordenados en el Smart TV.
Hoy en día las organizaciones están en el proceso de mover su infraestructura tecnológica o sus servicios a la nube. Ya sea por razones de facilidad de crecimiento, de carácter financiero o de foco de negocio. Estos cambios imponen unos retos importantes cuando se involucra el tema de seguridad de la información.
En esta presentación se hace un recorrido de los aspectos más relevantes a tener en cuenta antes de llevar a cabo una migración de este tipo manteniendo o consiguiendo el cumplimiento del estándar de seguridad PCI DSS.
Este documento presenta información sobre los cambios recientes en las normas PCI y los requisitos de cumplimiento. Cubre actualizaciones a PCI DSS y PA-DSS, así como los diferentes tipos de autoformularios SAQ que las empresas pueden usar para demostrar el cumplimiento. También incluye una agenda con temas como los retos de seguridad en pagos, el ecosistema PCI SSC y recursos útiles relacionados con PCI.
Overdrive Hacking Conference 2016 - Riesgos en el uso de las Redes Sociales (...Internet Security Auditors
Las redes sociales permiten, entre otros muchos aspectos, incrementar nuestro nivel de exposición. Este hecho implica a su vez que el nivel de riesgo también se incrementa, poniendo en peligro nuestra privacidad, que puede ser abusada con intenciones muy diversas. La presentación expone los riesgos a los que se expone cualquier usuario cuando crea una identidad digital en una red social, pero desde un punto de vista nada habitual. Para ello, se presentan casos prácticos en los que se demuestra las capacidades de explotación de los datos que exponemos, tanto de forma consciente como inconscientemente.
Conferencia sobre Protección de Datos (Bogotá): Errores comunes en la identif...Internet Security Auditors
Esta presentación se centra, por un lado, en los aspectos más sensibles o complejos del registro en el RNDB, mostrando tanto los errores habituales en el proceso de registro como los puntos donde este proceso puede ser ambigüo o conducir a error y, por tanto, generar una incorrecta declaración de las bases de datos en el Registro; por otro lado, se presentan errores habituales y recomendaciones, basadas en nuestra experiencia en el cumplimiento de Protección de Datos, más allá del registro de BBDD. Una empresa puede haber llevado a cabo esta declaración pero no cumplir con la Ley y, por lo tanto, verse sujeta a sanciones.
1. El documento presenta tres casos resueltos por la SIC relacionados con incumplimientos a la Ley de Protección de Datos en Colombia.
2. El primer caso involucra una empresa que expuso datos personales de clientes en un sitio web sin controles de acceso adecuados.
3. El segundo caso trata sobre una empresa que recopilaba datos personales de forma ilegal y obstruyó una investigación de la SIC.
4. El tercer caso es sobre una empresa que no respondió oportunamente una solicitud de un cliente sobre el uso de sus
Catosfera 2016: Anàlisi de xarxes socials amb finalitats d'investigació: ris...Internet Security Auditors
El documento habla sobre los riesgos y abusos del uso de perfiles en Internet para fines de investigación de redes sociales. Examina cómo la información pública de las redes sociales puede ser utilizada para propósitos de investigación, pero también plantea preocupaciones sobre el respeto a la privacidad de los usuarios y el consentimiento para el uso de sus datos.
En la presentación se tratan aspectos relacionados con la necesidad de tomar decisiones en nuestro día a día. En ocasiones, determinadas decisiones tienen un gran impacto en la sociedad y quienes han de tomarlas se encuentran bajo una fuerte responsabilidad y presión. A continuación, describiendo el problema del exceso de información que disponemos actualmente así como el de la fiabilidad de las fuentes y, por último, comentando el proceso y las bondades del uso de técnicas OSINT en la ayuda para la toma de decisiones como objetivo final. A modo de ejemplo, y tras ver una clasificación de las herramientas OSINT disponibles, se muestra un análisis sobre los atentados de París utilizando la última versión de la herramienta Tinfoleak.
VI Foro Evidencias Electrónicas en la Investigación Policial. Análisis forens...Internet Security Auditors
Como respuesta a nuestra cada vez mayor necesidad de almacenamiento de información, la proliferación de servicios de almacenamiento se ha convertido en un habitual de nuestro día a día, tanto en nuestros sistemas particulares como dentro de la organización donde desempeñamos nuestras tareas. Desde el punto de vista del análisis forense, entender las principales tecnologías en uso, su integración con los sistemas operativos más empleados y las evidencias tecnologías presentes en los sistemas se ha convertido en una necesidad en la mayoría de investigaciones. El objetivo de la ponencia es introducir al oyente tanto en la arquitectura de los servicios como en las evidencias presentes en los sistemas, cubriendo las principales tecnologías en uso.
Taller práctico sobre “Ingeniería inversa en aplicaciones Android", impartido por Vicente Aguilera, en el que se presenta una metodología para llevar a cabo procesos de ingeniería inversa en Android, incluyendo las herramientas y técnicas disponibles. Se lleva a la práctica sobre diversas aplicaciones para poner en práctica los conocimientos adquiridos.
Segunda edición del (ISC)2 Security Congress EMEA celebrado en Munich (Alemania). Vicente Aguilera presenta su ponencia: “Your are beging watched...” en la que se habla de los problemas de privacidad existentes en las redes sociales, y dónde presenta una nueva versión de su ya famosa herramienta Tinfoleak, realizando una demostración en directo sobre cómo extraer información y actividad relevante de los usuarios de Twitter y cómo explotar esta información en el mundo real. Esta ponencia forma parte del Track "Technology, Business and the Future".
KAWARU CONSULTING presenta el projecte amb l'objectiu de permetre als ciutadans realitzar tràmits administratius de manera telemàtica, des de qualsevol lloc i dispositiu, amb seguretat jurídica. Aquesta plataforma redueix els desplaçaments físics i el temps invertit en tràmits, ja que es pot fer tot en línia. A més, proporciona evidències de la correcta realització dels tràmits, garantint-ne la validesa davant d'un jutge si cal. Inicialment concebuda per al Ministeri de Justícia, la plataforma s'ha expandit per adaptar-se a diverses organitzacions i països, oferint una solució flexible i fàcil de desplegar.
para programadores y desarrolladores de inteligencia artificial y machine learning, como se automatiza una cadena de valor o cadena de valor gracias a la teoría por Manuel Diaz @manuelmakemoney
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)AbrahamCastillo42
Power point, diseñado por estudiantes de ciclo 1 arquitectura de plataformas, esta con la finalidad de dar a conocer el componente hardware llamado tarjeta de video..
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...AMADO SALVADOR
Descarga el Catálogo General de Tarifas 2024 de Vaillant, líder en tecnología para calefacción, ventilación y energía solar térmica y fotovoltaica. En Amado Salvador, como distribuidor oficial de Vaillant, te ofrecemos una amplia gama de productos de alta calidad y diseño innovador para tus proyectos de climatización y energía.
Descubre nuestra selección de productos Vaillant, incluyendo bombas de calor altamente eficientes, fancoils de última generación, sistemas de ventilación de alto rendimiento y soluciones de energía solar fotovoltaica y térmica para un rendimiento óptimo y sostenible. El catálogo de Vaillant 2024 presenta una variedad de opciones en calderas de condensación que garantizan eficiencia energética y durabilidad.
Con Vaillant, obtienes más que productos de climatización: control avanzado y conectividad para una gestión inteligente del sistema, acumuladores de agua caliente de gran capacidad y sistemas de aire acondicionado para un confort total. Confía en la fiabilidad de Amado Salvador como distribuidor oficial de Vaillant, y en la resistencia de los productos Vaillant, respaldados por años de experiencia e innovación en el sector.
En Amado Salvador, distribuidor oficial de Vaillant en Valencia, no solo proporcionamos productos de calidad, sino también servicios especializados para profesionales, asegurando que tus proyectos cuenten con el mejor soporte técnico y asesoramiento. Descarga nuestro catálogo y descubre por qué Vaillant es la elección preferida para proyectos de climatización y energía en Amado Salvador.
SOPRA STERIA presenta una aplicació destinada a persones amb discapacitat intel·lectual que busca millorar la seva integració laboral i digital. Permet crear currículums de manera senzilla i intuitiva, facilitant així la seva participació en el mercat laboral i la seva independència econòmica. Aquesta iniciativa no només aborda la bretxa digital, sinó que també contribueix a reduir la desigualtat proporcionant eines accessibles i inclusives. A més, "inCV" està alineat amb els Objectius de Desenvolupament Sostenible de l'Agenda 2030, especialment els relacionats amb el treball decent i la reducció de desigualtats.
1. Creación de Shellcodes para
Exploits en Linux/x86
Daniel Fdez. Bleda
dfernandez@isecauditors.com
Internet Security Auditors, S.L.
HackMeeting III
(Madrid, 5 octubre 2002)
2. Índice (I)
Parte TEÓRICA.
Un poco de historia.
Conceptos básicos: registros, memoria, ASM, etc.
Tipos de exploits.
Modo de actuación de cada tipo de exploit.
Sistemas de protección “anti-exploits”.
Métodos de evasión anti protectores de pila/heap.
Programación de shellcodes para exploits.
Métodos de evasión en shellcodes anti IDS.
3. Índice (II)
Parte PRÁCTICA.
Funcionamiento básico de exploits:
Stack.
Heap (pointer/function pointer/VPTR overwrite).
Format String.
Casos de reales:
Remote root con un b0f.
Remote root con un exploit de formato (Posadis
DNS, Washington University (wu-ftp) FTP).
4. El primer Exploit
2 de noviembre de 1988, un gusano, el
"Internet Worm", causa los mayores daños
de la historia, hasta entonces...
b0f en fingerd y replicación con sendmail.
Desde entonces, se han explotado buffer
overflows en todo tipo de aplicaciones y en
todo tipo de sistemas operativos.
5. La Memoría de un Proceso
ret
ret
call func1 call func2
var *u1, u2
u1=malloc(...)
var *v1, v2
v1=malloc(...)
top memoryfunc2(argy1..argyn)
STACK
HEAP
argx1..argxn
argy1..argyn
u1, v1
u2, v2
func1(argx1..argxn)
./programa
bottom memory
6. Llamadas al Sistema (syscalls)
Un programa de usuario no puede acceder
directamente al HW sino a través de una capa
intermedia (HAL, Hardware Abstraction Level).
Esta capa intermedia la proveen las syscalls.
Las definiciones de las syscalls se encuentran en
la librería (g)libc que ejecutará el kernel para
interactuar con el hardware de la máquina.
Usuario
Kernel
H/W
[g]libc
syscalls
int 80h
7. Descriptores estándar
• Cualquier proceso tiene tres descriptores iniciales
(identificados por un número) para recibir o emitir
salidas del o al exterior:
i. stdin (standar input): es la entrada estándar.
ii. stdout (standar output): es la salida estándar.
iii.stderr (standar error): es la salida de errores
estándar.
stdin(0) proceso stdout(1)
stderr(2)
8. Conceptos de ASM (I):
Registros
Registro Nombre Funciones
*a* Acumulador
Tipo syscall
Valor de retorno
Funciones I/O
*b* Base
Parametro 1º
Valor de retorno
*c* Contador
Contador en bucles
Parámetro 2º
Valor de retorno
*d* Datos
I/O a puertos
Parámetro 3º
Aritméticas
Syscalls
esp Frame PointerTop frame actual de la pila
ebp Stack PointerBase frame actual de la pil
eip y edi Segmentos Paso de datos en el scode
e*x (32b), *x (16b), *h (8b + sig), *l (8b – sig).
9. Conceptos de ASM (II):
Instrucciones
Instrucción Función
mov mover datos entre/de/a un registro/memoria
inc incrementar un registro
dec decrementar un registro
add sumar algo a/desde un registro
sub restar algo a/desde un registro
xor 0 xor 0=0;0 xor 1=1;1 xor 0=1;1 xor 1 = 0;
lea
int ejecuta una interrupción: syscall(0x80)
push añade un elemento en la pila
pop extrae un elemento de la pila
pasar un dato en mem a un registro (load
effective address)
10. La Pila
Parámetros en llamadas a funciones.
Variables locales.
Valores de retorno.
Permitir controlar el flujo de ejecución tras
una llamada a función.
11. La pila en una llamada a función
int funcion(int x, int y, int z)
{
int i = 4;
return (x + i);
}
int main()
{
funcion(0, 1, 2);
return 0;
}
bottom of top of
memory memory
<---- i sfp ret 0 1 2
<---- [ ][ ][ ][ ][ ][ ]
top of bottom of
stack stack
12. Explotando la pila(I):
Cambiando el flujo de ejecución
Void funcion(int a, int b, int c)
{
char buffer1[5];
char buffer2[10];
int *ret;
ret = buffer1 + 12;
(*ret) += 8;
}
int main()
{
int x;
x = 0;
funcion(1, 2, 3);
x = 1;
printf("%dn",x);
}
Si podemos
modificar la dirección
de retorno (ret)
guardada de forma
implicita por “call”
podremos variar el
flujo norma de
ejecución.
¡x = 1 = 0 !
13. Heap
Espacio para variables que emplean
memoria de forma dinámica.
El espacio es reservado por la aplicación.
14. Explotando el Heap (I):
Generalidades
Es más difícil de conseguir que el stack
overflow.
Basado en técnicas diversas:
Sobreescritura de apuntadores a funciones.
Sobreescritura de Vtables.
Explotación de librerías malloc.
Requiere condiciones concernientes a la
organización de un proceso en la memoria.
15. Explotando el Heap (II):
Sobreescritura de punteros
Requiere un orden estricto en la declaración
de variables:
Es difícil que se produzca esta condición.
Requiere localizar la dirección de argv[1].
Es independiente del SO.
...
static char buf[BUFSIZE];
static char *ptr;
...
buf
ptr
buf
ptr
/tmp/tmpfile.tmp
/root/.rhosts
16. Explotando el Heap (II):
Sobreescritura de punteros a funciones
Requiere un orden estricto en la declaración
de variables:
Es difícil que se produzca esta condición.
Permite ejecutar otra función o shellcode.
...
static char buf[BUFSIZE];
static int (*funcptr)(const char *str);
...
buf
ptr
buf
ptr int funcptr(char *str) system(“/bin/sh”)
17. Explotando el Heap (IV):
Alterando VPTR Tables (C++) - 1
Explota el mecanismo dinámico de las
llamadas a funciones virtuales en una clase.
Pocas aplicaciones se desarrollan en C++,
con lo que es complicado de explotar.
Precondición: Necesita que se declare un
buffer y una función virtual dentro de la clase
a explotar.
18. Explotando el Heap (V):
Alterando VPTR Tables (C++) - 2
class BaseClass
{
private:
char Buffer[100];
public:
void SetBuffer(char *String) {
strcpy(Buffer,String);
}
virtual void PrintBuffer() {
printf("%sn",Buffer);
}
};
class MyClass1:public BaseClass
{
public:
void PrintBuffer()
{
printf("MyClass1: ");
BaseClass::PrintBuffer();
}
};
B son los bytes Buffer Object[0]: BBBBBB....BBBBBBBVVVV
V el byte de la VPTR a VTABLE_MyClass1 =+==
I es información de la clase que +--------------------+
hereda de BaseClass (MyClass1) +--> IIIIIIIIIIIIIIIPPPP
P es el apuntador a la fun. PrintBuffer VTABLE_MyClass1
+----(1)---<------------------+ S es la dir. de inicio del shcode
| ==+= N bytes de alineamiento (NOPs)
SSSS..SSSS..NNN..CCCCC..CCCCVVVV0 C codigo del shellcode
| + V Puntero a la función virtual
+----(2)--->-----+ 0 0x00h que finaliza el buffer
19. Overflow de Enteros (I): Heap/Stack
Bugs de tipo.
Algunos valores o parámetros se emplean en
variables de diferentes tamaños de forma
incorrecta.
Permite saltarse comprobaciones de límites
en reservas de memoria, copias de buffers,
etc. El overflow es una consecuencia del uso
incorrecto de los tipos variables.
unsigned short int
0 0
1 1
65534 65534
0 65535
1 65536
20. Overflow de Enteros (II): Heap/Stack
Bugs de signo.
Algunos valores se emplean a veces con
variables con signo y otras sin signo sin
comprobaciones correctas.
Enteros con signo usados en comparaciones.
Enteros con signo usados en operaciones aritméticas.
Enteros sin signo usado en comparaciones con
enteros con signo. unsigned int int
0 0
1 1
4294967293 4294967293
4294967294 0
4294967295 -1
4294967296 -2
21. Exploits de Format String (I)
Emplea una técnica reciente (1999), pero
explota vulnerabilidades que existían desde
hace años (de 2 a 6 y hasta 8).
Explota la posibilidad de poder pasar
directamente a una funcion *printf un
parámetro no parseado: printf(input).
Aprovecha bugs de programación fáciles de
encontrar.
write-anything-anywhere.
22. Exploits de Format String (II)
Emplean la capacidad de poder desplazarse
por la memoria definiendo longitudes de
numeros en una cadena de formato (%Nx).
Y la utilidad de una opción, %n, que
devuelve la cantidad de bytes escritos
previamente.
Desplazandonos por la memoria y sabiendo
la posición de memoria a escribir y
descomponiéndola mediante %hn, podemos
escribir word a word, esta posición.
23. Shellcodes (I)
Es un conjunto de instrucciones compiladas
de ensamblador que realizan una función
normalmente simple y con unas
restricciones precisas debido a su uso.
Toma el nombre a su primer objetivo:
ejecutar una shell.
24. Shellcodes (II):
Funcionamiento básico
La mayoría de veces no podemos saber
donde se encuentra nuestro shellcode en
memoría, debemos aproximar su posición.
Para asegurarnos que ejecutaremos nuestro
scode empleamos el efecto "tobogán": si no
sabemos dónde está, intentaremos saltar
hasta donde podamos hacer que se ejecute.
shellcode
NOP...NOP...NOP...NOP
C
Saltar hasta A, B o C
permite ejecutar el
shellcode que
comienza en D, sin
conocer su posición
exacta en la memoriaD
A
B
25. Shellcodes (III):
Herramientas
gdb: debug/trace.
nasm: compilación de códido ensamblador.
disasm: desemblado/análisis de scodes.
strace: trace de llamadas al sistema.
Un ejecutor de shellcodes.
Un convertidor de scodes a binarios para
análisis de shellcodes.
26. Shellcodes (II):
Limitaciones
NULL byte: No pueden contener 00 (eos).
Addressing problem: No se pueden emplear
dirección de memoria hardcoded.
Tamaño: No se suele disponer de buffers
muy grandes. El shellcode ha de ser
reducido.
27. Shellcodes (IV):
Métodos de evasión anti IDS
Ofuscación de cadenas sensibles a la
detección (p.e. “/bin/sh”).
Shellcodes alfanúmericos (Raise
(netsearch), rix (Phrack)).
Shellcodes comprimidos.
28. Sistemas de protección
“Anti-exploits”: Introducción
La mayoría de exploits son posibles
gracias a funciones C no fiables (e.j strcpy,
sprintf, ..).
Dos mecanismos de protección: Libsafe,
Grsecurity, StackGuard y StackShield.
29. Sistemas de protección
“Anti-exploits”: Libsafe (I)
Librería que reescribe funciones sensibles de la
librería libc (strcpy, strcat, sprintf, vsprintf, fscanf,
scanf, sscanf,..).
Lanza alertas en caso de detectar un posible
intento de buffer overflow.
Librería dinámica. Cargada en memoria antes
que cualquier otra librería.
Intercepta las llamadas a funciones peligrosas de
libc y utiliza la suya en su lugar.
Detecta violaciones en los límites de buffers
Info: http://www.research.avayalabs.com/project/libsafe/
30. Sistemas de protección
“Anti-exploits”: Libsafe (II)
char *strcpy (char *dest, const char *src)
{
char *temp = dest;
while ((*dest = *src)!= '0')
/*nothing*/
return tmp;
}
strcpy original:
Fin de bucle controlado
únicamente por el fin de
cadena '0' !!!
char *strcpy (char *dest, const char *src)
{
...
if ((len = strlen(src, max_size)) == max_size) /*overflow?*/
_libsafe_die(“Overflow caused by strcpy()”);
memcpy(dest,src,len+1); /* libreria estandard de C */
return dest;
}
strcpy de Libsafe:
max_size: distancia (#bytes) entre dest y el frame pointer de dest =>
tamaño máximo posible que puede tener dest.
31. Sistemas de protección
“Anti-exploits”: Libsafe (III)
Beneficios
Fácil de instalar. No se necesita recompilar el kernel
Buena o Mejor performance. Strcat de libsaf es más
rápido que el original.
Inconvenientes
Embedded Frame Pointer => gcc con -fomit-frame-pointer
Podemos ejecutar exploits basados en sobreescritura de
punteros a ficheros o funciones (sin sobrepasar el
max_size)
32. Sistemas de protección
“Anti-exploits”: GrSecurity
Conjunto de parches para el kernel.
Ofrecen la posibilidad de hacer las areas
de memoria stack y heap no ejecutable.
Open Wall -> Stack
PaX -> Head y Stack
www.grsecurity.net
33. Sistemas de protección
“Anti-exploits”: Open Wall (I)
arch/i386/kernel/traps.c
Segmentation fault: Cuando sucede un evento
de memoria inesperado, se procesa en la función
do_general_protection.
do_general_protection: Si estado de los registros
no refleja ninguna de las situaciones previstas =>
Open Wall ofrece nuevas posibilidades de
analisis.
Si alguna de los analisis proporcionados por
Open Wall detecta un intento de ejecutar
instrucciones en la pila => Se lanza una alerta
34. Sistemas de protección
“Anti-exploits”: Open Wall (II)
security_alert("return onto stack by "
DEFAULTSECMSG, "returns onto stack",
DEFAULTSECARGS);
...
Current->thread.error_code = error_code;
current->thread.trap_no = 13;
force_sig(SIGSEGV, current);
return;
gp_in_vm86:
handle_vm86_fault((struct
kernel_vm86_regs *) regs, error_code);
return;
gp_in_kernel:
{
unsigned long fixup;
fixup =
search_exception_table(regs->eip);
if (fixup) {
regs->eip = fixup;
return;
}
die("general protection
fault", regs, error_code);
}
}
asmlinkage void do_general_protection(struct
pt_regs * regs, long error_code)
{
#ifdef CONFIG_GRKERNSEC_STACK
unsigned long addr;
#ifdef CONFIG_GRKERNSEC_STACK_GCC
unsigned char insn;
int err, count;
#endif
#endif
if (regs->eflags & VM_MASK)
goto gp_in_vm86;
if (!(regs->xcs & 3))
goto gp_in_kernel;
#ifdef CONFIG_GRKERNSEC_STACK
.....
/* * * Check if we are returning to the stack area,
which is only likely to happen * * when
attempting to exploit a buffer overflow. * */
if ((addr & 0xFF800000) == 0xBF800000 || (addr >=
PAGE_OFFSET - _STK_LIM && addr < PAGE_OFFSET))
35. Sistemas de protección
“Anti-exploits”: PaX (I)
Utiliza los mecanismos de paginación
(PTE, DTLB, ITLB): Cuando se produce un
fallo de página la CPU carga la nueva
página utilizando el PTE, que contiene los
permisos para cada página.
Controla las páginas de memoria
ejecutables mediante un sistema de
estados y transiciones.
Implementa nuevas funcionalidades en el
mecanismo para el control de los fallos de
página => arch/i386/mm/fault.c
36. Sistemas de protección
“Anti-exploits”: PaX (II)
Inconvenientes de no permitir la ejecución
de código en la pila o el heap:
Algunas aplicaciones no funcionan: Servidores XFree86-4.
Lenguajes como Java tiene VM que requieren un stack
ejecutable.
37. Sistemas de protección
“Anti-exploits”: PaX (III)
Return into libc:
Evasión para PaX o Open Wall
No ejecuta código en la pila o heap -> llamada a una
función de la librería libc (system()). Ret = @función a
llamar.
Sólo necesitamos saber @función a llamar.
Solución PaX: Cambiar la dirección de la función cada vez
que se llama => mmap randomization => Fuerza Bruta.
38. Sistemas de protección
“Anti-exploits”: StackGuard
Técnica de compilación.
“Permite eliminar stack smashing attacks”.
“canary” cerca de la dirección de retorno.
Si canary ha sido alterando cuando la
función retorno => intento de ataque =>
alerta.
Canary Spoofing: Terminator (NULL, CR,
LF, EOF), Random, etc.
39. Sistemas de protección
“Anti-exploits”: StackShield
Utilidad que permite añadir protección en
tiempo de compilación.
Solo controlamos el código que
compilamos nosotros. No podemos
controlar binarios que instalamos por
ejemplo mediante paquetes RPM.
www.angelfire.com/sk/stackshield/
40. Bibliografía (I):
Stack Overflows
prym: “finding and exploiting programs with buffer overflows”.
http://destroy.net/machines/security/buffer.txt
lefty: “Buffer overruns, whats the real story".
http://reality.sgi.com/nate/machines/security/stack.nfo.txt
kekabron: “Buffer Overflows (b0f’s)”. Netsearch Ezine #4 (0x11).
http://www.netsearch-ezine.com
klog: “The Frame Pointer Overwrite". Phrack #55 (0x08).
http://www.phrack.org/show.php?p=55&a=8
Aleph1: “Smashing the Stack for Fun and Profit”. Phrack #49 (0x05).
http://www.phrack.org/show.php?p=56&a=5
42. Bibliografía (III):
String Format exploits
gera & riq: "Advances in format string exploiting". Phrack 59 (0x07).
http://www.phrack.org/show.php?p=59&a=7
scut/team teso: "Exploiting Format String Vulnerabilities".
http://teso.scene.at/releases/formatstring-1.2.tar.gz
Umesh Shankar: “Detecting Format String Vulnerabilities with Type Qualifiers”.
http://qb0x.net/papers/FormatString/usenix01/usenix01.pdf
RaiSe: “Bugs de Formato (1/2)”. NetSearch Ezine.
http://www.netsearch-ezine.com
The Itch: “Exploiting local format string holes on x86/ linux”.
http://qb0x.net/papers/FormatString/fmtpaper.txt
Frédéric Raynal: “Howto remotely and automatically exploit a format bug”.
http://www.security-labs.org/cvRaynal.pdf
43. Bibliografía (IV):
Writing Shellcodes (I)
Fayolle, Pierre-Alain; Glaume, Fayolle: “A Buffer Overflow Study. Attacks & Defenses".
http://www.enseirb.fr/~glaume/bof/report.html
Matt Conover & w00w00 Security Team: “w00w00 on Heap Overflow".
http://www.w00w00.org/articles.html
Umesh Shankar: “Detecting Format String Vulnerabilities with Type Qualifiers”.
http://qb0x.net/papers/FormatString/usenix01/usenix01.pdf
RaiSe: “Shellcodes en Linux/i386”. Netsearch Ezine #4 (0x04).
http://www.netsearch-ezine.com
RaiSe: “Shellcodes en Linux/i386 (2)”. Netsearch Ezine #5 (0x04).
http://www.netsearch-ezine.com
The Last Stage of Delirium Research Group: “UNIX Assembly Codes Development for
Vulnerabilities Illustration Purposes”. Version 1.0.2.
http://lsd-pl.net/papers.html#assembly
44. Bibliografía (IV):
Writing Shellcodes (II)
Zillion: “Writing Shellcode”.
https://uhf.ath.cx/papers/Writing_shellcode.htm
Miyagi, Robin: “Linux Assembler Tutorial”.
http://www.geocities.com/SiliconValley/Ridge/2544
“Linux System Call Table”.
http://quaff.port5.com/syscall_list.html
UNF && pr1: “Writing Linux/x86 shellcodes for dum dums”.
http://www.u-n-f.com/papers/shellcode-pr10n.txt
45. Bibliografía (V):
Sistemas de protección/evasión.
Bulba and Kil3r: “Bypassing StackGuard and StackShield”. Phrack 56 (0x05).
http://www.phrack.org/show.php?p=56&a=5
“Bypassing PaX ASLR Protection”. Phrack 59 (0x09).
http://www.phrack.org/show.php?p=59&a=9
Nergal: “The advanced return-into-lib(c) exploits (PaX case study)”. Phrack 58 (0x04).
http://www.phrack.org/show.php?p=58&a=4
Cowan, Crispin; Wagle, Perry; Pu, Calton; Beattie, Steve; Walpole, Jonathan: “Buffer
Overflows: Attacks and Defenses for the Vulnerability of the Decade”
http://www.cse.ogi.edu/DISC/projects/immunix
Fayolle, Pierre-Alain; Glaume, Fayolle: “A Buffer Overflow Study. Attacks & Defenses".
http://www.enseirb.fr/~glaume/bof/report.html
46. Change Log
v 1.1: Añadidas transparencias (6, 7, 19, 20 y 24) . Correcciones.
Gracias a Pablo Garaizar (txipi) de sindominio.net (transparencias 6, 7 y 24)
v 1.0: Presentada en el Hackmeeting III (MadHack02).