Search for in Google by Dino

Google Custom Search

lunes, 2 de abril de 2012

HARDENING "Fortalece Tu Servidor y Dificulta La Tarea del Atacante"

Hola Amig @s lectores,


Les cuento que esta semana recibi con grata sorpresa un bonito recuerdo de un Twittero el cual difundia uno de los articulos que escribi hace unos cuatro (4) años (2008) para una revista electronica de seguridad informatica, en donde sumabamos esfuerzos y voluntades para generar una revista con contenido en seguridad informatica  (lastima que el proyecto terminara y  las cosas no volvieran hacer las mismas).


Razon por la cual me di a la tarea de incluirlo en mi Blog, debido a que hasta este momento no hacia parte del mismo como muchos otros articulos que he escrito y aun no hacen parte de 
mi Blog personal  :'(

Pero nunca es tarde para desempolvar otro viejito que posiblemente contenga informacion que sea de su interes.


Comencemos de una vez!!
Sin más preámbulo, por que de seguro ya visualizo a mis amigos con unos gestos de impaciencia  y tolerancia de mis largos textos  con un pensamiento profundo 


“Con que nos saldrá Dino ahora???”. 
Les cuento que el tema que deseo tratar tal vez no de la manera mas profunda como quisiera debido  mi escaso conocimiento y por que no quiero que se me queme la neurona!!!! 

Es el tema de HARDENING!!!!, solo espero que les guste lo hice con cariño y aprecio para todos!.

El Inicio de una Aventura
Erase una vez en un pueblo muy lejano………………………………….

Recuerdo de una mañana como cualquier inicio de jornada laboral, de mis primeras acciones dentro de lo que tengo programado fue la de sentarme a mi computador y conectarme a la Red a revisar mis correos y de paso revisar foros de los cuales participo  e iniciar mi plan de trabajo.

Oh!  Sorpresa  que me llevo, cuando en mi M S N  aparecía  una ventana en la cual desplegaba    un mensaje de un experto en seguridad ( del cual le  profeso un gran respeto y admiración!) , susodicho individuo (ya parezco policía con estos términos ) que en el momento llevaba a cabo un proceso de aseguramiento de plataformas  que hacían parte del plan de continuidad del negocio que debía ejecutar con servidores y dispositivos de  Checkpoint,  su FireWall debía ser afinado e integrado para tal fin, y se encontraba en el dilema de realizar la actualización de la versión del NOS del Firewall,  en esta labor tenia inconvenientes en el update de la actualización de su versión de Linux, debido a que no había una versión mas actualizada, después de intercambiar mensajes tratando de colaborar con su labor, le perdí el rastro en esa mañana.

Al día siguiente nuevamente nos encontramos en el M S N y su respuesta para la finalización del proceso que había realizado fue: 

“REALICE UN PROCESO DE HARDENING DE TODA LA PLATAFORMA”. 

Creo que fue el momento en que me dije a mi Mismo

MI MISMO:  

No es solo un término más o frase de un Tecnicista, es realmente una buena práctica de Seguridad, de la cual debo conocer un poco más………

HARDENING!!!.

Para su definición técnica tomare la expresada  por dos  expertos:

Escrito por la evangelista seguridad Roberta Bragg:


“Adoptar un enfoque proactivo para la seguridad de la red por el endurecimiento de Windows de los sistemas contra los ataques antes de que ocurran.”

Por Luis Montenegro, Windows y Security MVP 2007:


“Haciéndole la vida difícil al atacante. Ese es el concepto que está detrás del Hardening de sistemas operativos. Hardening es una acción compuesta por un conjunto de actividades que son llevadas a cabo por el administrador de un sistema operativo para reforzar al máximo posible la seguridad de su equipo. 
Su propósito, entorpecer la labor del atacante y ganar tiempo para poder minimizar las consecuencias de un inminente incidente de seguridad e incluso, en algunos casos, evitar que éste se concrete en su totalidad.”
Y no podía faltar la de Wikipedia (Que de seguro ya la están buscando!!!): 


“En computación, el endurecimiento suele ser el proceso de asegurar un sistema.  Esta labor es especialmente hecha para proteger los sistemas contra los atacantes. Esto suele incluir la eliminación de nombres de usuario o innecesarios de acceso y la inhabilitación o supresión de los servicios innecesarios. 
Existen diversos métodos de endurecimiento de los sistemas Unix y Linux. Esto puede implicar, entre otras medidas, la aplicación de un parche para el kernel como Exec Shield o PaX; cierre de los puertos de red abierta, y el establecimiento de sistemas de detección de intrusiones, cortafuegos y sistemas de prevención de intrusiones. También hay endurecimiento guiones y herramientas como Bastille Linux y Apache / PHP Hardener  que puede, por ejemplo, desactivar características innecesarios en los archivos de configuración o realizar varias otras medidas de protección. ” 

