Sistemas de Información, Páginas Web, Seguridad

Malware en Linux

Damián Miércoles 9 de diciembre del 2009

Recientemente se descubrió un malware para Linux. Alojado en una página muy popular de descargas de temas para Gnome.

Este malware viene incorporado en un screensaver contenido en un paquete .deb que requiere privilegios de administrador para instalarse. Específicamente es un troyano diseñado para formar parte de una Botnet y hacer ataques DDoS.

Las instrucciones para eliminarlo revelan dónde se instala y cómo se autoejecuta:

sudo rm -f /usr/bin/Auto.bash /usr/bin/run.bash /etc/profile.d/gnome.sh index.php run.bash && sudo dpkg -r app5552

Hace tiempo reflexioné sobre este futuro poco alentador en un artículo sobre un troyano en mac. Lo que me lleva a hacer una reflexión que me gustaría que todos los linuxeros nos hiciéramos: ¿cuántas veces has revisado lo que hace e instala un paquete .deb antes de ponerle tu contraseña de administrador?

Eso de creernos invulnerables por usar Linux o Mac OS pronto va a dar frutos, y son frutos podridos. Si se le sigue diciendo a la gente, sistemáticamente, que es invulnerable al malware es casi seguro que caiga en un engaño por exceso de confianza. También pasó con el troyano que venía en la versión de bittorrent de iWork y quién sabe cuántos aún sigan infectados.

Compara el costo de vivir en un país diferente

Damián Lunes 23 de noviembre del 2009

Cuando planeamos un viaje largo, una estancia universitaria o simplemente tenemos curiosidad económica, es bastante difícil comparar efectivamente la diferencia de precios sin caer en el error de darle demasiada importancia a la evidencia anecdótica de alguien que viajó a ese lugar o extrapolar experencias propias.

Para hacer este tipo de cuestiones existe un sitio que nos permite hacer una comparación general de precio en diferentes cosas: restaurantes, productos básicos, transporte, renta de departamentos, gasolina, internet y telefonía. El sitio es:

http://www.numbeo.com/cost-of-living/compare_countries.jsp

Tutorial de exploits y shellcodes

Damián Jueves 12 de noviembre del 2009

Normalmente cuando uno busca información sobre exploits y shellcodes es frustrante darse cuenta que mucha de la información está bastante desactualizada y muchas veces no se explican a detalle ciertos pasos que para un novato son un reto resolver cuando se quiere llevar a la práctica lo aprendido.

Hoy encuentro una serie de posts referentes a un exploit en concreto en donde explican con cierto grado de detalle los pasos concretos a seguir y los conceptos que hay detrás de un exploit por stack overflow para la aplicación Easy RM to MP3 Conversion Utility.

Exploit writing tutorial part 1 : Stack Based Overflows

Exploit writing tutorial part 2 : Stack Based Overflows – jumping to shellcode

Exploit writing tutorial part 5 : How debugger modules & plugins can speed up basic exploit development

Exploit writing tutorial part 3 : SEH Based Exploits

Exploit writing tutorial part 6 : Bypassing Stack Cookies, SafeSeh, HW DEP and ASLR

Exploit writing tutorial part 3b : SEH Based Exploits – just another example

Exploit writing tutorial part 4 : From Exploit to Metasploit – The basics

Exploit writing tutorial part 7 : Unicode – from 0×00410041 to calc

Y sigue actualizándose.

Port Knocking : Evita ataques masivos a tu puertos

Eduardo Martes 7 de julio del 2009

El port knocking se refiere a una combinación de puertos que debemos “tocar” para que el servidor nos de acceso a un servicio. Por ejemplo, cuando alguien establece una conexión por ssh implícitamente va un paquete al puerto 22 intentando iniciar la conexión, y esto sería “tocar” el puerto 22.

¿Para qué?

Si tenemos un servidor accesible desde internet, es común que recibamos ataques automáticos por diccionario contra nuestro servidor; esto es así porque hay muchas botnets que realizan ataques masivos contra todo lo que encuentren en internet. Pero al implementar port knocking estas botnets ignorarán nuestro servidor, y además los escaneos de puertos no podrán ver abiertos los puertos sensibles, aunque nosotros sí tengamos acceso a ellos.

Por otro lado, cuando un servicio como ssh o mysql están recibiendo un ataque por diccionario, la política automática por defecto es aumentar el tiempo de espera para hacer login, por lo que empezaríamos a notar comportamientos extraños en nuestro servidor (lentitud al realizar operaciones que requieran conexión a esos servicios).

Funcionamiento

