25 dic 2010

Segmentacion de la Memoria – 0×01

Bueno hace unos dias tenia ganas de empezar a escribir nuevamente.. asique si dios quiere y tengo paciencia suficiente, voy a tratar de redactar algunos post relacionados al mundo de la explotacion. No sera un curso ni un paso a paso.. simplemente tocare determinados temas y en lo posible tratare de poner ejemplos (la mayoria de estos sera con gdb sobre linux (seria bueno que se relacionen con este)).

En este paper voy a intentar hablar un poco de lo que podemos encontrarnos en el ambiente de un programa compilado (se requiere conocimientos basicos de Assembler y de C), y en el proximo iremos a la parte ‘divertida’ con algunos ejemplos.. cabe aclarar todo esto bajo 32bits, porque despues llegan comentarios como (ya fue la segmentacion en 64! :p).

Segmentacion de la Memoria

Lo primero y fundamental que debemos saber es que la memoria de un programa compilado se va a dividir en 5 ‘Segmentos’ (no reirse de mi obras de arte):

El Segmento de Texto o tambien Segmento de Codigo es donde se encuentran las instrucciones ensambladas. Mientras se va ejecutando el programa el puntero *$EIP apunta a la primera instruccion del segmento de codigo, alli es donde el procesador realiza un loop de ejecucion y donde hace algo parecido a lo siguiente:

  • 1] – Lee la instruccion donde apunta $EIP
  • 2]- Agrega el largo de byte de la instruccion al $EIP
  • 3]- Ahora ejecuta la instruccion
  • 4]- Retorna a [1] para repetir el proceso.

* Apunta a la dirección de memoria de la siguiente instrucción a ejecutar

En este segmento los permisos de escritura estan deshabilitados y no sirve para guardar variables. Esto es algo positivo ya que evita que se pueda modificar realmente el codigo del programa.. si nosotros intentariamos escribir en esta zona el programa se pararia y terminaria.

Otra cosa a tener en cuenta es que el segmento de codigo tiene un tamaño fijo ya que no requiere que algo sea cambiado.

El Segmento de Datos y BSS, en estas zonas es donde se guardan las variables del programa, ya sea las Globales o las Estaticas. En la zona de Datos es donde se almacenan las variables estaticas y las globales inicializadas.. en cambio en BSS es donde se almacenan las variables no inicializadas.

En este caso si se puede escribir en estos segmentos, aunque el tamaño en este caso tambien es fijo.

El Segmento del HEAP, es totalmente controlable por el programador, es decir podra reservar y liberar memoria al momento, algo que diferencia al resto que vimos hasta ahora es que el tamaño no es fijo por lo que puede ampliarse o reducirse segun sea necesario, en este caso la pila crecera o disminuira segun la cantidad de la memoria que sea reservada para su uso. Este crecimiento sera desde abajo hacia arriba en las direcciones de la memoria.

El Segmento de la Pila o Stack, en este segmento podemos encontrarnos con un lugar temporal de memoria utilizado para almacenar aquellas variables de funcion locales y su contexto durante llamadas a funcion. Podemos encontrarnos con que tampoco tiene un tamaño fijo y es logico debido a la cantidad de elementos que se ‘apilan’ y ‘desapilan’ constantemente.

La pila es un area de memoria que esta organizada de manera LIFO (Last In First Out), el sentido de crecimiento de la pila es hacia la zona mas baja de la memoria.. veamos:

En esta zona entran en juego 3 Registros: ESP – EBP – EIP.

ESP se utiliza para seguir la direccion que se encuentra en el final de la PILA. Como vemos en la imagen.

EBP es utilizado como Base para el Frame Stack actual. Tambien conocido como Local Base Pointer, o Frame Pointer.

Cuando entramos a una funcion() el contexto y el puntero $EIP cambiaran, ahi es donde se usa la pila para:

  • Recordar todas aquellas variables pasadas
  • La direccion de retorno, seria la posicion en la que $EIP deberia volver una vez que finalize la funcion. (La instruccion CALL se encarga de eso)
  • Registros guardados
  • Variables locales

Todo esto va destinado a almacernarse en la pila, esto es lo que se conoce como Stack Frame o Marco de Pila.

Bueno de momento queda aca.. muy pronto voy a ver si aplicamos algunos ejemplos para continuar con esto..

Segmentacion de la Memoria – 0×01

Bueno hace unos dias tenia ganas de empezar a escribir nuevamente.. asique si dios quiere y tengo paciencia suficiente, voy a tratar de redactar algunos post relacionados al mundo de la explotacion. No sera un curso ni un paso a paso.. simplemente tocare determinados temas y en lo posible tratare de poner ejemplos (la mayoria de estos sera con gdb sobre linux (seria bueno que se relacionen con este)).

En este paper voy a intentar hablar un poco de lo que podemos encontrarnos en el ambiente de un programa compilado (se requiere conocimientos basicos de Assembler y de C), y en el proximo iremos a la parte ‘divertida’ con algunos ejemplos.. cabe aclarar todo esto bajo 32bits, porque despues llegan comentarios como (ya fue la segmentacion en 64! :p).

Segmentacion de la Memoria

Lo primero y fundamental que debemos saber es que la memoria de un programa compilado se va a dividir en 5 ‘Segmentos’ (no reirse de mi obras de arte):

El Segmento de Texto o tambien Segmento de Codigo es donde se encuentran las instrucciones ensambladas. Mientras se va ejecutando el programa el puntero *$EIP apunta a la primera instruccion del segmento de codigo, alli es donde el procesador realiza un loop de ejecucion y donde hace algo parecido a lo siguiente:

  • 1] – Lee la instruccion donde apunta $EIP
  • 2]- Agrega el largo de byte de la instruccion al $EIP
  • 3]- Ahora ejecuta la instruccion
  • 4]- Retorna a [1] para repetir el proceso.

* Apunta a la dirección de memoria de la siguiente instrucción a ejecutar

En este segmento los permisos de escritura estan deshabilitados y no sirve para guardar variables. Esto es algo positivo ya que evita que se pueda modificar realmente el codigo del programa.. si nosotros intentariamos escribir en esta zona el programa se pararia y terminaria.

Otra cosa a tener en cuenta es que el segmento de codigo tiene un tamaño fijo ya que no requiere que algo sea cambiado.

El Segmento de Datos y BSS, en estas zonas es donde se guardan las variables del programa, ya sea las Globales o las Estaticas. En la zona de Datos es donde se almacenan las variables estaticas y las globales inicializadas.. en cambio en BSS es donde se almacenan las variables no inicializadas.

