jueves, 8 de noviembre de 2012

Como detectar y evitar un ARP Spoofing

Holas, hoy os traigo otra de esas entradas que está relacionada con otra entrada.

En este caso está relacionada con el manual de ARP Spoofing que subí hace un tiempo, así que en esta ocasión os contare como detectar y evitar un ARP Spoofing.


¿CÓMO DETECTAR UN ARP SPOOFING?

Esta es quizá la parte mas complicada, ya que es muy difícil detectarlo, de hecho una persona que sepa hacerlo muy bien puede hacer un ARP Spoofing prácticamente indetectable.

El primer método para detectar un ARP Spoofing es mirar la tabla ARP y comprobar que todas las direcciones MAC son distintas, si hay alguna repetida quiere decir que estamos siendo víctimas de un ARP Spoofing, ya que las direcciones MAC son únicas para cada dispositivo, además es muy probable que la dirección mac duplicada sea la que hace referencia a vuestra puerta de enlace (gateway), ya que casi siempre se intenta redirigir el tráfico que se envía hacia internet.

para mirar la tabla ARP podéis hacerlo con este comando (se necesitan permisos de root para ejecutar el comando arp):


arp -v




como se puede ver en la imagen aparecen dos direcciones IP con la misma dirección MAC. La dirección MAC que aparece es la del ordenador al que estamos siendo redirigidos (por lo general suele ser el pc del atacante).

La segunda manera de detectar un ARP Spoofing es ejecutando un sniffer (como wireshark) en nuestro ordenador, de manera que tenemos que fijarnos en los paquetes ARP reply que recibimos (podemos poner un filtro en el wireshark para facilitar la visualización), si vemos que recibimos varios paquetes indicando una dirección IP y distintas direcciones MAC, quiere decir que estamos siendo victimas de un ARP Spoofing.



Como se puede ver en la imagen, se están recibiendo varios paquetes ARP reply indicando la dirección 192.168.120.30, pero las direcciones MAC con la que vienen asociados son distintas, lo cual es una incongruencia, ya que una tarjeta de red no puede tener más de una dirección MAC, lo cual indica que hay un atacante enviándonos paquetes ARP reply falsos y por otra parte está el dispositivo verdadero que también nos esta enviando sus paquetes ARP reply.

Por lo general en estos casos los paquetes ARP mas abundantes serán los falsos y los menos abundantes serán los verdaderos.


¿CÓMO BLOQUEAR O EVITAR UN ARP SPOOFING?

Bien, lo que veremos a continuación es como evitar ser víctimas de un ARP Spoofing, el procedimiento a seguir es bastante fácil.

Lo único que tenemos que hacer para evitar un ARP Spoofing es poner las entradas de la tabla ARP, estáticas (en vez de dinámicas que es como se crean por defecto).

Para introducir entradas estáticas en la tabla ARP lo haremos de la siguiente manera:


arp -s <direccion IP> <direccion MAC>


donde <direccion IP> es la dirección IP del ordenador que queramos introducir en la tabla ARP y <direccion MAC> es la dirección MAC que tenga dicho ordenador.

Ahora viene la pregunta ¿qué ordenadores tengo que meter en la tabla ARP?, realmente el más importante de todos es la puerta de enlace (gateway) ya que el ARP Spoofing casi siempre se hace con el objetivo de conseguir interceptar el tráfico que va dirigido hacia internet, pero si te sueles conectar a ordenadores de tu red (y no solo a internet) también es recomendable poner estos ordenadores en la tabla.

Nota: para saber la dirección MAC de los ordenadores que vas a introducir en la tabla puedes fiarte de las direcciones que ya están en la tabla (como dinámicas) siempre y cuando estés 100% seguro de que nadie te esta realizando un ARP Spoofing en ese momento, de todas maneras lo mas seguro es que las mires directamente en los ordenadores que quieras meter en la tabla (usando el comando ifconfig en cada uno de ellos por ejemplo), en el caso del router puedes mirar la dirección MAC en la página de configuración del mismo.

En este caso yo solo voy a poner la entrada para mi puerta de enlace (gateway), de manera que lo haría así:


arp -s 192.168.120.30 d0:ae:ec:ec:0a:44




Como podemos ver ahora en el campo "Flags" aparece una "M" indicando que la entrada ha sido introducida de manera manual en la tabla.

Nota: la entrada manual se borrará al reiniciar el sistema, así que, si queremos, podemos crear un script que se inicie en el arranque del sistema para que se introduzca la entrada manual automáticamente.

Tal y como está la tabla ARP ahora mismo sería imposible que se modificase la entrada del router enviando paquetes ARP reply, de manera que es imposible que nos hagan un ARP Spoofing para suplantar a nuestro router (puerta de enlace / gateway).


Espero os haya gustado =)

Cualquier duda dejádmela en comentarios

Saludos =D


sábado, 3 de noviembre de 2012

[Manual] SSH Tunneling

holap, aquí os traigo otro de mis manuales, este en concreto creo que fue uno de los últimos (sino el último) que escribí.

Este manual trata sobre como crear un túnel a través de un protocolo seguro como lo es ssh, la verdad es que me parece algo realmente interesante, ya que te permite convertir una transmisión de datos insegura en segura, ya que ssh cifra los datos que envía.

Por otra parte esta técnica también puede emplearse para hacer una redirección de puertos lo cual puede ser bastante útil en ciertas ocasiones.

El manual en si es bastante escueto, pero creo que el contenido merece la pena.

Os dejo el manual a continuación: SSH Tunneling

Saludos =)

viernes, 2 de noviembre de 2012

¿Cómo saber quien está en mi red? PARTE 2

Buenassssss.... esta entrada es una continuación de una que publiqué hace unas semanas, os la dejo AQUI.

Bien, como mencioné en la otra entrada, a veces los paquetes ICMP pueden ser bloqueados, de manera que no podemos confirmar realmente si hay o no un dispositivo en una dirección concreta, ya que si bloquea lo paquetes ICMP no recibimos ninguna respuesta a pesar de que SI hay alguien en la dirección ip a la cual enviamos la solicitud ICMP.

