2014-02-28

Aprendiendo a Usar el Comando CUT

Para los que trabajamos analizando los registros del sistema o archivos que contengan información tabulada es fundamental aprender a usar comandos que nos permitan extraer información de esos archivos, por esto decidí en esta entrada mostrar algunas cosas que se pueden hacer con el comando CUT, después intentare hacer lo mismo con otros comandos.

Entonces pues primero la imagen de la ayuda que brinda el comando, la cual me parece muy valiosa y clara


Para poder realizar los ejemplos vamos a usar un fragmento de los registros de conexión por publickey a un servidor de SSH, los cuales se ven así

Feb 23 11:06:57 fr sshd[25327]: Accepted publickey for root from 190.26.49.14 port 21698 ssh2
Feb 24 08:24:39 fr sshd[26923]: Accepted publickey for root from 10.201.132.61 port 1727 ssh2
Feb 24 08:53:46 fr sshd[26936]: Accepted publickey for root from 10.201.132.61 port 3135 ssh2
Feb 25 10:16:18 fr sshd[28526]: Accepted publickey for root from 10.201.132.61 port 23819 ssh2
Feb 25 18:12:16 fr sshd[29825]: Accepted publickey for root from 10.201.132.61 port 41020 ssh2
Feb 25 18:12:47 fr sshd[29832]: Accepted publickey for root from 10.201.132.61 port 41022 ssh2
Feb 26 14:00:15 fr sshd[31463]: Accepted publickey for root from 10.201.132.61 port 63469 ssh2
Feb 26 14:12:05 fr sshd[31487]: Accepted publickey for root from 10.200.11.153 port 16539 ssh2
Feb 26 14:15:04 fr sshd[31513]: Accepted publickey for root from 200.21.240.135 port 53538 ssh2
Feb 26 14:18:11 fr sshd[31533]: Accepted publickey for root from 190.68.125.74 port 46271 ssh2
Feb 26 14:27:40 fr sshd[31557]: Accepted publickey for root from 10.201.132.61 port 65024 ssh2
Feb 27 16:45:06 fr sshd[1695]: Accepted publickey for root from 10.200.10.79 port 42335 ssh2
Feb 27 17:22:30 fr sshd[1721]: Accepted publickey for root from 10.201.132.61 port 43805 ssh2

Entonces vamos a iniciar con el más simple, que es sacar un dato usando un delimitador. El delimitador es lo que el usuario defina como separador de cada columna, para este ejemplo voy a identificar el numero de proceso que se ejecuto para cada conexión, para esto necesitamos el numero que esta entre [], lo voy a mostrar por pasos.

La primera parte usaremos como delimitador el [ y que nos muestre la segunda columna, entonces el comando quedaría

root@localhost:~# cut -d [ -f 2 logconexiones
25327]: Accepted publickey for root from 190.26.49.14 port 21698 ssh2
26923]: Accepted publickey for root from 10.201.132.61 port 1727 ssh2
26936]: Accepted publickey for root from 10.201.132.61 port 3135 ssh2
28526]: Accepted publickey for root from 10.201.132.61 port 23819 ssh2
29825]: Accepted publickey for root from 10.201.132.61 port 41020 ssh2
29832]: Accepted publickey for root from 10.201.132.61 port 41022 ssh2
31463]: Accepted publickey for root from 10.201.132.61 port 63469 ssh2
31487]: Accepted publickey for root from 10.200.11.153 port 16539 ssh2
31513]: Accepted publickey for root from 200.21.240.135 port 53538 ssh2
31533]: Accepted publickey for root from 190.68.125.74 port 46271 ssh2
31557]: Accepted publickey for root from 10.201.132.61 port 65024 ssh2
1695]: Accepted publickey for root from 10.200.10.79 port 42335 ssh2
1721]: Accepted publickey for root from 10.201.132.61 port 43805 ssh2

Como solo necesitamos el número, entonces necesitamos otro corte en el archivo, por lo que el comando final quedaría así

root@localhost:~# cut -d [ -f 2 logconexiones | cut -d ] -f 1
25327
26923
26936
28526
29825
29832
31463
31487
31513
31533
31557
1695
1721

Otro ejemplo que puede ser útil es sacar fecha e IP de conexión, para lo que podemos usar como delimitador los espacios y que nos muestre las comunas que necesitamos, que serian de la 1 a la 3 y además la 11, entonces el comando quedaría

root@localhost:~# cut -d " " -f 1-3,11 logconexiones
Feb 23 11:06:57 190.26.49.14
Feb 24 08:24:39 10.201.132.61
Feb 24 08:53:46 10.201.132.61
Feb 25 10:16:18 10.201.132.61
Feb 25 18:12:16 10.201.132.61
Feb 25 18:12:47 10.201.132.61
Feb 26 14:00:15 10.201.132.61
Feb 26 14:12:05 10.200.11.153
Feb 26 14:15:04 200.21.240.135
Feb 26 14:18:11 190.68.125.74
Feb 26 14:27:40 10.201.132.61
Feb 27 16:45:06 10.200.10.79
Feb 27 17:22:30 10.201.132.61

Cuando el archivo que estás analizando no esta tan tabulado es complicado extraer esos datos tan fácilmente o si lo que se necesita es saber cual es el valor de la columna X de un archivo el comando CUT tiene la opción C que te permite que cada letra se convierta en una columna y extraigas solo las que necesitas.

