Mostrando entradas con la etiqueta informes. Mostrar todas las entradas
Mostrando entradas con la etiqueta informes. Mostrar todas las entradas

Knock, obteniendo subdominios

Este fin de semana pasado tocó culturizarse un poco, y entre todas las noticias relacionadas con la seguridad que leí encontré muchas cosas nuevas e interesantes. Desde recientes fallos de seguridad en Joomla a nuevo software cuando menos digno de probar.
Hoy os quiero hablar de Knock, un pequeño script escrito en Pyhton y que realiza un perfecto escaneo de todos los subdominios existentes para un dominio dado. Ese tipo de información que muchas empresas descuidan y que sirve para descubrir servicios o equipos ocultos e incluso de nombre interno. Knock es por lo tanto una herramienta de auditoria muy eficaz y que a mayores de obtener información, también nos permite jugar un poco con el tema de dominios, como por ejemplo forzar una transferencia de zona y cosas así. Sin embargo, lo que más se sorprendió fue la facilidad para encontrar los subdominios.
Knock está disponible para su descarga desde Google Code y tras descargarla, son sólo tener Python instalado ya podemos comenzar a jugar.
shell> python knock.py -h
Knock v1.5 by Gianni 'guelfoweb' Amato ( http://knock.googlecode.com )

USAGE:
   Scanning with internal wordlist:
      knock [url]
      e.g. knock domain.com
   Scanning with external wordlist:
      knock [url] [wordlist]
      e.g. knock domain.com wordlist.txt
...
Como veis, Knock nos permite realizar un escaneo de un dominio pasándole nosotros un listado de palabras propio. En caso de no proporcionárselo, simplemente usará las palabras por defecto que trae en su 'diccionario'. A continuación os dejo un ejemplo contra un dominio conocido para ver qué podemos averigiar de él.
shell> python knock.py facebook.com
Knock v1.5 by Gianni 'guelfoweb' Amato ( http://knock.googlecode.com )

[+] Testing domain
   www.facebook.com          173.252.110.27     
[+] Dns resolving
         Domain name    Ip address    Name server       
         facebook.com   173.252.X.Z   edge-shv-D-frc1.facebook.com
Found 1 host(s) for facebook.com
[+] Testing wildcard
  Ok, no wildcard found.

[+] Scanning for subdomain on facebook.com
[!] Wordlist not specified. I scannig with my internal wordlist...
  Estimated time about 75.72 seconds

         Subdomain      Ip address    Name server    
       0.facebook.com   173.252.X.Z   edge-shv-M-frc1.facebook.com
     abc.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
   about.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      ac.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
     ads.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
    apps.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
 arizona.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
arkansas.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      au.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
      ba.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
   baker.facebook.com   173.252.X.Y   edge-shv-D-frc1.facebook.com
...
Tal como se observa, el número de subdominios que nos reporta es cuando menos considerable. Así que espero que os sea de ayuda si tenéis que hacer una auditoria.
Os dejo a continuación también un vídeo donde se ve el funcionamiento de esta herramienta.

La entrada Knock, obteniendo subdominios la puedes leer en Puppet Linux.
Leer más

Automater y la información en la red

Fin de semana lluvioso. Google Reader cerrará sus puertas en poco tiempo. Qué mejor qué hacer que ir suprimiendo artículos pendientes de lectura. En este caso, me refiero a un post de hace ya un mes que salió en Security by default y que hacía repaso a la herramienta Automater, un pequeño programa escrito en Python que permite obtener información sobre direcciones IP's o URL's. Automater es uno de esos script que siempre hay que tener a mano para analizar cualquier IP que nos interese. Permite obtener información muy rápida y válida. Desde localizaciones geográficas de la misma hasta el operador propietario de la misma. También permite saber si dicha IP/URL está en alguna de las listas negras reconocidas de la red y como truco interesante, permite analizar la URL destino de un acortador de URL's.
Para aclarar mejor para qué sirve, nada mejor que verlo en funcionamiento.
shell> python Automater.py -t *.*.*.7
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] *.*.*.7 is an IP. 
[*] Running IP toolset
[+] A records from Robtex: domain.eu
[+] A records from Robtex: int-static-*-7.---.es
[+] A records from Robtex: ---.es
[+] A records from Robtex: ---.com
[+] A records from Robtex: ---.com
[+] A records from Robtex: ---.es
[+] A records from Robtex: ---.net
[+] A records from Robtex: ---.org
[+] A records from Robtex: www.---.es
[*] Scanning host now on IPVoid.com.  May take a few seconds.
[-] IP is not listed in a blacklist
[+] The ISP for this IP is: R Cable y Telecomunicaciones Galicia, S.A.
[+] Geographic Location: (ES) Spain
[-] FortiGuard URL Categorization: Uncategorized
[-] IP is not listed in AlienVault IP reputation database
En este ejemplo obtenemos información relativa a la IP solicitada. Vemos todas las resoluciones DNS inversas que tiene (sólo de tipo A) así como la localización de la misma y el ISP propietario de la misma.
shell> python Automater.py -t https://mail.google.com/
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] https://mail.google.com/ is a URL.  
[*] Running URL toolset
[-] https://mail.google.com/ is not a recognized shortened URL.
[*] Scanning host now on URLVoid.com.  May take a few seconds.
[+] Host IP Address is 173.194.35.53
[-] IP is not listed in a blacklist
[+] Latitude / Longitude: 37.4192 / -122.057
[+] Country:  (US) United States
[+] Domain creation date: 1997-09-15 (16 years ago)
[-] FortiGuard URL Categorization: Uncategorized
En este ejemplo, realizamos la petición sobre una URL bastente conocida, de la que obtenermos información más exacta sobre su localización, así como información relativa a la creación de su dominio.
Y ya para finalizar, podemos ver qué sucede si pedimos información sobre un enlace acortado,
shell> python Automater.py -t bit.ly/123WhVJ 
  ___        _                        _            
 / _ \      | |                      | |           