Ok, aquí es donde entra en juego el protocolo ARP. Resumiendo mucho el tema: en una red de área local los ordenadores se comunican con direcciones físicas (MAC), y el protocolo ARP se encarga de hacer una asociación entre las direcciones IP y las direcciones MAC. Resumiendo del todo, si un ordenador quiere estar conectado a una red tendrá que responder a las solicitudes ARP que se le manden, así que nosotros usaremos esto para descubrir que dispositivos están conectados realmente a nuestra red.

Nota: si un ordenador bloquease los paquetes ARP no se podría conectar a la red, ya que no podría ni enviar ni recibir paquetes al no poder recibir información del protocolo ARP, lo cual nos asegura que al realizar solicitudes ARP nos responderán todos los dispositivos que están realmente en nuestra red.

perfecto, ahora ya sabemos el truco definitivo para saber quien están en nuestra red, pero.... ¿cómo lo ponemos en práctica? pues bien, podemos hacerlo de varias maneras:

La primera manera de hacerlo es haciendo un ping con nmap tal y como hacíamos en la parte 1 y a continuación mirar la tabla ARP de nuestro equipo, para mirar la tabla ARP se necesitan privilegios de root, asi que la secuencia de comandos sería así:

Nota: yo uso la red 192.168.120.0 porque es la dirección de mi red, pero cada uno deberá de usar la dirección de su propia red, si tienes configurado el router por defecto probablemente la dirección de tu red sea 192.168.1.0


nmap -sP 192.168.120.0-255




su

arp -v




Como podemos ver se muestran un montonazo de entradas en la tabla ARP, pero casi todas nos marcan que están incompletas, las que nos interesan son las que están completas, osea, las que se nos muestran con una dirección MAC, si queremos podemos ejecutar el comando de la siguiente manera para que se nos muestren solo las entradas completas:


arp -v | grep C




estas entradas son los ordenadores que están conectados a nuestra red, en mi caso se muestran dos entradas, que corresponden a la dirección 192.168.120.30 (mi router) y 192.168.120.29 (otro ordenador de mi red), como podéis observar cuando se realiza el sondeo ICMP no se muestra esta ultima dirección (192.168.120.29) ya que en este ordenador hay un firewall que bloquea los paquetes ICMP, pero en cambio cuando consultamos la tabla arp vemos que esta ahí porque SI que responde a la solicitud ARP que hace el sistema.

Nota: en el sondeo icmp sale la dirección 192.168.120.21 que es la dirección de mi propio ordenador, por eso no sale después en la tabla ARP.

La segunda manera es la mas factible, ya que solo usamos nmap, de hecho usamos nmap exactamente de la misma manera que antes, lo único que cambia es que lo haremos con permisos de root:


su

nmap -sP 192.168.120.0-255




Como podemos ver en esta ocasión también se nos muestra la dirección 192.168.120.29 que antes no se mostraba.

El tema es que nmap siempre hace un sondeo ARP, lo que pasa es que, por decirlo de alguna manera, nmap necesita permisos de root para poder acceder a la información del protocolo ARP, así que cuando lo ejecutamos sin permisos de root solo nos muestra el resultado del sondeo ICMP, pero cuando lo ejecutamos con permisos de root nos muestra también el sondeo ARP (que es mas fiable).

De todas maneras también podemos indicarle a nmap que haga un sondeo exclusivamente ARP de la siguiente manera:


nmap -PR 192.168.120.0-255


Esta opción ademas del sondeo ARP también hará un escaner de los puertos mas habituales, si queremos evadir un poco el escaner de puertos, podemos ejecutar el programa de la siguiente manera:


nmap -p 0 -PR 192.168.120.0-255


Conclusión final:

Para saber quien esta en tu red lo único que tienes que hacer es ponerte como root en un shell (usando el comando su) y después simplemente usar nmap con la opción -sP y el rango de direcciones de tu red.

Cualquier duda que tengáis dejádmela en los comentarios

Saludos =)


domingo, 28 de octubre de 2012

Instalar nemesis, resolución de errores

Hola de nuevo, hace tiempo puse una entrada acerca de ARP Spoofing, en dicha entrada hablaba de un programa llamado nemesis (un inyector de paquetes), resulta que el otro día estuve intentado instalarlo y me encontré con que hay un problema al instalar el programa en un ordenador de 64 bits, así que ,enlazando un poco con la entrada anterior, en esta entrada os enseñare a instalar nemesis y como solventar esos pequeños problemas al instalarlo en un ordenador de 64 bits.

Bien, lo primero que necesitamos es el programa en si, ademas de la librería libnet-1.0.2a, podéis descargar ambos en los siguientes enlaces:

Descargar libnet-1.0.2a

Descargar nemesis

Primero vamos a instalar la librería, así que primero la extraemos con tar:


tar xvf libnet-1.0.2a.tar.gz


Después entramos en la carpeta que se ha extraído:


cd Libnet-1.0.2a/


y ejecutamos el script configure:


./configure


compilamos:


make


y realizamos la instalación:


sudo make install


aquí es donde encontramos el primer problema, cuando intentamos instalar nos da un error el programa make, no estoy seguro pero creo que este error solo sale dependiendo de la versión del make que tengas, de todas maneras es fácil de arreglar, editamos el archivo Makefile y cambiamos la siguiente línea:


MAN_PREFIX =


dejándola así:


MAN_PREFIX = /usr/share/man/man3



esta opción solo indica en que lugar se pondrá el manual de la librería. A continuación guardamos el Makefile con los cambios realizados y volvemos a ejecutar el sudo make install.

Bien, ya tenemos instalada la librería libnet, ahora instalaremos el nemesis

Extraemos los archivos:


tar xvf nemesis-1.4.tar.gz


Entramos en la carpeta que se ha extraído:


cd nemesis-1.4/


y ejecutamos el script configure, pero en este caso si lo ejecutáis normal os dirá que falta la librería libnet, a pesar de que la acabamos de instalar, ya que el script buscará la librería en un lugar distinto al que se instala por defecto, así que tendremos que indicarle en donde están los archivos de cabecera y la librería, lo haremos de la siguiente manera:


./configure --with-libnet-includes=/usr/include/ --with-libnet-libraries=/usr/lib/


ahora debería de ejecutarse el configure sin ningún problema.

A continuación lanzaremos el programa make para compilar el programa:


make



