martes, junio 05, 2007

PORTAL DE SEGURIDAD INFORMÁTICA

Amigos:
Hoy 4 de Junio (5 ya en realidad) acabo de publicar mi nuevo sitio web dedicado 100% a lo que es seguridad informática. Quizá este blog se añeje un poco así que los invito a todos a participar:

http://www.seguridad-informatica.cl (CON GUION)

Noticias actualizadas, foros, blogs, encuestas, y un sinfín de cosillas que iré desarrollando en adelante.

Visitenme allá.
SHau.

viernes, junio 01, 2007

Ojo con los CMS (Content Management Systems)

Normalmente nosotros, los webmasters flojos, en vez de diseñar nuestras páginas webs desde cero como buen programador, ahorramos un 80% del trabajo instalando un sistema de gestión de contenido o CMS por sus siglas en inglés.

Entre los más populares están PHP-NUKE, Drupal, Joomla, Mambo, Xoops, Wordpress (aunque es más un blog), etc.
El problema de los CMS es que, si existe una vulnerabilidad que alguien encontró y publicó el código del exploit por ahí, nuestros sistemas están a merced de los atacantes hasta que el autor se digne a publicar una actualización de seguridad.

Existe un sitio web súmamente bueno llamado CMS Matrix y tiene una genial herramienta de comparación de CMS. Tiene una lista inmensa con muchos CMS. Solamente tenemos que seleccionar los que queremos comparar y apretar el botón COMPARE (que está abajo al final) y verán resultados muy sorprendentes.

Les sugiero visitar http://www.cmsmatrix.org/ antes de instalar cualquier CMS.

Algo que logré confirmar y venía sospechando hace rato es la mala calidad de PHP-NUKE en cuanto a soporte, extensiones y sobre todo seguridad. Debe ser el CMS menos seguro.

Entre los más seguros están Plone, Drupal y Typo3.

Recomendaciones para quienes usamos CMS:
1) NUNCA DEJAR DE ESTAR PENDIENTE DE LAS ACTUALIZACIONES
2) ELIMINAR LOS MENSAJES DE VERSIONES DE LOS BANNERS (como por ejemplo Joomla 1.0.10)
3) HACER SIEMPRE RESPALDOS DE LAS BASES DE DATOS Y EL CONTENIDO WEB.
4) NUNCA ESTA DEMÁS DECIR QUE NO USEN NOMBRES DE USUARIO Y PASSWORDS COMUNES Y FACILES

miércoles, mayo 30, 2007

PARTE 3. Instalación, Configuración y Seguridad de un servidor SSH (OpenSSH)

Esto es bastante simple, pero nos permitirá instalar y configurar OpenSSH Server de forma segura en nuestra máquina Debian. Aunque la configuración es similar para cualquier versión de Linux o Unix.
Instalación.

apt-get install openssh-server openssh-client

configuramos el server SSH

vim /etc/ssh/sshd_config

NO CONFUNDIR con ssh_config, que es la configuración del cliente OpenSSH). Ahora debemos cambiar el puerto por defecto 22 a cualquiera sobre 10000. Esto sirve para disminuir los ataques de fuerza bruta hechos por robots.
Debemos dejar las opciones de sshd_config de la siguiente manera:

Port 65520
Protocol 2

NO PERMITIR que el usuario "root" se loguee remotamente via SSH

PermitRootLogin no

Asegurarse de quue no se permitan passwords en blanco para los usuarios

PermitEmptyPasswords no

Deshabilitar el reenvío X11

X11Forwarding no

Guardar, salir y reiniciar el servidor SSH
/etc/init.d/ssh restart
Ahora probamos nuestra conexión con:

ssh -p 65520 usuario@ipdelservidor

It's done.

PARTE 2. Instalación y Configuración LAMP (Linux, Apache2, MySQL5 y PHP5) con algunas consideraciones de seguridad.