El funcionamiento es simple: lo que va a pasar es que aparecerá cerrado el puerto 22, pues se está esperando a que le mandemos una combinación de puertos, supongamos la combinación 1200, 234, 654, 4509, 12; y, una vez enviada la combinación podremos establecer la conexión al puerto 22 (el del ssh).

Ya en la práctica tendríamos lo siguiente:

      Intentamos entrar al puerto 22 (aparece cerrado)
      Abrimos una conexión con el puerto 1200 (responderá que esta cerrado) pero el servidor sigue en espera de las demás conexiones
      Abriimos una conexión con el puerto 234 (nos aparece cerrado) el servidor ya sabe que tenemos las primeras dos combinaciones bien
      Abrimos una conexión con el puerto 654, luego 4509 y luego el 12
      Ahora tenemos 5 segundos para iniciar la conexion por ssh
      Iniciamos la conexión exitosamente

El port knocking es como si metieramos a una caja fuerte nuestra laptop, y aún después de poner la combinación se tendrían que poner el password de la computadora. Esto obviamente aumenta la seguridad en una forma considerable.

Hay que recordar que esto a pesar de ser una buena forma de asegurar un puerto, necesita tener dentrás una buena contraseña y unas buenas políticas, pues si para alguien que estuviera analizando nuestro tráfico sería trivial obtener la combinación de puertos.

Implementación con iptables

Con ayuda de iptables podríamos hacerlo suponiendo la combinacion 100, 200, 300, 400, ssh(22):


HOST_IP="12.34.56.78"

/sbin/iptables -N INTO-PHASE2
/sbin/iptables -A INTO-PHASE2 -m recent --name PHASE1 --remove
/sbin/iptables -A INTO-PHASE2 -m recent --name PHASE2 --set
/sbin/iptables -A INTO-PHASE2 -j LOG --log-prefix "INTO PHASE2: "

/sbin/iptables -N INTO-PHASE3
/sbin/iptables -A INTO-PHASE3 -m recent --name PHASE2 --remove
/sbin/iptables -A INTO-PHASE3 -m recent --name PHASE3 --set
/sbin/iptables -A INTO-PHASE3 -j LOG --log-prefix "INTO PHASE3: "

/sbin/iptables -N INTO-PHASE4
/sbin/iptables -A INTO-PHASE4 -m recent --name PHASE3 --remove
/sbin/iptables -A INTO-PHASE4 -m recent --name PHASE4 --set
/sbin/iptables -A INTO-PHASE4 -j LOG --log-prefix "INTO PHASE4: "

/sbin/iptables -A INPUT -m recent --update --name PHASE1

/sbin/iptables -A INPUT -p tcp --dport 100 -m recent --set --name PHASE1
/sbin/iptables -A INPUT -p tcp --dport 200 -m recent --rcheck --name PHASE1 -j INTO-PHASE2
/sbin/iptables -A INPUT -p tcp --dport 300 -m recent --rcheck --name PHASE2 -j INTO-PHASE3
/sbin/iptables -A INPUT -p tcp --dport 400 -m recent --rcheck --name PHASE3 -j INTO-PHASE4

/sbin/iptables -A INPUT -p tcp -s $HOST_IP --dport 22 -m recent --rcheck --seconds 5 --name PHASE4 -j ACCEPT

Y para hacer el knocking sería de esta forma:


$telnet 10.1.1.1 100 ; telnet 10.1.1.1 200 ; telnet 10.1.1.1 300 ; telnet 10.1.1.1 400 ; ssh 10.1.1.1

Luego presionamos Ctrl+C 4 veces y listo.

(Fuente: Debian Administration)

Como convertir un sistema de archivos de ext3 a ext4 sin perder nada

baidot Viernes 24 de abril del 2009

Primero que nada booteamos desde el nuevo livecd de ubuntu 9.04

Verificamos si tenemos instalado tunefs con:

$ sudo aptitude install tunefs

Para convertir un existente sistema de ficheros ext3 a ext4 emplearemos el siguiente comando:

$ tune2fs -O extents,uninit_bg,dir_index /dev/nuestro_sistema_de_archivos

Donde nuestro_sistema_de_archivos es la ruta donde tenemos instalado el sistema.

Por ejemplo si lo tenemos montado en /dev/sda1 ejecutamos:

$ tune2fs -O extents,uninit_bg,dir_index /dev/sda1

Despues tenemos que pasar el maravilloso fsck al sistema de archivos:

$ fsck -pf /dev/sda1

El paso anterior es básico dando consistencia al sistema de archivos, ya que sin el ext4 no montara.

Montamos la unidad de la siguiente manera:

$ mount -t ext4 /dev/sda1 /punto_de_montaje

Prey: rastrea tu laptop robada (OSX, Linux, Unix)

baidot Miércoles 25 de marzo del 2009