Aquí viene un nuevo problema, el compilador da error en una línea concreta (la línea 342) de uno de los archivo de código fuente (nemesis-functions.c situado en la carpeta src), resulta que el compilador de 64 bits no acepta esa línea en concreto, por suerte no es una función importante, así que podemos comentarla para que no se ejecute, esto no afectara al rendimiento del programa.

Podemos abrir el archivo (src/nemesis-functions.c) con un editor que nos marque el número de líneas para saber exactamente cual es la linea 342, yo lo haré con vi. Una vez encontremos la linea simplemente la comentamos poniendo "//" al principio de la linea, quedado así:



Bien, ahora ya podemos ejecutar make para compilar el programa.

A continuación instalamos el programa:


sudo make install


y listo, ya tenemos nemesis instalado en nuestro equipo. Si tenéis un equipo de 32 bits no debería de daros estos errores (quizá si que os de el error al instalar libnet pero los otros no debería), así que simplemente ejecutar todos los pasos de manera normal y os debería de instalar sin problemas.


Espero os sirva, cualquier duda dejarla en comentarios

Saludos =)


Instalar programas desde las fuentes

Hola, hoy os enseñaré algo bastante interesante, como instalar un programa desde las fuentes en linux.

NOTA: la mayoría de programas de linux están escritos en C, así que la gran mayoría de veces que tengamos que instalar un programa desde las fuentes es casi seguro que será un programa escrito en C, por eso solo mostrare ejemplos de programas en C.

Empezaremos por algo simple, si tuviésemos un programa muy simple en el cual todo su código esta en un solo fichero sería bastante fácil instalarlo, solo tendríamos que lanzar el compilador C y posteriormente moverlo a la carpeta que quisiésemos, podríamos moverlo a /usr/bin para tenerlo siempre a mano.

Por ejemplo, si tuviésemos el siguiente programa hello.c:


#include <stdio.h>

main()

{
printf("Hello world\n");
}



para instalarlo podríamos hacerlo asi:


gcc hello.c -o hello

mv hello /usr/bin


Este es un ejemplo muy simple, en el que solo compilaríamos el único archivo de código que tiene el programa y posteriormente lo moveríamos a /usr/bin para tener acceso al programa desde cualquier directorio.

Normalmente los programas se suelen dividir en varios archivos de código fuente, ademas de que también suelen usar varias librerías de código. Para poder realizar todas las operaciones de compilación se suele usar un archivo llamado Makefile, en el cual están todas las instrucciones que se le deben pasar al compilador para poder compilar el programa de una manera ordenada.

Cuando descargamos un programa para instalarlo desde las fuentes normalmente se suele bajar un archivo con extensión ".tar.gz" esto quiere decir que el programa esta archivado y comprimido con tar y gzip, dentro de este archivo estará todo el código fuente del programa.

Lo primero que tenemos que hacer es extraer los archivos que hay dentro del archivo ".tar.gz" para ello usaremos tar (desde el shell) de la siguiente manera:


tar xvf programa.tar.gz


donde "programa.tar.gz" es el nombre completo del archivo que tengamos que extraer.

Una vez tengamos extraídos todos los archivos en muchos casos podemos encontrarnos archivos de texto plano en los cuales tenemos una serie de instrucciones para instalar el programa, es recomendable pararse un momento a leer estas instrucciones (estos archivos suelen tener nombres como README, INSTALL...etc)

Vale, en este momento ya tenemos nuestro programa con todos los archivos extraídos, ahora lo que tendríamos que hacer es ejecutar un archivo llamado configure, este archivo es un script encargado de realizar una comprobación de nuestro sistema para asegurarse de que tenemos todas las librerías y programas necesarios para llevar a cabo la compilación e instalación del programa, ademas configure se encarga de crear el archivo Makefile que he mencionado anteriormente, pero solo lo creara cuando se asegure de que tenemos todo lo necesario para realizar la instalación del programa, podemos ejecutar el script configure desde el shell usando:


./configure


Una vez ejecutado veremos en pantalla una serie de comprobaciones, tenemos que asegurarnos de que el programa finaliza la ejecución sin dar ningún error, en caso de que se nos muestre algún error tendremos que solucionarlo, configure nos indicara a que se debe el error, por lo general suelen ser errores indicando la falta de alguna librería, en este caso tendríamos que instalar dicha librería para poder continuar la instalación, una vez hayamos solucionado el error tendremos que ejecutar de nuevo configure para que nos certifique que no hay mas errores y nos cree el Makefile.

Una vez ejecutado el script configure de manera satisfactoria es hora de compilar el programa usando el Makefile, para ello haremos lo siguiente (desde el shell):


make


el programa make se encarga de buscar el archivo Makefile en nuestro directorio actual y de realizar las operaciones indicadas en el archivo. No os preocupéis si veis que la compilación dura mucho tiempo, en algunos programas un poco grandes es normal.

Una vez compilado el programa tendríamos que instalarlo, para ello lo haríamos con el siguiente comando (por lo general casi siempre se necesitan permisos de root, por eso se añade el sudo al principio):


sudo make install


Este ultimo comando no es realmente necesario, ya que el programa ya lo tenemos compilado y listo para funcionar en la carpeta en la cual lo hemos compilado, lo único que hace el comando make con el argumento install, es mover algunos archivos (como el binario ejecutable o algunos archivos de configuración) a algunas carpetas de nuestro sistema para que podamos ejecutar el programa desde cualquier sitio y no tengamos que ir estrictamente a la carpeta en la que lo compilamos.

De hecho hay algunos programas que carecen de la opción install, en este caso por lo general tendremos que cojer nosotros el binario ejecutable y moverlo manualmente a alguna carpeta como /bin o /usr/bin, que nos permitan la ejecución desde cualquier directorio del sistema


Resumiendo, lo único que necesitamos para instalar un programa desde las fuentes es:

-Extraer los archivos:

tar xvf <nombre_archivo>

-Comprobar que tenemos todo lo necesario:

./configure

-Compilar

make

-Instalar

sudo make install

Espero que os haya gustado este mini-tutorial, si tenéis alguna pregunta no dudéis en dejármela en los comentarios.

Saludos :D

sábado, 27 de octubre de 2012

Wikeando

