domingo, 31 de mayo de 2015

Ping Scanning con Nmap (Descubrir equipos)

En anteriores post vimos como instalar Nmap con soporte SSL, ahora vamos a ver que es y como llevar a cabo acciones de Ping Scanning con Nmap. El fin del ping scanning es examinar uno o varios equipos de una red para ver cuales están activos y por lo tanto pueden ser analizados. Expongo las técnicas más comunes que se realizan con Nmap:

1. No Ping (-Pn)

Es una técnica que se utiliza en redes que tienen el trafico ICMP bloqueado o para máquinas que tienen capada la respuesta al ping. Cabe decir que es un mecanismo lento porque lanzará el escaneo de puertos a todos los objetivos que le hayamos definido y si la máquina que está analizando es inalcanzable no finalizará hasta que salten los timers de las respuestas esperadas. Además de lo anterior decir que es una técnica altamente intrusiva.
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -Pn -v www.agapornizate.es


2. List Scan (-sL)

Esta técnica solo realiza una resolución DNS inversa (PTR) de los equipos a analizar, por lo que estamos ante una estrategia sigilosa y que nos permite centrar los objetivos antes de analizarlos descartando aquellos que sean inalcanzables, lo que nos permitirá ganar tiempo y eficacia. El resultado es una lista de los objetivos alcanzables. Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sL www.agapornizate.es





3. No port scan (-sn)

Esta técnica realiza una comprobación estándar de los equipos a analizar sin realizar un escaneo de puertos, además puede completar su comportamiento con --traceroute o --script. Se utiliza con el mismo fin que List Scan (-sL) aunque es algo más intrusiva permitiendo un reconocimiento ligero de la red.
Si ejecutamos Nmap sin permisos de administración, este utiliza llamadas al sistema connect a los puertos 80 y 443. Si se lanza con permisos de administración, por defecto se manda un paquete TCP ACK al puerto 80 (-PA80), un TCP SYN al puerto 443 (-PS443) además de un paquete ICMP Echo Request y un ICMP Timestamp Request. Si está en la misma red se lanzarán únicamente paquetes ARP (-PR80,443).
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn www.agapornizate.es

Sin privilegios:




Con privilegios:



4. Ping ARP (-PR)

En redes locales Ethernet solemos encontrarnos muchos host inactivos por lo que los escaneos basados en paquetes IP (ICMP Echo Request), que implica una resolución ARP anterior, están muy desaconsejados por su lentitud y la limitada caché ARP. Para solucionar esto tenemos esta técnica que optimiza las peticiones ARP masivas (así no es necesario hacer pings IP si tenemos respuesta ARP para saber si un equipo es alcanzable).
Nmap realiza esta opción por defecto para un análisis de la misma red local. Si queremos evitar que tome el control sobre el análisis ARP y únicamente mande paquetes IP tendremos que especificárselo con la opción --send-ip.
Con esta opción Nmap lanza un broadcast ARP Request y el objetivo se descubre al enviar un ARP Response. Después lanza un a consulta DNS inverso para obtener información adicional.
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PR www.agapornizate.es


5. PING TCP SYN (-PS <ports>)

Esta técnica manda paquetes TCP vacíos con el flag SYN activado (para indicarle al destino la intención de establecer una conexión) a los puertos que le definamos (p.j -PS22-25,80,443). Muchos firewalls cortan los paquetes SYN como medida preventiva al establecimiento de conexiones, por esto podemos aumentar la efectividad si lo combinamos con la técnica de Ping TCP ACK (-sn).
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PS www.agapornizate.es

Sin definir puertos:



Definiendo los puertos 21,80 y 443:


6. PING TCP ACK (-PA<puertos>)

Igual que la técnica Ping TCP SYN pero mandando un paquete TCP al puerto 80 con el flag ACK activado. Cuando un equipo recibe este tipo de paquetes sin existir una conexión establecida responderá con un paquete RST descubriéndose. Esta técnica complementa a la anterior ya que hay firewalls que pueden no estar configurados para interceptar paquetes ACK y si SYN.

Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PA www.agapornizate.es


7. PING UDP (-PU<puertos>)

El objetivo de esta técnica es mandar paquetes UDP a puertos que se consideran cerrados, esperando que el destino devuelva un paquete ICMP del tipo Puerto inalcanzable. Si no recibimos respuesta o recibimos cualquier otro paquete ICMP se considerará el puerto como inalcanzable. Con esta técnica es fácil burlar firewalls.
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PU www.agapornizate.es


8. PING ICMP (-PE,-PP,-PM)