/ /_\ \_   _| |_ ___  _ __ ___   __ _| |_ ___ _ __ 
|  _  | | | | __/ _ \| '_ ` _ \ / _` | __/ _ \ '__|
| | | | |_| | || (_) | | | | | | (_| | ||  __/ |   
\_| |_/\__,_|\__\___/|_| |_| |_|\__,_|\__\___|_|   

--------------------------------
[*] bit.ly/123WhVJ is a URL.  
[*] Running URL toolset
[+] bit.ly/123WhVJ redirects to: http://www.enricozini.org/2013/debian/on-gender-imbalance/
[+] Host IP Address is 69.58.188.39
[+] Host is listed in blacklist at http://www.phishtank.com/
[+] Host is listed in blacklist at http://www.scumware.org/search.scumware
[+] Host is listed in blacklist at http://www.spamhaus.org/query/domain/bit.ly
[+] Latitude / Longitude: 40.733 / -74.0078
[+] Country:  (US) United States
[+] Domain creation date: 2008-05-18 (5 years ago)
[-] FortiGuard URL Categorization: Uncategorized

Más información: SecurityByDefault.

La entrada Automater y la información en la red, la puedes leer en Puppet Linux.
Leer más

Zabbix trigger report

Supongo que no seré el único que muchas veces está trabajando con Zabbix y necesita tener rápidamente un listado de todos los equipos afectados por un determinado trigger. Recientemente desarrollé un pequeño módulo que se agrega a la pestaña Reports de Zabbix y que ofrece un listado de todos aquellos triggers que están activos y una dirección de correo a la que enviar el listado. Si estás trabajando y alguien te pregunta ¿qué equipos tienen la carga alta? Ahora la respuesta será muy sencilla: "Te lo paso por mail".
Si te interesa lo puedes descargar desde aquí y tras copiarlo a tu directorio raíz con el nombre trigger_report.php ya sólo necesitas editar el fichero include/menu.inc.php y agregar estas líneas dentro del array de reports.
array(
   'url' => 'trigger_report.php',
   'label' => _('Trigger reports'),
   'user_type' => USER_TYPE_SUPER_ADMIN
)
El resultado es el que se muestra en la imagen lateral, en la que sólo salen aquellos trigger's que están activos. A continuación nos pide un mail al que enviar los resultados. Tras darle a enviar, haciendo uso de la API de zabbix, se enviará el listado de los equipos afectados por el trigger que se ha seleccionado.




Leer más

Control de colas de correo desde Zabbix

Hoy vamos a ver cómo podemos controlar las colas de correo de Zimbra (y en general de postfix) desde nuestra herramienta de monitorización.
Antes de comenzar, vamos a hacer una breve introducción a qshape, una utilidad nativa de postfix que permite controlar la antigüedad de los correos. Dicho de otra forma, nos permite saber cuánto tiempo lleva un correo en una cola. Todos sabemos que ne postfix hay 4 colas principales, active, deferred, hold e incoming. Si hacemos uso qshape podremos saber exactamente cuanto correo hay en cada cola. Veamos un ejemplo.
shell> qshape deferred
              T  5 10 20 40 80 160 320 640 1280 1280+
       TOTAL  3  0  0  0  1  0   0   0   0    0     2
    yahoo.es  1  0  0  0  1  0   0   0   0    0     0
 hotmial.com  1  0  0  0  0  0   0   0   0    0     1
    gmail.es  1  0  0  0  0  0   0   0   0    0     1
Como podéis observar, se le pasa como parámetro la cola que nos interesa y nos devuelve la cantidad de mail's que hay en ella. La primera columna representa el nombre del destino, que como se puede observar suelen ser nombres mal escritos. La segunda columna, representada como una T, representa el total de los mail's en cola y el resto de columnas lo mismo pero por minutos.

Para poder graficar y controlar estos valores, primero necesitamos tener un pequeño script que nos los devuelva. Así que aquí os dejo el que yo hice (no muy currado).
#!/usr/bin/perl
#
# Usage: zabbix_qshape <queue> <time>
# <queue>: active, deferred, hold, incoming
# <time>: T (all), 5,10,20,40,80,160,320,640,1280,1280+
# Returns the number of messages in <queue> for <minutes>

use strict;

my $num_args = $#ARGV + 1;
if ($num_args != 2) {
   print "Usage: zabbix_qshape <queue> <time>\n";
   exit;
} else {
   my $queue = @ARGV[0];
   my $time = @ARGV[1];
   my %tindex = ('T' => 2,
      '5' => 3,
      '10' => 4,
      '20' => 5,
      '40' => 6,
      '80' => 7,
     '160' => 8,
     '320' => 9,
     '640' => 10,
    '1280' => 11,
   '1280+' => 12);
   my $index=$tindex{$time};
   if(!$index) {
      print "Usage: zabbix_qshape <queue> <time>\n";
      exit;
   }
   my $command = "sudo /opt/zimbra/postfix/sbin/qshape.pl $queue \
                 | grep TOTAL \
                 | awk {'print \$$index'}";
   my $sal = qx@$command@;
   chomp($sal);
   print "$sal\n";
}
Con este pequeño script al pasarle una cola y un tiempo, nos devuelve el número de mail's que están en dicha cola. De forma más gráfica,
shell> perl /usr/local/bin/zabbix_qshape deferred T
3
Así que ahora sólo queda crear un nuevo item que se encargue de monitorizarlo. Puesto que queda más limpio, soy de los que prefiere emplear el UserParameter del fichero de configuración, creando ahí una nueva key_ que se encargue de controlar esto. Puesto que le vamos a pasar 2 parámetros, vamos a crearla con opciones.
UserParameter=zimbra.queue[*], /usr/local/bin/zabbix_qshape $1 $2
Ahora ya sólo queda crear los items que deseamos monitorizar, tal que así:
Name                    : Zimbra monitor: $1
Type                    : Zabbix agent
Key                     : zimbra.queue[deferred, T]
Type of information     : numeric (unsigned)
Data type               : Decimal
Update interval (in sec): 300
Applications            : Zimbra
De la forma que la hemos creado, tenemos una única key_ a la que le podemos pasar como parámetros la cola y el tiempo y lógicamente, mostrarlos como parte del nombre. En el ejemplo anterior la key_ creada es para la cola deferred. Para monitorizar el resto de colas, las key's a crear serán:
zimbra.queue[active, T]
zimbra.queue[hold, T]
zimbra.queue[incoming, T]
Sólo para terminar, un detalle importante es el empleo de sudo en el comando. Algunos ya os habréis dado cuenta, pero para los que no, simplemente deciros que antes de que esto funcione debemos de añadir la siguiente línea al fichero /etc/sudoers.
zabbix  ALL=NOPASSWD: /opt/zimbra/postfix/sbin/qshape.pl
Como nota adicional decir que el comando qshape de zimbra está localizado bajo /opt/zimbra/bin/qshape, pero como todo el sistema Zimbra está preparado para ser ejecutado con el usuario zimbra. Sin embargo, la instalación de postfix ofrece también dicho comando, localizado /opt/zimbra/postfix/sbin/qshape.pl al que sí le podemos añadir fácilmente permisos con sudo para el usuario zabbix.
Leer más

Obtener un listado de subdominios

En muchas ocasiones es necesario saber qué subdominios tiene una empresa públicos en Internet para garantizar que los que tiene son los que efectivamente debería de tener. Una buena forma de averiguarlo está en el programa dnsmap, que es un pequeño código escrito en C (795 líneas nada más) y que permiten escanear un dominio en busca de todos los subdominios que éste tiene, sacando un informe final. Saber las máquinas que hay disponibles en una red es muy importante, al igual que saber las personas o correos de esa organización. Para comenzar, vamos a ver cómo trabajar con dnsmap. Comenzamos bajándolo de la web oficial. Una vez lo tenemos, simplemente lo descomprimimos y compilamos para poder usarlo.
shell> tar zxvf dnsmap-0.30.tar.gz
shell> cd dnsmap-0.30
shell> gcc -Wall dnsmap.c -o dnsmap
shell> ./dnsmap
dnsmap 0.30 - DNS Network Mapper by pagvac (gnucitizen.org)

usage: dnsmap  [options]
options:
-w 
-r 
-c 
-d 
-i  (useful if you're obtaining false positives)

e.g.:
dnsmap target-domain.foo
dnsmap target-domain.foo -w yourwordlist.txt -r /tmp/domainbf_results.txt
dnsmap target-fomain.foo -r /tmp/ -d 3000
dnsmap target-fomain.foo -r ./domainbf_results.txt
dnsmap trae por defecto un listado de palabras que empleará como subdominios a buscar y que están listadas en el fichero dnsmap.h, sin embargo también permite pasarle como argumento un listado de palabras que serán usadas. Finalmente, nos puede sacar un listado en fichero de texto o por pantalla. La forma de usarlo,
shell> ./dnsmap company.com 
dnsmap 0.30 - DNS Network Mapper by pagvac (gnucitizen.org)

[+] searching (sub)domains for company.com using built-in wordlist
[+] using maximum random delay of 10 millisecond(s) between requests

beta.company.com
IP address #1: 91.X.X.X

downloads.company.com
IP address #1: 91.X.X.X

files.company.com
IP address #1: 92.X.X.X

jabber.company.com
IP address #1: 91.X.X.X

mail.company.com
IP address #1: 165.X.X.X

ns.company.com
IP address #1: 92.X.X.X

public.company.com
IP address #1: 51.X.X.X

rt.company.com
IP address #1: 91.X.X.X

www.company.com
IP address #1: 91.X.X.X

[+] 9 (sub)domains and 9 IP address(es) found
[+] completion time: 89 second(s)
En caso de que las palabras por defecto no den un buen resultado, se puede pasar un listado de palabras (el que trae o un propio) para descubrir todos aquellos subdominios que puedan interesar.
Leer más

Comandos interesantes, agedu

Hoy os quiero presentar un pequeño programa, muy sencillo, pero a la vez muy útil, que presenta de forma gráfica (página web) los resultados de ocupación en disco con colores e indicando antigüedad de los ficheros. Se llama agedu.
agedu simplemente se dedica a escanear el disco en busca de los ficheros o lo que ocupa cada directorio, para finalmente guardar un informe final en un fichero que posteriormente podrá ser procesado y presentado. Para instalarlo, desde debian/ubuntu,
shell> apt-get install agedu
Tras la instalación, probamos a ejecutarlo, para ver las opciones y posibilidades que nos ofrece.
shell> agedu
usage: agedu [options] action [action...]
actions:
  -s,--scan directory      scan and index a directory
  -w,--web                 serve HTML reports in a web server
  -t,--text subdir         print a plain text report on a subdir
  -R,--remove              remove the index file
  -D,--dump                dump the index file on stdout
  -L,--load                load and index a dump file
  -S,--scan-dump dir       scan only, generating a dump
  -H,--html subdir         print an HTML report on a subdirectory
  --cgi                    do the right thing when run from a CGI
options:
  -f,--file filename       [most modes] specify index file
  --cross-fs               [--scan] cross filesystem boundaries
  --no-cross-fs            [--scan] stick to one filesystem
  --prune wildcard         [--scan] prune files matching pattern
  --prune-path wildcard    [--scan] prune pathnames matching pattern
  --exclude wildcard       [--scan] exclude files matching pattern
  --exclude-path wildcard  [--scan] exclude pathnames matching pattern
  --include wildcard       [--scan] include files matching pattern
  --include-path wildcard  [--scan] include pathnames matching pattern
  --progress               [--scan] report progress on stderr
  --no-progress            [--scan] do not report progress
  --tty-progress           [--scan] report progress if stderr is a tty
  --dir-atime              [--scan,--load] keep real atimes on directories
  --no-dir-atime           [--scan,--load] fake atimes on directories
  --mtime                  [--scan] use mtime instead of atime
  --files                  [--web,--html,--text] list individual files
  -r,--age-range age[-age] [--web,--html] set limits of colour coding
  -o,--output filename     [--html] specify output file or directory name
  --address addr[:port]    [--web] specify HTTP server address
  --auth type              [--web] specify HTTP authentication method
  --auth-file filename     [--web] read HTTP Basic user/pass from file
  --auth-fd fd             [--web] read HTTP Basic user/pass from fd
  -d,--depth levels        [--text,--html] recurse to this many levels
  -a,--age age             [--text] include only files older than this
also:
  -h,--help                display this help text
  -V,--version             report version number
  --licence                display (MIT) licence text

Tras un vistazo rápido a las opciones, vemos que lo que nos interesa es realizar un escaneo del disco para que indexe la información que interesa, así que por lo tanto, lo ejecutamos con la opción -s y el directorio del que nos interese sacar información. En nuestro caso /, ya que queremos tener información de todo el disco.
shell> agedu -s /
Al finalizar nos habrá creado un fichero en el directorio donde se haya ejecutado, agedu.dat, que tendrá toda la información sobre el disco. EL fichero que genera es de tipo binario, por lo que es necesario recurrir nuevamente a agedu con la opción de montar un servidor web para poder visualizar los datos.
shell> agedu -w --auth none
URL: http://127.0.0.1:58573/
Al acceder a esa dirección se podrá visualizar y navegar por los directorios, teniendo de forma 100% visual información del estado del disco.

Leer más

Loguear comandos en GNU/Linux

Hace unos días descubrí por casualidad un interesante proyecto, snoopy, que no es más que un pequeño wrapper que se encarga de 'loguear' todos aquellos comandos que un usuario ejecuta en la shell en los ficheros de log. Gracias a ello, podemos saber en todo momento qué fue lo que se ejecutó y sobre todo, quién lo ejecutó. snoopy es por lo tanto un comando muy interesante, ya que de forma muy simple, permite depurar responsabilidades.
Para instalar snoopy puedes hacerlo desde repositorios o desde código fuente, descargable desde aquí.
shell> apt-get install snoopy
o bien,
shell> wget snoopy
shell> tar zxvf snoopy-1.8.0.tar.gz
shelL> cd snoopy-1.8.0
shell> ./configure
shell> make
shell> make install
shell> echo "/usr/local/lib/snoopy.so" >> /etc/ld.so.preload
Tras tenerlo instalado, lo único que será necesario será reiniciar la sesión de usuario y ya cargará la nueva directiva de logueo. Tras ello, en /var/log/auth.log quedará un registro de todo aquello que se está ejecutando en el sistema y quién lo ha ejecutado.
shell> tail -f /var/log/auth.log
Sep  6 13:03:24 server_5 snoopy[7890]: [uid:0 sid:7707 tty:/dev/pts/2 cwd:/root filename:/usr/bin/tail]: tail -f /var/log/auth.log
Sep  6 13:03:29 server_5 snoopy[7904]: [uid:1002 sid:7830 tty:/dev/pts/0 cwd:/home/javier filename:/bin/su]: su
Sep  6 13:04:36 server_5 snoopy[7970]: [uid:1002 sid:7918 tty:/dev/pts/4 cwd:/home/javier filename:/bin/ls]: ls --color=auto -l
Como se puede observar, queda la sesión (tty) de la persona que lo ha ejecutado, no el nombre, así que habrá que emplear el comando who para saber quién la tenía. Para ello,
shell> who /var/log/wtmp
A partir de ahora siempre podréis saber quién ejecutó qué comando.
Leer más

Comandos interesantes, finger

finger es un simple comando que ofrece información acerca de un usuario. Ofrece información a un usuario acerca de si mismo o de otros usuarios (de equipos locales o remotos). Desde el nombre completo del usuario, el nombre de login, así como las últimas veces que se ha conectado y otros tipos de información.
finger está disponible para ejecutarse en local con el comando finger, o remotamente con un servidor (fingerd) que recauda información de los usuarios por los equipos de la red, para tener reportes locales completos.
shell> apt-get install finger
Una vez instalado el comando, se puede ejecutar en cualquier equipo pasándole como argumento el nombre de usuario, tal como sigue.
shell> finger javier
Login: javier            Name: Javier Terceiro
Directory: /home/javier              Shell: /bin/bash
On since Mon Sep  3 08:38 (CEST) on tty7 from :0
    3 days 3 hours idle
     (messages off)
On since Thu Sep  6 09:55 (CEST) on pts/0 from :0.0
   8 seconds idle
On since Thu Sep  6 10:03 (CEST) on pts/1 from :0.0
On since Thu Sep  6 11:12 (CEST) on pts/2 from :0.0
   1 hour 12 minutes idle
No mail.
No Plan.
La instalación de un pequeño servidor fingerd lo dejaremos para otra entrada.
Leer más

status bacula en zabbix

De bacula ya hemos hablado alguna vez en este blog y de zabbix, creo que también, así que ahora estaría bien unir ambos en un mismo post y hacer que los mensajes de estado de los trabajos de bacula vayan a un monitor zabbix, para así saber si el proceso de backup se realizó o no correctamente. Saber que el backup está OK es muy importante y zabbix nos permite sacar alertas de cambios de estado de forma muy simple, por lo que se acabó leer los informes que bacula envía por mail! En los foros de zabbix hay un ejemplo de cómo unir zabbix + bacula, pero la verdad es que no me pareció un poco consufa y complicada de montar, así que me puse a investigar un poco las posibilidades de bacula de enviar informes y cómo poder obtener el estado para enviárselo a zabbix. Tras leer un poco de documentación, simplemente me di cuenta de que era más efectivo emplear la directiva RunScript dentro de Jobs que editar y capturar todo el mensaje. Así que... manos a la obra! Primero comenzamos editando los ficheros de trabajos de cada cliente, ya que el envío del estado del backup lo realizará el propio cliente y no el servidor. Esto tiene sus pros y sus contras. Por el momento he decidido dejarlo así. Un ejemplo de trabajo sería el siguiente,
Job {
  Name = "backup-equipo23"
  JobDefs = "DefaultJob"
  Client = equipo23-fd
  FileSet = "equipo23-fs"
  Write Bootstrap = "/var/lib/bacula/backup-equipo23.bsr"
  RunScript {
    RunsWhen = After
    Command = "/usr/local/bin/bacula %l %e"
    RunsOnClient = yes
    RunsOnFailure = yes
    RunsOnSuccess = yes
  }
  Enabled = yes
}
La única diferencia respecto de lo que ya había, fue agregarle las líneas que están en negrita y que hacen justamente lo que nos interesa, ejecutar un pequeño script que envía el estado del backup según el tipo (Full, Incremental, etc). En la documentación oficial de bacula está descrito, pero el tipo de variables que se le pueden pasar son:
  • %c -- Client's name
  • %d -- Director's name
  • %e -- Job Exit Status
  • %i -- JobId
  • %j -- Unique Job id
  • %l -- Job Level
  • %n -- Job name
  • %s -- Since time
  • %t -- Job type (Backup, ...)
  • %v -- Volume name
Y en nuestro caso pasamos un %l, para que nos indique el nivel de trabajo y %e, el estado de finalización del mismo.
Ahora hay que hacer el pequeño script que se ejecutará cuando el trabajo finalice. Éste es,
#!/bin/bash

case "$1" in
 Incremental)
  zabbix_sender -c zabbix_agentd.conf -k bacula.inc.verify.result -o $2
  ;;
 Full)
  zabbix_sender -c zabbix_agentd.conf -k bacula.full.verify.result -o $2
  ;;
 *)
  zabbix_sender -c zabbix_agentd.conf -k bacula.other.verify.result -o $2
  ;;
