INTRODUCCION A LA EXPLOTACION DE SOFTWARE

Ver el tema anterior Ver el tema siguiente Ir abajo

INTRODUCCION A LA EXPLOTACION DE SOFTWARE

Mensaje por Ramiro_Cuevas el Dom Abr 03, 2016 5:37 pm

Shellcoding y Exploting en linux

Como vimos en los articulos pasados, exiten muchas vulnerabilidades en los distintos sistemas opertativos me parecio interesante investigar como es que se producen algunas de estas fallas o modificaciones a los programas en ejecución, y llegue a un tema muy interesante la explotación de software. y con ella a dos conceptos Shellcoding y Exploting

La explotación de software se basa en encontrar algun tipo de vulnerabilidad en un programa para poder modificar su comportamiento. Esta modificación puede desembocar en la ejecución de código totalmente ajeno al software explotado, en el cierre del software explotado o en la alteración de su lógica de ejecución.

Como primer concepto tenemos el shellcoding que es el arte de programar ciertas rutinas en ensamblador para inyectarlas directamente en memoria en tiempo de ejecución, el shellcoding es un arte porque cada situación requiere un tipo de rutina especifica y, en muchos casos han de cumplir ciertas restricciones. El desarrollo de shellcodes se basa en la programación en ensamblador de ciertas rutinas que permitan realizar las acciones que un programador necesite una ves haya vulnerado el software investigado. Realizar un buen shellcode significa dominar al maximo el lenguaje ensamblador para conseguir realizar operaciones con un codigo que ocupe el menos espacio posible.

El exploting se basa en descubrir los errores que ha realizado un programador en el momento de escribir el codigo fuente de una aplicación para poder vulnerar la seguridad de un sistema y tener en el mejor de los casos, acceso total, con los mayores privilegios, al sistema vulnerado. estudiar el concepto de shellcoding se explica antes que el concepto de exploting para ir intruduciento los conceptos de sistema a bajo nivel.

Shellcoding

Los shellcodes estan programados en lenguaje ensamblador. el ejecutable creado a partir de su codigo tiene que ser optimo en cuanto a velocidad y dimensión. Un shellcode no es exactamente un programa ejecutable, por tanto no se podra declarar la disposición de de los datos en memoria para nuestros propositos. Las instrucciones deben ser independientes y tienen que estar programadas de tal manera que permitan tomar el control del procesador en cualquier momento. Este tipo de codigos son comunmente denominados como codigos indepedientes de la posición.

Cuando el código de un shellcode se adjunta al codigo de un exploit, este no se inserta tal y como se ha programado, sino que se ha de codificar en hexadecimal y almacenarlo en un array del tipo char.[/i]
Un ejemplo de shellcode listo para insertar en un exploit es el que tenemos a continuacion:



Conclución

Actualmente, el software desarrollado no puede permitirse el lujo de solo ser funcional o tener una interfaz grafica impresionante. cuando se trata de software es mucho peor tener software funcional e inseguro que simplemente no tener software. Si un programador no conociera la metodologia utilizada por los atacantes jamas seria capaz de anticiparse a sus acciones y siempre iría un paso atrás. Es por eso que los invito a indagar mas en la explotacion de software.

Actualmente, los diferentes sistemas operativos del mercado implementan varias mediadas de seguridad para intentar impedir la explotacion de software mal programado. Estas medidas de seguridad no son mas que un intento de securizar las aplicaciones que se ejecutan en el sistema operativo, sin envargo por el momento, no se han encontrado un metodo generico que permita a los sistemas operativos hacer las aplicaciones que se ejecutan en el no sean explotables.

por ultimo les dejo este pequeño ejemplo que desactiva las medidas de seguridad implementadas por el sistema operativo Unix y el compilador GCC.


  • Medidas de seguridad


la principal medida de seguridad que implementa el sistema operativo Linux es la conocida como Address Space Layout Randomizacion o ASLR. Esta medida de seguridad se basa en randomizar la posición de memoria donde se hubican algunas estructuras de datos en memoria, como por ejemplo, la pila
en la mayoria de sistemas operativos basta con ejecutar los siguientes comando para desactivar esta medida de seguridad. Estos comando se deben ejecutar como usuario root



Para comprobar que el ASLR está desactivada basta con ejecutar el siguiente codigo fuente varias veces.



Si el valor del registro ESP que se muestra al ejecutar este codigo varias veces es diferente significa que la medida de seguridad ASLR está activada. Si el valor es el mismo despues de varias ejecuciones, ASLR está desactivado.