Instalación de Apache
(tips de seguridad: http://httpd.apache.org/docs/2.0/misc/security_tips.html)
Instalamos Apache2, la documentación (siempre necesaria), Lynx que es un navegador que trabaja en modo texto y los certificados para SSL. Trabajaremos como usuario root.

apt-get install apache2-mpm-prefork apache2-doc lynx ca-certificates

Ejecutamos

/etc/init.d/apache2 force-reload

para cargar todos los módulos de la instalación. Ya tenemos apache instalado. Lo comprobamos: http://localhost o bien desde la shell: lynx localhost
Ahora procederemos a configurar nuestros VIRTUALHOST (de tipo name-based). Para ello creamos un directorio donde guardaremos la data de todos nuestros virtualhosts fuera de la ruta pública (/var/www/), p. ej:

mkdir /var/virtualhosts/

Vamos a trabajar con el dominio pruebazona.cl creado en el post anterior referente a BIND9. Antes de comenzar con la configuración, debo destacar un par de cosas antes que son importantes.

- El directorio /etc/apache2/sites-available/ contiene las directivas de configuración de apache para cada virtualhost
- El directorio /etc/apache2/sites-enabled/ contiene los sitios habilitados para trabajar bajo virtualhost
- Para habilitar un Virtualhost ya existente en sites-available basta con ejecutar: a2ensite dominio.com (por ejemplo: a2ensite pruebazona.cl).

IMPORTANTE: En /var/virtualhosts/ vamos a guardar los datos propiamente tal, es decir, el contenido completo de nuestros sitios webs (scripts, html, etc) y en /etc/apache2/sites-available (y enabled) estará la configuración respectiva de apache para cada virtualhost. OK, aclarado este punto, proseguimos.
Creamos nuestro sitio web (que mostrará www.pruebazona.cl)

mkdir /var/virtualhosts/pruebazona/
vim /var/virtualhosts/pruebazona/index.html

Y creamos un contenido para index.html:


USTED ESTA VIENDO www.pruebazona.cl




Guardamos y ahora creamos la configuración para ese VirtualHost:

vi /etc/apache2/sites-available/pruebazona.cl

NOTA: (Usamos la directiva para definir el sitio virtual y la directiva para indicar cual será el directorio públicamente accesible)



#Configuración básica
ServerAdmin webmaster@pruebazona.cl
ServerName www.pruebazona.cl
DocumentRoot /var/virtualhosts/pruebazona/


Order Deny,Allow
Allow from all
# No mostrar indexes (índices) para los directorios
Options -Indexes




Guardamos, salimos y habilitamos el sitio nuevo:

a2ensite pruebazona.cl

Debemos recargar Apache para que tomen los cambios:

/etc/init.d/apache2 reload


Si funciona nuestro DNS, entonces podriamos apuntar a www.pruebazona.cl y ver el contenido de la página que creamos en http://www.pruebazona.cl

TIPS DE APACHE:
- Habilitar y deshabilitar módulos de apache funciona de la misma manera que los virtualhost. Usamos a2enmod para habilitar y a2dismod para deshabilitar.
- Si queremos habilitar SSL sobre Apache, solamente agregamos la línea
Listen 443
al archivo /etc/apache2/ports.conf
- Para crear certificados auto-firmados para utilizar con SSL, podemos usar el siguiente comando que nos creará un certificado "válido" por 10 años.

apache2-ssl-certificate -days 3650


Instalación de PHP5


apt-get install libapache2-mod-php5

Como método de seguridad, utilizamos la configuración recomendada de PHP en vez de la original:

mv /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.original
cp /usr/share/doc/php5-common/examples/php.ini-recommended /etc/php5/apache2/php.ini

Le decimos a PHP "que se esconda":

vim /etc/php5/apache2/php.ini

y cambiamos este valor: expose_php = on por expose_php = off

Eso es todo. Para probar que Apache está interpretando PHP, creamos el siguiente SCRIPT:

vim /var/www/prueba.php

y agregamos:

phpinfo();
?>

La función phpinfo() nos listará todo el entorno de PHP en http://localhost/prueba.php. Es muy importante eliminar este archivo una vez creado, ya que proporciona mucha información útil para un atacante.

MYSQL
Instalamos el servidor MySQL y el módulo de conexión a MySQL de PHP.

apt-get install mysql-server php5-mysql

Creamos un password para el usuario root de MySQL:

/usr/bin/mysqladmin -u root password 'cualquierpassword'

probamos que esté ejecutándose MySQL:

mysql -u root -p
password:

instalamos phpMyAdmin

apt-get install phpmyadmin

Y listo. Ahora, para darle más seguridad a phpmyadmin, podemos eliminar la versión del banner y aplicarle doble contraseña con .htaccess que veremos en los pasos posteriores. Para eliminar el peligroso banner:

vim /usr/share/phpmyadmin/libraries/Config.class.php

Aproximadamente en la línea 83 encontramos este texto:

/**
* sets system and application settings
*/
function checkSystem()
{
$this->set('PMA_VERSION', '2.9.1.1-Debian-2ubuntu1');
/**
* @deprecated
*/
$this->set('PMA_THEME_VERSION', 2);
/**
* @deprecated
*/
$this->set('PMA_THEME_GENERATION', 2);

La variable PMA_VERSION debemos editarla y dejarla a nuestro propio gusto:

/**
* sets system and application settings
*/
function checkSystem()
{
$this->set('PMA_VERSION', 'QUE TE IMPORTA MI VERSION FUCKIN' LAMMER');
/**
* @deprecated
*/
$this->set('PMA_THEME_VERSION', 2);
/**
* @deprecated
*/
$this->set('PMA_THEME_GENERATION', 2);


SEGURIDAD DE LOS SERVICIOS INSTALADOS

Apache
Inmediatamente agregamos un poco de seguridad a Apache en apache2.conf ajustando los siguientes parámetros


# Prohibimos acceso a ubicaciones del sistema de archivos
Order Deny,Allow
Deny from all
# Prevenimos el uso de archivos .htaccess en todos los directorios
# excepto aquellos que especifiquemos explícitamente
AllowOverride None
# No mostramos el contenido de los índices.
Options -Indexes


# Limitamos la información saliente de Apache.
ServerSignature Off
ServerTokens Prod


COMO PROTEGER LOS DIRECTORIOS CON CONTRASEÑA:
Indicamos a APACHE que debe aceptar los .htaccess en apache2.conf


Options Indexes Includes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
Allow from all


Creamos un directorio SEGURO donde almacenamos la contraseña. FUERA DE LA RUTA WWW

mkdir /data/

Creamos el directorio en la ruta www

mkdir /var/www/protegido/
cd /var/www/protegido/

con vim creamos un archivo llamado ".htaccess" sin comillas y agregamos el siguiente código:

vim .htaccess

Código:

AuthUserFile /data/.htpasswd
AuthName “ACCESO RESTRINGIDO”
AuthType Basic


require valid-user


cambiamos al directorio /data/ y creamos el archivo de password:

cd /data/
htpasswd -c .htpasswd usuario

Ingresamos la password deseada y finalizamos recargando apache:

/etc/init.d/apache2 reload

y probando el directorio protegido por contraseña http://localhost/protegido/

MySQL
=====
Como consideración general no se debe ocupar el usuario "root" de MySQL para configurar los sitios web ni nada. Se deben
crear usuarios y passwords para cada sitio web o aplicación MySQL que levanta. Además se debe restringir MySQL solo a trabajar en localhost.

PARTE 1. Configuración de un servidor DNS con BIND9 bajo Debian (o Ubuntu) y con seguridad.

Como root ejecutamos:

apt-get update
apt-get install bind9

Instalamos VIM y lo editamos para que muestre la info en colores:

apt-get install vim

Una vez instalado:

vim /etc/vim/vimrc

reemplazamos:

" Vim5 and later versions support syntax highlighting. Uncommenting the next

" line enables syntax highlighting by default.

" syntax on

por

" Vim5 and later versions support syntax highlighting. Uncommenting the next

" line enables syntax highlighting by default.

syntax on

Editamos la configuración de nuestra máquina para utilizar nuestro nuevo servidor DNS para resolver nombres de dominio:

vim /etc/resolv.conf

Ingresar:

nameserver 127.0.0.1 //para que BIND sea nuestro propio servidor DNS
nameserver 200.75.0.4 //DNS secundario como respaldo, este lo entrega el ISP

Editamos la configuración de bind:

vim /etc/bind/named.conf

Para habilitar logging en bind9 agregamos lo siguiente al final de named.conf:


logging {
category "default" { "debug"; };
category "general" { "debug"; };
category "database" { "debug"; };
category "security" { "debug"; };
category "config" { "debug"; };
category "resolver" { "debug"; };
category "xfer-in" { "debug"; };
category "xfer-out" { "debug"; };
category "notify" { "debug"; };
category "client" { "debug"; };
category "unmatched" { "debug"; };
category "network" { "debug"; };
category "update" { "debug"; };
category "queries" { "debug"; };
category "dispatch" { "debug"; };
category "dnssec" { "debug"; };
category "lame-servers" { "debug"; };
channel "debug" {
file "/var/log/bind.log" versions 2 size 50m;
print-time yes;
print-category yes;
};
};

No debemos olvidarnos de setear los permisos a /var/log/bind.log

chown named.named /var/log/bind.log
chmod 744 /var/log/bind.log

Reiniciamos el daemon DNS:

/etc/init.d/bind9 restart

Probamos nuestra configuración. Para buscar errores, ejecutamos en un nuevo terminal:

tail -f /var/log/bind.log

y en otro terminal distinto:

tail -f /var/log/syslog

Incluso el contenido de /var/log/messages puede ayudar a depurar errores.
Probamos que nuestro DNSd esté resolviendo correctamente. En el terminal principal:

nslookup www.kernel.org

Con esto comprobamos que nuestro DNS está funcionando

> nslookup www.kernel.org
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
www.kernel.org canonical name = pub.kernel.org.
Name: pub.kernel.org
Address: 204.152.191.37
Name: pub.kernel.org
Address: 204.152.191.5

Podemos consultar /var/log/bind.log y /var/log/syslog para ver los detalles de las consultas

Creación de ZONAS

Creamos el directorio donde almacenaremos nuestras zonas:

mkdir /etc/bind/zonas/

Luego creamos el archivo de zona.
NOTA: Reemplazamos el nombre "pruebazona.cl" por el dominio que vamos a administrar.

vi /etc/bind/zonas/db.pruebazona.cl

agregamos el siguiente texto (MUY IMPORTANTE SON LOS PUNTOS AL FINAL DEL NOMBRE DEL DOMINIO):


;
; Archivo de datos para pruebazona.cl
;
$TTL 604800
@ IN SOA pruebazona.cl. info.pruebazona.cl. (
2007011501 ; Serial
7200 ; Refresh
120 ; Retry
2419200 ; Expire
604800) ; Default TTL
;
@ IN NS ns1.pruebazona.cl.
@ IN NS ns2.pruebazona.cl.
pruebazona.cl. IN MX 10 mail.pruebazona.cl.
pruebazona.cl. IN MX 20 mail2.pruebazona.cl.
pruebazona.cl. IN A 200.84.26.28
www IN CNAME pruebazona.cl.
mail IN A 200.84.26.28
ftp IN CNAME pruebazona.cl.


Guardamos y creamos ahora el archivo de reverso para esa zona (muy útil a veces).
NOTA!!: Como pueden ver en el ejemplo anterior, el dominio pruebazona.cl apunta a la IP 200.84.26.28. Esto deberán reemplazarlo por la dirección IP real de su dominio. Y en el ejemplo siguiente también.

vi /etc/bind/zonas/200.84.26.reverso

Agregamos:


$TTL 1d ;
$ORIGIN 26.84.200.IN-ADDR.ARPA. ;La IP aqui va en formato inverso.
@ IN SOA ns1.pruebazona.cl. info.pruebazona.cl. (
2007011501
7200
120
2419200
604800
)
IN NS ns1.pruebazona.cl.
IN NS ns2.pruebazona.cl.
28 IN PTR ns1.pruebazona.cl.
29 IN PTR ns2.pruebazona.cl.

Ahora comprobamos la sintaxis de los archivos recién creados:

cd /etc/bind/zonas/
named-checkzone pruebazona.cl db.pruebazona.cl
named-checkzone 26.84.200.IN-ADDR.ARPA 200.84.26.reverso

Se debe obtener un resultado OK. En caso de tener errores, hay que revisar el archivo y comprobar hasta que el sistema entregue OK (IMPORTANTE NO DEJAR ESPACIOS EN BLANCO AL INICIO DE LAS LINEAS). Siempre ayudan los logs.
Ahora debemos cargar los archivos de zona a la configuración de BIND

vim /etc/bind/named.conf.local

Y agregar:

zone "pruebazona.cl" {
type master;
file "/etc/bind/zonas/db.pruebazona.cl";
};

zone "254.168.192.IN-ADDR.ARPA" {
type master;
file "/etc/bind/zonas/200.84.26.reverso";
};


Guardamos, reiniciamos el servicio (/etc/init.d/bind9 restart) y comprobamos la configuración

tail -f /var/log/bind.log

o

tail -f /var/log/syslog


root@tarro:/etc/bind/zonas# nslookup pruebazona.cl
Server: 127.0.0.1
Address: 127.0.0.1#53

Name: pruebazona.cl
Address: 200.84.26.28

root@tarro:/etc/bind/zonas# nslookup www.pruebazona.cl
Server: 127.0.0.1
Address: 127.0.0.1#53

www.pruebazona.cl canonical name = pruebazona.cl.
Name: pruebazona.cl
Address: 200.84.26.28

root@tarro:/etc/bind/zonas# nslookup 200.84.26.28
Server: 127.0.0.1
Address: 127.0.0.1#53

28.26.84.200.in-addr.arpa name = ns1.pruebazona.cl.


Listo. Dominio creado. Felicitaciones.

SEGURIDAD
Debemos proteger nuestro DNS de dos problemas comunes
a) No permitir recursividad a toda Internet, si no que solamente a nuestros propios clientes
b) No permitir transferencias de zona a otro host que no sea nuestro servidor DNS secundario
Para lo primero se necesita crear una lista de acceso (ACL) con las IP permitidas a usar nuestro DNS:

vim /etc/bind/named.conf.options

y agregamos lo siguiente FUERA DEL CLAUSE options:


acl "prueba-redlan" { //Nombre de la lista
192.168.1.0/24; //Red LAN interna
200.84.26.28; //Dirección IP del servidor DNS.
127.0.0.1; //Localhost
};


Lo siguiente va dentro de options { }


allow-recursion {
prueba-redlan;
};
allow-transfer {
127.0.0.1; // localhost
200.1.123.7; // secundario.nic.cl -> DNS secundario permitido para transferir zonas
};


Guardamos los cambios, salimos de VIM, reiniciamos el servicio y comprobamos
la seguridad con Nessus (Una vez desde algún host en nuestra ACL y otra desde algún host fuera de la ACL) o DoctorDNS de nic.cl. OK. No faltará quien dirá que la seguridad no está completa sin ejecutar el daemon named en un entorno chroot. Toda la razón, falta eso para dar una completa seguridad, pero es harina de otro costal y por ahora dejémoslo así.

jueves, mayo 24, 2007

Sitio web de Ophcrack en español

Hace unos días postié acerca de la gran herramienta que era Ophcrack. Bueno, ahora hice el sitio de ophcrack en español para quienes tengan problemas con el inglés.

http://ophcrack.sourceforge.net/es.index.php

Al final de la página salen mis propios créditos, je!.

Durante el invierno (del hemisferio sur), los desarrolladores de Ophcrack trabajarán en una nueva versión, de la cual desarrollaré la interfaz en español, lo que será de gran ayuda para algunos.

Eso.

miércoles, mayo 23, 2007

Reclamo formal contra el precio de los libros!

Que rabia. Hoy anduve buscando el libro "Linux (Hacked Exposed)" y no lo encontré pero encontré otro llamado "Linux Hackers", y al consultar el valor.. uff.. $42.900 PESOS!!!!

Con razón el nivel técnico medio-superior de Chile es tan bajo, si comprarse un libro para aprender más es como tomarse un curso de capacitación casi.

Ojalá algún día los políticos apernaos de siempre decidan bajar el tremendo impuesto al libro que tenemos.

Asi que si alguien lo tiene... rájense con una copia? je!!

domingo, mayo 13, 2007

"El mayor defecto de la raza humana es la falta de habilidad para comprender la función exponencial"

El título dice algo practicamente ridículo, pero quiero que vean este video que encontré por ahí:


http://video.google.es/videoplay?docid=8642751995539239050&hl=es


Es algo absolutamente interesante respecto al famoso cambio climático y sobre todo respecto a los recursos "renovables" de la Tierra. Me salí un poco del tema de mi blog pero considero que todos deberíamos mirar este video, que es bastante largo (52 minutos) pero los valen, a mí se me hizo corto. Veanlo, tengan paciencia que los va a sorprender.

Después que lo vean, entenderán lo que dice el título:
El mayor defecto de la raza humana es la falta de habilidad para comprender la función exponencial.

viernes, mayo 11, 2007

Recuperar todas las passwords de Windows NT, 2000, 2003 y Vista (Incluso la de administrador)

Existe una utilidad que puede usar con supremacía ese adjetivo porque es realmente UTIL! Se llama Ophcrack. La gracia es que Ophcrack es un sistema que puede bootearse como LiveCD y recupera todas las claves de nuestra máquina Windows, las muestra y nos permite cambiarlas.

El LiveCD es pesadito (462 MB) pero vale la pena bajarlo. Pueden descargarlo DESDE AQUI

Solo basta que booteen su sistema con el CD, dejar que cargue el OS y sin siquiera mover el mouse o apretar una sola tecla verán en pantalla los passwords.
También pueden grabar el contenido en un Pendrive USB y bootear desde ahí ya que es mucho más rápido que el CD.

También pueden bajar la aplicación sola para correrla en su máquina Linux si tienen Linux/Windows.

Sitio Web del proyecto:
http://ophcrack.sourceforge.net

Gracias a Lalo Cara de Palo PC_HELP que encontró este softguar.

sábado, mayo 05, 2007

Reuniones, conferencias y seminarios en tiempo real por Internet

Esto lo encuentro simplemente genial. Mi amigo Ivo Perich desarrolla el sitio meeting.cl el cual es básicamente una plataforma de Internet donde se pueden hacer conferencias, seminarios, reuniones, etc. Mezcla audio en vivo con video, chat, presentaciones, etc.

Una excelente iniciativa.

Aquí un ejemplo en este video de 1 hora de una conferencia real dictada ahí hace poco.





SITIO WEB: http://www.meeting.cl

BLOG:
https://osaka.wordpress.com/

Encriptar las conversaciones de MSN Messenger

Algo que no muchos saben es que cada vez que hablamos por MSN inevitablemente somos vulnerables a que cualquiera (que sepa hacerlo) pueda leer lo que escribimos con todos nuestros contactos usando cualquier sniffer ya que MSN transmite todo en texto claro, sin cifrado. La verdad no sé porqué los desarrolladores de Messenger no le han puesto firmeza al tema de la seguridad y confidencialidad de datos en sus softwares y se preocupan más de reventarlos de monos y chiches inútiles. En fin, para solucionar en parte eso existe SIMP que es un protocolo utilizado para encriptar las comunicaciones y así nadie pueda espiar lo que hablamos.

El único detalle es que solamente encripta la comunicación con otro contacto que también tiene SIMP.

Por eso hay que ayudar a masificar esta herramienta en pro de la seguridad y privacidad.

Para descargarlo:
http://www.secway.fr/us/products/simplite_msn/getsimp.php

Tutorial:
http://nautopia.coolfreepages.com/simp/Simp.htm

Yo ya lo instalé.

jueves, abril 19, 2007

Solo prueba

Esto es solo una prueba.

miércoles, abril 18, 2007

Navegar anónimamente por Internet

Hay definitivamente muchos proxies anónimos que permiten "disfrazar" nuestra dirección IP real para acceder a recursos de Internet. Normalmente utilizaba anonymouse pero no tiene un buen tratamiento con los formularios GET y POST así es que me puse a buscar y encontré uno mucho mejor. Se llama Free To View y lo pueden encontrar en http://www.freetoview.net/.

Es tan simple como ingresar la dirección que quieren ver en el cuadro de texto "Address (URL):", darle enter y listo.