En este caso si se puede escribir en estos segmentos, aunque el tamaño en este caso tambien es fijo.

El Segmento del HEAP, es totalmente controlable por el programador, es decir podra reservar y liberar memoria al momento, algo que diferencia al resto que vimos hasta ahora es que el tamaño no es fijo por lo que puede ampliarse o reducirse segun sea necesario, en este caso la pila crecera o disminuira segun la cantidad de la memoria que sea reservada para su uso. Este crecimiento sera desde abajo hacia arriba en las direcciones de la memoria.

El Segmento de la Pila o Stack, en este segmento podemos encontrarnos con un lugar temporal de memoria utilizado para almacenar aquellas variables de funcion locales y su contexto durante llamadas a funcion. Podemos encontrarnos con que tampoco tiene un tamaño fijo y es logico debido a la cantidad de elementos que se ‘apilan’ y ‘desapilan’ constantemente.

La pila es un area de memoria que esta organizada de manera LIFO (Last In First Out), el sentido de crecimiento de la pila es hacia la zona mas baja de la memoria.. veamos:

En esta zona entran en juego 3 Registros: ESP – EBP – EIP.

ESP se utiliza para seguir la direccion que se encuentra en el final de la PILA. Como vemos en la imagen.

EBP es utilizado como Base para el Frame Stack actual. Tambien conocido como Local Base Pointer, o Frame Pointer.

Cuando entramos a una funcion() el contexto y el puntero $EIP cambiaran, ahi es donde se usa la pila para:

  • Recordar todas aquellas variables pasadas
  • La direccion de retorno, seria la posicion en la que $EIP deberia volver una vez que finalize la funcion. (La instruccion CALL se encarga de eso)
  • Registros guardados
  • Variables locales

Todo esto va destinado a almacernarse en la pila, esto es lo que se conoce como Stack Frame o Marco de Pila.

Bueno de momento queda aca.. muy pronto voy a ver si aplicamos algunos ejemplos para continuar con esto..

Conociendo el Mundo Wireless

######################
########################
CONTENIDO DEL PAPER
# ¿Qué és BLUETOOTH?.
# ¿Cómo funciona bluetooth?.
# Descripción de Perfiles.
# Repaso. Esquéma Conceptual.
# Hablemos de la Seguridad en bluetooth.
# Introducción a WIRELESS.
# La WI-FI Alliance & IEEE.
# Métodos de Comunicacion.
# Antenas, Señal, Tarjetas de Red.
# Seguridad en Wireless WEP/WPA/WPA-2.
# Filtracion mediante Direcciones MAC.
¿Que tal?, mediante este paper voy a tratar de explicar un poquito y tratar de orientar sobre el boom de Bluetooth y WiFi, que cada dia aumenta más y más.. gracias a los beneficios que estas tecnologias traen. Mas que nada es una introduccion para asi en el futuro, concentrarrnos en la seguridad, software, y contraseguridad.
# Agradecimientos especial a Support88, que me llevo a grandes conocimientos en WiFi.
¿Que es Bluetooth?
Hoy en dia existen 2 tecnologias inalambricas que han ganado muchos adeptos y popularidad en el mundo.Estas son: BLUETOOTH y WI-FI.
Bluetooth, es la revolucion de los dispositivos. Se puede acceder a la información de otro dipositivo de forma dinámica, fácil, y eficáz. Esta es una evolucion de las transmisiones infrarrojas cuyo funcionamiento no podia exceder un espacio fisico determinado.
Bluetooth, se creó con el fin de conectar facilmente dispositivos como -Palms, Celulares, Equipamiento de los celulares como podria ser auriculares inalambricos, Laptops, Teclados, Mouses, Impresoras, etc de accesorios-.
Bluetooth fue creado por varias organizaciones y compañias de telecomunicaciones, fabricantes de chips, etc. Un ejemplo de las compañias que participaban o participan de este proyecto: IBM, INTEL, NOKIA, TOSHIBA, etc.
¿Como funciona Bluetooth?
Para que bluetooth funcione correctamente y asi permita la conexion, se debe completar pasos y reglas para una conexion satisfactoria.
Trabaja en un rango de frecuencia de -2,4 GHZ a 2,8 GHZ-.
Bluetooth tiene dos formas de trabajar, eligiendo la frecuencia exacta en la que se va a comunicar con el otro dispositivo. Estas frecuencias se llaman: SPREAD SPECTRUM y FREQUENCY HOPPING.

[SPREAD SPECTRUM]: Esta es una tecnologia de banda amplia. Fue en principio desarrollada por militares de Estados Unidos, para comunicaciones seguras y confiables.
Como dice su nombre es la capacidad de que se pueda trabajar en un espectro extendido de frecuencia.

[FREQUENCY HOPPING]: Esta habilidad como su nombre lo indica significa “Saltos de Frecuencia”, trabaja a 1600 saltos p/segundo.

Estas caracteristicas proveen a bluetooth una inmunidad ante las interferencias originada por otra señal.
Otro de los pasos para proceder a la conexion, es la de tener habilitado el Profile, (perfil). Se le llama perfil a una serie de implementos, como informacion del protocolo que se debe usar para la conexion. Todos los dispositivos deben tener su perfil y entender el del otro para que asi se pueda establecer la comunicacion entre ambos.
El perfil seria en un dispositivo la forma de comportarse ante el resto.


Descripcion de Perfiles.

Los Perfiles se dividen en dos clases, estan los perfiles FUNDAMENTALES y los perfiles de
TRABAJO.

[+] FUNDAMENTALES.
# [ SPP ]: Serial Port Profile, es lo que significa las iniciales. *Este perfil depende del perfil GAP tambien. Se encarga de, cómo el dispositivo debe simular un puerto serial, para poder que algunas aplicaciones funcionen mediante esta comunicación.
# [ GAP ]: General Access Profil, es el perfil de acceso general, y emite como dos dispositivos tienen que comunicarse para cumplir sus funciones basicas.
# [ GOEP ]: General Object Exchange Profile, es el perfil general para el intercambio de objetos. Describe los protocolos y procedimientos que se utilizaran para el intercambio de objetos. *Este perfil depende del perfil SPP que explique al principio.
# [ SDAP ]: Service Discovery Application Profile, este perfil enumera la cantidad y los tipos de servicios que pueden ser servidos a traves del enlace Bluetooth y las aplicaciones que seran usadas para la comunicacion. *Este perfil Depende del Perfil GAP
[+] TRABAJO.
#[ InterCom Profile ]: Este perfil se encarga de como dos o mas telefonos celulares, podrian entablar una comunicacion sin hacer uso de la red de Telefonia.
# [ Cordless Telephony Profile ]: Define como un telefono celular tiene que comunicarse con un Headset (accesorio el cual permite comunicarse mediante manos libres).
# [ Dial-UP Networking Profile ]: Comunicacion telefonica entre computadoras significa, y permite una conexion via Modem Telefonico, el cual puede ser hecha desde una laptop hacia un telefono celular.
# [ Lan Access Profile ]: Es el perfil de acceso a redes LAN. Permite la interconexion a una red LAN. El protocolo que puede utilizar es el PPP, que significa Point to point, osea Protocolo Punto a Punto .
# [ FTP ]: Creo que no hace falta explicarlo, posee reglas de como transferir archivos entre dos dispositivos BlueTooth.
# [ Personal Area Network Profile - PAN ]: Red de area personal. Posee informacion de como establecer interconexion con hasta 7 dispositivos entre si.
# [ Synchronization Profile ]: Permite sincronizar los dispositivos como por ejemplo: Telefono celular a PC, etc.
# [ Basic Printing Profile ]: Perfil Basico de Impresion, define como imprimen los dispositivos en una impresora equipada con Bluetooth.
Repaso. Esquéma Conceptual