Para el ejemplo vamos a sacar el contenido de las columnas desde la 70 a la 80, por lo que el comando quedaría así

root@localhost:~# cut -c 70-80 logconexiones
190.26.49.1
10.201.132.
10.201.132.
10.201.132.
10.201.132.
10.201.132.
10.201.132.
10.200.11.1
200.21.240.
190.68.125.
10.201.132.
0.200.10.79
0.201.132.6

Ahora si lo que necesita es extraer los datos desde la columna X hasta el final de linea solo se debe retirar del comando el limite final, o sea así:

root@localhost:~# cut -c 70- logconexiones
190.26.49.14 port 21698 ssh2
10.201.132.61 port 1727 ssh2
10.201.132.61 port 3135 ssh2
10.201.132.61 port 23819 ssh2
10.201.132.61 port 41020 ssh2
10.201.132.61 port 41022 ssh2
10.201.132.61 port 63469 ssh2
10.200.11.153 port 16539 ssh2
200.21.240.135 port 53538 ssh2
190.68.125.74 port 46271 ssh2
10.201.132.61 port 65024 ssh2
0.200.10.79 port 42335 ssh2
0.201.132.61 port 43805 ssh2

Si lo que necesita es desde el principio de la linea hasta una columna X entonces solo debe retirar el limite inicial, o sea así:

root@localhost:~# cut -c -10 logconexiones
Feb 23 11:06:57 fr
Feb 24 08:24:39 fr
Feb 24 08:53:46 fr
Feb 25 10:16:18 fr
Feb 25 18:12:16 fr
Feb 25 18:12:47 fr
Feb 26 14:00:15 fr
Feb 26 14:12:05 fr
Feb 26 14:15:04 fr
Feb 26 14:18:11 fr
Feb 26 14:27:40 fr
Feb 27 16:45:06 fr
Feb 27 17:22:30 fr
Feb 27 17:23:20 fr

Espero les sea útil

2014-02-25

Instalando SDK y ADB en Debian 7

Debido a que necesitaba sacar unos datos de un Android y acceder por consola investigue que era necesario tener instalada la herramienta SDK, la cual tiene el comando adb (Android Debug Bridge) que permite comunicar al emulador con un dispositivo real. Todas estas herramientas son diseñadas por Android para los desarrolladores, el sitio web es http://developer.android.com/

Entonces lo primero es descargar las herramientas de SDK (SDK Tools Only) desde acá  http://developer.android.com/sdk/index.html , el archivo se llama android-sdk_r22.3-linux.tgz el cual debes descomprimir, como recomendación en el directorio /opt, así:

root@localhost:~# tar zxf -C /opt android-sdk_r22.3-linux.tgz

Una vez en termina de descomprimir se ingresa en el directorio y se accede a un directorio tools,  una vez en este se ejecuta el archivo llamado android, como se ve a continuación


Esto abre una ventana de donde se debe seleccionar el paquete Android SDK Platform-tools como se ve en la siguiente imagen


Una vez termina el proceso se crea el directorio platform-tools donde se ven los siguientes archivos


Y una vez conectes un dispositivo Android con el Debug USB habilitado (Tiene que estar habilitado), entonces puede usar el comando y acceder el dispositivo en modo consola, como ejemplo vemos que se en lista el conectado


Espero que les sirva

2014-02-23

Creando Reglas en OSSEC

Muchas personas que me siguen saben perfectamente que me dedico a la seguridad tanto ofensivamente como defensivamente, entonces esta entrada va para quienes instalan los HIDS y que toca afinarlos permanentemente. OSSEC es una de las herramientas de este tipo que siempre instalo porque me parece fenomenal, entonces en esta oportunidad a idea es que aprendan a crear sus propias reglas.

Para esto vamos a usar de base los logs generados por IPTABLES (datos de iptables acá), una vez tenemos activo el log este se ve en /var/log/messasges de la siguiente forma


Entonces para ver que información ve OSSEC de este log existe una herramienta que esta en el directorio /var/ossec/bin, es donde están los script de pruebas y funcionamiento, por ende el que necesitamos se llama ossec-logtest y funciona de la siguiente forma



Como ven la detección de cada incidencia se basa en tres fases, que busca identificar los siguientes datos:

Fase 1:  Usa la normalización de syslog o eventlog según corresponda para sacar tres datos,  tipo de log, nombre de la maquina y  registro de la incidencia.

Fase 2: Usa el dato de registro de la incidencia y basado en lo que esta definido en el archivo /var/ossec/etc/decoder.xml, si no identifica nada toca modificar este para obtener lo que se desee.

Fase 3: Usa los datos extraídos para usando las reglas que están en el directorio /var/ossec/rules poder determinar el tipo de incidencia.

Como se ve en la fase 3 del ejemplo anterior, el identifica que es un log de un firewall y que esta en el D 4100 de las reglas, pero nosotros necesitamos que nos identifique la IP desde la que esta haciendo la conexión, por lo que crearemos dos reglas.

La primera que saque la IP y la segunda que si esa IP genera 20 incidencias en un día entonces pone la alerta en nivel 10, como las que se ven marcadas en la siguiente imagen


Entonces volvemos al test y veremos que en la fase 3 cambia y empieza a detectar lo que necesitamos.


Espero que les sirva.