Hola a todos, hoy traigo buenas y malas noticias... empecemos por lo bueno.

Mis compañeros de clase y yo hemos decidido empezar un wiki para poder documentar todo lo que podamos relacionado con la informática, es un proyecto que realmente me entusiasma, os dejo la dirección del wiki: http://leliadouratic.sytes.net

Bien, ahora viene la parte mala, el wiki me esta comiendo mucho, mucho, muuuuuuuucho tiempo, llevo toda la semana a tope con el wiki, lo cual me ha impedido hacer muchas cosas, entre ellas publicar aquí en el blog... esta semana tenía pensado publicar un par de entradas en el blog durante la semana y quizá otro par de entradas durante el fin de semana, pero estamos a sabado y todavía no he publicado nada (esta entrada no cuenta...), así que ni siquiera sé si podré llegar a ese mínimo de dos entradas que me había propuesto.

Lo que mas me fastidia es que tengo muchas ideas para publicar entradas aquí en el blog, pero literalmente me quedo sin tiempo físico para poder hacerlo, de hecho he tenido que empezar a apuntar las entradas que quiero hacer en el blog, porque sino se me olvidan xD.

y por otra parte tampoco estoy muy satisfecho con el rendimiento que he llevado en el wiki, a pesar de que he estado toda la semana con el wiki, apenas he podido publicar unas 8 entradas, lo cual esta bastante por debajo de las expectativas que tenía en un principio, creo que podría haber publicado casi el doble de contenido pero bueno...

El tema es que no quiero dejar de lado ninguno de los dos proyectos, ni el blog ni el wiki, así que no se como lo haré, pero tendré que optimizar mas mi tiempo para poder llevarlo todo de manera mas regular.

y hasta aquí todo por ahora, espero poder publicar algo por aquí esta tarde =)

Saludos.

domingo, 21 de octubre de 2012

[Script] Buscador de texto en archivos

Buenas, hoy os traigo algo que tenía ganas de hacer hace mucho tiempo, se trata de un programa (bueno, en este caso es un script) cuya función es buscar cadenas de caracteres (ya sean letras o palabras) dentro de varios archivos de texto plano.

Resumiendo, tu le das dos argumentos al script, la carpeta en la que quieres buscar y la cadena de caracteres que quieres buscar, y el programa se encarga de buscar dicha cadena de caracteres dentro de todos los archivos que hay en la carpeta que le has indicado.

Esta idea me surgió hace muchísimo tiempo, cuando me pasaba en varias ocasiones que tenía una serie de archivos (por lo general eran archivos de código fuente) y no recordaba en que archivo en concreto estaba la información que buscaba, lo cual me obligaba a abrir todos los archivos y realizar una búsqueda individual en cada uno de ellos.

En realidad la idea original la tenia pensado realizar en C, pero por unas cosas y otras, nunca llegué a realizarla. Este script hace uso de 4 programas: cat, wc, grep y test. Los 4 vienen por defecto en todos los linux, así que no tendréis que instalar nada adicional.

Bueno, hablemos de problemas. El script tiene un par de problemas, el primero es el tiempo de ejecución, si en la carpeta que indicáis solo hay archivos de texto plano pues no hay mucho problema, el script debería de ejecutarse en un par de segundos, pero si la carpeta contiene otros archivos de gran tamaño ademas de los de texto plano pues la ejecución puede ser bastante larga, lo he probado con una carpeta que contenía algunos archivos de varios GiB y ha tardado varios minutos en ejecutarse, pero bueno, en condiciones normales con archivos no muy pesados no debería de presentar problemas. El segundo problema es que el programa no es recursivo, esto quiere decir que si dentro de la carpeta que indicáis para la búsqueda existe otra carpeta pues el script no entrara en esta nueva carpeta, solo examinara la carpeta que le habéis indicado.

Si algún día llego a realizar la versión en C del programa, probablemente pueda solucionar estos problemas.

A continuación os dejo el código del script:


#!/bin/bash

if test -z $2
then

        echo
        echo "ERROR !!! Faltan argumentos."
        echo
        echo "Modo de uso: $0 <Directorio> <Cadena de caracteres a buscar>"
        echo


else

max=`ls $1 | wc -l`

for ((i=1; i<=$max; i++))
do

cat "$1/`ls $1 | head -n $i | tail -n 1`" 2> /dev/null\
        | grep -n -i $2 > /dev/null

if test $? -eq 0

then

        echo

        echo ----------------

        echo

        ls $1 | head -n $i | tail -n 1

        echo

        cat "$1/`ls $1 | head -n $i | tail -n 1`" 2> /dev/null\
                | grep -n -i $2

fi

done

fi

echo
echo ----------------
echo




Para guardar el script lo guardáis como un archivo de texto plano y le dais permisos de ejecución, después si queréis, podéis ponerlo en la carpeta /usr/bin/ para poder ejecutarlo desde cualquiera carpeta aunque el script no esté en ella.

Bien, el script toma dos parámetros que son de uso obligado, el primer parámetro es la carpeta donde queréis realizar la búsqueda, y el segundo parámetro es la cadena de caracteres a buscar. De manera que un ejemplo podria ser el siguiente (yo le he llamado bsc al script, pero podéis llamarle como queráis):

./bsc Documentos/ valencia

con este comando el script buscaria en la carpeta "Documentos" todos los archivos que contengan la palabra "valencia"

ACLARACIÓN: si tenéis el script en /usr/bin/ no hace falta poner el "./" inicial para ejecutar el script, ademas el script acepta rutas relativas a vuestra posición actual en el shell, osea que en el caso anterior puedo poner simplemente como carpeta "Documentos" en vez de /home/usuario/Documentos/ ya que en ese momento me encuentro en la carpeta usuario.

La salida que produce el script tiene el siguiente formato: cada archivo en el que encuentra una coincidencia lo muestra entre una serie de lineas salteadas como esta "----------------", después la primera linea que muestra es el nombre del archivo, y las lineas siguientes son las lineas del archivo en las que hay coincidencia, mostrando al comienzo de la linea el numero de linea en la que se encuentra.

Ejemplo:



Como podemos ver en este ejemplo, le hemos dicho al programa que busque en los archivos de la carpeta "test" la cadena "prueba" y en este caso se nos muestra un único resultado, el cual ha sido encontrado en el archivo "texto1.txt" y podemos ver que la linea en la que se ha encontrado la cadena es la linea numero 3 y a continuación se nos muestra la linea en cuestión.


ALGUNOS EJEMPLOS INTERESANTES

Cuando terminé el script no tenia necesidad de buscar nada en concreto, pero como tenía que probarlo pues decidí hacer algunas búsquedas en los archivos de configuración del sistema y me salieron algunos resultados interesantes, como por ejemplo los siguientes:

bsc /etc/ runlevel

Al buscar "runlevel" en los archivos de la carpeta "/etc/" se muestra en una de las coincidencias que funcionalidades están activas en cada uno de los niveles de ejecución, por ejemplo se nos indica que en el nivel 5 esta activada la red y la interfaz gráfica, y en el nivel 3 por ejemplo no esta la interfaz gráfica pero si la red.



otro ejemplo:

bsc /etc/sysconfig/ autologin



En este caso se nos indica una de las opciones del archivo "displaymanager" que indica si el sistema esta configurado para iniciar el sistema de manera automática con un usuario concreto, en mi caso esta opción la tengo vacía, así que no se hace ningún autologin.

Bueno y creo que eso es todo, si tenéis alguna duda o pregunta no dudéis en dejármela en los comentarios.

Saludos =)

sábado, 20 de octubre de 2012

Saber que servicios se están ejecutando en linux

Hola, hoy os enseñaré como comprobar que servicios tenéis en ejecución en vuestro linux.

NOTA: lo que voy a exponer a continuación no funciona en ubuntu ni debian, ya que no permiten mirar el estado de los servicios. Lo he probado personalmente en openSuSE y funciona, y también debería de funcionar en otras distros como Fedora o Mandriva

Primero, si queréis ver una lista de los servicios que hay en vuestro sistema podéis verla con el siguiente comando (debemos ejecutarlo como root):


chkconfig -l


Usando este comando obtendremos un resultado como el siguiente:




bien, aquí podemos ver a la izquierda el nombre del servicio y a la derecha podemos ver una serie de datos que indican un numero y a su derecha "on" o "off", NO OS DEJÉIS ENGAÑAR, esto no es el estado actual del servicio, lo que nos indica es el estado que tendrá el servicio al iniciar un determinado nivel de ejecución del sistema, por ejemplo "SuSEfirewall2_init" estará activo cuando se inicie el nivel de ejecución 3 o 5, pero si yo mas tarde decido desactivar el servicio manualmente (aun estando en nivel de ejecución 3 o 5) y ejecuto el chkconfig -l , me seguirá apareciendo como "on" a pesar de que realmente el servicio esta desactivado. Hay que tener cuidado con esto ya que puede inducir a error y pensar que tenemos un servicio activado o desactivado cuando realmente no es así.

Para mirar el estado real de un servicio lo que tenemos que hacer es irnos a la carpeta /etc/init.d/ dentro de esta carpeta nos aparecerán distintos archivos, los cuales muchos de ellos hacen referencia a servicios, si queremos por ejemplo ver el estado del servicio "SuSEfirewall2_init" tendríamos que ejecutar dicho archivo con el argumento "status" tal que así (una vez mas tenemos que hacerlo como root):

./SuSEfirewall2_init status





como podemos ver en la imagen en mi caso se muestra que el servicio esta ejecutándose.

Vale, ahora ya sabemos como poder ver en que estado están los servicios, pero el problema viene cuando queremos echar un vistazo a todos los servicios, en tal caso tendríamos que ir ejecutando uno por uno todos los archivos con el argumento "status" para poder ver el estado, lo cual es algo engorroso... Así que he creado un script que automatizara esta tarea y nos mostrara el estado de todos los servicios.

A continuación os dejo el código del script:



#!/bin/bash

DIR=/etc/init.d/
max=`ls $DIR | wc -l`

for (( i=1; $max >= i; i++))
do

if test $i -eq `ls $DIR | grep -n halt | cut -f 1 -d ":" | head -n 1`\
 -o $i -eq `ls $DIR | grep -n reboot | cut -f 1 -d ":" | head -n 1`
then
:
else

 echo "------------------------------"
 echo
 echo "`ls $DIR  | head -n $i | tail -n 1`"
 echo
 cd $DIR
 ./`ls $DIR | head -n $i | tail -n 1` status
 echo
fi

done



Para ejecutarlo simplemente coger el código, lo guardáis en un archivo de texto plano y le dais permisos de ejecución (yo le he llamado services al archivo, pero podeis llamarle como querais):



después para ejecutarlo tenéis que hacerlo de nuevo como root, y se os mostraran todos los servicios con su respectivo estado:




En mi caso por ejemplo podemos ver como tengo el firewall activo (servicios "SuSEfirewall2_init" y "SuSEfirewall2_setup") y también por ejemplo tengo el ssh (servicio sshd) desactivado.

En caso de que queráis activar o desactivar los servicios lo único que tenéis que hacer es ir de nuevo a la carpeta /etc/init.d/ y en vez de usar el argumento "status" al ejecutar los archivos, tenéis que usar "start" para activarlo o "stop" para desactivarlo.

Saludos :)

viernes, 19 de octubre de 2012

Una semana bien aprovechada

wenasssss !!!! ya estamos a viernes, otra semana que vuela, pero esta semana no ha sido una semana normal debido a los 3 días que hubo de huelga, a la cual no fui (ya que me parecía muy  heavy perder unas 20 horas de clase).

En principio sabia que la mayoría de gente no iba a ir a clase, pero no pensé que al final iría yo solo xD, la verdad es que me quede bastante sorprendido. Bueno, obviamente los profesores no me iban a dar clase a mi solo, cosa que ya había previsto, así que llevaba en mi mente algunas cosas preparadas para hacer durante las clases y así poder aprovechar el tiempo al máximo.

Al final la verdad es que las cosas salieron muchísimo mejor de lo que esperaba, ya que solo tenia pensado probar un par de cosas durante los 3 días de huelga, y después me dedicaría a repasar todo lo que habíamos dado de materia en todas las asignaturas, pero por un lado y por otro se me fueron ocurriendo un montón de cosas que hacer sobre un montón de temas como: pruebas de seguridad, administración y configuración de linux, resolución de problemas, experimentos de redes.... y quizá lo mas sorprendente es que dado un momento incluso me puse a programar (hacia un montón que no programaba), hice un par de experimentos en C (mas que nada para repasar algunas cosas y probar otras) y otro par en shell script.