Hablémos de la Seguridad en Bluetooth
Si hablamos de lo que respecta a seguridad en bluetooth, diriamos que su seguridad es alta. Posee encriptacion de datos hasta 128bits. Bluetooth posee 4 Normas de seguridad preestablecidas para que su sistema de autenticacion y reconocimiento sea alto.

PRIMER NORMA > [NO SEGURO]: Esta norma, esta pensada para los dispositivos de uso publicos como podria ser una impresora. Por ejemplo accedemos mediante bluetooth a la impresora, se realiza la impresion y se desconecta del dispositivo impresora.

SEGUNDA NORMA > [NIVEL DE SEGURIDAD ALTA, FORZADA A SERVICIOS]: Este modo se encarga de limitar el uso de un servicio y restringirlo. Por ejemplo: nos conectamos a otro dispositivo para descargar varios archivos, pero se nos limita el servicio para descargar datos personales o contactos del dispositivo remoto.

TERCERA NORMA > [NIVEL DE SEGURIDAD MAS ALTA, FORZADA A ENLACE]: Este nivel es el mas alto en lo que respecta a seguridad, se basa en la autenticacion y autorizacion del enlace entre dos dispositivos.

CUARTA Y ULTIMA NORMA > [NIVEL DE SEGURIDAD Y ENCRIPTACION DE DATOS "PARING"]: Este nivel es el decisivo una vez cuando la conexion fue establecidad, se produce lo que se denomina PARING, traducido a castellano como “APAREAMIENTO”, si!, nada mas que con animalitos roboticos .
El concepto de PARING se refiere a cuando el enlace de los dos o mas dispositivos se realiza efectivamente, estos se ponen de acuerdo para que su transmision de datos sea de forma segura, mediante la encriptacion, y asegurando que si alguno de los dispositivos no esta apareado, no tenga acceso a leer los datos transmitidos entre ellos.


Introducción a WIRELESS
Wireless no es mas que una tecnologia que facilita la conectividad entre Computadoras de forma inalambrica. Las conexiones se realizan mediantes Placas Inalambricas y Antenas.

Esta tecnologia por un lado disminuye los costos en cables, y por el otro aumenta el nivel estetico de una organizacion ya que al no haber cables, hay mas flexibilidad a la hora de su implementacion ya sea en lugares publicos como museos o comercios, complejos, casas y departamentos, empresas,etc.. Esto no genera ningun cambio en la estructura ambiental, y productivamente, la conexion a las demas redes LAN como asi WAN, permite un ancho de banda mas elevado lo que significa mayor velocidad de conexion.

Lamentablemente lo que respecta a SEGURIDAD, Wireless no es algo que digamos sobresaliente, su nivel de seguridad es bajo, y los mecanismos desarrollados como prevencion a intrusos no son lo suficientemente seguros como para mantener a salvo la informacion. La WI-FI Alliance & IEEE
# La WI-FI Alliance: Es una alianza de fabricantes que tiene como finalidad, desarrollar e implementar tecnologias inalambricas. Nacio en 1999 y esta formada por mas de un centenar de miembros como por ejemplo: Cisco, Microsoft, Intel, Dell, Nokia, Philips, Sony, etc.

# IEEE: Institute of Electrical and Electronics Engineers, se encarga de desarrollar, potenciar y establecer los estandares de fabricacion de dispositivos electronicos.Con estándar nos referimos a una publicacion donde se aprueba por los miembros de la organizacion el contenido de procedimientos y las especificaciones que asegura que el material, producto, metodos o servicio, funcione a los propositos para lo que fueron creado.

En las redes Wireless existen distintos estándares de la IEEE.
#–[SISTEMA]——[CAPACIDAD]——[TRANSMISION]
# IEEE 802.11 1 Mbps 2.4 Ghz
# IEEE 802.11 2 Mpbs 2.4 Ghz
# IEEE 802.11b 11 Mbps 2.4 Ghz
# IEEE 802.11d 54 Mbps 2.4 Ghz
# IEEE 802.11e 54 Mbps 2.4 Ghz
# IEEE 802.11f 54 Mbps 2.4 Ghz
# IEEE 802.11g 54 Mbps 2.4 Ghz
# IEEE 802.11h 54 Mbps 2.4 Ghz
# IEEE 802.11i 54 Mbps 2.4 Ghz
# IEEE 802.11a 54 Mbps 5 Ghz
Módos de Comunicación
Modo AD-HOC

Tambien conocida como PUNTO A PUNTO es decir de pc a pc. No necesita mas que una placa de red wireless para poder comunicarse y enlazarse con la otra pc. De esta forma se descartan los routers o access points, aunque su resultado para adminsitrar recursos compartidos es un poco mas complejo.


# Modo Infraestructura: Esta comunicacion se realiza para enlazar una LAN con una red inalambrica, se utiliza como medio de conexion un dispositivo denominado ACCESS POINT.
Esto permite que las estaciones de trabajo que no estan conectadas a la LAN puedan hacerlo inalambricamente, a traves de una adaptador de red Wireless.

El adaptador de red es una NIC que cumple con la funcion de aceptar los datos del sistema operativo, paquetes de red del protocolo IP, seguimientos de estos mediante el uso de un protocolo de enlace de datos y acceso: IEEE 802.11, y que se transmita mediante ondas electromagneticas para propagarse en el vacio para nosotros. En viceversa la captura de medio de transmision tambien esta a cargo de esta NIC.
Antenas
Bien, hay dos tipos de antenas. Las primeras son las Direccionales y las segundas Omnidireccionales.