Para mi:

“Es simplemente el proceso de afinación del performance y aplicación de las características de un producto en un 110% para disminuir los vectores de amenazas y hacerle la vida mas difícil al atacante”


Que actividades debemos desarrollar para  asegurar nuestros Sistemas:

ACTIVIDADES.
  1. Los procesos de arranque (del bootstrapping del sistema)
  2. Los servicios o demonios que se ejecuten en el inicio  y apagado del sistema
  3. Aseguramiento de Sistemas de archivos (comúnmente denominados File System en *NIX y volúmenes en Netware - Novell)
  4. Uso de opciones de limites y forzar cuentas de usuario
  5. Políticas del sistema, filtrados y Acls
  6. Protección a ataques físicos o de Hardware (Seguridad Física)
  7. Actualización de Firmware, BIOS, Softpaq, contraseñas de arranque de los equipos, desactivación de unidades externas en servidores como pen drive o memorias USB, disqueteras, unidades de Cd/DvD, opticas.
  8. Protección y renombre de cuentas de Administración y deshabilitar o invalidar cuentas    estándares,  invitado, uso de cuentas limitadas. 
  9. Restricción de Instalación de Software y Hardware de acuerdo a las políticas de seguridad.
  10. Habilitar los sistemas de Auditorias y Monitoreo de  logs.
  11. Asegurar consolas de administración, pantallas de logeo,  terminales virtuales y accesos remotos.
  12. Políticas y procedimientos de administración de cuentas de usuario, grupos,  TCBS (Truste Base Computing), módulos de autenticación agregables  y relaciones de confianza.
  13. Administración de paquetes de instalación,  parches (Patchs), upgrades, updates,  módulos instalables, integridad de archivos y permisos en el sistema.
  14. Aseguramiento de las Herramientas de Desarrollo y compiladores.
  15. Aseguramiento de Núcleos  (Kernel) del sistema.
  16. Instalación y afinación de Firewalls, Kits de Seguridad (Antivirus, antispyware, antimalware, anti hackers, anti banners) Sistemas de Detección de Intrusos y Sensores como IDS,IPS,HIDS, NIDS.
  17. Uso de Herramientas para Pen Testing  y Monitoreo .
  18. Configuración de Protocolos, Puertos y Servicios (Solo los necesarios).
  19. Implementación de esquemas de seguridad, DMZ, Front End / Back End, Router apantallados, proxys, Firewalls.
  20. Políticas de Procedimientos de Respaldo  y de Disaster Recovery.

Dadas a conocer  estas actividades pasare a explicar las dos primeras actividades (ACTIVIDAD I Y ACTIVIDAD II)  con uno de los sistemas operativos  populares de gran estabilidad y acelerado crecimiento, al que le están apostando grandes como IBM, HP, Novell, Oracle, etc. El del maravilloso mundo del pingüino el fabuloso Linux.


Limitaremos el alcance de este articulo a los dos primeros puntos, debido a que es un tema muy extenso , que tiene mucha tela por cortar y esta E-zine  no daría abasto para cubrirlo, por lo tanto ruego excusas, mil disculpas  el no entregar en detalle las demás actividades, por lo expuesto anteriormente.

ACTIVIDAD I

LOS PROCESOS DE ARRANQUE (DEL BOOTSTRAPPING DEL SISTEMA).


Debemos asegurar los procesos de arranque del sistema, con la finalidad de limitar la intervención o intrusión del os usuarios, evitando la injection de software o escalada de privilegios en nuestro boot, el cual actúa como un prompt mas del sistema indicándonos que el sistema esta listo para cargar, en el cual podemos pasar parámetros u ordenes que alteren el funcionamiento y estabilidad de nuestro sistema operativo.  Ej.:

Si quisiéramos cargar un SO en LiLo (Linux Loader) solo tendríamos que presionar la tecla  [TAB] en el prompt de LiLO y nos mostrara las etiquetas de los sistemas que podemos iniciar o simplemente la tecla [SHIFT]


Podemos evitar situaciones como estas:

Pasar a modo mono usuario  o de mantenimiento