En definitiva me fastidio bastante perder las 20 horas de clase (en las cuales habríamos dado bastante materia probablemente), pero por otro lado  creo que me ha beneficiado bastante, ya que con todo lo que he podido probar durante los 3 días he sacado un montonazo de conclusiones sobre cosas que no sabia y que gracias a algunos experimentos que hice ahora las entiendo muchísimo mejor =D, en definitiva ha sido una semana muy bien aprovechada.

Ademas por otra parte todas las pruebas que hice y los datos que saqué de ellas me servirán para hacer varias entradas en el blog, las iré poniendo según las vaya redactando.

Bueno y hablando del blog... me he propuesto poner como mínimo dos entradas por semana, la verdad es que quiero mantener el blog activo, pero me cuesta bastante encontrar tiempo para redactar las entradas y ademas durante la semana apenas tengo tiempo, así que casi siempre escribo durante el fin de semana, lo cual no me gusta mucho porque me gustaría publicar las entradas mas periódicamente (cada 2 o 3 días por ejemplo estaría bien), pero bueno, intentare hacer todo lo posible para mantener el ritmo.

Saludos :D


sábado, 13 de octubre de 2012

¿Cómo saber quien esta en mi red?

Buenas otra vez, en esta nueva entrada os traigo un mini-tutorial que creo que le puede resultar muuuyy interesante a bastantes personas, os enseñare como saber quien esta conectado en vuestra red. Sobre todo es interesante para las personas que tienen wi-fi (la mayoria vamos) y que quiere comprobar si hay alguien no autorizado que esta utilizando su red.

Bien, empezamos, para saber que ordenadores estan conectados a tu red usaremos el protocolo ICMP, quizá no os resulte familiar, pero si hablo del programa ping seguro que a mas de uno le suena. Resumiendo... lo que hace el ping es enviar una solicitud a una dirección IP en concreto, si hay un pc en esa dirección este respondera a la solicitud y obtendremos una respuesta, en caso de que no haya ningun pc simplemente no obtendremos respuesta.

Vale, ahora queremos poner esto en práctica, si quisiésemos comprobar que dispositivos hay conectados a nuestra red, tendríamos que hacer ping a todas y cada una de las direcciones de nuestra red de la siguiente manera:

- Abrimos una shell y escribimos :

ping 192.168.120.1

ping 192.168.120.2

ping 192.168.120.3

...etc, etc, etc

 NOTA: en el ejemplo puse la red 192.168.120.0 que es la que uso yo personalmente, normalmente por defecto los routers usan la red 192.168.0.1 o 192.168.1.1, si tienes el router configurado por defecto probablemente tengas una de esas dos redes.

Esto es demasiado engorroso, ademas de que nos llevaría mucho tiempo, ya que la máscara de subred que se suele usar es la 255.255.255.0 lo que indica que hay 254 direcciones útiles en la red, osea que tendríamos que usar el comando ping 254 veces para comprobar cuantos dispositivos hay conectados a nuestra red. Una solución posible seria escribir un script que ejecutase el comando ping con todas las diversas direcciones ip, (aunque la salida de datos que nos daría sería demasiado larga y el script tambien tardaría bastante en ejecutarse).

Otra solución posible sería la de hacer un ping a la dirección broadcast para que la solicitud ICMP se envíe a todos los ordenadores de la red, se haría de la siguiente manera:

ping -b 192.168.120.255

la dirección broadcast siempre es la ultima de la red, en este caso 192.168.120.255. El flag -b nos indica que la solicitud se debe de enviar como broadcast. Pero con este metodo a pesar de que parece bastante bueno tenemos otro problema y es que algunos dispositivos tienen desactivado por defecto la posibilidad de responder a una solicitud broadcast, de manera que en algunos casos puede ser que haya diversos dispositivos conectados a nuestra red y no responda a nuestra solicitud ICMP.


NMAP LA SOLUCIÓN DEFINITIVA

Bien, hasta ahora teníamos dos problemas, el primero es que si queríamos enviar solicitudes ping individualmente sería demasiado tedioso y nos llevaría mucho tiempo, y el segundo es que con la solicitud ICMP broadcast algunos dispositivos no nos responderían a pesar de estar en la red. Para poner solucion a estos problemas usaremos NMAP.

NMAP es un escaner de red, que nos permite emplear diferentes tipos de protocolos para realizar diversos tipos de escaneado en una red (es una herramienta realmente útil).

Podeis conseguir NMAP en su web oficial: http://nmap.org

Bien, una vez tengamos NMAP en nuestro pc abrimos una shell y ponemos lo siguiente (NMAP se puede usar con interfaz grafica, pero prefiero usarlo desde una shell):

nmap -sP 192.168.120.0-255

repasemos los flags:

-sP sirve para enviar solicitudes ICMP

192.168.120.0-255 es la direccion IP a la que queremos hacer ping, pero fijaros que en este caso he puesto el rango completo al que quiero hacer ping en el último byte de la direccion, de manera que asi se hará ping a todas las direcciones de mi red desde la 192.168.120.0 hasta la 192.168.120.255

veamos el resultado que da en mi caso:



Como se puede ver en mi caso salen 3 IPs, una es la del ordenador que estoy usando ahora mismo, otra es de mi router y otra es de mi smartphone, de esta manera sé que hay tres dispositivos conectados a mi red y que son tres dispositivos que me pertenecen a mi, ya que yo les he asignado esas IPs, si en este caso me apareciese una nueva IP que yo nunca he asignado querría decir que hay alguien ajeno conectado a mi red.

Esta técnica debería de funcionar en la mayoría de los casos, pero a veces puede ser que no funcione debido a que hay un bloqueo de los paquetes ICMP, en este caso habria que usar otro tipo de técnicas...

CLICK AQUÍ PARA IR A LA 2ª PARTE

Espero os haya gustado este mini-tutorial.

Saludos =D

[Manual] Como conseguir contraseñas Wi-Fi