# Las Direccionales funcionan concentrando la energia de la señal enviada y rechazada en un dispositivo con forma de cono. Estas señales se transmiten a UNA SOLA DIRECCION. Hay varios tipos de estas antenas por ejemplo una podria ser la conocida parabólica u otra como la antena panel.



# Las Omnidirecionales transmiten y ofrecen una radiacion de 360º, son capaces de recibir señal de cualquier lado. Generalmente estas antenas son instaladas en el access point conectado a la red e incluso algunas se instalan sobre las mismas tarjetas PCI.



Señal
Si hablamos de la señal, dependiendo del tipo de construccion con el cual se conviva. Ya sea edificios o casas, con paredes muy gruesas tanto como los techos, armarios de metal o de madera, etc, puede verse seriamente afectada la transmision de datos con todas estas interferencias.
Tarjetas de red
Para tener una conexion Wifi, es necesario disponer de una tarjeta de red PCI para ordenadores en el caso que sea sobremesa,escritorio, desktop, como mas les guste, y para una LAPTOP o Portatil, una tarjeta PCMCIA.
Seguridad en Wirelees WEP/WPA/WPA-2
# WEP
Bueno como todos sabemos la seguridad es algo casi paranoica por asi decirlo y mas si sabemos que nuestra informacion y privacidad estan plasmadas en un pc. En una lan sabemos que estableciendo reglas y protecciones sea por nosotros o por un administrador podemos proteger o restringir esos datos, o almenos eso intentamos . Pero en una WLAN es algo mas complejo ya que su ambiente de transmision es el “aire” y otra persona chusma con conocimientos y una placa de red wireless tranquilamente podria interceptar nuestra transmision de datos.

Para solucionar los problemas de confidencialidad y privacidad del flujo de informacion en las redes wifi, se diseño para el estandar 802.11b un mecanismo simple de encriptacion de datos, llamado WEP, Wireless Equivalent Privacy. El mecanismo de encriptacion utiliza 64 o 128 bits y trabaja bajo el logaritmo RC4 . Este proporciona una contraseña la cual tiene como norma, respetar ciertos tipos de caracteres y longitudes para establecer una conexion segura, esta contraseña no es para validarse como usuario sino se usa para validar la estacion para empezar a transmitir datos de forma segura. Sin embargo, WEP posee un gran numero de fallas, lo que significa que este cifrado es vulnerable.
A un Hacker con herramientas actuales bastaria de un par de minutos para descifrar la contraseña. La clave de sesion compartida por todas las estaciones, es estatica. Significa que si queremos levantar un gran numero de estaciones, es necesario configurarlas usando la MISMA contraseña.
En cuanto a CRC32 implantado en WEP, la integridad de los datos es vulnerable, ya que se permite modificar las cadenas de verificacion de los paquetes a comparar a la cadena final producto de los datos capturados y recibidos.

En mi resumen, WEP apesta!, no es lo suficientemente seguro como para proteger y garantizar confidencialidad en nuestros datos.

# WPA
Este sistema de proteccion de redes llamado WPA: WI-FI Proteced Access es sin dudas mas seguro que el cifrado WEP. Este cifrado fue desarrollado por IEEE, este permite un mejor cifrado que WEP ya que implementa la utilizacion de claves TKIP -Temporal Key Integrity Protocol-.
WPA permite utilizar una clave por estacion conectada a una red inalambrica, mientras que como recordarán en WEP solamente se usaba una misma clave para toda la red inalambrica.

El modo en autenticacion mas conocido en WPA -si bien hay otro que requiere un servidor central-, es el PSK, -Pre-Shared Key-. Permite el acceso de una contraseña alfanumerica -passphrase-.

Pero no todo es color de rosa en esta vida y a que no saben que? como WEP pero desde otros puntos de vista tiene problemas tambien. Es comunmente usado el ataque DOS -denegacion de servicio- Por ejemplo algun usuario malintencionado envia 2 paquetes por segundo y medio conteniendo la clave de cifrado incorrecta, producira que el AP -acess point- eliminara todas las conexiones de los usuarios durante 1 Minuto. Este mecanismo de seguridad es para que se evite los accesos que no son autorizados a la red protegida, pero claro de esta forma lograriamos una denegacion de servicio lo que en otras palabras haria, bloquearia toda una red.

# WPA-2

Esta basada en el logaritmo de cifrado TKIP, como la WPA. La diferencia es que soporta AES, -Advanced Encryption Standard- en lugar de RC4. Este tipo de cifrado ademas de su antecesor, integra funciones como Key Caching y Pre-Autenticacion.

# La key caching, permite al user, conservar la clave PMK -pairwise master key- es la variante de la PSK que hable anteriormente. La finalidad de esto es que el user necesite identificarse una sola vez con un acess point especifico, esto funciona conservando la clave PMK, que es adminsitrada por PMKID -pairwise master key identifier-, que estaria formada por una parte simplificada de la clave PMK, direccion MAC del access point y del cliente y una cadena de caracteres. De esta forma se identifica de forma única la clave PMK.

# La Pre-Autenticacion permite a un usuario movil, que se identifique con otro access point al que necesitase conectar en el futuro. Esto funcionada redireccionado las tramas de autenticacion, generadas por el cliente que fue enviado desde el access point actual, hacia el point futuro de acceso mediante la red cableada.

Esto incrementa considerablemente el tiempo de carga, como asi tambien otra desventaja es la de que las empresas u organizaciones que necesiten implementar este cifrado, requeriran de un chip criptografico por ejemplo, dedicado para los calculos de AES.

Filtración mediante Direcciones MAC
Esta funcion de seguridad permite restringir el acceso a ciertas o determinadas direcciones MAC.
Como sabemos una direccion MAC es el identificador unico que posee cada placa/tarjeta de red. Un ejemplo de nuestro MAC: 00:11:22:33:44:55. Desgraciadamente los estandares 802.11b/g no cifran las tramas -conjunto de paquetes- donde aparecen estas direcciones MAC.
Por lo tanto ciertas aplicaciones permiten ver las direcciones MAC de los clientes como por ejemplo el Kismet, o airodump-ng bajo linux, de esta forma como tambien existen por ejemplo en linux macchanger o en windows etherchange.exe lo que permitiria falsificar y cambiar la mac, y posteriormente usurpar la del cliente…



…Por el momento esto fue todo, espero que haya sido de utilidad, proximamente papers de seguridad y contraseguridad wireless, donde veremos como romper y proteger nuestras redes.…..


##########################
# Kimeras
#http://electronik-pro.blogspot.com/
###########################