esac
Ya que como $1 recibimos el tipo de nivel de backup y sólo realizamos backup's Full o Incremental y como $2 recibimos el estado, por lo tanto, es lo que directamente enviamos a zabbix. El estado enviado puede ser OK, Error, Fatal Error, Canceled, Differences o Unknown term code. Aquí podemos optar por pasarlo a número o no, yo prefiero dejarlo como tipo texto, ya que zabbix también permite sacar alertas de campos de tipo texto.
Llegados a este punto ya sólo queda crear una pequeña plantilla de zabbix que permita obtener los datos enviados como Trapper y un trigger que reaccione ante cambios. Los 3 items a los que hace referencia el script tienen estas propiedades:
Nombre descriptivo: Full backup
Tipo: Trapper ZABBIX
Monitor: bacula.full.verify.result
Tipo de información: Texto
Conservar el histórico durante (en días): 60
Estado: Activo
Aplicaciones: bacula
Y por su parte, los triggers asociados,
Nombre: {HOSTNAME} Full backup fail!
Expresión: {Template_bacula:bacula.full.verify.result.regexp(OK)}#1
Gravedad: Alta
Leer más

lynis audit tool

lynis es un pequeño script de auditoría de sistema, también conocido como rootkit, escrito por Michael Boelen. Aunque ya vimos en este blog algún ejemplo de software de auditoría, la gran ventaja de GNU/Linux es la inmensa cantidad de software que puede existir para cada cosa. Y como nunca se está lo suficientemente seguro...
Este pequeño script, escrito en bash, realiza una serie de pruebas que van desde la revisión de los métodos de autenticación, permisos de archivos, contraseñas, medidas de seguridad, etc. hasta cosas más complejas referentes a servicios 8bind, apache, mysql, etc.).
Su instalación es sencilla, puesto que hay paquetes para las principales distribuciones y en el caso de Debian, está incluido en el repositorio oficial.
shell> apt-get install lynis
Una vez está instalado, simplemente hay que ejecutarlo para obtener el menú de ayuda y saber exactamente qué parámetros pasarle.
shell> lynis