Linux single
Ó
Linux –b
Permitirá a un usuario iniciar en modo de mantenimiento con un /sbin/sulogin
La opción:
init=/bin/sh
Permiten obtener una Shell de root, como también pueden iniciarse desde un disquete.  Y bastaría con remontar nuestros discos en modo de rw y voala!  Nuestra seguridad totalmente comprometida. Que vaina no!!.

Por lo tanto es recomendable cambiar algunas opciones de nuestros archivos de configuración dependiendo de nuestro, cargador LilO, Grub o LoadLin.

Tales como: 
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear
 # permite especificar una contraseña que se debe introducir antes de que el sistema arranque
#Exigira la contraseña si se entra un parámetro como single
restricted
password=secretpassword
Si se desea aplicar la restricción con alguna imagen del kernel se puede usar, esta aplica cada vez que se desee arrancar con esta imagen:

image=/boot/vmlinuz-2.6.XX-XX
label=linux
initrd=/boot/initrd-2.6.XX-XX.img
read-only
append="root=LABEL=/"

Recuerden que para que los cambios sean actualizados en su lilo, deben ejecutar
# /sbin/lilo
Esta contraseña se añade en Lilo.conf en texto claro, por lo  tanto se deben aplicar los permisos adecuados para que  sólo con los privilegios de root  pueda verse la contraseña.

# chown root:root /etc/lilo.conf
# chmod 0600 /etc/lilo.conf
También es recomendable no mantener muchas versiones del kernel, en general solo mantener la ultima y la actual con la finalidad de no dejar a disposición tantos kernel como le sea posible cargar en una sesión del sistema. Por favor no olvidemos activar las máximos niveles de seguridad que tengamos a disposición, como habilitar password de BIOS o de lectura con dispositivos Biometricos , Smart Card y deshabilitar el arranque por unidades externas como disquetes, Unidades Opticas de Cd o DvD, USB, BOX HD USB, etc.

Al igual que LiLo, su hermanito Grub también sufre de problemas de seguridad y permite que se le pasen parámetros  y sean ejecutados, por lo tanto debemos de asegurar con una contraseña encriptado en MD5 la cual no permite que sea solo con una leída al archivo /etc/grub.conf.


Veamos:

# grub
grub> md5crypt
Password: ********
Encrypted: $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70
grub> quit


Ejecutamos el Shell de Grub y posteriorment md5crypt, luego el password  y este genera un hash de md5 y  este es introducido en el archivo de configuración del grub /etc/grub.conf

default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
password --md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70
title Red Hat Linux (2.6.7)
root (hd0,0)
kernel /vmlinuz-2.6.7 ro root=LABEL=/
initrd /initrd-2.6.7.img

Esto nos evitara enormes dolores de cabeza, ya que al reiniciar la maquina y se desea introducir un parámetro, este nos exigirá que entremos su password (Obligatoriamente por haber añadido la línea del:

 password --md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70).

Si desea añadirle un menú a Grub, para que sea mostrado después del password, solo cambiemos la línea del password –md5 por esta:
password --md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70 /boot/grub/administrator-menu.lst
 Al igual que Lilo podemos también proteger una imagen con Grub:

default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
password --md5 $1$2FXKzQ0$I6k7iy22wB27CrkzdVPe70
title Red Hat Linux (2.6.7)
lock
root (hd0,0)
kernel /vmlinuz-2.6.7 ro root=LABEL=/
initrd /initrd-2.6.7.img
 Recuerden que este debe quedar con los permisos apropiados: 
# chown root:root /etc/grub.conf
# chmod 0600 /etc/grub.conf
 Para Grub (/boot/grub/grub/conf ) existen parámetros importantes como:

Hiddenmenu
default 0
password
Es recomendable cambiar los niveles de ejecución run-level, forzando a que se requiera el password del root cuando se entre en estado de mantenimiento o monousuario, cambiando el archivo  /etc/inittab asi:

s:S:respawn:/sbin/sulogin to /etc/inittab

De igual  forma en este archivo evitemos que el sistema sea reiniciado pr+n esionando las comunes teclas CTRL-ALT-DEL antecediéndole un signo de comentario  #

#ca::ctrlaltdel:/sbin/shutdown -t5 -rf now

Como ven son algunas reglas básicas de Hardening en Linux, les reitero que esto es en la medida que una persona tenga acceso físico a la maquina y pueda ser manipulada, debe tenerse mucho cuidado con los accesos remotos que se realicen a la maquina si es que cumple este rol, puesto que puede afectar nuestro arranque remoto o soporte remoto si es que lo utilizamos.