Conociendo el Mundo Wireless

######################
########################
CONTENIDO DEL PAPER
# ¿Qué és BLUETOOTH?.
# ¿Cómo funciona bluetooth?.
# Descripción de Perfiles.
# Repaso. Esquéma Conceptual.
# Hablemos de la Seguridad en bluetooth.
# Introducción a WIRELESS.
# La WI-FI Alliance & IEEE.
# Métodos de Comunicacion.
# Antenas, Señal, Tarjetas de Red.
# Seguridad en Wireless WEP/WPA/WPA-2.
# Filtracion mediante Direcciones MAC.
¿Que tal?, mediante este paper voy a tratar de explicar un poquito y tratar de orientar sobre el boom de Bluetooth y WiFi, que cada dia aumenta más y más.. gracias a los beneficios que estas tecnologias traen. Mas que nada es una introduccion para asi en el futuro, concentrarrnos en la seguridad, software, y contraseguridad.
# Agradecimientos especial a Support88, que me llevo a grandes conocimientos en WiFi.
¿Que es Bluetooth?
Hoy en dia existen 2 tecnologias inalambricas que han ganado muchos adeptos y popularidad en el mundo.Estas son: BLUETOOTH y WI-FI.
Bluetooth, es la revolucion de los dispositivos. Se puede acceder a la información de otro dipositivo de forma dinámica, fácil, y eficáz. Esta es una evolucion de las transmisiones infrarrojas cuyo funcionamiento no podia exceder un espacio fisico determinado.
Bluetooth, se creó con el fin de conectar facilmente dispositivos como -Palms, Celulares, Equipamiento de los celulares como podria ser auriculares inalambricos, Laptops, Teclados, Mouses, Impresoras, etc de accesorios-.
Bluetooth fue creado por varias organizaciones y compañias de telecomunicaciones, fabricantes de chips, etc. Un ejemplo de las compañias que participaban o participan de este proyecto: IBM, INTEL, NOKIA, TOSHIBA, etc.
¿Como funciona Bluetooth?
Para que bluetooth funcione correctamente y asi permita la conexion, se debe completar pasos y reglas para una conexion satisfactoria.
Trabaja en un rango de frecuencia de -2,4 GHZ a 2,8 GHZ-.
Bluetooth tiene dos formas de trabajar, eligiendo la frecuencia exacta en la que se va a comunicar con el otro dispositivo. Estas frecuencias se llaman: SPREAD SPECTRUM y FREQUENCY HOPPING.

[SPREAD SPECTRUM]: Esta es una tecnologia de banda amplia. Fue en principio desarrollada por militares de Estados Unidos, para comunicaciones seguras y confiables.
Como dice su nombre es la capacidad de que se pueda trabajar en un espectro extendido de frecuencia.

[FREQUENCY HOPPING]: Esta habilidad como su nombre lo indica significa “Saltos de Frecuencia”, trabaja a 1600 saltos p/segundo.

Estas caracteristicas proveen a bluetooth una inmunidad ante las interferencias originada por otra señal.
Otro de los pasos para proceder a la conexion, es la de tener habilitado el Profile, (perfil). Se le llama perfil a una serie de implementos, como informacion del protocolo que se debe usar para la conexion. Todos los dispositivos deben tener su perfil y entender el del otro para que asi se pueda establecer la comunicacion entre ambos.
El perfil seria en un dispositivo la forma de comportarse ante el resto.


Descripcion de Perfiles.

Los Perfiles se dividen en dos clases, estan los perfiles FUNDAMENTALES y los perfiles de
TRABAJO.

[+] FUNDAMENTALES.
# [ SPP ]: Serial Port Profile, es lo que significa las iniciales. *Este perfil depende del perfil GAP tambien. Se encarga de, cómo el dispositivo debe simular un puerto serial, para poder que algunas aplicaciones funcionen mediante esta comunicación.
# [ GAP ]: General Access Profil, es el perfil de acceso general, y emite como dos dispositivos tienen que comunicarse para cumplir sus funciones basicas.
# [ GOEP ]: General Object Exchange Profile, es el perfil general para el intercambio de objetos. Describe los protocolos y procedimientos que se utilizaran para el intercambio de objetos. *Este perfil depende del perfil SPP que explique al principio.
# [ SDAP ]: Service Discovery Application Profile, este perfil enumera la cantidad y los tipos de servicios que pueden ser servidos a traves del enlace Bluetooth y las aplicaciones que seran usadas para la comunicacion. *Este perfil Depende del Perfil GAP
[+] TRABAJO.
#[ InterCom Profile ]: Este perfil se encarga de como dos o mas telefonos celulares, podrian entablar una comunicacion sin hacer uso de la red de Telefonia.
# [ Cordless Telephony Profile ]: Define como un telefono celular tiene que comunicarse con un Headset (accesorio el cual permite comunicarse mediante manos libres).
# [ Dial-UP Networking Profile ]: Comunicacion telefonica entre computadoras significa, y permite una conexion via Modem Telefonico, el cual puede ser hecha desde una laptop hacia un telefono celular.
# [ Lan Access Profile ]: Es el perfil de acceso a redes LAN. Permite la interconexion a una red LAN. El protocolo que puede utilizar es el PPP, que significa Point to point, osea Protocolo Punto a Punto .
# [ FTP ]: Creo que no hace falta explicarlo, posee reglas de como transferir archivos entre dos dispositivos BlueTooth.
# [ Personal Area Network Profile - PAN ]: Red de area personal. Posee informacion de como establecer interconexion con hasta 7 dispositivos entre si.
# [ Synchronization Profile ]: Permite sincronizar los dispositivos como por ejemplo: Telefono celular a PC, etc.
# [ Basic Printing Profile ]: Perfil Basico de Impresion, define como imprimen los dispositivos en una impresora equipada con Bluetooth.
Repaso. Esquéma Conceptual

Hablémos de la Seguridad en Bluetooth
Si hablamos de lo que respecta a seguridad en bluetooth, diriamos que su seguridad es alta. Posee encriptacion de datos hasta 128bits. Bluetooth posee 4 Normas de seguridad preestablecidas para que su sistema de autenticacion y reconocimiento sea alto.

PRIMER NORMA > [NO SEGURO]: Esta norma, esta pensada para los dispositivos de uso publicos como podria ser una impresora. Por ejemplo accedemos mediante bluetooth a la impresora, se realiza la impresion y se desconecta del dispositivo impresora.