Wolap !!!, hoy os traigo un nuevo manual de mi cosecha, en principio no tenía ninguna intención de subir este manual, pero ya que el tema salio en clase pues he decidido subirlo por si a alguien le interesa.

El manual trata sobre descifrar claves WEP, WPA/WPA2, para poder obtener acceso a puntos de acceso wi-fi de los cuales no tenemos la contraseña.

El manual (al igual que el de ARP Spoofing) lo escribí hace unos 5 años (este manual en concreto es un poco mas antiguo que el del ARP Spoofing), pero las técnicas que explico en el manual siguen funcionando igual de bien.

A continuación os dejo el manual: WEP,WPA-WPA2 Cracking

[ACTIVIDAD] Historia de los Hackers

Buenas, hoy os traigo un documental sobre la historia de los hackers que personalmente me parece muy interesante, el documental cuenta un poco el principio de todo y como con la aparición de las primeras lineas telefónicas ya había personas con la curiosidad suficiente y los conocimientos necesarios como para poder vulnerar el sistema y poder conseguir por ejemplo llamadas gratis.

Personalmente la primera parte del documental, en donde se habla de la vulneración de las líneas telefónicas me parece de lo mas increíble.

Bueno y sin más os dejo el documental:


jueves, 4 de octubre de 2012

[Manual] ARP Spoofing

Buenas, enlazando un poco con la actividad anterior de direcciones IP y MAC, he decidido subir un manual que escribí hace unos 5 años, en el cual explico como hacer un ARP Spoofing (algo que digamos esta bastante relacionado con direcciones IP y MAC), técnica que nos permite visualizar todo el trafico de un ordenador ajeno al nuestro que estea en nuestra misma red sin que este se entere...

El manual tiene muuuuuuuchísimas faltas de ortografía (lo siento, antes no tenía la manía de escribir bien xD), pero bueno, no os centreis en eso y centraros en el contenido en si, que es realmente interesante.

Por cierto, para entender el manual se deberían de tener ciertos conocimientos previos sobre redes, de todas maneras os recomiendo leer el manual para haceros una idea de como y con que facilidad alguien puede violar vuestra privacidad dentro de una red local.

A continuación os dejo el enlace al manual: ARP Spoofing

[ACTIVIDAD] Conversión de direcciones IP y MAC a binario

En esta entrada convertiremos una dirección IP y MAC a sus correspondientes en binario, primero para saber la dirección IP y MAC del equipo haremos lo siguiente:

Linux: accedemos a una shell de sistema, ya sea un terminal emulado como xterm o un terminal físico pulsado las teclas crtl+alt+F? siendo ? un numero entre 2 y 6, cuando esteamos en la shell tecleamos el siguiente comando:

ifconfig 

y nos aparecerán todos los datos de todas las interfaces, si queremos especificar una interfaz en concreto solo tenemos que indicarla como atributo, ifconfig [interfaz]. EJ: ifconfig eth0.

En linux tambien podriamos consultar la información desde la interfaz grafica, pero la manera de hacerlo varia dentro de cada distribución.

Windows: accedemos a una shell de sistema, para ello desde el menu de ejecucion tecleamos cmd, despues dentro del shell tecleamos el siguiente comando:

ipconfig /all

y nos aparecerán todos los datos relativos a las interfaces de redes. Si queremos hacerlo desde la interfaz gráfica desde el menu de ejecucion tecleamos ncpa.cpl para acceder al panel de configuracion de interfaces, despues solo tenemos que hacer click derecho encima de la interfaz de la cual queremo saber los datos y clicar en propiedades.

A continuación traduciremos una direccion IP y una MAC a binario, extraida de un equipo ubuntu:



Dirección MAC: 00:24:1D:9E:D7:34

Binario:00000000:00100100:00011101:10011110:11010111:00110100


Dirección IP: 69.51.65.19

Binario: 01000101.00110011.01000001.00010011

viernes, 28 de septiembre de 2012

[ACTIVIDAD] Sistemas de Codificación.

Para transmitir la información a través de un medio (cables, aire..etc) necesitamos codificarla, entre los diversos sistemas de codificación podemos encontrar: ASCII, Morse, Baudot.

Código ASCII: es un sistema de codificación por el cual se le asigna un valor decimal (representado en binario) a cada uno de los caracteres que queremos representar, se usa un conjunto de 8 bits para representar los caracteres.

Código Morse: este sistema de codificación representa las letras y los números usando una combinación de puntos y rayas. No tiene una longitud definida, los caracteres mas usados se representan con una longitud menor de caracteres.

Código Baudot: este sistema de codificación es el predecesor del ASCII, usa un conjunto de 5 bits para representar todas las letras y números.