[ Lynis 1.2.9 ]

#########################################################################
Lynis comes with ABSOLUTELY NO WARRANTY.This is free software,and you are
welcome to redistribute it under the terms of GNU General Public License.
See LICENSE file for details about using this software.

Copyright 2007-2009 - Michael Boelen, http://www.rootkit.nl/
#########################################################################

[+] Initializing program
------------------------------------
Valid parameters:
 --auditor ""           : Auditor name
 --check-all (-c)       : Check system
 --check-update         : Check for updates
 --no-colors            : Don't use colors in output
 --no-log               : Don't create a log file
 --profile              : Scan the system with the given profile file
 --quick (-Q)           : Quick mode, don't wait for user input
 --quiet (-q)           : No output, except warnings
 --reverse-colors       : Optimize color display for light backgrounds
 --tests ""             : Run only tests defined by 
 --tests-category ""    : Run only tests defined by 
 --view-manpage (--man) : View man page
 --version (-V)         : Display version number and quit
Pues bien, como se puede comprobar, permite chequear si hay actualizaciones o realizar una comprobación del sistema. Mi recomendación es que uséis la opción de comprobar sistema (-c) y también las opciones -Q y -q, ya que saca bastentes cosas en modo "no silencioso" y antes de empezar cada una de las baterías de pruebas pide confirmación (INTRO).
shell> lynis -c --auditor "Javier"