SEGUNDA NORMA > [NIVEL DE SEGURIDAD ALTA, FORZADA A SERVICIOS]: Este modo se encarga de limitar el uso de un servicio y restringirlo. Por ejemplo: nos conectamos a otro dispositivo para descargar varios archivos, pero se nos limita el servicio para descargar datos personales o contactos del dispositivo remoto.

TERCERA NORMA > [NIVEL DE SEGURIDAD MAS ALTA, FORZADA A ENLACE]: Este nivel es el mas alto en lo que respecta a seguridad, se basa en la autenticacion y autorizacion del enlace entre dos dispositivos.

CUARTA Y ULTIMA NORMA > [NIVEL DE SEGURIDAD Y ENCRIPTACION DE DATOS "PARING"]: Este nivel es el decisivo una vez cuando la conexion fue establecidad, se produce lo que se denomina PARING, traducido a castellano como “APAREAMIENTO”, si!, nada mas que con animalitos roboticos .
El concepto de PARING se refiere a cuando el enlace de los dos o mas dispositivos se realiza efectivamente, estos se ponen de acuerdo para que su transmision de datos sea de forma segura, mediante la encriptacion, y asegurando que si alguno de los dispositivos no esta apareado, no tenga acceso a leer los datos transmitidos entre ellos.


Introducción a WIRELESS
Wireless no es mas que una tecnologia que facilita la conectividad entre Computadoras de forma inalambrica. Las conexiones se realizan mediantes Placas Inalambricas y Antenas.

Esta tecnologia por un lado disminuye los costos en cables, y por el otro aumenta el nivel estetico de una organizacion ya que al no haber cables, hay mas flexibilidad a la hora de su implementacion ya sea en lugares publicos como museos o comercios, complejos, casas y departamentos, empresas,etc.. Esto no genera ningun cambio en la estructura ambiental, y productivamente, la conexion a las demas redes LAN como asi WAN, permite un ancho de banda mas elevado lo que significa mayor velocidad de conexion.

Lamentablemente lo que respecta a SEGURIDAD, Wireless no es algo que digamos sobresaliente, su nivel de seguridad es bajo, y los mecanismos desarrollados como prevencion a intrusos no son lo suficientemente seguros como para mantener a salvo la informacion. La WI-FI Alliance & IEEE
# La WI-FI Alliance: Es una alianza de fabricantes que tiene como finalidad, desarrollar e implementar tecnologias inalambricas. Nacio en 1999 y esta formada por mas de un centenar de miembros como por ejemplo: Cisco, Microsoft, Intel, Dell, Nokia, Philips, Sony, etc.

# IEEE: Institute of Electrical and Electronics Engineers, se encarga de desarrollar, potenciar y establecer los estandares de fabricacion de dispositivos electronicos.Con estándar nos referimos a una publicacion donde se aprueba por los miembros de la organizacion el contenido de procedimientos y las especificaciones que asegura que el material, producto, metodos o servicio, funcione a los propositos para lo que fueron creado.

En las redes Wireless existen distintos estándares de la IEEE.
#–[SISTEMA]——[CAPACIDAD]——[TRANSMISION]
# IEEE 802.11 1 Mbps 2.4 Ghz
# IEEE 802.11 2 Mpbs 2.4 Ghz
# IEEE 802.11b 11 Mbps 2.4 Ghz
# IEEE 802.11d 54 Mbps 2.4 Ghz
# IEEE 802.11e 54 Mbps 2.4 Ghz
# IEEE 802.11f 54 Mbps 2.4 Ghz
# IEEE 802.11g 54 Mbps 2.4 Ghz
# IEEE 802.11h 54 Mbps 2.4 Ghz
# IEEE 802.11i 54 Mbps 2.4 Ghz
# IEEE 802.11a 54 Mbps 5 Ghz
Módos de Comunicación
Modo AD-HOC

Tambien conocida como PUNTO A PUNTO es decir de pc a pc. No necesita mas que una placa de red wireless para poder comunicarse y enlazarse con la otra pc. De esta forma se descartan los routers o access points, aunque su resultado para adminsitrar recursos compartidos es un poco mas complejo.


# Modo Infraestructura: Esta comunicacion se realiza para enlazar una LAN con una red inalambrica, se utiliza como medio de conexion un dispositivo denominado ACCESS POINT.
Esto permite que las estaciones de trabajo que no estan conectadas a la LAN puedan hacerlo inalambricamente, a traves de una adaptador de red Wireless.

El adaptador de red es una NIC que cumple con la funcion de aceptar los datos del sistema operativo, paquetes de red del protocolo IP, seguimientos de estos mediante el uso de un protocolo de enlace de datos y acceso: IEEE 802.11, y que se transmita mediante ondas electromagneticas para propagarse en el vacio para nosotros. En viceversa la captura de medio de transmision tambien esta a cargo de esta NIC.
Antenas
Bien, hay dos tipos de antenas. Las primeras son las Direccionales y las segundas Omnidireccionales.

# Las Direccionales funcionan concentrando la energia de la señal enviada y rechazada en un dispositivo con forma de cono. Estas señales se transmiten a UNA SOLA DIRECCION. Hay varios tipos de estas antenas por ejemplo una podria ser la conocida parabólica u otra como la antena panel.



# Las Omnidirecionales transmiten y ofrecen una radiacion de 360º, son capaces de recibir señal de cualquier lado. Generalmente estas antenas son instaladas en el access point conectado a la red e incluso algunas se instalan sobre las mismas tarjetas PCI.



Señal
Si hablamos de la señal, dependiendo del tipo de construccion con el cual se conviva. Ya sea edificios o casas, con paredes muy gruesas tanto como los techos, armarios de metal o de madera, etc, puede verse seriamente afectada la transmision de datos con todas estas interferencias.
Tarjetas de red
Para tener una conexion Wifi, es necesario disponer de una tarjeta de red PCI para ordenadores en el caso que sea sobremesa,escritorio, desktop, como mas les guste, y para una LAPTOP o Portatil, una tarjeta PCMCIA.
Seguridad en Wirelees WEP/WPA/WPA-2
# WEP
Bueno como todos sabemos la seguridad es algo casi paranoica por asi decirlo y mas si sabemos que nuestra informacion y privacidad estan plasmadas en un pc. En una lan sabemos que estableciendo reglas y protecciones sea por nosotros o por un administrador podemos proteger o restringir esos datos, o almenos eso intentamos . Pero en una WLAN es algo mas complejo ya que su ambiente de transmision es el “aire” y otra persona chusma con conocimientos y una placa de red wireless tranquilamente podria interceptar nuestra transmision de datos.