Esta técnica permite descubrir equipos mandando paquetes ICMP Echo Request (-PE), ICMP Timestamp (-PP) y ICMP Addressmask -(PM). Al realizar un ping "normal" a un equipo, este esperaría una respuesta ICMP Echo Reply pero al ser normal que se bloqueen este tipo de paquetes lo completamos con los otros 2 tipos. Tanto ICMP Timestamp como ICMP Addressmask vienen recogidos en el estándar RFC792 que es implementado en todos los equipos actuales.
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PE -PP -PM www.agapornizate.es



9. PING SCTP (-PY<puertos>)

El protocolo SCTP pertenece a la capa de transporte, definido por el grupo SIGTRAN de IETF para transportar la señalización telefónica SS7 sobre IP. Por las características de este protocolo podemos enviar sondas SCTP INIT (por defecto al puerto 80) con el fin de intentar iniciar una conexión. Si el quipo está levantado nos responderá con un INIT-ACK (puerto abierto) o bien con un ABORT (puerto cerrado). Si no devuelve nada se considerará que el equipo está inactivo.
Un ejemplo de uso sería:
rencinar@metempsicosis:~$ nmap -sn -PY www.agapornizate.es

10. IP PROTOCOL PING (-PO<PUERTO>) 

Envía paquetes ICMP, IGMP, TCP y UDP con las cabeceras propias del protocolo y para el resto se manda un paquete IP sin contenido tras la cabecera. El objetivo de esto es obtener una respuesta ICMP Protocolo Inalcanzable que indique que el objetivo está vivo.