[ Lynis 1.2.9 ]

#########################################################################
Lynis comes with ABSOLUTELY NO WARRANTY.This is free software,and you are
welcome to redistribute it under the terms of GNU General Public License.
See LICENSE file for details about using this software.

Copyright 2007-2009 - Michael Boelen, http://www.rootkit.nl/
#########################################################################

[+] Initializing program
------------------------------------
 - Detecting OS...                                           [ DONE ]
 - Clearing log file (/var/log/lynis.log)...                 [ DONE ]
---------------------------------------------------
 Program version:           1.2.9
 Operating system:          Linux
 Operating system name:     Linux
 Operating system version:  2.6.32-5-686
 Kernel version:            2.6.32-5-686
 Hardware platform:         i686
 Hostname:                  jenocrates
 Auditor:                   Javier
 Profile:                   /etc/lynis/default.prf
 Log file:                  /var/log/lynis.log
 Report file:               /var/log/lynis-report.dat
 Report version:            1.0
---------------------------------------------------

[ Press [ENTER] to continue, or [CTRL]+C to stop ]

 - Checking profile file (/etc/lynis/default.prf)...
 - Program update status...                      [ UPDATE AVAILABLE ]

=========================================================================
Notice: Lynis update available
 Current version : 129   Latest version : 130
 Please update to the latest version for new features, bug fixes, tests
 and baselines.
=========================================================================

[ Press [ENTER] to continue, or [CTRL]+C to stop ]
Tras finalizar el escaneo, lo importante son las conclusiones y las recomendaciones que saca la propia herramienta.
...
Tests performed: 147
Warnings:
----------------------------
 - Warning: No password set on GRUB bootloader [impact:M]
 - Warning: No password set for single mode [impact:L]
 - Warning: Couldn't find 2 responsive nameservers [impact:L]
 - Warning: Root can directly login via SSH [impact:M]

Suggestions:
----------------------------
 - Suggestion: update to the latest stable release.
 - Suggestion: Run pwck manually and correct found issues.
 - Suggestion: Default umask in /etc/profile could be more strict like 027
 - Suggestion: Check why klogd is not running
 - Suggestion: Add legal banner to /etc/issue, to warn unauthorized users
 - Suggestion: Enable sysstat to collect accounting
 - Suggestion: Enable auditd to collect audit information
 - Suggestion: Renew SSL expired certificates.
 - Suggestion: Install a file integrity tool
=========================================================================
Los ficheros de salida, excepto que se cambien en la configuración son,
  • Test e información de depuración: /var/log/lynis.log
  • Reporte: /var/log/lynis-report.dat
Aunque lynis no tiene la opción de ejecutarse como daemon y enviar informes diarios, realizar esto desde cron sería añadir algo similar a esto al crontab.
25 6 * * *  root  lynis -c -Q|mail -s "lynis report" root@domain.com
Leer más

RPM, fecha de instalación de un paquete

Aunque no es algo habitual, quizás en algún momento nos interesa saber en qué día y a qué hora se instaló un paquete en nuestro sistema Red Hat/CentOS, así que la mejor forma de saberlo es preguntárselo a rpm. Este comando nos puede dar un listado de todos los paquetes instalados con la fecha exacta de su instalación. Si el sistema está recién instalado, lo más normal es que todos tengan la misma hora, pero a partir de ahí, según posteriores actualizaciones y nuevas instalaciones, se podrá ver cómo estos van cambiando poco a poco su fecha. Para poder obtener la fecha, únicamente hay que emplear la opción --last.
shell> rpm -qa --last
sudo-1.7.2p1-14.el5_8.3                       Thu Aug 16 13:07:28 2012
nss-tools-3.13.5-4.el5_8                      Tue Aug  7 09:11:48 2012
nscd-2.5-81.el5_8.4                           Tue Aug  7 09:11:48 2012
tzdata-2012c-3.el5                            Tue Aug  7 09:10:41 2012
libtiff-3.8.2-15.el5_8                        Mon Jul  9 09:08:25 2012
e2fsprogs-libs-1.39-34.el5_8.1                Thu Jun 28 11:02:23 2012
perl-Date-Calc-5.4-1.2.2.1                    Wed Jun 20 10:49:01 2012
perl-Bit-Vector-6.4-2.2.2.1                   Wed Jun 20 10:49:01 2012
...
O aplicándolo a un sólo paquetes,
shell> rpm -qa --last sudo
sudo-1.7.2p1-14.el5_8.3                       Thu Aug 16 13:07:28 2012
Este comando a mayores de indicarnos la fecha nos permite obtener un listado de los paquetes que se han instalado juntos (coinciden en fecha), lo que puede ayudar a diagnosticar un problema en el sistema en caso de que algo falle tras la instalación de algún software.
Leer más

Comandos interesantes, lanmap


Jugando un poco con la distro backtrack descubro un nuevo comando/paquete que hace unas funciones cuando menos interesantes. De forma completamente automática nos dibuja un esquema de la red con todos y cada unos de los elementos de ésta que detecta (por IP y MAC). Aunque existe software que hace estas tareas, generalmente suele ser de pago y la verdad es que lanmap es muy bueno en lo suyo.