Como se puede ver a continuacion, ASLR está activado:



Sin envargo si se ejecutan las instruciones comentadas anteriormente, se puede comprobar que la randomización de direcciones se desactiva:



Como se puede ver, no se modificado el valor del registro ESP por lo tanto la medida de seguridad esta desactivada

Ramiro_Cuevas

Mensajes : 3
Puntos : 11
Fecha de inscripción : 02/02/2016
Edad : 25
Localización : La Paz

Ver perfil de usuario

Volver arriba Ir abajo

Re: INTRODUCCION A LA EXPLOTACION DE SOFTWARE

Mensaje por Willy_Lliulli el Lun Abr 04, 2016 12:48 pm

ShellcodeOfDeath Logo


A lo largo de este post veremos en detalle y de la forma mas sencilla posible el funcionamiento de un Buffer Overflow, detallaremos el funcionamiento del stack, registros, etc. Aunque esta guia está pensada para que todo el mundo pueda seguirla, es recomendable tener unos conocimientos básicos sobre el funcionamiento de la CPU y la memoria.
Antes de ponernos manos a la obra toca un poco de teoría:
Tipos de unidades de datos:
BIT – Es la unidad mínima de información, sus valores se mueven de 0 a 1.
BYTE – Está formado por 8 bits y sus valores se mueven de 0 a 255. Para facilitar la lectura se suele utilizar su interpretación hexadecimal.
WORD – Es el conjunto de 2 BYTES (16 bits)
DWORD – Es el conjunto de 2 WORDS (32 bits)
ASM (Lenguaje ensamblador):
ASM es un lenguaje de programación de bajo nivel que proporciona al programador un marco de interacción con el lenguaje máquina, cada arquitectura tiene sus propias instrucciones, en nuestro caso trabajaremos con una arquitectura x86 de 32bits, podéis profundizar echando mano de algunos de estos recursos ( x86 ASM Guide y x86 OpCode and instruction reference)
Registros:
La definición mas simple de un registro es entenderlo como si fuese una variable. Se trata de una región de memoria en la que podemos almacenar y leer datos. La diferencia con las variables que nosotros definimos es que los registros sirven a un propósito concreto y son limitados. En la arquitectura sobre la que nosotros trabajamos podemos diferenciar 8 registros básicos (ESI y EDI se agrupan en un mismo tipo) que se dividen en subregistros a medida que acortamos el tamaño de éstos, esto lo veremos mas adelante.
1. EAX (Extended Accumulator Register): Usado para almacenar el valor de retorno de una función y usarlo como almacenamiento para operaciones aritméticas y operaciones de entrada/salida.
2. EBX (Extended Base Register): Se conoce como registro base  y es de caracter general. Ess común emplearlo en cálculos.
3. ECX (Extended Counter Register): Es conocido como el registro contador. Puede contener un valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda. También se utiliza para cálculos.
4. EDX (Extended Data Register: Es un registro para almacenamiento de datos, se suele utilizar en en operaciones de entrada/salida y en algunas operaciones de multiplicación y división con grandes cifras en la que se combina su uso con el registro EAX.
5. ESI (Extended Source Index): Es usado como puntero para funcines que requieren un origen y un destino para los datos usados. ESI almacena el origen de dichos datos.
6. EDI (Extended Destination Index): Similar al registro anterior con la diferencia de que éste apunta simepre al destino de los datos.
7. EBP (Extended Base Pointer): Según el compilador usado EBP puede ser utilizado como registro de caracter general o como puntero al marco de la pila.
8. ESP (Extended Stack Pointer): Es un puntero al final de la pila. Tras la ejecución de una función la dirección de retorno se vuelve a cargar en ESP para continuar la ejecución en el mismo punto donde había quedado.
9. EIP (Extended Instruction Pointer): Contiene la dirección actual de ejecución del programa.
Como decía antes cada registro se puede dividir en subregistros de la siguiente manera:
• Registros de 32 bits: EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP EIP
• Registros de 16 bits: AX, BX, CX, DX, SI, DI, BP, SP, IP
• Registros de 8bits: AH, AL, BH, BL, CH, CL, DH, DL
Esto nos será útil en el futuro a la hora de preparar nuestros propios shellcodes pero por el momento no necesitais mas que saber que existen.
Flags:
Los flags deben ser entendidos como indicadores de estado, existen un total de 32 flags, las mas importantes son:
1. C-Flag (Carry Flag) – Indica si “nos llevamos” algo tras una suma o una resta.
2. Z-Flag (Zero Flag) – Si el resultado de una operación da resultado 0 su valor se pone a 1.
3. O-Flag (Overflow Flag) – Si después de una operación el resultado no cabe en el tamaño del registro, se pone a 1.
Segmentos y Offsets:
Un segmento es una zona de memoria donde se almacena una instrucción, un dato o la pila. Cada segmento se divide en offsets los cuales en aplicaciones de 32 bits estan comprendidos entre 00000000 y FFFFFFFF. Por lo tanto debemos entender como offset una unidad de desplazamiento dentro de un segmento.
El Stack:
El stack (o pila) es una región de la memoria virtual que sigue una estructura de datos tipo LiFo (Last Input – First Output). En esta región se almacenan las variables, excepciones, argumentos, etc. Su crecimiento es de la parte mas alta hacia abajo.

Imagen 1
Cada vez que se ejecuta una función se genera una nueva instancia llamada stack frame que permite que cada función se ejecute en un contexto limpio, en primer lugar se almacenan los argumentos de la función siempre en orden inverso (Si son 4 argumentos, el orden es arg4=>arg3[…]arg1), a continuación la dirección de retorno que es la dirección a la que se debe volver una vez ejecutada una función, en tercer lugar la dirección del marco de la pila anterior o EBP y por último las variables locales de la función. Para analizar el funcionamiento ejecutaremos una simple función en C que no recibe argumentos por lo que tendremos un stack simple:

Imagen 2
Esto no es siempre así debido a caprichos del compilador, pero esto lo veremos mas adelante y por ahora no debería preocuparos.
Hasta aquí la introducción, cualquier duda que tengáis la podéis aclarar en los comentarios. Ahora vamos con la parte divertida despues de toda la teoría.


Última edición por Willy_Lliulli el Mar Abr 05, 2016 7:52 pm, editado 2 veces
avatar
Willy_Lliulli

Mensajes : 8
Puntos : 26
Fecha de inscripción : 02/02/2016

Ver perfil de usuario

Volver arriba Ir abajo

Técnicas de explotación de vulnerabilidades en Linux para la creación de exploits.

Mensaje por Cesar.chuquimia el Mar Abr 05, 2016 9:34 am

algo que agregar es que el exploiting es la base de todas las técnicas de ataque existentes que se utilizan a diario contra aplicaciones vulnerables. De hecho, si no fuera por esta ardua y paciente tarea que los hackers han ido desarrollando a lo largo de los años, frameworks completos y tan conocidos a día de hoy como lo pueden ser Metasploit, Core Impact o Canvas, no existirían ni podrían ser utilizados por pentesters y profesionales de la seguridad informática que habitan todo el globo terráqueo. El exploiting es el arte de convetir una vulnerabilidad o brecha de seguridad en una entrada real hacia un sistema ajeno. Cuando cientos de noticias en la red hablan sobre "una posible ejecución de código arbitrario", el exploiter es aquella persona capaz de desarrollar todos los detalles técnicos y complejos elementos que hacen realidad dicha afirmación. El objetivo es provocar, a través de un fallo de programación, que una aplicación haga cosas para las que inicialmente no estaba diseñada, pudiendo tomar así posterior control sobre un sistema. Desde la perspectiva de un hacker ético, este libro le brinda todas las habilidades necesarias para adentrarse en el mundo del exploiting y hacking de aplicaciones en el sistema operativo Linux. Conviértase en un ninja de la seguridad, aprenda el Kung Fu de los hackers. Que no le quepa duda, está a un paso de descubrir un maravilloso mundo repleto de estimulantes desafíos.
espero la información sea de utilidad, saludos!

cyclops cyclops cyclops affraid affraid

Cesar.chuquimia

Mensajes : 9
Puntos : 23
Fecha de inscripción : 03/02/2016

Ver perfil de usuario

Volver arriba Ir abajo

FOROS DE EXPLOITING Y SHELLCODE PARA LINUX

Mensaje por Jhonny_Charca el Mar Abr 05, 2016 8:25 pm

Es muy interesante el tema y por lo visto muy extenso, acá les dejare algunos link de ayuda para exploiting y shellcode, espero les sirva a los interesados:





avatar
Jhonny_Charca

Mensajes : 12
Puntos : 30
Fecha de inscripción : 02/02/2016

Ver perfil de usuario

Volver arriba Ir abajo

Clasificación de Exploits

Mensaje por mauricio_villegas el Mar Abr 05, 2016 10:59 pm

Se clasifican según la forma en la que el exploit contacta con el software vulnerable:

Exploit remoto.- Si utiliza una red de comunicaciones para entrar en contacto con el sistema víctima. Por ejemplo puede usar otro equipo dentro de la misma red interna o tener acceso desde la propia Internet.

Exploit local.- Si para ejecutar el exploit se necesita tener antes acceso a el sistema vulnerable. Por ejemplo el exploit puede aumentar los privilegios del que lo ejecuta. Este tipo de exploits también puede ser utilizado por un atacante remoto que ya tiene acceso a la máquina local mediante un exploit remoto.

Exploit ClientSide.- Aprovechan vulnerabilidades de aplicaciones que típicamente están instaladas en gran parte de las estaciones de trabajo de las organizaciones. Ejemplos típicos de este tipo de software son aplicaciones ofimáticas (Ej. Microsoft Office, Open Office), lectores de PDF (Ej. Adobe Reader), navegadores (Ej. Internet Explorer, Firefox, Chrome, Safari), reproductores multimedia (Ej. Windows Media Player, Winamp, iTunes). El exploit está dentro de ficheros interpretados por este tipo de aplicaciones y que llega a la máquina objetivo por distintos medios (Ej email o memoria USB). El archivo será usado por el programa y si no es detenido por ningún otro programa (Ej. firewall o antivirus) aprovechará la vulnerabilidad de seguridad. Las peculiaridades de este tipo de ataques son:
-Requieren la intervención del usuario del lado del cliente. Por ejemplo necesitan que abra cierto archivo o que haga click en cierto link
-Es un ataque asincrónico porque el momento en que se lanza no es el mismo en que se consigue ejecutar el exploit (ya que necesita la acción del usuario).
-Se lanza a ciegas, no se sabe qué aplicaciones y versiones de esta utiliza el objetivo real.

mauricio_villegas

Mensajes : 10
Puntos : 34
Fecha de inscripción : 02/02/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: INTRODUCCION A LA EXPLOTACION DE SOFTWARE

Mensaje por paola_tarqui el Mar Abr 05, 2016 11:20 pm

Exploit aprovecha vulnerabilidad de sistemas operativos basados en UNIX
 
Para una vulnerabilidad que fue encontrada en sistemas operativos basados en Unix, fue desarrollado un exploit que la aprovecha y puede llegar a comprometer la información de usuarios Linux y Mac OS X.
 La vulnerabilidad CVE-2013-1775 encontrada en el uso del comando SUDO. El uso de este comando permite a un usuario tener permisos de “root” sobre el sistema operativo, obviamente ingresando la contraseña de usuario. Esta vulnerabilidad permite obtener los permisos que otorga este comando haciendo un restablecimiento de la fecha y hora del sistema operativo, sin necesidad de la contraseña.
Los usuarios de sistemas operativos Mac OS X tienen un mayor nivel de riesgo ante esta vulnerabilidad, pues este sistema operativo no impone restricciones al cambio de fecha y hora, mientras que los sistemas operativos Linux si cuentan con una restricción de contraseña para ejecutar este tipo de cambios. Recientemente los desarrolladores de Metasploit incluyeron un módulo en sus herramientas de seguridad que permite atacar esta vulnerabilidad en los sistemas operativos Mac.
Hay algo importante de resaltar, y es que para que esta vulnerabilidad se pueda explotar se debe cumplir un par de condiciones. La primera es que el usuario de la sesión activa tenga permisos de administrador y además este usuario ya debe haber ejecutado en algún momento el comando sudo. Además el atacante debe tener acceso físico a la máquina para poder ejecutar las instrucciones. Aun así es importante hacer notar que este exploit podría ser utilizado con algún otro tipo de ataque para lograr mayores daños.
Una forma alternativa para impedir que esta vulnerabilidad pueda ser aprovechada es utilizar los comandos sudo –K o sudo –k para eliminar el historial que deja este comando en el sistema y de esta forma no pueda ser aprovechado por algún atacante.
Esta vulnerabilidad deja claro que independiente del sistema operativo cualquier usuario, si no toma las medidas de protección adecuadas, puede ver comprometida la seguridad de su información. Si bien aún es común escuchar algunos usuarios que dicen que sistemas operativos como MAC OS X o Linux no son atacados, el exploit presentado demuestra que se podrían desarrollar códigos maliciosos que afecten a cualquier usuario.

paola_tarqui

Mensajes : 6
Puntos : 18
Fecha de inscripción : 02/02/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: INTRODUCCION A LA EXPLOTACION DE SOFTWARE

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.