Wireshark no tiene interfaces en linux: Couldn`t run /usr/bin/dumpcap

Si hemos instalado Wireshark desde los repositorios (por ejemplo apt-get install wireshark) y nos indica que no tiene interfaces disponibles para capturar tráfico y además nos indica que no tiene permisos para ejecutar  /usr/bin/dumpcap lo único que tenemos que hacer para tenerlo 100% funcionando es realizar lo siguiente:

1-Accedemos como root:
rencinar@metempsicosis:~$ su -

2-Añadimos el grupo de sistema "wireshark" (puede ser que ya esté  dado de alta en nuestro sistema)
root@metempsicosis:~# addgroup -system wireshark

3-Asignamos el usuario root y el grupo wireshark  para que tengan permisos sobre dumpcap
root@metempsicosis:~# chown root:wireshark /usr/bin/dumpcap

4-Asignamos la captura de paquetes y el modo promiscuo mediante la utilidad setca
root@metempsicosis:~# setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpca

5-Incluimos nuestro usuario al grupo wireshark (en mi caso rencinar)
root@metempsicosis:~#  usermod -a -G wireshark rencinar

Tras reiniciar linux lo tendremos 100% operativo.

martes, 26 de mayo de 2015

Instalar Nmap con OpenSSL en Linux

Introducción

Nmap es una utility para la exploración y auditoría de seguridad de redes TCP/IP con el que podemos escanear de manera sigilosa, eficaz y rápida tanto equipos individuales como grandes redes. De esta manera podemos detectar entre otros, el estado de puertos, servicios y sistema operativo de una máquina o máquinas, la presencia de firewalls, routers y otros elementos de red. En general con la información brindada por Nmap podremos hacer lo siguiente:
  • Descubrir subredes.
  • Realizar un Pen test de redes y equipos.
  • Evaluar la implantación de firewalls así como la eficacia de las herramientas de detección y prevención de intrusiones.
  • Descubrir el estado de los puertos de comunicaciones.
  • Descubrir los servicios disponibles en un servidor así como sus versiones, sistema operativo,….etc.
Además de lo anterior decir que Nmap incluye otras herramientas como Nping, Ncat y Ndiff que veremos más adelante.
 

Nmap nos informa de diferentes estados para los puertos de una máquina, con el fin de tener una visión completa de la situación de los objetivos y poder analizar la seguridad de los mismos. Estos estados son: 
  • Abierto: Hay una aplicación aceptando conexiones TCP o paquetes UDP en ese puerto.
  • Cerrado: Es alcanzable pero no hay una aplicación escuchando en él.
  • Filtrado: Indica que no hemos recibido respuestas de las sondas enviadas a un puerto. Con normalidad esto es debido a que un elemento intermedio (IDS/IPS, firewall,…etc) está bloqueando dicho puerto. Cuando nos de esto deberemos posteriormente realizar un análisis para descartar que se deba a una situación de congestión en la red.
  • No filtrado: Este estado indica que el puerto es accesible, pero que Nmap no puede determinar si se encuentra abierto o cerrado. Solamente el sondeo ACK, utilizado para determinar las reglas de un firewall, clasifica a los puertos según este estado. El analizar puertos no filtrados con otros tipos de análisis, como el sondeo Window, SYN o FIN, pueden ayudar a determinar si el puerto se encuentra abierto.
  • Abierto|filtrado: No puede saber con certeza si el puerto se encuentra abierto o filtrado. Los sondeos UDP, protocolo IP, FIN, Null y Xmas clasifican los puertos de esta manera.
  • Cerrado|filtrado: No puede determinar si un puerto se encuentra cerrado o filtrado, y puede aparecer sólo durante un sondeo IPID pasivo.
Nmap posee una interfaz gráfica de usuario “oficial” para hacer más amigable su uso en usuarios menos acostumbrados a manejarse en consola. Esta interfaz es Zenmap.  

Instalación de Nmap con OpenSSL

La forma más adecuada de instalar Nmap es mediante la compilación del código. Antes de proceder a su instalación es recomendable que tengamos instalados los paquetes gcc, g++, openssl, make y las kernel-headers.
Para instalar estos paquetes en distribuciones como Ubuntu o Debian lanzamos el siguiente comando como root:


apt-get install linux-headers-$(uname -r) openssl gcc make g++


Tras esto tenemos todas las dependencias necesarias para compilar e instalar Nmap desde el código fuente. Cabe decir que al instalarlo de esta manera utiliza por defecto las librerías criptográficas OpenSSL durante el proceso de compilación sin necesidad de indicárselo, siempre y cuando las tengamos instaladas en el sistema en el directorio estándar. Si la instalación de la librería se hizo mediante el comando apt-get install openssl como en el caso anterior no tendremos que especificar nada, pero si la instalación la hicimos de otra manera “no estandar” deberemos especificar el directorio donde esté instalado añadiendo --with-openssl=<directorio de instalación de openSSL> al lanzar el comando ./configure.


Pasos:

  1. Descargamos el código fuente desde la página oficial http://nmap.org/download.html
  2. Descomprimimos el archivo donde se haya descargado: tar xvjf /home/rencinar/Descargas/nmap-6.47.tar.bz2
  3. Entramos en el directorio que se genera al descomprimirlo: cd /home/rencinar/Descargas/nmap-6.47
  4. Ejecutamos el configurador: ./configure
  5. Construimos Nmap: make 
  6. Instalamos Nmap: make install
Al finalizar nos indicará NMAP SUCCESSFULLY INSTALLED para indicarnos que se ha instalado correctamente.

Monitorizar Apache Tomcat con jconsole

Para monitorizar Tomcat con jconsole de manera remota lo primero que tenemos que hacer es activar las opciones JMX. Para ello incluiremos las siguientes lineas en el fichero catalina.sh (este fichero está dentro de la carpeta bin, en el directorio de instalación de nuestro Tomcat) justo después del "#!/bin/sh
".

export CATALINA_OPTS="-Dcom.sun.management.jmxremote
\-Dcom.sun.management.jmxremote.port=9004
\-Dcom.sun.management.jmxremote.ssl=false
\-Dcom.sun.management.jmxremote.authenticate=false"

En mi caso estaría escuchando en el puerto 9004, no requiere autenticación y no está cifrado con ssl.


Tras esto reiniciamos el servicio (lanzando el comando ./shutdown.sh; ./startup.sh) y podremos conectarnos de manera remota. La cadena de conexión para acceder al servicio es de la forma service:jmx:rmi:///jndi/rmi://IP:puerto/jmxrmi (en mi caso service:jmx:rmi:///jndi/rmi://10.0.10.96:9004/jmxrmi)


Al no haber habilitado el ssl nos indicará que la conexión no es segura, le damos a insecure connection y continuamos.



Tras esto habremos accedido a las gráficas del jconsole.


jueves, 21 de mayo de 2015

Eliminar sesiones en Postgresql

Para un gran número de acciones sobre una base de datos necesitamos que esta no tenga ninguna conexión activa contra ella. Por ejemplo, si queremos lanzar un "drop database"  para eliminar una base de datos que está en uso y por tanto tienen conexiones abiertas, nos dará el siguiente mensaje de error:

[Error] Líneas de script: 1-1 ----------------------
 ERROR: database "ke4" is being accessed by other users
  Detail: There are 3 other session(s) using the database.
 Línea: 1

Para eliminarlas y poder realizar el borrado necesitaremos sacar el listado de conexiones que tenemos. Para ello utilizamos la tabla pg_stat_activity filtrando por el datname con el nombre de nuestra base de datos:

SELECT * FROM pg_stat_activity WHERE datname = 'ke4';

En mi caso el resultado sería este:

datid datname procpid usesysid usename application_name client_addr client_port backend_start xact_start     query_start  waiting current_query        
 530  ke4       2549    188        k                                   20.0.0.2   
55311       20/05/2015    20/05/2015  20/05/2015 false      <IDLE> in transaction 

Para matar esta sesión sin reiniciar el servidor utilizamos la función pg_terminate_backend con el id del campo procpid:

    SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname = 'ke4';

En mi caso sería así:

    SELECT pg_terminate_backend(2549) FROM pg_stat_activity WHERE datname = 'ke4';