actividad ii

Los servicios o demonios que se ejecuten en el inicio  y apagado del sistema

Si, así como se indica en su titulo, llana y sencillamente es deshabilitar aquellos servicios que no van a tener uso, para disminuir los vectores de ataques, las amenazas cerrando las brechas del atacante. Revisemos minuciosamente en  /etc/inittab
El archivo inittab es una tabla que le permite al sistema indicar de manera ordenada como debe arrancar
El formato utilizado por este archivo es el siguiente:
servicename:runlevels:label:command -option –option

sysacc:235:acct:/usr/sbin/acct -q -d
~~:S:wait:/sbin/sulogin
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
Veamos esto un poco más en detalle:
id: identificador de cada secuencia con una entrada de 4 caracteres máximo.
Nivel-de-Ejecucion: Indica el nivel de corrida en que va a efectuarse la acción indicada
acción: Indica qué acción se llevará a cabo
proceso: Indica el proceso a ejecutar. En *nix toda acción genera al menos 1 proceso.

Cabe anotar que en las últimas versiones de Ubuntu este fue reemplazado por el "upstart"  y los niveles son controlados con los archivos en /etc/event.d
Boot scripts in /etc/init.d
Servicios tales como:


Deshabilitar cuales???.

Solo a criterio de su implementación active o desactive el servicio que requiera, en realidad hay servicios que no se usan y quedan activos dejando una vulnerabilidad latente, si no va a usar Samba, para que activar Winbind, servicios como apmd poco son usados en servidores en ambientes de producción a diferencia del uso en equipos móviles como portátiles en donde la administración de la energía juega un papel importante, igualmente si utilizo lpd solamente para que dejar activo cups o lpr.

Para parar dichos servicios puede usar la utilidad de administración de cada Distro, tales como Yast en SuSE, Yum en Fedora, Scoadmin en SCO Unix, Smit en AIX, de igual forma utilizar líneas de comando como:

#chkconfig
ó
#update-rc.d.
Para ver la lista con chkconfig:
# chkconfig --list
Kdcrotate       0:off   1:off    2:off    3:off    4:off    5:off     6:off
ntpd                0:off   1:off    2:off    3:on    4:off    5:on     6:off
courier-imap  0:off   1:off   2:on    3:on    4:on    5:on      6:off
Nos indica:

 El Servicio          Nivel del Servicio:Y si esta en off/on

Para parar el servicio:
 # chkconfig --del             nombre-del-servicio
 Para iniciar el servicio:
# chkconfig –add             nombre-del-servicio


Después de eliminado los servicios, si estos no van a ser utilizados posteriormente, podemos entrar a borrarlos de  /etc /rc.d/init.d

Y  no olvidar verificar la permisividad  de los archivos nuevamente:

# chown root:root /etc/rc.d/init.d/*
# chmod -R 700 /etc/rc.d/init.d/*

The inetd/xinetd daemons
Comúnmente llamado los Demonios maestros,
Como anécdota recuerdo el día que le comente al Gerente de Sistemas de una Compañía (Empresa) en la cual laboraba con el cargo de Administrador del Sistema, teniendo a mi cargo tres (3) servidores *NIX y unos 100 usuarios, plataforma conectada en Modo Multiusuario y de Red, pero volvamos a lo que quiero comentar por que ya me disperse con esta anécdota:
Gerente de Sistemas:
JJH Necesitamos que se efectué el Backup Diario a Medio día y realice verificación de la integridad de Datos, debe ser automático!. Por favor Investigue de que manera podemos armar un Shell Script y automatice la tarea.
Administrador del Sistema (JJH)
Eso se puede hacer utilizando los Demonios (Daemons) del Crontab y At, automatizamos el Shell para que se programen  las tareas de Respaldos de Seguridad (BackUp)  y realizamos las pruebas.
Gerente de Sistemas:
Como así????
Y a Ud. Quien le dijo que eso se llama así???
Administrador del Sistema (JJH)
Pense entre mi:
“Ah kab***  piensa que por que ha hecho mas cursos y especializaciones que uno, tiene que sabérselas todas!!Uffff”
 Y le dije:
Pues es la traducción que hago de los Manuales del Sistema Unix
(Era poco de los buenos soportes que se encontraban en esa época año 1994 y podíamos consultar.  Internet aun no tomaba auge!!)
Gerente de Sistemas:
Como así???.
No señor averigüé bien como se llama esa vaina, hágala y documéntela.
Administrador del Sistema:
Me dije a Mi mismo
Si el Mismo:
Ahora la hago y lo dejo como el ternero (Ya sabrán como, no sean mal pensados) con las ganas de mam*** perdón de chuparme como vampiro el conocimiento por que lo hago y no le muestro los resultados para que se de cuenta que el Habito no hace al Monje!.
Bueno pero sigamos con el Hardening por que después de esa anécdota y experiencia de vida ya deben estar llorando y enviándome mis condolencias!!
Continúo con los Demonios Maestros, para los Neófitos como YO, debemos entender un Demonio como un proceso que se ejecuta en Background (en segundo plano) con la finalidad de iniciar las solicitudes de conexión que llegan al servidor y son asignados un puerto de Conexión por ejemplo:
ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat and talk are BSD protocols.
#
shell stream tcp nowait root /usr/sbin/tcpd in.rshd
login stream tcp nowait root /usr/sbin/tcpd in.rlogind
#exec stream tcp nowait root /usr/sbin/tcpd in.rexecd
#comsat dgram udp wait root /usr/sbin/tcpd in.comsat
talk dgram udp wait nobody.tty /usr/sbin/tcpd in.talkd
Sera que servicios como telnet o rlogin abiertos me servirán de mucho???
Solo juzguen Uds. Que hay disponible aquí (para quien no entienda solo escribir en google vulnerabilidades de telnet o rlogin)
De ahí nace una versión en algunas Distros denominada Xinetd  su objetivo  primordial es mejorar el uso de los servicios en los controles de acceso y contrarrestar DOS (Denial Of Service), en fin mejorar la administración de los servicios. Un vistazo a su archivo de configuración
service nntp
     {
      socket_type = stream
      protocol = tcp
      wait = no
      user = news
      group = news
      server = /usr/bin/env
      server_args = POSTING_OK=1 PATH=/usr/sbin/:/usr/bin:/sbin/:/bin     +/usr/sbin/snntpd logger -p news.info
      bind = 127.0.0.1
     }

 Continuemos….
La idea es revisar los servicios que se inician en este demonio y desactivar aquellos que impliquen un riesgo inminente por su activación y no uso dentro del Sistema Operativo, aumentando el riesgo y alternativas de ataque.
“Como quien dice que lo que no se usa se atrofia o lo que no sirve estorba”
Si no vamos a hacer uso de estos servicios, tampoco los ofrezcamos para ampliar los vectores de ataques.
Solo adiciona a la línea un # y esta quedara como comentario:
#telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd
#login stream tcp nowait root /usr/sbin/tcpd in.rlogind
La recomendación apropiada es desactivar los demonios de inetd/Xinetd y lanzar los servicios que se necesitan con scripts hechos a la medida.
Verifiquemos si el demonio esta en ejecución:
$ ps -A | grep 'xinetd\|inetd'
2106 ? 00:00:00 xinetd
Luego paramos el proceso:
 $ /etc/rc.d/init.d/xinetd stop Y nuevamente nuestro amigo chkconfig nos dará la mano:
$ chkconfig --del xinetd

NOTA: Ya sabrán para que se ejecuta, si no con el dolor del alma a devolverse unas líneas atrás y leer nuevamente para que es esta vaina, por que MIguelito =YO, no lo repetiré!!!.

Para culminar nuestra labor con lo archivos de configuración del Demonio:

# rm -f /etc/rc.d/init.d/xinetd
# rm -f /etc/xinetd/conf
# rm -f /etc/xinetd.d
 Y reinicie nuevamente su Sistema :

#Shutdown –r now
 NOTA: También pueden utilizar las herramientas de instalación y remoción de software para eliminar el demonio. No olviden realizar un test de los servicios con un

#ps –a Ó #netstat  –a
  
