Auditar Linux con Lynis
Lynis tiene como objetivo darnos un informe de auditoria sobre nuestro servidor, en forma sensilla y con una vista muy amigable.
1. Descomprimimos la utlidad:
# wget http://www.rootkit.nl/files/lynis-1.1.7.tar.gz
# tar zxfv lynis-1.1.7.tar.gz
2. Ejecutamos la aplicacion:
# cd lynis-1.1.7
# ./lynis –check-all
Con esto comenzamos la auditora de nuestro sistema, acontinuacion vamos a dar algunos titulos de los analisis:
[+] Boot and services
[+] Kernel
[+] Memory and processes
[+] Users, Groups and Authentication
[+] Shells
[+] File systems
[+] Ports and packages
[+] Networking
[+] Printers and Spools
[+] Software: e-mail
[+] Software: firewalls
[+] Software: webserver
[+] Databases
[+] LDAP Services
[+] Software: PHP
[+] Software: Malware scanners
[+] System Tools
[+] Home directories
[+] Logging and files
[+] Banners and identification
[+] Scheduled tasks
[+] Accounting
[+] Time and Synchronization
[+] Cryptography
[+] Virtualization
Veamos una captura de pantalla de la utilidad:
Aqui vemos el reporte que nos entrego al analizar uno de los equipos del staff:
Saludos
Como recuperar la contraseña del Usuario Anonimo(IUSR) en el IIS
Si perdiste las PASS del usuario anonimo y no te funciona tu sitio, podes obtener las misma con el siguiente script.
Set IIsObject = GetObject ("IIS://localhost/w3svc")
Wscript.Echo Get_IUSR_Password(IIsObject)
Wscript.Echo Get_IWAM_Password(IIsObject)
Function Get_IUSR_Password(IIsObject)
on error resume Next
Dim Out
Out = Out & vbCrLf & "
AnonymousUserName = " & IIsObject.Get("AnonymousUserName")
Out = Out & vbCrLf & "
AnonymousUserPass = " & IIsObject.Get("AnonymousUserPass")
If err=0 Then Out = vbCrLf & "
Path:" & IIsObject.AdsPath & Out
Get_IUSR_Password = Out
End Function
Function Get_IWAM_Password(IIsObject)
on error resume Next
Dim Out
Out = Out & vbCrLf & "
WAMUserName = " & IIsObject.Get("WAMUserName")
Out = Out & vbCrLf & "
WAMUserPass = " & IIsObject.Get("WAMUserPass")
If err=0 Then Out = vbCrLf & "
Path:" & IIsObject.AdsPath & Out
Get_IWAM_Password = Out
End Function
Resultado:
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
Path:IIS://localhost/w3svc
AnonymousUserName = IUSR_sarasa
AnonymousUserPass = O2SOgx7JPZ-4Ph
Path:IIS://localhost/w3svc
WAMUserName = IWAM_sarasa
WAMUserPass = JLgR8BZg8_&7Ki
TrueCrypt 5 en Debian Etch
Les dejamos un tutorial realizado por la gente de Kriptopolis, donde nos explican como instalar la herramienta de encriptacion truecrypt en debian etch.
Tres correcciones para WordPress
Los primeros dos parches solucionan un error a la hora de reiniciar la contraseña (por olvido/pérdida) y un fallo en filtro image_send_to_editor.
La primer alternativa es descargar los 2 archivos y sobrescribir por los que estan en el host.
La segunda cambiar manualmente las líneas correspondiente en cada archivo.
1. Editar wp-includes/pluggable.php con el notepad o algún programa similar
2. Buscar la siguiente cadena:
function wp_generate_password($length = 12) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()";
3) Cambiamos por la siguiente cadena:
function wp_generate_password($length = 12, $special_chars = true) {
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
if ( $special_chars )
$chars .= '!@#$%^&*()';
1. Editar wp-login.php (esta en el raíz) con el notepad o algún programa similar
2. Buscar la siguiente cadena:
$key = wp_generate_password();
3. Cambiamos por la siguiente cadena
$key = wp_generate_password(20, false);
Y el tercer parche soluciona un bug en los comentarios. El problema reside en que cualquier usuario podía hacerse pasar por el autor del blog. La solución es muy parecida a las otras dos.
1. Editamos wp-comments-post.php (esta en el raíz) con el notepad o algún programa similar
2. Buscamos la siguiente cadena:
$comment_author = trim(strip_tags($_POST['author']));
$comment_author_email = trim($_POST['email']);
$comment_author_url = trim($_POST['url']);
$comment_content = trim($_POST['comment']);
3. A continuación ponen este código:
// get list of user (display) names for blog
global $wpdb;
$valid_users = (array)$wpdb->get_results("
SELECT display_name, user_email FROM " . $wpdb->prefix . "users");
// get ID of logged in user (if there is one)
global $userdata;
get_currentuserinfo();
$logged_in_name = $userdata->ID;
$logged_in_email = $userdata->user_email;
// see if the comment author matches an existing author
$found_match = FALSE;
foreach ($valid_users as $va) {
if (trim($va->display_name) != '') {
if (strtolower($va->display_name) == strtolower($comment_author)) {
$found_match = TRUE;
break;
}
}
if (trim($va->user_email) != '') {
if (strtolower($va->user_email) == strtolower($comment_author_email)) {
$found_match = TRUE;
break;
}
}
}
// if commenter is not logged in, but match was found, block the comment
if (trim($logged_in_name) == '') {
if ($found_match == TRUE) {
wp_die( __('You cannot post using the name or email of a registered author.') );
}
}
Para personalizar el mensaje que le aparece a los que quieren hacerse pasar por los autores del blog editar la siguiente línea
wp_die( __('You cannot post using the name or email of a registered author.') );
Fuentes:
WordpressTrac, Agamum y PuntoGeek
Desactivar el Metodo HTTP Trace Apache2
Es un metodo de petición HTTP utilizado para la depuración de las entradas de los usuarios.
En este caso vamos a desactivarlo ya que mediente el se puede ejecutar un ataque web del tipo XST.
1. Comprobamos el estado del metodo:
# telnet mywiki 80
Trying 1.1.1.1...
Connected to mywiki.
Escape character is '^]'.
TRACE / HTTP/1.0
Host: 1.1.1.1
HTTP/1.1 200 OK
Date: Sun, 22 Jun 2008 17:38:08 GMT
Server: Apache
Connection: close
Content-Type: message/http
Como podemos ver el resultado fue "200 OK" con esto vemos que el metodo se encuentra activo
2. Desactivamos el metodo:
Debemos agregar a la configuracion del servidor apache la siguiente variable:
# vi /etc/apache2/apache2.conf
TraceEnable Off
Ahora reiniciamos el servicio y verificamos nuevamente el estado:
# /etc/init.d/apache2 restart
# telnet mywiki 80
Trying 1.1.1.1...
Connected to mywiki.
Escape character is '^]'.
TRACE / HTTP/1.0
Host: 1.1.1.1
HTTP/1.1 403 Forbidden
Date: Sun, 22 Jun 2008 17:43:40 GMT
Server: Apache
Last-Modified: Mon, 31 Mar 2008 21:28:05 GMT
ETag: "7fa0c-470-53c8e340"
Accept-Ranges: bytes
Content-Length: 1136
Connection: close
Content-Type: text/html
Como vemos ya no tenemos acceso al metodo "Forbidden".
Borrar un dominio a mano IspCP
Can't drop database 'dbdelsitio'; database doesn't exist
[dbdelsitio es un ejemplo]
Ese error surgio cuando estaba haciendo pruebas en un blog con wordpress y borre la DB de forma manual desde el PMA en lugar de hacerlo desde el panel de admin del dominio. Cuando queria borrar el dominio desde el panel me salia "Can't drop database 'dbdelsitio'; database doesn't exist" dado que el blog que habia creado apuntaba a esa DB (dbdelsitio) y como no la encontraba me salia esa leyenda.
La solución es borrar de forma manual los siguientes registros.
1) /var/www/virtual/dominio_a_borrar
2) /var/cache/bind/db.dominio_a_borrar
3a) Desde PhpMyAdmin y borre las siguiente 2 entradas
3b) Ispcp - sql_database - dominio_a_borrar
3c) Ispcp - dominio - dominio_a_borrar
3d) Ispcp - buscar la db de forma manual en cada 1 de las tablas para borrar los registros. Salvo la tabla logs.
De esta manera se solución el problema y pude borrar el dominio para luego crearlo nuevamente.
Fuente:
Link del post IspCP
Estructura básica de GNU/Linux
Paso a detallar la estructuras básicas en GNU/Linux.
/
Raíz (el equivalente al C: de windows)/bin
Binarios y ejecutables del sistema.
/boot
Aquí se encuentra lo mas importante del sistema; el kernel y los archivos necesarios para que el sistema funcione correctamente.
/dev
Archivos que se relacionan con los diferentes dispositivos que pueden estar funcionando en una PC (discos duros, terminales, sonido, video, lectores dvd/cd, etc)
/etc
Uno de los mas importantes, porque se encuentran todas las configuraciones del sistema.
/home
Aquí cada usuario posee un directorio donde se guarda toda su configuración, los programas instalados y documentos personales.
/usr
Jerarquía secundaria para datos compartidos de solo lectura (Unix system resources).
/root
Similar al /home pero para el usuario root (solo puede ser visto por el administrador)
/var
Archivos variables, como son logs, bases de datos, directorio raíz de servidores HTTP y FTP, colas de correo, archivos temporales, etc.
Recuperar Grub luego de instalar Windows
Por circunstancias de la vida, tuve que instalar en la notebook win xp :p ... asi que por ese motivo perdi mi querido grub. Leyendo por internet encontre un sitio el cual explica paso a paso como recuperarlo y agregar la sentencia para seleccionar el windows.
Estos son los pasos a seguir:
1. Booteamos con algun Live Cd
2. Montamos la particion de nuestro linux, por ej:
# mount /dev/sda1 /media/prueba
3. Hacemos un backup de la configuracion del Grub.
# cp /media/prueba/boot/grub/menu.lst /media/prueba/home/situ/menus.lst
4. Restauramos nuestro grub
# grub
#grub > root (hd0,0)
#grub > setup (hd0)
#grub > quit
4. Agregamos la sentencia para que se puede seleccionar el SO Windows.
# vi /media/prueba/boot/grub/menu.lst
title Windows XP
root (hd0,1)
makeactive
chainloader +1
Fuente: http://apcmag.com/how_to_dual_boot_linux_and_windows_xp_linux_installed_first.htm?page=5
Utilizar etc/aliases en debian para recibir los mails del sistema en una casilla en particular
Antes de comenzar tenemos que tener configurado nuestro MTA (Postfix, Exim, etc..) para enviar mails al exterior. Para ello debemos tener configurado el MTA como internet-site.
A continuación vamos a ver como hacer para que todos los mails dirigido a los usuarios de nuestro linux sean redireccionados a una cuenta en particular, para eso, editamos el archivo /etc/aliases, donde veremos algo asi:
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
clamav: root
De esta forma, vemos que todos los mails de las diferentes cuentas del sistema van dirigidas al usuario root, y como nosotros queremos que esos mails vayan a una cuenta de mail ya existente vamos a agregar una ultima linea que diga algo asi:
root: casilla@dominio.com
Guardamos los cambios y para que estos sean tenidos en cuenta por nuestro MTA tenemos que hacer lo siguiente:
# newaliases
Listo, ahora todos los mails generados por los demonios van a ser automáticamente dirigidos a la cuenta especificada.
Como saber si tu sistema está afectado por la vulnerabilidad en OpenSSH
Si no tienes instalado openssh-server y nunca usaste openssh-client es seguro que no tendrás problema. Pero por las dudas puedes hacer la comprobación con este método. Te recomiendo que lo hagas, porque yo estaba seguro que en mi PC de escritorio jamás había usado OpenSSH y al comprobar por medio del script me dió que el sistema era vulnerable.
Primero abre una Terminal.
Nos descargamos el script de comprobación desde el servidor de Debian:
wget -c http://security.debian.org/project/extra/dowkd/dowkd.pl.gz
Lo descomprimimos:
gunzip dowkd.pl.gz
y le damos permiso de ejecución:
chmod u+x dowkd.pl
Luego lo ejecutamos:
./dowkd.pl user
./dowkd.pl host hostname
Si nos aparece algo similar a esto: /home/username/.ssh/id_dsa.pub:1: weak key significa que nuestra clave ssh se encuentra comprometida. Si no ves las palabras "weak key" no tienes problemas.
Como lo soluciono?
Seguimos desde la Terminal:
sudo apt-get update
sudo apt-get upgrade
Verás que existen actualizaciones para los paquetes openssl y openssh, Acepta las actualizaciones y ahora vamos a regenerar las nuevas claves.
Si el "weak key" apareció al ejecutar el primer script:
ssh-keygen -t dsa -b 1024
Si apareció en el segundo script:
sudo rm /etc/ssh/ssh_host_{dsa,rsa}_key*
sudo dpkg-reconfigure -plow openssh-server
Hecho esto, corremos los scripts nuevamente para ver si se solucionó el problema.
En el caso de no haberse solucionado mira el archivo donde está la clave con error (en mi caso la salida de la terminal era /home/eduardo/.ssh/authorized_hosts:1: weak key) y abre con Gedit el archivo en cuestión (en mi caso /home/eduardo/.ssh/authorized_hosts) y borra la linea afectada (en mi caso 1). Antes un backup del archivo con otro nombre.
Vuelve a ejecutar el script hasta que las dichosas palabritas weak key no aparezcan.
Fuente, el post fue tomado de http://www.ubuntips.com.ar/
ACTUALIZACION: Al actualizar los paquetes se instala también un paquete que testea todo en un solo paso. Tienes que ejecutar desde una Terminal:
ssh-vulnkey -a








