Este documento proporciona una guía sobre cómo configurar el redireccionamiento de puertos en Ubuntu para proteger servidores de ataques como syn flood. Explica cómo usar iptables para redireccionar solicitudes de un host a otro host puente y limitar el número de conexiones TCP entrantes para prevenir ataques. También cubre herramientas como hping3 que pueden usarse para realizar un ataque syn flood y pruebas de seguridad de red.
1. GUIA DE
REDIRECCIONAMIENTO EN
UBUNTU
OSCAR SEPULVEDA
PATRICIA MORENO
JHONATAN CUEVAS
UNIVERSIDAD DE PAMPLONA
FACULTAD DE INGENIERIAS Y ARQUITECTURA
INGENIERIA DE SISTEMAS
2013
2. INTRODUCCIÓN
La seguridad informática, es el área de la informática que se
enfoca en la protección de la infraestructura computacional y
todo lo relacionado con ésta (incluyendo la información
contenida). Para ello existen una serie de estándares, protocolos,
métodos, reglas, herramientas y leyes concebidas para minimizar
los posibles riesgos a la infraestructura o a la información. La
seguridad informática comprende software, bases de datos,
metadatos, archivos y todo lo que la organización valore (activo)
y signifique un riesgo si ésta llega a manos de otras personas.
Este tipo de información se conoce como información privilegiada
o confidencial .En la siguiente guía trabajaremos como proteger
nuestros servidores de posibles ataque que puedan tumbar
nuestro servicio en este caso ataques por syn flood, para no
dejar la dirección de nuestros servidores al descubierto
trabajaremos los re direccionamientos que consiste hacer
peticiones a un host el cual nos va a servir de puente y dar
acceso al host en el cual se encuentra el servidor.
3. OBJETIVOS
reconocer la importancia de la seguridad de datos.
Manejar las herramientas tales como iptables para prevenir daños
por personas ajenas.
Aprender de forma educativa ataques tales como lo es el syn
flood.
4. MARCO TEORICO
AIRDROID: Se utiliza para gestionar un Androide desde un
ordenador, se basa en el acceso mediante un navegador a una interfaz
muy al estilo del escritorio de Windows. Desde este lugar podremos:
consultar los elementos almacenados en el Smartphone, conocer la
cantidad de cada categoría presentes en el terminal, ver el consumo
de memoria y otros estados del sistema, copiar de forma inalámbrica
archivos al ordenador, acceder a los mensajes, contactos, fotos,
vídeos, música, tonos... y hasta enviar SMS desde nuestro equipo.
¿Pero cómo funciona? Hay que aclarar que el sistema funciona siempre
y cuando el ordenador y el Smartphone se encuentren bajo la misma
red de conexión inalámbrica (Wi-Fi). Todo lo que tenemos que hacer es
descargar desde el Android Market la aplicación AirDroid gratuita. Al
entrar en ella se nos dará una dirección IP y una contraseña que
utilizaremos para abrir el navegador en el PC y acudir a esa dirección
dada. Se nos solicitará una clave de acceso que es la que nos dio la
propia aplicación móvil (después en ajustes podemos eliminar esta
necesidad para que no tengamos que introducirla cada vez).
5. Una vez dentro se desplegará en la ventana un escritorio simple con
iconos, cada uno de ellos nos dará acceso a una información diferente
del dispositivo móvil. Existen iconos para los mensajes, apps, market,
archivos, registro de llamadas, contactos, tonos de llamada, música e
imágenes. Al abrir cada uno de ellos se muestra un explorador de
archivos similar al de Windows, y desde ahí podremos borrar o copiar al
gusto o necesidad de cada cual. Adicional a lo comentado, hay un
apartado en forma de widget sobre el escritorio que aporta
información de estado del dispositivo: estado de la batería, consumo de
memoria, espacio libre, etc.
REDIRECCIONAMIENTO DE PUERTOS:
La redirección de puertos (a veces llamada tunelado) es la acción
de redirigir un puerto de red de un nodo de red a otro. Esta técnica
puede permitir que un usuario externo tenga acceso a un puerto en
una dirección IP privada (dentro de una LAN) desde el exterior vía
un router con NAT activado.
La redirección de puertos permite que ordenadores remotos (por
ejemplo, máquinas públicas en Internet) se conecten a un ordenador en
concreto dentro de una LAN privada.
6. Las máquinas con Linux modernos consiguen esto añadiendo reglas
de iptables a la tabla nat: con el destino DNAT a la cadena de
PREROUTING y/o con el destino SNAT en la cadena de
POSTROUTING.
IPTABLES: Es un sistema de firewall vinculado al kernel de linux que
se ha extendido enormemente a partir del kernel 2.4 de este sistema
operativo. Al igual que el anterior sistema ipchains, un firewall de
iptables no es como un servidor que lo iniciamos o detenemos o que se
pueda caer por un error de programación(esto es una pequeña
mentira, ha tenido alguna vulnerabilidad que permite DoS, pero nunca
tendrá tanto peligro como las aplicaciones que escuchan en
determinado puerto TCP): iptables esta integrado con el kernel, es
parte del sistema operativo. ¿Cómo se pone en marcha? Realmente lo
que se hace es aplicar reglas. Para ellos se ejecuta el comando
iptables, con el que añadimos, borramos, o creamos reglas. Por ello un
firewall de iptables no es sino un simple script de shell en el que se
van ejecutando las reglas de firewall.
7. Se puede implementar un script de inicio en /etc/INIT.d con el que
hagamos que iptables se "inicie o pare" como un servidor más. Lo
podemos hacer nosotros o es probable que venga en la distribución
(como en redhat por ejemplo). También se pueden salvar las reglas
aplicadas con el comando iptables-save en un fichero y gestionar ese
fichero con una aplicación o front-end desde la X o desde webmin.
Este es el camino que seguiría un paquete en el kernel:
8. Como se ve en el gráfico, básicamente se mira si el paquete esta destinado a la
propia maquina o si va a otra. Para los paquetes (o datagramas, según el
protocolo) que van a la propia maquina se aplican las reglas INPUT y OUTPUT,
y para filtrar paquetes que van a otras redes o maquinas se aplican
simplemente reglas FORWARD.
INPUT, OUTPUT y FORWRD son los tres tipos de reglas de filtrado. Pero
antes de aplicar esas reglas es posible aplicar reglas de NAT: estas se usan
para hacer redirecciones de puertos o cambios en las IPs de origen y
Destino.
Tenemos tres tipos de reglas en iptables:
MANGLE:
NAT: reglas PREROUTING, POSTROUTING
FILTER: reglas INPUT, OUTPUT, FORWARD.
Limitar el número de conexiones TCP entrantes:
Una inundación SYN es una forma de ataque de denegación de servicio en el
que un atacante envía una secuencia de solicitudes SYN a un sistema de
destino. Este es un tipo bien conocido de ataque y generalmente no es eficaz
contra las redes modernas. Funciona si un servidor asigna recursos después de
recibir un SYN, pero antes de que haya recibido el ACK.
9. Si las conexiones medio abiertas se unen los recursos del servidor,
puede ser posible responder a todos estos recursos al inundar el
servidor con mensajes SYN.
HPING3: Esta herramienta de línea de comando, esta inspirada en el
comando ping de Unix. Su finalidad es la de poder crear paquetes
personalizados para poder analizar las respuestas. Dentro de sus
funciones, con hping podemos hacer:
Firewall testing
Advanced port scanning
Network testing, using different protocols, TOS, fragmentation
Manual path MTU discovery
Advanced traceroute, under all the supported protocols
Remote OS fingerprinting
Remote uptime guessing
10. TCP/IP stacks auditingActualmente hping tiene una versión 3, la cual nos
permite realizar scripts sobre tcl para poder crear nuestras propias
herramientas, como veremos mas adelante. El primer problema que muchos
encuentran al querer utilizar hping, es que hping no es una herramienta que
como muchas otras le especificamos un target y esperamos ver resultados.
Para poder utilizar hping, necesitamos conocer exactamente que estamos
haciendo.
Opciones generales:
Hping tiene un funcionamiento parecido al ping en el sentido de que envia
reiteradamente un paquete ( en el caso de hping uno “armado por nosotros” )
hasta que cortemos la ejecución del programa con un control C.- Para poder
elegir la cantidad de veces que se quiere enviar el paquete podemos usar la
opción –c la cual especifica el número de paquetes que queremos enviar (Si no,
envía paquetes hasta que lo cortemos con un control c).- Para elegir el intervalo
(la rapidez) con que envia los paquetes usamos –i y como argumento el intervalo
de tiempo (en segundos) entre paquete y paquete.
Finalmente quiero recalcar el uso del -z y -Z:
La combinación de teclas Control Z, esta ligada por defecto a aumentar el
numero de puerto al que estamos enviando el paquete (para tcp y udp), de esta
manera podemos escanear un host aumentando en 1 el numero de puerto. Cuando
especificamos –z ligamos la combinación de teclas a aumentar el número del TTL
de los paquetes que estamos enviando y con –Z desligamos dicha combinación de
cualquiera de las dos funciones posibles, esto es lo dejamos librado a las
funciones de la consola, generalmente dejarlo en sleep.
11. UBUNTU: Es un sistema operativo mantenido por Canonical y la
comunidad de desarrolladores. Utiliza un núcleo Linux, y su origen está
basado en Debian. Ubuntu está orientado al usuario novel y promedio,
con un fuerte enfoque en la facilidad de uso y en mejorar la experiencia
de usuario. Está compuesto de múltiple software normalmente
distribuido bajo una licencia libre o de código abierto.
Su patrocinador, Canonical, es una compañía británica, propiedad del
empresario sudafricano Mark Shuttleworth, ofrece el sistema de
manera gratuita, y se financia por medio de servicios vinculados al
sistema operativo y vendiendo soporte técnico. Además, al mantenerlo
libre y gratuito, la empresa es capaz de aprovechar los desarrolladores
de la comunidad para mejorar los componentes de su sistema operativo.
Extraoficialmente, la comunidad de desarrolladores proporciona soporte
para otras derivaciones de Ubuntu, con otros entornos gráficos,
como Kubuntu, Xubuntu, Edubuntu, Ubuntu Studio, Mythbuntu, Ubuntu
Gnome y Lubuntu.
12. Cada seis meses se publica una nueva versión de Ubuntu. Esta recibe
soporte por parte de Canonical, durante nueve meses, por medio de
actualizaciones de seguridad, parches para bugs críticos y
actualizaciones menores de programas. Las versiones LTS (Long Term
Support), que se liberan cada dos años, reciben soporte durante cinco
años en los sistemas de escritorio y de servidor.
ANDROID: En un Sistema Operativo además de una plataforma de
Software basada en el núcleo de Linux. Diseñada en un principio
para dispositivos móviles, Android permite controlar dispositivos por
medio de bibliotecas desarrolladlas o adaptados porGoogle mediante el
lenguaje de programación Java.
Android es una plataforma de código abierto. Esto quiere decir, que
cualquier desarrollador puede crear y desarrollar aplicaciones escritas
con lenguaje C u otros lenguajes y compilarlas a código nativo de ARM
(API de Amdroid).
13. Inicialmente, Android fue desarrollada por Google Inc. aunque poco
después se unióOpen Handset Alliance, un consorcio de 48 compañías
de Hardware, Software ytelecomunicaciones, las cuales llegaron a un
acuerdo para promocionar los estándares de códigos abiertos para
dispositivos móviles.
Google sin embargo, ha sido quien ha publicado la mayoría del código
fuente de Android bajo la licencia de Software Apache, una licencia de
software libre y de código abierto a cualquier desarrollador.
ARQUITECTURA DE ANDROID:
La arquitectura interna de la plataforma Android, está básicamente
formada por 4 componentes:
3.1.- APLICACIONES: Todas las aplicaciones creadas con la plataforma
Android, incluirán como base un cliente de email (correo electrónico),
calendario, programa de SMS, mapas, navegador, contactos, y algunos
otros servicios mínimos. Todas ellas escritas en el lenguaje de
programación Java.
14. 3.2.-FRAMEWORK DE APLICACIONES: Todos los desarrolladores de
aplicaciones Android, tienen acceso total al código fuente usado en las
aplicaciones base. Esto ha sido diseñado de esta forma, para que no se
generen cientos de componentes de aplicaciones distintas, que
respondan a la misma acción, dando la posibilidad de que los programas
sean modificados o reemplazados por cualquier usuario sin tener que
empezar a programar sus aplicaciones desde el principio.
3.3.- LIBRERIAS: Android incluye en su base de datos un set de
librerías C/C++ , que son expuestas a todos los desarrolladores a través
del framework de las aplicaciones Android System C library, librerías de
medios, librerías de gráficos, 3D, SQlite, etc.
3.4.- RUNTIME DE ANDROID: Android incorpora un set de librerías
que aportan la mayor parte de las funcionalidades disponibles en las
librerías base del lenguaje de programación Java. La Máquina Virtual
está basada en registros, y corre clases compiladas por el compilador de
Java que anteriormente han sido transformadas alformato .dex (Dalvik
Executable) por la herramienta ''dx''.
15. PROCEDIMIENTO
Vamos a re direccionar la petición hecha a un servidor a otro que va
a ser AirDroid. Para ello tendremos que configurar en nuestro equipo
las políticas de enrutamiento a través de iptables las cuales nos va a
permitir realizar este proceso. En este equipo colocaremos las
siguientes líneas la cual nos permitirá manejar el re direccionamiento.
iptables -t nat -A PREROUTING -s 152.168.1.2 -p tcp --dport 80
-i eth0 -j DNAT --to 172.20.61.204:8888
iptables -t nat -A POSTROUTING -j MASQUERADE
En la cual definiremos la ip donde va a recibir la solicitud, se puede
definir única, o que tenga acceso toda la familia de ips, después
definimos el protocolo y el puerto al que le va a hacer la solicitud
para ello es el segmento 2 -p tcp –dport después de esto
definiremos la interfaz de entrada en nuestro caso fue la eth0 y
después de esto con el JDNAT definiremos la ip a la cual vamos a
redireccionar y el puerto correspondiente.
16. Para realizar el ataque synflood con la misma conexión lo realizamos a
través del hpin3 para una ip aleatoria con:
sudo hping3 ip_destino --rand-source -S --destport puerto –faster
Ejecutamos también las siguientes líneas para controlar el límite de
peticiones que puede realizar, en la cual definimos el intervalo de
tiempo que denegaremos solicitudes.
#iptables -N syn_flood
#iptables -A INPUT -p tcp --syn -j syn_flood
#iptables -A syn_flood -m limit --limit 3/s --limit-burst 3 -j
RETURN
#iptables -A syn_flood -j DROP
echo 1 > /proc/sys/net/ipv4/ip_forward.
17. CONCLUSIONES
La seguridad informática se ha vuelto muy importante mayor
mente para las empresas que necesitan un alto nivel de protección
de sus datos.
En la seguridad informática nos enfocamos en las posibles
herramientas para combatir en contra de los distintos ataques a
nuestros servicios o datos.