TCP wrappers
Que cosa tan rara es esta???
Expliquemos entonces; los TCPwrappers permiten controlar el acceso y los servicios de red para diagnosticar los problemas y aplicar el correctivo necesario. Vienen del maravilloso mundo de *NIX, nacen de la necesidad de modificar el comportamiento del Sistema operativo  sin tener que modificar su funcionamiento.
Bueno lo voy a explicar con plastilina con base en la redacción anterior sobre inetd( si no recuerdas vas a tener que devolverte a este punto inetd/xinetd)
Vamos con la Analogía
Muchas personas van a nuestra oficina a buscarnos para diversos asuntos, en la puerta de nuestro edificio se encuentra un señor muy colaborador, altamente servicial diría YO (que a veces se creen dueños de los Edificios o Empresas) comúnmente llamado vigilante o portero. Este señor permite la entrada y flujo de personas en nuestra Empresa indicando donde quedan nuestras oficinas, una vez ingresa la persona que te busca por X ó Y motivos (posiblemente por esa platica que no le has pagado!!)  y se encuentra con la recepcionista o secretaria de tu oficina, la cual discreta y diplomáticamente nos avisara quien llego y como no tienes los $$$ para pagar, el paso siguiente será la negación, labor que se la encomendamos a nuestra secretaria para que finiquite la visita no deseada.
Ah vieron!!!  que fácil era entenderlo, ahora un poco mas informático o Geeks como les gusta a Uds.
El mismo ejemplo
Desde nuestro computador enviamos un correo por medio de un cliente de correo como Outlook, Eudora, etc. La cual realizara una conexión por el puerto 110 al servidor, una conexión POP.
Este a su vez jugando un papel importante nuestro amigo (El señor Portero)  inetd (espero que lo hallan leído), le dirá al Servidor que servicio debe utilizarse y responder a las conexiones que demonio y que puerto debe responder. Entonces es aquí en donde entra en acción nuestro gran aliado el señor TCP Wrapper (Secretaria) Filtrando los paquetes IP, que conexiones puedan ser aceptadas o rechazadas dependiendo de su identidad y origen.
¡!!Hombre creo que mas claro que lo que canta un gallo no se puede. Como les dije con plastilina!!.
A continuación solo descárgalo de aquí:
Lo descomprimes,
#gunzip -c tcp_wrappers_7.6.tar.gz | tar xf
ó
# gunzip tcp_wrappers_7.6.tar.gz
ó
# tar xvf tcp_wrappers_7.6.t
Luego :
#make linux
Su resultado dejando como resultado cinco binarios
  • tcpd. Es el demonio del TCP-Wrappers.
  • tcpdmatch. Predice como el tcpd manejaría una petición en específico.
  • tcpdchk. Verifica las reglas de control de acceso contenidas en los archivos /etc/hosts.allow y /etc/hosts.deny.
  • safe-finger. Versión de finger para implementar el finger reversivo.
  • try-from. Programa que permite probar si el sistema es capaz de reconocer qué máquina la esta contactando
Copiar los archivos al directorio donde se encuentran los demonios de los servicios de o /usr/sbin

#mv tcpd tcpdmatch tcpdchk try_from safe_finger /usr/sbin

Modificar el
#vim /etc/inetd.conf

Y aquí modificar todos los servicios que deseamos proteger por tcpd. Asi:

pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
imap stream tcp nowait root /usr/sbin/tcpd imapd

Y
#vim /etc/syslog.conf

En donde agregaremos la siguiente línea
local0.info /usr/local/adm/tcpd.log

Para mantener un log de las conexiones hechas por tcpd

Este archivo de registro lo podemos crear con touch.
#touch /usr/local/adm/tcpd.log
  
El demonio debe ser reiniciado, pararlo y reiniciarlo, como explique anteriormente. O también con:
 
$ ps -A | grep 'xinetd\|inetd' 2106 ? 00:00:00 xinetd # kill -HUP 2106
 
Firewalls
Nuevamente teniendo en cuenta el lector, vamos a describir que es un Firewall para los Newbies como YO.

Sigo….

Un Firewall (FW) es un componente de Hardware (generalmente Appliance) o de Software que permite filtrar el trafico entre Internet , Extranet con la Intranet o red Empresarial.

La analogía mas practica:
Es el muro que se crea para evitar el paso de fuego entre diferentes Bodegas para evitar la expansión del fuego y este no sea mas perjudicial.

Así como ese muro impide la propagación del fuego para evitar mas tragedias, el FW en computación evita que los males de Internet (Dialers, DoS, Virus, Troyanos, Hijackers, Malware, Spyware, Accesos no autorizados, etc) y del Exterior afecte nuestra plataforma informática. Si desean mas información los invito a leer RFC 2979