Para solucionar los problemas de confidencialidad y privacidad del flujo de informacion en las redes wifi, se diseño para el estandar 802.11b un mecanismo simple de encriptacion de datos, llamado WEP, Wireless Equivalent Privacy. El mecanismo de encriptacion utiliza 64 o 128 bits y trabaja bajo el logaritmo RC4 . Este proporciona una contraseña la cual tiene como norma, respetar ciertos tipos de caracteres y longitudes para establecer una conexion segura, esta contraseña no es para validarse como usuario sino se usa para validar la estacion para empezar a transmitir datos de forma segura. Sin embargo, WEP posee un gran numero de fallas, lo que significa que este cifrado es vulnerable.
A un Hacker con herramientas actuales bastaria de un par de minutos para descifrar la contraseña. La clave de sesion compartida por todas las estaciones, es estatica. Significa que si queremos levantar un gran numero de estaciones, es necesario configurarlas usando la MISMA contraseña.
En cuanto a CRC32 implantado en WEP, la integridad de los datos es vulnerable, ya que se permite modificar las cadenas de verificacion de los paquetes a comparar a la cadena final producto de los datos capturados y recibidos.

En mi resumen, WEP apesta!, no es lo suficientemente seguro como para proteger y garantizar confidencialidad en nuestros datos.

# WPA
Este sistema de proteccion de redes llamado WPA: WI-FI Proteced Access es sin dudas mas seguro que el cifrado WEP. Este cifrado fue desarrollado por IEEE, este permite un mejor cifrado que WEP ya que implementa la utilizacion de claves TKIP -Temporal Key Integrity Protocol-.
WPA permite utilizar una clave por estacion conectada a una red inalambrica, mientras que como recordarán en WEP solamente se usaba una misma clave para toda la red inalambrica.

El modo en autenticacion mas conocido en WPA -si bien hay otro que requiere un servidor central-, es el PSK, -Pre-Shared Key-. Permite el acceso de una contraseña alfanumerica -passphrase-.

Pero no todo es color de rosa en esta vida y a que no saben que? como WEP pero desde otros puntos de vista tiene problemas tambien. Es comunmente usado el ataque DOS -denegacion de servicio- Por ejemplo algun usuario malintencionado envia 2 paquetes por segundo y medio conteniendo la clave de cifrado incorrecta, producira que el AP -acess point- eliminara todas las conexiones de los usuarios durante 1 Minuto. Este mecanismo de seguridad es para que se evite los accesos que no son autorizados a la red protegida, pero claro de esta forma lograriamos una denegacion de servicio lo que en otras palabras haria, bloquearia toda una red.

# WPA-2

Esta basada en el logaritmo de cifrado TKIP, como la WPA. La diferencia es que soporta AES, -Advanced Encryption Standard- en lugar de RC4. Este tipo de cifrado ademas de su antecesor, integra funciones como Key Caching y Pre-Autenticacion.

# La key caching, permite al user, conservar la clave PMK -pairwise master key- es la variante de la PSK que hable anteriormente. La finalidad de esto es que el user necesite identificarse una sola vez con un acess point especifico, esto funciona conservando la clave PMK, que es adminsitrada por PMKID -pairwise master key identifier-, que estaria formada por una parte simplificada de la clave PMK, direccion MAC del access point y del cliente y una cadena de caracteres. De esta forma se identifica de forma única la clave PMK.

# La Pre-Autenticacion permite a un usuario movil, que se identifique con otro access point al que necesitase conectar en el futuro. Esto funcionada redireccionado las tramas de autenticacion, generadas por el cliente que fue enviado desde el access point actual, hacia el point futuro de acceso mediante la red cableada.

Esto incrementa considerablemente el tiempo de carga, como asi tambien otra desventaja es la de que las empresas u organizaciones que necesiten implementar este cifrado, requeriran de un chip criptografico por ejemplo, dedicado para los calculos de AES.

Filtración mediante Direcciones MAC
Esta funcion de seguridad permite restringir el acceso a ciertas o determinadas direcciones MAC.
Como sabemos una direccion MAC es el identificador unico que posee cada placa/tarjeta de red. Un ejemplo de nuestro MAC: 00:11:22:33:44:55. Desgraciadamente los estandares 802.11b/g no cifran las tramas -conjunto de paquetes- donde aparecen estas direcciones MAC.
Por lo tanto ciertas aplicaciones permiten ver las direcciones MAC de los clientes como por ejemplo el Kismet, o airodump-ng bajo linux, de esta forma como tambien existen por ejemplo en linux macchanger o en windows etherchange.exe lo que permitiria falsificar y cambiar la mac, y posteriormente usurpar la del cliente…



…Por el momento esto fue todo, espero que haya sido de utilidad, proximamente papers de seguridad y contraseguridad wireless, donde veremos como romper y proteger nuestras redes.…..


##########################
# Kimeras
#http://electronik-pro.blogspot.com/
###########################

Bad chars y encoders/decoders en payloads

Alguien pregunto como podia detectar bad chars en una payload.

Es por eso que voy a introducir un poco estos conceptos:
Una payload como todos sabemos es una combinacion de codigo y datos que se inyectan en un proceso corriendo para explotarlo, puede ser para un buffer overflow, memory corruption, heap overflow, etc.
Esta payload generalmente debe tener unos requisitos para que el programa la acepte, por ejemplo si la payload pasa por strcpy no podemos tener un caracter nulo porque no terminaria de copiar todo el buffer, sino que lo haria hasta donde este el caracter nulo (0).
Ejemplo:

buffer = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11";
__________________________________||_______________
strcpy copia hasta aca, el resto no lo copia

A ese byte lo consideramos un bad char y es lo que tenemos que evitar, se puede utilizar un encoder en asm si nuestra payload va a ser ejecutada, sino tenemos que pensar en cambiar la payload.
El caracter nulo es un bad char caracteristico de strcpy y varias funciones mas porque es el caracter que se usa para terminar las cadenas en C (y varios lenguajes mas). Pero si nos encontramos ante un servidor HTTP por ejemplo tendriamos que tener en cuenta otros bad chars como es el caso de '\r' o '\n' que son terminadores de linea en el protocolo y seguramente nos van a interrumpir la payload cuando el server la parsee.
Otros protocolos/programas tendran otros bad chars y es por eso que a veces tendremos que reversear el programa si nuestra payload por alguna razon no llega a provocar la corrupcion que estamos buscando.

Aqui por ejemplo tenemos un pequeno programa en python para buscar bad chars en una payload, solamente ponemos nuestra payload y los bad chars que no acepta el programa que queremos explotar.

Código
Code (python):
payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11"
bad_chars = "\x00\n"

for offset in range(0, len(payload)):
if(payload[offset] in bad_chars):
print "tienes un bad char en el offset %s" % (offset)

