Podcasts de Seguridad!

Les comparto una selección de podcast activos y muy buenos que he estado escuchando últimamente:

SANS Internet Storm Center Daily Network Security Podcast_logo
Este podcast es breve y sale sin falta todos los dias, ideal para actualizarte durante la mañana

Brakeing Down Security podcast
Este podcast tiene muy buen nivel de los temas tratados, es un poco mas largo, una hora al menos y sale regularmente todas las semanas

Paul’s Security Weekly
Este podcast esta estrenando una emisión semanal dedicado a la seguridad en las empresas, mientras continua con su acostumbrada y famosa periodicidad.

Down the Security Rabbithole
De periodicidad menos frecuente, pero constante, trata temas no tan técnicos en si pero muy interesantes a todo lo referente con la seguridad informática.

Defensive Security Podcast
Otro excelente podcast con temas relacionados con la seguridad informatica, de duración larga pero interesante.

Crimen Digital
Este podcast se especializa sobre todo en la parte forense de la seguridad informática. Lo mejor que escuche en español

Otros dos mas, sobre los que no tengo mucho para decir:
Security Advisor Alliance Podcast
Data Driven Security

ZMap mas rápido que NMap

ZMap es un escaner de redes (tal como lo es el famosísimo nmap) que sirve para auditorias de seguridad, testings, monitoring etc etc. Sin embargo, a diferencia de otros scanners, ZMap es muy veloz y tiene un potencial muy interesante dado sus cualidades. Según sus autores, tiene la capacidad de scanear todas las ip de ipv4 en 45 minutos desde una PC normal y fue creado con el fin de encontrar vulnerabilidades en forma masiva.
Como explican en el WashintongPost:

In contrast, ZMap is “stateless,” meaning that it sends out requests and then forgets about them. Instead of keeping a list of oustanding requests, ZMap cleverly encodes identifying information in outgoing packets so that it will be able to identify responses. The lower overhead of this approach allows ZMap to send out packets more than 1,000 times faster than Nmap. So while an Internet-wide scan with Nmap takes weeks, ZMap can (with a gigabit network connection) scan the entire Internet in 44 minutes.

ZMap no tiene un registro de los paquetes enviados, simplemente envía los paquetes con data que al ser devuelta puede identificar y decodificar, haciéndolo 1300 veces mas rápido que nmap.

Instalación

Su instalación no debería serte en absoluto un problema, ya que esta portado para varias distribuciones, como se documente en su sitio:

Debian or Ubuntu: sudo apt-get install zmap
Fedora, CentOS, and RHEL: sudo yum install zmap
Gentoo: sudo emerge zmap
Mac OS (brew): brew install zmap
Arch Linux: Available through AUR

Por otro lado, lo puedes descargar/clonar desde GitHub
La información para compilarlo, puedes verla aquí

En particular, en Debian 7, necesitaras tener entre tus repositorios, los backports:

deb  http://http.debian.net/debian  wheezy-backports main contrib non-free

Uso

La rapidez de zmap hace que sea ideal para escanear una gran cantidad de hosts (syn scan) en poco tiempo (de hecho, lo hace tan rápido, que hemos de tener cuidado al usarlo). El output generado por zmap, es simple, una lista de las IPs, que pueden servir como input para otro programa. Veamos su uso más básico:

# zmap -p 22 -o iplist.txt 200.0.0.0/8

Obtendremos un output en la consola similar al siguiente:

 Mar 02 21:27:12.301 [INFO] zmap: output module: csv