Para terminar este definición, hablemos de los distintos tipos de FW, para esto voy a citar  a uno de los que mas saben en Internet , el señor Wikipedia ( Y eso que es relativamente nuevo, pero sabeeeeeee) :
Tipos de cortafuegos
Cortafuegos de capa de red o de filtrado de paquetes:
Funciona a nivel de red (nivel 3) de la pila de protocolos (TCP/IP) como filtro de paquetes IP. 
A este nivel se pueden realizar filtros según los distintos campos de los paquetes IP: dirección IP origen, dirección IP destino. A menudo en este tipo de cortafuegos se permiten filtrados según campos de nivel de transporte (nivel 4) como el puerto origen y destino, o a nivel de enlace de datos (nivel 2) como la dirección MAC.
Trabaja en el nivel de aplicación (nivel 7) de manera que los filtrados se pueden adaptar a características propias de los protocolos de este nivel. Por ejemplo, si se trata de tráfico HTTP se pueden realizar filtrados según la URL a la que se está intentando acceder. Un cortafuegos a nivel 7 de tráfico HTTP es normalmente denominado Proxy y permite que los computadores de una organización entren a internet de una forma controlada.
Cortafuegos  personal:
Es un caso particular de cortafuegos que se instala como software en un computador, filtrando las comunicaciones entre dicho computador y el resto de la red y viceversa.

Pero tengamos en cuenta que no es la Panacea, es solo un elemento del esquema de seguridad. Para visualizar, veamos el Modelo de Defensa en Profundidad:

En resumen nunca dependamos de un solo elemento, en lo posible implementar un modelo de capas de seguridad como el anterior.
Si deseas un poco mas de info de los FW, te invito a leer:
Pero veamos el Hardening a los FW:
Los FW Pueden constituirse como la primera línea de defensa en su red, generalmente se ubican sobre un servidor de seguridad, son amenudo basados en Hardware con dispositivos de Checkpoint, Cisco, SonicWall, SmootWall,etc. Complementandolos con FW de Hosts como son iptables, Keyros, Zona Alarm, en algunas circunstancias se aprovecha la integración de productos como ISA SERVER de Windows 2K.
Encontramos un sin numero de soluciones, entre las cuales en Linux IPTABLES / IPCHAINS o interfaces de la misma
Para el ejemplo vamos a trabajar con NetFilter, sin más rodeos:
Para añadir una regla:
# iptables -A INPUT -i eth0 -p tcp --dport 80 -d 192.168.0.1 -j ACCEPT

-A    Adiciona una regla
-i      Especifica la Interface de Red que va a utilizar para aplicar la regla
-p    Especifica que va a filtrar paquetes TCP (Si va a utilizar paquetes UDP o ICMP debe
       especificarlo).  De igual forma podría especificar el protocolo por el numero, como el 50
       para la autenticación con IPSEC.
--dport  Indica el puerto, en este caso el 80 para el trafico en la Web (HTTP)