Actualemente existe la versión 2 de lanmap disponible para descarga desde git, pero su funcionamiento es algo más complejo, así que primero vamos con la versión 1, la inicial. Vamos a ver cómo instalarla, cómo usarla y el resultado final. Para ayudarnos en el proceso usaremos nmap, de forma que nuestro host pueda descubrir a los demás de forma más rápida.
  • Descarga e instalación
    Para comenzar, tenemos que descargar el software de la web oficial, ya que en las distribuciones actuales no está ya en los repositorios. Por lo tanto,
    shell> wget http://www.parseerror.com/lanmap/rev/lanmap-2006-03-07-rev81.zip
    
    Una vez descargado, lo descomprimimos y lo compilamos.
    shell> unzip lanmap-2006-03-07-rev81.zip
    shell> cd lanmap
    shell> chmod +x configure
    shell> ./configure
    shell> make
    shell> make install
    
    Tras esto ya tenemos perfectamente instalado lanmap para nuestro uso. Sólo decir que como requisitos tiene gcc, las libpcap y graphviz. Todos estos los podemos encontrar en los repositorios oficiales de nuestra distribución.
  • Uso
    Ahora toca usar el nuevo programa instalado. Para ello, partimos de la ayuda,
    shell> lanmap -h
    Usage: lanmap [options]
    Options:
     -v ............... verbose mode, up to 3 levels (-vv, -vvv)
     -i iface ......... interface to use;
     -r # ............. generate a report every # seconds. default: 60
     -D [#|all|raw] ... debug mode, tons of output. use with caution.
                          #: payload bytes to dump (default: 0)
     -f str ........... traffic filter; libpcap syntax
     -T [png|gif|svg] . output image format (default: png)
     -e program ....... program to run to generate graph
     -o directory ..... map destination (default ./)
     -V ............... program version info
     -h ............... this handy help message
    Example: lanmap -i eth0 -r 30 -T png -o /tmp/
    
    Pues una línea típica es la del ejemplo, que nos sirve perfectamente y creará un gráfico válido de nuestra red.
    shell> lanmap -i eth0 -r 15 -T png -o /home/javier/
    
    Para acelerar el proceso de descubrir nuevos hosts, podemos emplear nmap,
    shell> nmap -PS 192.168.1.0/24
    
    Y sólo queda esperar un tiempo para poder tener un gráfico válido.
  • Salida
    A continuación os muestro la salida obtenida.
Leer más

Consultas interesantes a MySQL

Muchas veces MySQL te puede sorprender con la información que almacena y que en muchos casos no sabes de que dispones. A continuación os dejo algunas de esas consultas que pueden resultar de interés para alguno, espero.



Listado de tablas con más de N número de filas

mysql> SELECT table_name as db, table_rows
  -> FROM information_schema.tables 
  -> WHERE table_rows > 1000
  -> AND table_schema not in('information_schema','performance_schema')
  -> ORDER BY table_rows desc;
+---------------------------+------------+
| db                        | table_rows |
+---------------------------+------------+
| zabbix.history            |  127073544 |
| zabbix.history_uint       |   58873482 |
| zabbix.trends_uint        |    1619018 |
| zabbix.trends             |    1310026 |
| zabbix.history_str        |     340954 |
| zabbix.housekeeper        |      50843 |
| zabbix.alerts             |      37877 |
| zabbix.events             |      32635 |
| zabbix.history_log        |      25757 |
| zabbix.items_applications |       1496 |
| zabbix.items              |       1014 |
+---------------------------+------------+
11 rows in set (1.67 sec)

Listado de accesos a una base de datos

mysql> SELECT grantee, privilege_type, is_grantable
  -> FROM information_schema.schema_privileges
  -> WHERE table_schema = 'zabbix';
+----------------------+----------------+--------------+
| grantee              | privilege_type | is_grantable |
+----------------------+----------------+--------------+
| 'zabbix'@'localhost' | SELECT         | NO           |
| 'zabbix'@'localhost' | INSERT         | NO           |
| 'zabbix'@'localhost' | UPDATE         | NO           |
| 'zabbix'@'localhost' | DELETE         | NO           |
| 'zabbix'@'localhost' | CREATE         | NO           |
| 'zabbix'@'localhost' | DROP           | NO           |
| 'zabbix'@'localhost' | REFERENCES     | NO           |
| 'zabbix'@'localhost' | INDEX          | NO           |
| 'zabbix'@'localhost' | ALTER          | NO           |
| 'zabbix'@'localhost' | LOCK TABLES    | NO           |
| 'zabbix'@'localhost' | EXECUTE        | NO           |
| 'zabbix'@'localhost' | CREATE VIEW    | NO           |
| 'zabbix'@'localhost' | SHOW VIEW      | NO           |
| 'zabbix'@'localhost' | CREATE ROUTINE | NO           |
| 'zabbix'@'localhost' | ALTER ROUTINE  | NO           |
| 'zabbix'@'localhost' | EVENT          | NO           |
| 'zabbix'@'localhost' | TRIGGER        | NO           |
+----------------------+----------------+--------------+
18 rows in set (0.00 sec)

Listado de base de datos + tabla que no tienen primary key

mysql> SELECT CONCAT(t.table_schema,'.',t.table_name) as table_name
  -> FROM information_schema.TABLES t
  -> LEFT JOIN information_schema.TABLE_CONSTRAINTS tc
  -> ON t.table_schema = tc.table_schema
  -> AND t.table_name = tc.table_name
  -> AND tc.constraint_type = 'PRIMARY KEY'
  -> WHERE tc.constraint_name IS NULL
  -> AND t.table_type = 'BASE TABLE'
  -> AND t.table_schema not in('information_schema','performance_schema');
+---------------------+
| table_name          |
+---------------------+
| zabbix.events       |
| zabbix.history      |
| zabbix.history_str  |
| zabbix.history_uint |
| zabbix.node_cksum   |
+---------------------+
5 rows in set (1.66 sec)
Leer más

metasploit, prefetchtool module

Windows por defecto cada vez que arrancas un programa crea un pequeño fichero .pf (prefetch) que contiene toda la información relativa al mismo, uso de aplicaciones, librerías, ficheros empleados, etc. Estos archivos resultan de gran utilidad a la hora de realizar un análisis en profundidad del equipo, ya que ofrecen la posibilidad de conocer el último estado en el que se encontraba el equipo. La contra, es que para un atacante, toda esta información también es muy valiosa. Por lo tanto, cuando un atacante accede al equipo, puede ir a %%windir%%\Prefetch, carpeta predefinidad de los ficheros .pf y buscar ahí mucha información. Sin embargo si estamos dentro de un equipo empleando metasploit y con el intérprete meterpreter, éste trae un módulo que realiza dicha funcionalidad: prefetchtool.
Una vez estemos dentro de la máquina atacada, únicamente hay que ejecutar el módulo prefetchtool, tal como sigue,
meterpreter> run prefetchtool -h
[*] Prefetch-tool Meterpreter Script

OPTIONS:

   -c       Disable SHA1/MD5 checksum
   -h       Help menu.
   -i       Perform lookup for software name
   -l       Download Prefetch Folder Analysis Log
   -p       List Installed Programs
   -x #     Top x Accessed Executables (Based on Prefetch folder)
Al ejecutarlo con la opción -h, muestra el menú aquí escrito. La forma de ejecutarse es muy sencilla, ya que este módulo no tiene mayor complicación. Si no existe en local, se descarga la última versión disponible de la red, luego la sube al equipo de la víctima para posteriormente extraer la información. Dicha información se puede extraer en tiempo real o bien descargarla a local para un posterior análisis más minucioso. Vamos a ver a prefetchtool en funcionamiento.
meterpreter> run prefetchtool
[*] No local copy of prefetch.exe, downloading from the internet...
[*] Downloaded prefetch.exe to /opt/framework/msf3/data/prefetch.exe
[*] Running Prefetch-tool script...
[*] Uploading Prefetch-tool for analyzing Prefetch folder...
[*] Prefetch-tool uploaded as C:\WINDOWS\TEMP\09447.exe
[*] OUT> 43 Prefetch Files Found
[*] OUT> Analyzing 1 of 43 files
[*] OUT> Filename:  chrome.exe-16185b96.pf
[*] OUT> MD5:   3d28738ee7a72c458d896837be5f8fc1
[*] OUT> SHA1:   da39a3ee5e6b4b0d3255bfef95601890afd80709
[*] OUT> Last accessed time: Mon Jul 30 15:52:08 2012
[*] OUT> Last modified date: Mon Jul 30 16:52:08 2012
[*] OUT> File creation date: Mon May 18 16:09:55 2009
[*] OUT> Total number of runs: 110
[*] OUT> 
[*] OUT> Analyzing 2 of 43 files
[*] OUT> Filename:  chrome.exe-16185b99.pf
[*] OUT> MD5:   8caf984cca4bf018cf9e4fc30f6fae84
[*] OUT> SHA1:   da39a3ee5e6b4b0d3255bfef95601890afd80709
[*] OUT> Last accessed time: Mon Jul 30 15:52:27 2012
[*] OUT> Last modified date: Mon Jul 30 16:52:37 2012
[*] OUT> File creation date: Fri Jan 21 10:42:52 2011
[*] OUT> Total number of runs: 255
[*] OUT> 
[*] OUT> Analyzing 3 of 43 files
...
Si ahora no interesa descargar la información que se extrae del equipo a local, simplemente con la opción -l lo realizará automáticamente,
meterpreter> run prefetchtool -l
[*] Checking for an updated copy of prefetch.exe..
[*] Running Prefetch-tool script...
[*] Uploading Prefetch-tool for analyzing Prefetch folder...
[*] Prefetch-tool uploaded as C:\WINDOWS\TEMP\63263.exe
[*] OUT> 43 Prefetch Files Found
....
 Clearing prefetch-tool prefetch entry ...
[*] [*] Saving prefetch logs to /root/.msf4/logs/prefetch/192.168.1.35-20120811.5054.log...
[*] [*] Deleting log file from target...
Y un ejemplo final de uso es poder sacar un informe de software instalado en la máquina (opción -p).
meterpreter> run prefetchtool -p
[*] Checking for an updated copy of prefetch.exe..
[*] IBMStorageManagerProfiler Server            (Version: 4.9.6)
[*] Juniper Networks Network Connect 7.1.7      (Version: 7.1.7.20581)
[*] Windows Installer 3.1 (KB893803)         (Version: 3.1)
[*] Actualización para Windows XP (KB898461)    (Version: 1)
[*] Hotfix for Windows XP (KB915865)            (Version: 10)
[*] Mozilla Firefox 13.0.1 (x86 es-ES)          (Version: 13.0.1)
[*] Mozilla Maintenance Service                 (Version: 13.0.1)
[*] Picasa 3                                    (Version: 3.8)
[*] VLC media player 1.1.8                      (Version: 1.1.8)
[*] Windows Imaging Component                   (Version: 3.0.0.0)
[*] WinSCP 4.3.2                                (Version: 4.3.2)
[*] MSXML 6.0 Parser (KB933579)                 (Version: 6.10.1200.0)
[*] Microsoft .NET Framework 3.5                (Version: 3.5.21022)
[*] WebFldrs XP                                 (Version: 9.50.6513)
[*] Visual Studio.NET Baseline - Spanish (Version: 7.1.3088)
[*] Microsoft Office Professional Edition 2003 (Version: 11.0.7969.0)
[*] Microsoft .NET Framework 2.0 Service Pack 1 (Version: 2.1.21022)
[*] Microsoft FrontPage Client - Spanish (Version: 7.00.9209)
Leer más

Estadísticas MySQL: status vs. full-status

MySQL, al igual que percona, pueden ofrecer muchas estadísticas de uso del motor de base de datos. Estadísticas que luego pueden ser recogidas por zabbix para analizar y tener presente, ya que gracias a ellas podemos saber cómo evoluciona el rendimiento de la base de datos en el tiempo. Sin embargo, dependiendo del nivel de estadísticas que nos interese tenemos dos comandos diferentes, status y extended-status. Lógicamente obtener unos datos u otros dependerá del nivel de detalle que nos interese.
  • status
    shell> mysqladmin -u root -p status
    Enter password: 
       Uptime: 514430 \
       Threads: 1 \
       Questions: 102512 \
       Slow queries: 2 \
       Opens: 2452 \
       Flush tables: 1 \
       Open tables: 342 \
       Queries per second avg: 0.199
    
  • extended-status
    shell> mysqladmin -u root -p extended-status
    Enter password: 
    +------------------------------------------+-------------+
    | Variable_name                            | Value       |
    +------------------------------------------+-------------+
    | Aborted_clients                          | 0           |
    | Aborted_connects                         | 2           |
    | Binlog_cache_disk_use                    | 0           |
    | Binlog_cache_use                         | 0           |
    | Binlog_stmt_cache_disk_use               | 0           |
    | Binlog_stmt_cache_use                    | 0           |
    | Bytes_received                           | 340786236   |
    | Bytes_sent                               | 243009476   |
    | Com_admin_commands                       | 7           |
    | Com_assign_to_keycache                   | 0           |
    | Com_alter_db                             | 0           |
    ...
    
Intentaré próximamente dejar una plantilla de zabbix que se encargue de monitorizar dichos parámetros, obteniendo gráficas y alertas.
Leer más

Notificación de actualizaciones en RedHat/CentOS

En sistemas Debian/Ubuntu tenemos software ya especializado en buscar actualizaciones, que podemos hacer que se ejecute diariamente y así tener un informe diario de si hay o no hay actualizaciones pendientes para el sistema. En CentOS/RedHat ésto también es posible y sin necesidad de instalar ningún paquete adicional, sino que el propio gestor de paquetes, yum, trae una opción para hacer tal tarea. Vamos a ver cómo funciona y cómo poder configurarla.
Para empezar, necesitaremos editar el fichero /etc/yum/yum-updatesd.conf y dejarlo tal que así
[main]
# how often to check for new updates (in seconds)
run_interval = 86400
# how often to allow checking on request (in seconds)
updaterefresh = 600

# how to send notifications (valid: dbus, email, syslog)
emit_via = email
email_to = admin@tu_empresa.com
email_from = root@tu_empresa.com
# should we listen via dbus to give out update information/check for
# new updates
dbus_listener = yes

# automatically install updates
do_update = no
# automatically download updates
do_download = no
# automatically download deps of updates
do_download_deps = no
Las opciones importantes, las marcadas en negrita, significan:
  • run_interval
    Es el intervalo de frecuencia de búsqueda de actualizaciones. Por defecto viene establecido a una hora (3600 segundos) y lo vamos a poner diario (86400 segundos).
  • emit_via
    Es la forma de notificación de alertas de upgrades. Pueden ser vía email o vía syslog. Como nos interesa tener notificaciones vía mail, seleccionamos email.
  • email_to
    A quién va destinado el correo.
  • email_from
    De quién va a venir el correo.
Una vez tengamos todo listo, sólo queda reiniciar el servicio. Para ello,
shell> /etc/init.d/yum-updatesd restart
   Deteniendo yum-updatesd:                                   [  OK  ]
   Iniciando yum-updatesd:                                    [  OK  ]
Y el correo que tendrá un contenido similar al siguiente,
Hi,
This is the automatic update system on servidorLinux.dominio.com

There are 8 package updates available. Please run the system updater.

Packages available for update:
    portmap
    bind-libs
    man-pages-es
    libselinux-ruby
    rkhunter
Leer más

Características hardware: dmidecode usage

dmidecode es un comando que permite obtener información del hardware de un equipo. Realmente lo que hace es consultar la BIOS y presentar la información en formato legible. Permite obtener información de prácticamente todo el hardware del equipo, como puede ser desde el tipo de CPU hasta el máximo de memoria RAM que admite la placa con la que trabajamos. A continuación os dejo todos los tipos de datos que se pueden obtener y veremos también algún ejemplo de uso.
Type   Information
 0     BIOS
 1     System
 2     Base Board
 3     Chassis
 4     Processor
 5     Memory Controller
 6     Memory Module
 7     Cache
 8     Port Connector
 9     System Slots
10     On Board Devices
11     OEM Strings
12     System Configuration Options
13     BIOS Language
14     Group Associations
15     System Event Log
16     Physical Memory Array
17     Memory Device
18     32-bit Memory Error
19     Memory Array Mapped Address
20     Memory Device Mapped Address
21     Built-in Pointing Device
22     Portable Battery
23     System Reset
24     Hardware Security
25     System Power Controls
26     Voltage Probe
27     Cooling Device
28     Temperature Probe
29     Electrical Current Probe
30     Out-of-band Remote Access
31     Boot Integrity Services
32     System Boot
33     64-bit Memory Error
34     Management Device
35     Management Device Component
36     Management Device Threshold Data
37     Memory Channel
38     IPMI Device
39     Power Supply
40     Additional Information
41     Onboard Device
Para usarlo, simplemente debemos indicar de qué tipo queremos la información y la podremos obtener. En caso de que no solicitemos un tipo concreto, el comando nos mostrará toda la información disponible.
  • Memoria
    shell> dmidecode -t 16
    # dmidecode 2.9
    SMBIOS 2.5 present.
    
    Handle 0x0005, DMI type 16, 15 bytes
    Physical Memory Array
     Location: System Board Or Motherboard
     Use: System Memory
     Error Correction Type: Single-bit ECC
     Maximum Capacity: 32 GB
     Error Information Handle: Not Provided
     Number Of Devices: 6
    
  • Slots del sistema
    shell> dmidecode -t 9
    # dmidecode 2.9
    SMBIOS 2.5 present.
    
    Handle 0x001D, DMI type 9, 13 bytes
    System Slot Information
     Designation: PCIE SAS
     Type: x4 PCI Express
     Current Usage: Available
     Length: Long
     ID: 1
     Characteristics:
      3.3 V is provided
    
    Handle 0x001E, DMI type 9, 13 bytes
    System Slot Information
     Designation: System Slot 1
     Type: x8 PCI Express
     Current Usage: In Use
     Length: Long
     ID: 2
     Characteristics:
      3.3 V is provided
    
    Handle 0x001F, DMI type 9, 13 bytes
    System Slot Information
     Designation: System Slot 2
     Type: x8 PCI Express
     Current Usage: In Use
     Length: Long
     ID: 3
     Characteristics:
      3.3 V is provided
    
  • Procesador
    shell> dmidecode -t 4 
    # dmidecode 2.9
    SMBIOS 2.5 present.
    
    Handle 0x0001, DMI type 4, 40 bytes
    Processor Information
     Socket Designation: Node 1 Socket 1
     Type: Central Processor
     Family: Xeon
     Manufacturer: Intel(R) Corporation
     ID: E5 06 01 00 FF FB EB BF
     Signature: Type 0, Family 6, Model 30, Stepping 5
     Flags:
      FPU (Floating-point unit on-chip)
      VME (Virtual mode extension)
      DE (Debugging extension)
      PSE (Page size extension)
      TSC (Time stamp counter)
      MSR (Model specific registers)
      PAE (Physical address extension)
      MCE (Machine check exception)
      CX8 (CMPXCHG8 instruction supported)
      APIC (On-chip APIC hardware supported)
      SEP (Fast system call)
      MTRR (Memory type range registers)
      PGE (Page global enable)
      MCA (Machine check architecture)
      CMOV (Conditional move instruction supported)
      PAT (Page attribute table)
      PSE-36 (36-bit page size extension)
      CLFSH (CLFLUSH instruction supported)
      DS (Debug store)
      ACPI (ACPI supported)
      MMX (MMX technology supported)
      FXSR (Fast floating-point save and restore)
      SSE (Streaming SIMD extensions)
      SSE2 (Streaming SIMD extensions 2)
      SS (Self-snoop)
      HTT (Hyper-threading technology)
      TM (Thermal monitor supported)
      PBE (Pending break enabled)
     Version: Intel(R) Xeon(R) CPU           X3430  @ 2.40GHz
     Voltage: 1.2 V
     External Clock: 4800 MHz
     Max Speed: 4000 MHz
     Current Speed: 2400 MHz
     Status: Populated, Enabled
     Upgrade: ZIF Socket
     L1 Cache Handle: 0x0003
     L2 Cache Handle: 0x0004
     L3 Cache Handle: 0x0002
     Serial Number: Not Specified
     Asset Tag: Not Specified
     Part Number: Not Specified
     Core Count: 4
     Core Enabled: 4
     Thread Count: 4
     Characteristics:
      64-bit capable
    

Leer más

Ejemplo de reporte en test de penetración

Cuando realizas un test de penetración, una de las cosas más complicadas y que nunca suelen comentarte es cómo realizar el informe final. Puedes ser muy bueno realizando y consiguiendo entrar en equipos remotos, aprovechando y descubriendo vulnerabilidades, pero cuando alguien te pide que lo hagas, lo que realmente quiere es un informe final comprensible. Y COMPRENSIBLE es algo muy importante, puesto que se puede dar el caso de que alguna, sino todas, las personas que lo van a leer no sean técnicas y por lo tanto no sepan de lo que se está hablando. Es por ello que en dicho informe hay que aclarar lo que se ha realizado, cómo se ha realizado y la magnitud de la vulnerabilidad descubierta, mezclando lenguaje técnico (cómo se hizo) con lenguaje no técnico (qué se hizo y qué podría pasar si alguien lo hiciera).


Hoy descubrí en el blog de la gente de Ofensive Security, los creadores de BackTrack, un ejemplo de informe de resultados finales, listo para entregar al cliente.
Os dejo un enlace al mismo, del que espero que pueda ser a alguien de ayuda.
Leer más

Formulario de contacto

Nombre

Correo electrónico *

Mensaje *

Últimos comentarios