Navegando por malas aguas me he encontrado con una solución de seguridad muy buena de un desarrollador al que le robaron su laptop, que al no soportar el coraje de lo sucedido realizo este script que nos ayuda de manera muy completa quien fue, como y donde recuperarla.

Dandonos información valiosa como:

Información de red

  • La dirección IP pública y privada de donde esté conectado el PC.
  • El IP del gateway de la red que está usando para salir a Internet.
  • La dirección MAC de la tarjeta o controlador de red por el cual esté conectado a la red.
  • El nombre e ESSID de la red WiFi a la que esté conectado, en caso que lo esté.
  • Un listado de conexiones activas en el momento en que se ejecute el programa.

Información interna del PC

  • Cuánto tiempo lleva encendido el aparato.
  • Número de usuarios logeados.
  • Un listado con los programas en ejecución.
  • Un listado con los archivos modificados en la última hora (o el número de minutos que tú definas).

Información del ladrón

  • En caso que el PC tenga una webcam, una foto del impostor.
  • Un pantallazo del escritorio, para que veas qué está haciendo.
  • El tatuaje indistinguible de nuestro nuevo amigo.

¿Como Funciona?

Cada cierto intervalo de tiempo (default = 10 minutos) el programa se ejecuta y revisa si en la configuración pusiste una URL de checkeo o no. En caso que no lo hayas hecho, o que lo hayas hecho y la URL sí exista, el programa hará el proceso de recolección y envío de datos. Si definiste una URL que no existe, el programa se apagará para volver a ejecutarse en 10 minutos más.

Ejemplo

Para instalarlo:

  • Bajamos el siguiente paquete
  • Abrimos la grandiosa terminal y ejecutamos lo siguiente:

$ wget http://bootlog.org/downloads/prey-0.1.zip

$ unzip prey-0.1.zip

$ cd prey-0.1

$ chmod +x install.sh

$ ./install.sh

  • Seguimos las instrucciones como muestro a continuacion:
    prey

One-Time Pad el cifrado perfecto

Eduardo Miércoles 25 de marzo del 2009

Hay quienes creen que no existe un método de cifrado perfecto, o un cifrado que te pueda garantizar seguridad absoluta y se equivocan.

El método de cifrado de One-Time Pad, que fue inventado en 1917 por el Mayor Joseph Mauborgne y Gilbert Vernam de AT&T. Claude Shannon, 25 años después, se encargó de demostrar con la teoría de la información que este cifrado cumple con ser un secreto perfecto, lo que quiere decir que el contenido del mensaje no puede aportar nada de información a un atacante.

Es un método que sin importar el poder computacional que se tenga o si se haya inventado la computadora cuántica o si los extraterrestres de Andrómeda vengan a la tierra con sus métodos computacionales inimaginables, aún asi será seguro.

Preliminares

Necesitamos una llave de la misma longitud que el mensaje, la cual deberá ser de verdad aleatoria y no pseudo aleatoria. Además esta llave se supone que las dos partes la deben conocer (problema de intercambio de llaves) y cuando una parte cifre el mensaje debe destruir esa llave de alguna forma que no pueda recuperarse y luego enviar el mensaje cifrado, luego la otra parte va a descifrarlo y al terminar de hacerlo debe destruir la llave de nuevo.

Es primordial que no se vuelva a usar la misma llave dos veces pues un criptoanalista podría romper el cifrado sabiendo dos mensajes diferentes que se encriptaron con la misma llave.

¿Cómo funciona?

Es algo muy simple de entender, teniendo el texto:

Teniendo la llave:

El texto cifrado sería:

Porque:

A + R mod 26 = S
M + F mod 26 = S
A + T mod 26 = U

Suponiendo que A vale 1 y R vale 17: 1+17 = 18 y 18 / 26 nos daría como residuo 18, entonces el 18 corresponde a la letra S.

Es importante ver que no puede romperse incluso si pudieramos calcular todas las posibilidades y buscar mensajes coherentes, pues al decifrarlo podría decir SIVOY como NOVOY entonces es imposible saber cual es el mensaje cifrado sin saber la llave. Según dicen, los Rusos cifraron algunos mensajes con este método y siguen hasta la fecha sin poderse descifrar, y así seguirán para siempre.

El problema con este método y en general con cualquier método de cifrado simétrico es el intercambio de llaves, pues ¿cómo podrías intercambiar la clave del One Time Pad de una manera segura?

Fin

Si quieren profundizar más en el tema podrían leer en la página 15 del libro Applied Cryptography escrito por Bruce Schneier que explica con un poco más de detalle este algoritmo.

Con este código en javascript podríamos obtenerlo:


var charCodeCero = ("A".charCodeAt(0))-1;
function oneTimePad(mensaje, llave) {
	mensaje = mensaje.toUpperCase();
	llave = llave.toUpperCase();
	var cifrado = "";
        for(var i = 0; i < mensaje.length; i++) {
		cifrado += String.fromCharCode((( mensaje.charCodeAt(i) - charCodeCero +
                                                 llave.charCodeAt(i) - charCodeCero
                                                 ) % 26) + charCodeCero);
	}
	return cifrado;
}

Los astronautas también van al baño…. y con cuidado.

Paco Jueves 19 de marzo del 2009

En el blog de noticias espaciales de Discovery leo una graciosa e interesante cita sobre un astronauta y sobre como un astronauta va al baño; Y es que tareas tan cotidianas para cualquier persona (como lo es ir al sanitario) se vuelven en algo especial o único.

“In the space shuttle we have a small room where we have our toilet and there’s a device to collect the urine and then you have another one to dispose of the larger matter. Basically a lot of it works on a vacuum, so we have a hose but it’s a very light vacuum and each person has their own funnel (for) when you have to go ahead and urinate.
When you go ahead to do No. 2, just like you do at home, you sit down, you make sure you have a good seal and that’s important. The last thing we want to have is our commander seeing something floating around the cabin.”

La única duda que me queda es, ¿Que pasará con los desechos solidos?..  los liberarán al espacio? y quedaran en órbita? Con los desechos líquidos (orina) se que ya existen sistemas de reciclaje (como el de la ISS, que instalaron hace un par de meses) para obtener agua a partir de ellos.

Despues de todo, nadie dijo que todo seria comodidad para un astronauta.

Via: Free Space

Google Chart API

Paco Martes 17 de marzo del 2009

En estos dias de arduo trabajo es muy reconfortante encontrar utilidades con las que sea posible trabajar de manera comoda y eficaz. Una de las tareas que desarrollamos en los ultimos meses es la generación de graficas dinamicas para un sitio web. Tras varios experimentos con JSChart e investigar con algunas otras tecnologías, dimos con una que se ajustó mas a lo que deseábamos. Esa utilidad (que fue la que nos sorprendió aquí en Amarello) es la API de Google Charts. Esta API, es la mas robusta y completa que encontramos para poder realizar gráficas dinámicas en un sitio web. La maravilla de esta API es su capacidad y su facilidad de manejo.

La idea básica consiste en generar las gráficas(imágenes) mandando los datos de ella por medio de parámetros GET a la API de Google en sus servidores. Esto desde un principio puede parecer una desventaja, pero esto también puede ser una gran ventaja según se vea. Todo se reduce a una etiqueta web de <img> que tiene como “src=” la API. por lo que el hacer una gráfica se reduce a un código HTML tan simple como el siguiente:

 <img src="http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World" />

En el, podemos ver los parametros basicos que toda gráfica debe llevar como lo es el tipo de grafica, los valores, y el tamaño de la gráfica. Todos estos datos produce la siguiente imágen:

Seguir leyendo »

Como acelerar iPhoto 09 en definitivo

baidot Lunes 16 de marzo del 2009

Al tener en nuestra librería una gran cantidad de fotos, hace que nuestro iPhoto se alente de manera considerable y mas aun si estamos en el caso de haber pasado nuestra librería por distintas versiones de iPhoto sin hacer una depuración de la base de datos.

Lamentablemente cuando realizamos una actualización, no se hace esto de manera automática, desconocemos realmente el porque apple no se ha puesto las pilas, ni porque se nos habia comentado de esto.

La siguiente serie de comandos que puede ayudarnos a optimizar la base de datos:

  1. Abrimos la terminal, tecleamos cd espacio y arrastramos la carpeta del iPhoto de tal manera que quede asi:
    cd /Users/usuario/Pictures/iPhoto\ Library
  2. Una vez localizados en el directorio ejecutamos:
    for dbase in *.db; do sqlite3 $dbase “vacuum;”; done
  3. Esperamos a que termine, dependiendo del tamaño de nuestra base de datos, y listo.

El comando vacuum limpia la base de datos principal copiando su contenido a un archivo de base de datos temporal y este vuelve a cargar al final la base de datos original. Esto libera las paginas, sumando los datos de las tablas de manera contigua, logrando depurar la estructura de archivos de nuestra base de datos y mejorando el performance.

Recomiendo de sobre manera que se tomen los tiempos antes / después de:

  • Arranque del iPhoto,
  • Reconocimiento de caras.
  • Velocidad de apertura de events, faces y places.
  • Navegación de fotos
  • Edición de fotos

Ya que es impresionante la diferencia, ¿no me creen?, intentelo.

« Anterior - Siguiente »