-d    Solo los paquetes que van para esta dirección (en nuestro caso 192.168.0.1
-j     Nos indica la acción a tomar en este caso es un ACCEPT (acepta solo si cumple la
       condición el paquete)

Se pueden aplicar otras condiciones como:

# iptables -A INPUT -i eth0 -p tcp --dport 80 -d 192.168.0.1 -j DROP

En este caso si el paquete cumple la condición será Dropped (desechado)
Para añadir en un trafico seguro:
           
# iptables -A INPUT -i eth0 -p tcp --dport 443 -d 192.168.0.1 -j ACCEPT

Solo repasemos el significado de los flags (banderas/opciones) anteriores con
un puerto https.

# iptables -A OUTPUT -o eth0 -p tcp --sport http -j ACCEPT
# iptables -A OUTPUT -o eth0 -p tcp --sport https -j ACCEPT

Aquí,  estamos creando una regla para ambos http y https para permitir el trafico de los hosts pero no se permitirá que el Servidor Web devuelva trafico a los hosts (de salida) . Se tendrían que crear reglas adecudadas para el buen funcionamiento del Servidor Web en el trafico de salida. Una observación en esta regla, utilizamos –sport para indicar los dos puertos http y https.

Si no estas seguro que puertos tienes asignados puedes consultar el archivo:


 
Aunque recuerden la reserva que se debe tener sobre este archivo, como se ha explicado con los anteriores servicios. Lo más recomendable es:
 
# chown root:root /etc/services
# chmod 0644 /etc/services
# chattr +i /etc/services
 Es recomendable efectuar un mapa del trafico de la Red para saber que reglas debe crear, consulta el archivo  /proc/sys/net/ipv4/ip_local_port_range  este define el puerto local  que se utiliza para el tráfico TCP y UDP.  El primer número es el primer puerto local para permitir el tráfico TCP y UDP en el servidor, la segunda es el último número de puerto locales Ej: "1024 4999". Una buena medida es cambiar los parámetros que tiene por defecto 32768-61000.
 
# echo "32768 61000" >/proc/sys/net/ipv4/ip_local_port_range
 Se pueden adicionar al script /etc/rc.d/rc.local y en el archivo /etc/sysctl.conf, adicione:

# Allowed local port range
net.ipv4.ip_local_port_range = 32768 61000
 Para indicar varias reglas:

# iptables -I INPUT 1 -i eth0 -p tcp -j ACCEPT
# iptables -I INPUT 2 -i eth0 -p tcp --dport 143 -j DROP

La primera permite el trafico TCP en la interface eth0 y el 1 indica que es la primera regla, la segunda filtra los paquetes TCP del puerto 143 (IMAP) y e invalida los paquetes TCP(el 2 indica que es la segunda regla).

Ahora si que dijeron, Ah! Ese Dino tan bruto NO???. No que va si le ponemos un poquito de sentido común, nos daremos cuenta como todo el trafico es permitido en la primera, asi que la segunda puede ser nula, la idea es esa organizar y aplicar lógica a los reglas configuremos.

Entonces si deseas listarlas:

# iptables -L INPUT -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 192.168.0.1 tcp dpt:80
2 ACCEPT tcp -- 0.0.0.0/0 192.168.0.1 tcp dpt:443
 Para remover una regla:

# iptables -D INPUT -i eth0 -p tcp --dport https -d 192.168.0.1 -j ACCEPT
Borrara la regla para el https.
Puede borrar por el Numero de regla:

# iptables -D INPUT 3

Si desea borrarlas todas solo adicione el flag (bandera/opción) –F

# iptables -F INPUT

O también:

# iptables -F
# iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination

Si no se especifica el uso de una tabla, IPTABLES tomara por default la tabla filter

# iptables -t nat -L
Chain PREROUTING (policy DROP)
target prot opt source destination
Chain POSTROUTING (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination

Cada regla tiene un contador. Para ver estos contadores, y un total de cada cadena cuando se lista todas sus normas con -V y – L

# iptables -L -v
Chain INPUT (policy ACCEPT 25897 packets, 2300K bytes)
pkts bytes target prot opt in out source destination
  
La tabla filter
Construcción de reglas

Iptables [tabla]

En el caso de la tabla filter: No hace falta indicar tabla (filter por defecto)

Comando
−A cadena −> Insertar al final
−D cadena −> Borrar
−R cadena num −> Reemplazar
−I cadena num −> Insertar
−L −> Listar
−F −> Limpiar
−N cadena −> Crear cadena
−X −> Eliminar cadena
−P −> Cambiar política 

Es solo un resumen de lo que es IPTABLES, la idea general es crear minimo un Firewall básico para su Host, recuerden que existen mas enfoques de seguridad a nivel perimetral de sus servidores, este seria el complemente en sus estaciones de trabajo(tema interesante DMZ e Iptables).

Bien, creo que hasta aquí llegaremos con el articulo, este ya se hizo muy extenso, solo explicando lo básico de los dos primeras Actividades (I,II) del tema de Hardening, y como ya lo había mencionado, este espacio de conocimiento y entretenimiento no nos dará lo suficiente para tratar el tema, por lo tanto no me resta mas si no agradecerles por su atención y dedicación al leer estas pocas líneas de un tema tan fascinante pero a su vez tan complejo y extenso, ojala les sirva de ayuda o al menos los motive para tomar conciencia de la necesidad de aplicar buenas practicas de seguridad.

“La inseguridad no es mas que el reflejo de tu Negligencia e Ignorancia, lo único seguro es que no hay nada seguro, solo mitigas el riesgo”

Con cariño,



Dino



4 comentarios:

Juan dijo...

Gracias DINO,

Excelente aporte.

http://hackinganddefense.blogspot.com/ dijo...

Saludos,


Gracias Juan G. por su visita y por sus agradecimientos, esto nos anima a seguir compartiendo en comunidad.

Bytes

Dino

Felipe González dijo...

Muy interesante Dino.
Muchas gracias y éxitos!

Anónimo dijo...

Saludos.
Ese fue uno de los primeros articulos que yo lei en el Ezine de hecho creo que se lo manifeste a dragon por el formulario de contacto,aun recuerdo el viejo theme de antes.Muy buen articulo y lastima que la revista se perdio.

Pd:Por cierto tenes un 404 en el link de la comparativa :
https://www.ietf.org/rfc/rfc2979.txtComparativas%20de%20firewalls%20personales