Por otro lado como habia mencionado hay veces que no podemos remover ese bad char porque puede ser una intruccion fundamental en nuestra shellcode como un long jump obligatorio a una direccion que contenga 0.
Aqui entran en juego los encoders, lo que se hace es codificar la payload y agregar un decoder en la misma, que son pequenos stubs en ASM que se ejecutan antes de la payload y decodifican el resto.
Una de las codificaciones mas usadas es la que se hace con XOR, como bien sabemos si nosotros xoreamos un byte con otro podemos volver al estado inicial volviendolo a xorear con el mismo byte.

Ejemplo :
10 XOR 32 = 22
22 XOR 32 = 10

Ahora que tenemos la teoria, sabemos que podemos xorear toda la payload y agregar un header que la vuelva a su estado decodificado.

Un codificador de payload podria ser asi:

Código
Code (c):
#include

int size_payload = 12;
char *payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11";
char xor_code = 0x22; //este byte tiene que ser igual en el stub en asm

int main(int argc, char *argv[])
{
int i;
for(i = 0; i < style="color: rgb(102, 204, 102);">){
printf("0\\x%x", (char *)payload[i] ^ xor_code);
}
}

y el stub que se le agregaria a una payload seria algo asi:

Código
Code (asm):
jmp call_inicio
inicio:
pop esi ; sacamos la direccion de la payload codificada de la pila y la guardamos en esi
mov eax, payload_code ; con el byte que xoreamos nuestra payload
xor ebx,ebx ;
mov ecx, payload_size ; el tamano que tiene nuestra payload
otra_vez:
xor dword ptr[esi+ebx], eax ; aqui aplicamos el xor
inc eax ; aumentamos eax, es con el que contamos las posiciones de memoria
dec ecx
jnz otra_vez ; si no terminamos de decodificar la payload saltamos a otra_vez
jmp comienzo_payload ; una vez que terminamos saltamos a la payload real
call_inicio:
call inicio ; usamos este truco para guardar la direccion de memoria donde comienza la payload, recordemos que call pone en la pila la
;siguiente memoria
comienzo_payload:
; aqui va nuestra payload codificada.

Como veran es un codigo de apenas unos bytes y aunque este no esta optimizado pueden conseguir encoders/decoders muy eficientes que pueden hasta comprimir la payload si es muy grande.

Bad chars y encoders/decoders en payloads

Alguien pregunto como podia detectar bad chars en una payload.

Es por eso que voy a introducir un poco estos conceptos:
Una payload como todos sabemos es una combinacion de codigo y datos que se inyectan en un proceso corriendo para explotarlo, puede ser para un buffer overflow, memory corruption, heap overflow, etc.
Esta payload generalmente debe tener unos requisitos para que el programa la acepte, por ejemplo si la payload pasa por strcpy no podemos tener un caracter nulo porque no terminaria de copiar todo el buffer, sino que lo haria hasta donde este el caracter nulo (0).
Ejemplo:

buffer = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11";
__________________________________||_______________
strcpy copia hasta aca, el resto no lo copia

A ese byte lo consideramos un bad char y es lo que tenemos que evitar, se puede utilizar un encoder en asm si nuestra payload va a ser ejecutada, sino tenemos que pensar en cambiar la payload.
El caracter nulo es un bad char caracteristico de strcpy y varias funciones mas porque es el caracter que se usa para terminar las cadenas en C (y varios lenguajes mas). Pero si nos encontramos ante un servidor HTTP por ejemplo tendriamos que tener en cuenta otros bad chars como es el caso de '\r' o '\n' que son terminadores de linea en el protocolo y seguramente nos van a interrumpir la payload cuando el server la parsee.
Otros protocolos/programas tendran otros bad chars y es por eso que a veces tendremos que reversear el programa si nuestra payload por alguna razon no llega a provocar la corrupcion que estamos buscando.

Aqui por ejemplo tenemos un pequeno programa en python para buscar bad chars en una payload, solamente ponemos nuestra payload y los bad chars que no acepta el programa que queremos explotar.

Código
Code (python):
payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11"
bad_chars = "\x00\n"

for offset in range(0, len(payload)):
if(payload[offset] in bad_chars):
print "tienes un bad char en el offset %s" % (offset)

Por otro lado como habia mencionado hay veces que no podemos remover ese bad char porque puede ser una intruccion fundamental en nuestra shellcode como un long jump obligatorio a una direccion que contenga 0.
Aqui entran en juego los encoders, lo que se hace es codificar la payload y agregar un decoder en la misma, que son pequenos stubs en ASM que se ejecutan antes de la payload y decodifican el resto.
Una de las codificaciones mas usadas es la que se hace con XOR, como bien sabemos si nosotros xoreamos un byte con otro podemos volver al estado inicial volviendolo a xorear con el mismo byte.

Ejemplo :
10 XOR 32 = 22
22 XOR 32 = 10

Ahora que tenemos la teoria, sabemos que podemos xorear toda la payload y agregar un header que la vuelva a su estado decodificado.

Un codificador de payload podria ser asi:

Código
Code (c):
#include

int size_payload = 12;
char *payload = "\x12\x41\x23\x34\x21\x34\x23\x00\x98\x93\x83\x11";
char xor_code = 0x22; //este byte tiene que ser igual en el stub en asm

int main(int argc, char *argv[])
{
int i;
for(i = 0; i < size_payload; i++){
printf("0\\x%x", (char *)payload[i] ^ xor_code);
}
}

y el stub que se le agregaria a una payload seria algo asi:

Código
Code (asm):
jmp call_inicio
inicio:
pop esi ; sacamos la direccion de la payload codificada de la pila y la guardamos en esi
mov eax, payload_code ; con el byte que xoreamos nuestra payload
xor ebx,ebx ;
mov ecx, payload_size ; el tamano que tiene nuestra payload
otra_vez:
xor dword ptr[esi+ebx], eax ; aqui aplicamos el xor
inc eax ; aumentamos eax, es con el que contamos las posiciones de memoria
dec ecx
jnz otra_vez ; si no terminamos de decodificar la payload saltamos a otra_vez
jmp comienzo_payload ; una vez que terminamos saltamos a la payload real
call_inicio:
call inicio ; usamos este truco para guardar la direccion de memoria donde comienza la payload, recordemos que call pone en la pila la
;siguiente memoria
comienzo_payload:
; aqui va nuestra payload codificada.

Como veran es un codigo de apenas unos bytes y aunque este no esta optimizado pueden conseguir encoders/decoders muy eficientes que pueden hasta comprimir la payload si es muy grande.