Ejemplos (Representación de la palabra "BLOG":

Morse: _··· ·_·· _ _ _  _ _·

ASCII: 01000010 01001100 01001111 01000111

Baudot: .o..o oooo. ..ooo .o.o.

[ACTIVIDAD] Apple maps, ¿Ha cometido Apple un error dejando Google Maps?

 Google Maps a la izquierda, Apple Maps a la derecha

Con la reciente salida al mercado del nuevo iphone 5 y su sistema IOS6, los usuarios han empezado a enviar numerosas críticas sobre una nueva aplicación incluida en el nuevo sistema, Apple Maps.

Los usuarios se quejan de que los mapas estan llenos de errores y muy incompletos, sobre todo si los comparamos con los de Google Maps. Apple ha pedido calma a los usuarios y pide paciencia para que puedan ir mejorando los mapas poco a poco.

Los indicios apuntan a que Apple no estaba de acuerdo con algunas decisiones que Google habia tomado sobre la aplicacion de Google maps así que Apple decidió romper el acuerdo con Google y crear su propio sistema de mapas.

Personalmente creo que Apple ha cometido un gran error dejando de lado a Google Maps, ya que realizar un sistema de mapas completo no se hace de la noche a la mañana y lleva mucho tiempo. Google lleva años mejorando sus mapas y Apple tardará un tiempo similar en llegar al nivel al que estan los mapas de Google.

Tu Experto | La Vanguardia | RTVE

lunes, 24 de septiembre de 2012

Creación de contraseñas robustas

Hola, siguiendo el tema de la anterior entrada me gustaría explicaros a continuación algunos consejos que debéis de seguir a la hora de elegir una contraseña cuando os vayáis a crear una cuenta en cualquier sitio, de manera que nadie pueda deducir esa contraseña y nadie pueda crackearla.

Bien, las características base que debería de tener una contraseña robusta son las siguientes:

- Al menos 8 caracteres (a partir de 8 caracteres las contraseñas son muy difíciles de crackear).

- La contraseña no puede ser una palabra común o que pertenezca a un diccionario, como pueden ser palabras como: armario, coche, puerta, peluche, electricidad...etc (ya que estas palabras suelen estar incluidas en diccionarios destinados a crackear contraseñas).

- La contraseña debe de ser Alfanumérica, debe contener letras y números (o incluso símbolos) a poder ser entremezclados, y nunca se debería de poner una contraseña que solo sean números ya que son MUY inseguras (se pueden crackear en cuestión de segundos).

Desde mi punto de vista creo que estos 3 puntos son los mas importantes a la hora de elegir una contraseña.

Pero ademas de estos 3 puntos iniciales se pueden seguir algunos consejos adicionales que pueden ayudar a crear contraseñas todavía mas robustas, entre estos consejos podríamos citar la creación de contraseñas a partir de las iniciales de las palabras que componen una frase, por ejemplo:

"Mi Espia Favorito Es El Agente Secreto James Bond"

de manera que si cogemos las iniciales de las palabras nos quedaría la siguiente contraseña: "MEFEEASJB"

Incluso podríamos mejorar la contraseña poniendo por ejemplo "MEFEEASJB007" (todos sabemos que james bond es el agente 007)

De esta manera tenemos una contraseña muy muy robusta y que podemos recordar fácilmente, ya que aunque la contraseña en si no es fácil de recordar si lo es la frase que elegimos al principio, de manera que solo tenemos que escribir la inicial de cada palabra de la frase.

Otro buen consejo para crear una buena contraseña es el de poner directamente toda una frase como contraseña en vez de una sola palabra, este método es quizá un poco tedioso, pero definitivamente es el método mas robusto, ya que nos quedamos con una contraseña que podría tener mas de 20 caracteres de longitud, pero personalmente recomiendo este método solo a gente que sepa escribir de manera rápida con el teclado, ya que si tienes que poner una frase entera cada vez que tienes que introducir tu contraseña te llevara demasiado tiempo. Ademas incluso podríamos sustituir algunas letras por números para hacer la contraseña todavía mas robusta, por ejemplo:

"Mi coch3 es mas an7iguo que matusal3n"

Esta ultima contraseña seria muuuuuuuuuyyyy robusta, ya que tenemos una contraseña de 37 caracteres alfanumérica y con números intercalados y ademas este tipo de frases suelen ser mas fáciles de recordar que una contraseña con caracteres aleatorios.

Y para finalizar comentar que las contraseñas se deberían de cambiar periódicamente ya que en caso de que alguien quiera descubrir nuestra contraseña de esta manera se lo pondremos mucho mas difícil.

bueno, y eso es todo, si tenéis alguna duda dejármela en los comentarios.

Saludos ! =D


Como conseguir acceso a cuentas ajenas mal protegidas

Buenas !!! hoy os enseñaré una técnica super sencilla que os permitirá tener acceso a ciertas cuentas de usuarios ajenos a vosotros, ya sean cuentas de foros, de videojuegos (estilo lineage, WoW, guildwars...etc), cuentas de correo, cuentas de un sistema operativo... etc.

Lo único que necesitamos es lo siguiente:

1- Tiempo y paciencia (quizá lo mas importante).

2- Una lista de contraseñas de uso habitual (ver mas adelante).

3- Una lista de nombres de usuario (login) en los cuales probaremos las contraseñas.

Bien, esta técnica se basa en el descuido de ciertos usuarios al poner sus contraseñas, ya sea al crearse una cuenta de correo, una cuenta en un foro...etc. de manera que existen ciertas contraseñas que suelen ser de uso mas habitual por parte de ciertos usuarios, a continuación os dejo una lista:

- 1234
- 123456
- qweasd
- qwerty
- 123qweasd
- password
- 7777
- (nombre de usuario)
- (nombre de usuario seguido de un numero)
- abcd


 esta lista la he creado yo basándome en mi experiencia personal, pero googleando un poco podréis encontrar otras listas parecidas que incluyen otras contraseñas que también suelen usarse habitualmente.

vale, ahora lo que necesitamos es paciencia y un poco de suerte, lo que tenemos que hacer es, por ejemplo, meternos en un foro y acceder a la lista de usuarios, y empezar a probar las contraseñas de la lista con los diversos usuarios, o también podéis coger una lista de e-mails y empezar a probar con las contraseñas. Tarde o temprano llegareis a alguna cuenta en la que el usuario usó una de esas contraseñas habituales y por lo tanto tendréis acceso a esa cuenta, ya sea cuenta de un foro, de e-mail o lo que sea.

Apunte: quizá llegados a este punto has pensado... esta técnica es demasiado simple, y es cierto, pero el tema es que la técnica realmente funciona !!! personalmente la he usado varias veces con un resultado bastante satisfactorio.

Esta entrada la he puesto mas que nada como una curiosidad, para que veáis que incluso una técnica muy simple puede dar buenos resultados, pero por favor, cuando consigáis acceder a una cuenta (sea de donde sea) procurar avisar al propietario de que su cuenta no tiene una contraseña segura y que debería de cambiarla

Espero que os haya gustado este mini-manual, cualquier duda que tengáis dejármela en los comentarios.

Saludos !!

jueves, 20 de septiembre de 2012

¿El principio?

Buenas !!! en principio este blog solo es una actividad que me mandaron hacer en el ciclo, pero no descarto ponerme en serio con el blog... es algo que me planteé hace algun tiempo pero nunca me decidí a dar el paso, asi que quizas este sea el principio.

Aunque no tengo muy claro de que tratará el blog, supongo que será muy general y no me centraré en nada en específico, quiza los temas podrian ser: manuales practicos sobre informatica, videojuegos, curiosidades en general, o simplemente hablar de como veo el curso y como lo llevo, de todas maneras ya veré si realmente me pongo en serio con el blog o no.

Saludos !!! =)