0:01 1%; send: 148953 149 Kp/s (135 Kp/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.00%
0:02 2%; send: 297811 149 Kp/s (142 Kp/s avg); recv: 0 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.00%
0:03 2%; send: 446588 149 Kp/s (144 Kp/s avg); recv: 1 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.00%
0:04 3%; send: 595473 149 Kp/s (145 Kp/s avg); recv: 1 0 p/s (0 p/s avg); drops: 0 p/s (0 p/s avg); hits: 0.00%

Como vemos, vamos recibiendo un update del estado del escaneo en la consola a cada segundo, y en el archivo iplist.txt tendremos una lista de ips con el puerto 22.

Pero esto no es todo, hay algunas características dignas de ser recalcadas:

Control del ancho de banda:

zmap nos permite ajustar el ancho de banda que queremos utilizar con la opción -B:

zmap -B 512K -o list.txt -p 8080 83.0.0.0/8

Scan ICMP:

Podemos hacer un scan sólo utilizando ICMP con:

zmap -M icmp_echoscan -o list.txt 91.0.0.0/8

Scan UDP:

También podemos utilizar el módulo de UDP , casi con la misma velocidad que TCP, lo que es mucho:

zmap -M udp -o list.udp.txt -p 53 91.0.0.0/8

Output en JSON:

Utilizando la opción -O json podemos obtener el archivo de resultado en formato json, lo que puede ser muy útil para alguna herramienta de monitoreo o algún tipo de webservice:

zmap -O json -o list.json -p 23 15.0.0.0/16

Output en standard output:

Podemos pedirle a zmap, que la lista de IPs no las tire en el standard error con el fin de conectarlo mediante pipes a otra aplicación. Por ejemplo en la versión compilada (no la que instalamos con apt u otro gestor) tenemos un programa llamado banner-grab-tcp que sirve para obtener los banners y como sugiere el sitio de zmap podemos utilizarlo de la siguiente manera:

zmap -p 80 -N 1000 -B 10M -o - | ./banner-grab-tcp -p 80 -c 500 -d ./http-req > out 

Esta misma idea puede traspolarse a scripts hechos por nosotros mismos u otros programas que puedan recibir el input desde el standard input.

Abuso

  • A tener cuidado, zmap es una tentación a escanear grandes segmentos de red (de ips públicas).
  • Incluso si lo ejecutas en una red privada puedes llegar a generar una cantidad de tráfico indeseado que puede ser un problema para la red, por lo que mide bien los paramatros que utilizas.
  • Nunca olvides la parte ética del hacking

Extensiones

Por como si fuera poco, zmap puede ser facilmente extendido, te recomiendo le des una pasada a este link para obtener mas info de como hacerlo, verás que simple.

Conclusiones

Claramente zmap es digno de salír en las noticias (WashingtonPost article) ya que supone un gran avance y es un arma peligrosa de dos filos. Además es un proyecto muy maduro para su corta vida.
Por otro lado, me hace pensar sobre una versión de zmap para ipv6, cuya características (las de ipv6) nos hacia suponer que un escaneo masivo sería muy complejo, sin embargo esta simple herramienta nos abre un poco la cabeza. Aunque nmap tiene muchas mas cualidades, y creo yo, sigue siendo el rey de los scanners, zmap, es una herramienta que puede complementar muy bien muchas de las tareas que realizarmos en un pentesting o en auditorias internas. Definitivamente zmap no puede faltar entre tus herramientas de pentesting, hacking y auditoria. De seguro pronto la veremos en los top 10 de herramientas de hacking.

Fuentes:
Web de zmap

~have fun

Usando plugins y themes para hackearte

A modo de troyano, CryptoPHP infecta tu CMS (wordpress, joombla, Drupal) con un sospechoso pero poco visible:

<?php include('assets/images/social.png'); ?>

Siendo social.png no una imagen si no un PHP ofuscado.
CryptoPHP fue lanzado en su primera versión (0.1) el 25 Sep de 2013, y el 12 de Noviembre de este año vio la luz la versión 1.0a y según las evidencias el autor ha de estar en Modova.
La info completa de este threat pueden leerla en el siguiente paper liberado por Fox-IT.

~have fun

Seguridad en archivos

Proteger tus archivos en GNU/Linux puede es la roca fundamental de la seguridad

Los Firewalls, rootkit hunters, IDS, Itrusion prevention systems, etc etc no sirve si el administrador del sistema no sabe lo que esta haciendo. Una de las tareas mas importantes en la seguridad que el administrador debe conocer, es controlar la seguridad en nuestros sistemas de archivos.

En este post haremos un repaso de las medidas de seguridad disponibles en GNU/Linux, a la hora de cuidar nuestros archivos:

UGO

Heredado de Unix, los sistemas de archivos en linux, tienen una lista de control de acceso. Esta lista, enumera a tres sujetos. El usuario (el dueño del archivo), el grupo (grupo dueño del archivo) y otros (es decir, todos los que no son ni dueños ni pertenecientes al grupo dueño del archivo. Cada uno de estos sujetos puede tener permiso para, leer (r de read), escribir (w de write) y ejecución (x de eXecution).  Todo esto ya lo sabemos y si no, la wikipedia puede ser una ayuda.

Hay algunas peculiaridades que debes conocer de este sistema:

Falsa restricción de lectura en carpeta

Si una carpeta no tiene permiso de lectura (r), no podrás listar su contenido (hacer un ls), pero si conoces de la existencia de un archivo dentro de ella, podrás listarlo y leerlo (si tienes permisos sobre el mismo).
Ejemplo:

# ls -ld  test
drwxr-xr-x 1 user group 0 sep 1 12:00 test
# ls -l test/
-rwxr-xr-x 1 user group 0 sep 1 12:00 file
# chmod u-r test
# ls -l test/
ls: no se puede acceder a test: No existe el fichero o el directorio
# ls -l test/file
-rwxr-xr-x 1 user group 0 sep 1 12:00 file

Para evitar esto, la correcta manera de denegar el acceso a una carpeta, es quitando el permiso de ejecución (x):

# ls -ld  test
drwxr-xr-x 1 user group 0 sep 1 12:00 test
# chmod u-x test
# ls -l test/
-????????? ? ? ? ? ? file

De esta manera, si bien podríamos listar los archivos contenidos en la carpeta, no podríamos acceder a ellos, ni a las carpetas que estén dentro.

Falsa restricción de ejecución de scripts

Si queremos que un script no se ejecutable por ciertas personas, debemos tener mucho cuidado. Solamente quitar el permiso de ejecución no siempre sirve ya que si otro usuario tiene permiso de lectura del script puede copiarlo y ejecutarlo. Otra forma de hacer esto mismo es ejecutandoló como “source”

# ls -l script.sh
-rwxr--r-- 1 user group 0 sep 1 12:00 script.sh
# chmod -x script.sh
# . script.sh 

Con un . o bien con el comando source, podemos ejecutar el script como si estuviéramos tirando los comandos directamente desde la consola.

El comando perdido

Pocos conocen le uso del comando ‘newgrp’.  Este comando nos permite cambiar nuestro grupo por defecto momentáneamente. Veamos un ejemplo:

# id user
uid=10000(user) gid=10000(group) groups=10000(group),11000(oracle)
# newgrp oracle
# touch newfile
# ls -l newfile
-rwxr--r-- 1 user oracle 0 sep 1 12:00 newfile

Como verán, el archivo newfile fué escrito con el grupo oracle. Para terminar este switch momentaneo podemos ejecutar exit, ya que newgrp en realidad ha abierto una nueva shell, donde nuestro grupo por defecto es oracle.

Bits especiales

Aunque conocidos, no siempre son bien comprendidos.  El sistema de control de lista de acceso a los archivos tiene unas exenciones llamadas SUID, SGID y Sticky Bit. Los tres bit especiales son mostrados (cuando estan activados) en lugar de la x de ejecución.

El SUID, es un bit que permita que un binario o script, sea ejecutable con los permisos del dueño (user) de dicho archivo (effective user id). Es decir:

#ls -l script.sh
-rwsr-xr-- 1 user group 0 sep 1 12:00 script.sh

Si alguien del grupo group ejecuta dicho script, lo hará con los permisos del usuario (user)  y no con sus permisos.
Esto requiere especial atención dadas sus implicaciones!
El SGID, es igual que el SUID, pero aplicado al grupo.

Y finalmente el Stiky bit, se utiliza hoy en dia, solo para directorios. La wikipedia reza:

Cuando se le asigna a un directorio, significa que los elementos que hay en ese directorio sólo pueden ser renombrados o borrados por el propietario del elemento, el propietario del directorio o el usuario root, aunque el resto de usuarios tenga permisos de escritura y, por tanto, puedan modificar el contenido de esos elementos.

El sticky bit está a menudo configurado para el directorio /tmp.

Estos bits, son un parche, a las limitaciones del sistema de control de acceso, y se complementan con los atributos extendidos que veremos a continuación.

Extended Attributes

Los atributos extendidos es una característica soportada por la mayoría de los sistemas de archivos (tanto en linux, como en los unix, y en windows). Por supuesto, cada cual tiene su propia implementación. En este caso, veremos la implementación de ext2,3 y 4 dado que son los sistemas de archivos mas comunes en GNU/Linux.

Estos atributos extendidos nos permiten añadir peculiaridades al comportamiento de acceso a los archivos.  Veamos cuales son:

  • a : append only 
  • c : compressed
  • d : no dump
  • e : extent format
  • i : immutable
  • j : data journalling
  • s : secure deletion
  • t : no tail-merging
  • u : undeletable
  • A : no atime updates
  • C : no copy on write
  • D : synchronous directory updates
  • S : synchronous updates
  • T : top of directory hierarchy

He señalado sólo dos que están mas relacionados con la seguridad. Los otros, o bien no tienen relevancia en la seguridad, o bien no están realmente implementados.  Cada atributo tiene su explicación y uso, y para mas info les recomiendo este link.

El atributo de Append Only, sirve, por ejemplo, para archivos de logs, a los que se les agrega continuamente información. Adicionalmente no estamos interesados en que sean borrados. Para esto podemos utilizar este atributo, de la siguiente manera:

# lsattr file
---------------- file
#chattr +a file
#lsattr file
-----a---------- file
#echo "more data" > file
bash: file: Operación no permitida
#echo "more data" >> file
#

Como verán, podemos agregar mas data, pero no sobre escribirla. Así mismo si utilizamos el atributo inmutable, el archivo no puede ser modificado en absoluto.
Estos atributos pueden ser asignados sólo por el root, y quitados con el mismo comando chattr.
Si bien no son un garantía, son una barrera mas que ayudan a securizar cierta data.

ACL

El sistema UGO, tiene sus limitaciones, y ACL es la respuesta.
Por ejemplo, una limitación clásica del sistema UGO, es que no podemos dar distintos permisos a distintos usuarios, indistintamente del grupo al que pertenezcan. Esto, si se puede hacer con las ACL.
Para que nuestro sistema de archivos soporte esta característica, hay que montarlo con el flag “acl”, ya sea desde el comando mount o desde el fstab.

/dev/sdb1 /pendrive ext3 acl 1 2

ó

mount -o acl /dev/sdb1 /pendrive

En todo caso, al montar el sistema de archivos con soporte de acl, podemos configurar permisos avanzados (siempre utilizando la metodología de lista de control de acceso)
Archivos con ACLs
Cuando listamos archivos que tienen ACLs, los visualizaremos con un + al final de los permisos:

#ls -l script.sh
-rwxr-xr--+ 1 user group 0 sep 1 12:00 script.sh

Listar ACLs

Para conocer que ACLs tiene un archivo, utilizmos getfacl:

# getfacl script.sh
# file: script.sh
# owner: user
# group: group
user::rw-
user:john:rwx
group::r--
mask::rwx
other::r--

Como ven, en este caso, el usuario john, tiene permisos de lectura,escritura y ejecución.

Establecer ACLs
Finalmente, para establecer una ACL, utilizamos setfacl

# setfacl -m "u:john:r-x" script.sh

En este caso, quitamos el permiso de ejecución a john.
Para su uso mas extedido, te recomiendo leas la doco de RedHat

Conclusiones

Configurar correctamente nuestros archivos, es fundamental. Un bit de permisos mal configurados puede ser la ruina del servidor, por consiguiente de la red..
Aunque estos temas son muy básicos para los administradores avanzados, aveces se pierde de vista su importancia. Además de los sistemas repasados, existen medidas mas avanzadas, como por ejemplo, selinux, tripwire, encriptación LUKE, etc. Estas van mas allá de los sistemas de archivos, pero estan muy relacionadas. Las veremos mas adelante.

Antes de dormir hoy, no olvides revisar tu file sytems 😛

~have fun!