Seguridad en Linux walc2012def

Anuncio
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
WALC 2012
PRACTICA DE LABORATORIO.
Practicas básicas de de seguridad en Linux
El objetivo de esta práctica es dar a conocer los mecanismos mínimos para asegurar un sistema
Linux.
Desarrollo Práctico
Parte 1. Servicios en ejecución
En esta sección el objetivo es detener los servicios en ejecución que no se están utilizando.
a. Una vez instalado su sistema debe comenzar por revisar que puertos están abiertos, para
ello utilice el nmapcon esto se podrá determinar que servicios de red se están ejecutando:
#nmap localhost
Starting Nmap 5.00 ( http://nmap.org ) at 2012-09-11 15:06 EDT
Interesting ports on localhost (127.0.0.1):
Not shown: 996 closed ports
PORT
STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
b. Para determinar que otros servicios están corriendo primero debe saber que nivel de
ejecución (runlevel) esta utilizando, para esto utilice el comando runlevel y luego liste los
servicios de arrancan y se detienen en el nivel 2:
# runlevel
N2
# ls /etc/rc2.d/
README
S17rsyslog S19atd S19mpt-statusd S22rc.local
S14portmap
S18apache2 S19cron S19ssh
S22rmnologin
S15nfs-common S19acpid S19exim4 S21bootlogs
S22stop-bootlogd
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
c. Para impedir que los servicios que no se están utilizando se ejecuten utilice el comando
update-rc.d (Ejemplo):
# update-rc.d -f exim4 remove
update-rc.d: using dependency based boot sequencing
d. Una vez que se impida el arranque de estos servicios hay que detenerlos (Ejemplo):
# /etc/init.d/exim4 stop
Stopping MTA: exim4_listener
e. Una vez realizado este paso revise nuevamente su maquina con el nmap y revise su
directorio /etc/rc2.d/. Recuerde que solo debe dejar activos los servicios que va ha utilizar.
f. ¿Que sucede si usted desea determinar que demonio esta escuchando conexiones de red
por un determinado puerto? Discuta su respuesta.
________________________________________________________________________
________________________________________________________________________
________________________________________________________________________
________________________________________
Parte 2. Instalación de un firewall básico
Construya o instale un firewall:
a. Primero revise cuales reglas de firewall tiene su maquina activa
# iptables -L
b. Realice ping a la maquina virtual (Desde su máquina real )
# ping LA-IP-DE-SU-MAQUINA-VIRTUAL
Para configura las reglas de iptables debe usa políticas por omisión tales como:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
c. Coloque estas reglas básicas
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
# iptables -A OUTPUT -p ALL -m state --state ESTABLISHED,RELATED
-j ACCEPT
# iptables -A OUTPUT -p TCP -d 0.0.0.0/0 --destination-port 22 -m state --state NEW -j ACCEPT
# iptables -A OUTPUT -p TCP -d 0.0.0.0/0 --destination-port 80 -m state --state NEW -j ACCEPT
# iptables -A OUTPUT -p UDP -d 0.0.0.0/0 --destination-port 53 -j ACCEPT
# iptables -A INPUT -p ALL -m state --state ESTABLISHED,RELATED
-j ACCEPT
# iptables -A INPUT -p tcp -s 0.0.0.0/0 --destination-port 80 -m state --state NEW -j ACCEPT
# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
d. Realice nuevamente ping a la maquina de su compañero. Que resultado obtuvo.
Parte 2.1 Parametros del kernel
Adicionalmente a las reglas de Firewall que pueda configurar en su maquina se recomienda
configurar las opciones de red del kernel al momento del encendido.
a. Edite el archivo /etc/sysctl.conf y descómete las siguientes líneas:
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward=0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.all.accept_source_route = 0
b. Ejecute el comando sysctl -p
# sysctl -p
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Parte 2.2 Golpeo de puertos (Port knocking)
El golpeo de puertos o port knocking es un mecanismo para abrir puertos en un firewall
mediante una secuencia preestablecida de intentos de conexión a puertos que se encuentran
cerrados. Una vez que el firewall recibe la secuencia de conexión correcta, sus reglas son
modificadas para permitir a la IP que realizó los intentos conectarse a un puerto específico.
a. Instale el paquete del port knocking
# aptitude install knockd
b. Edite el archivo de configuración para permitir que el servicio arranque
# nano /etc/default/knockd
# control if we start knockd at init or not
# 1 = start
# anything else = don't start
START_KNOCKD=1
# command line options
#KNOCKD_OPTS="-i eth0"
c. Edite el archivo de configuración para de las reglas del paquete knockd
# nano /etc/knockd.conf
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence
= 7001,8001
seq_timeout = 45
command
= /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence
= 9000,8000
seq_timeout = 45
command
= /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn
d. Arranque el servicio para comenzar a utilizarlo
# /etc/init.d/knockd start
e. Para abrir el puerto de la maquina destino se debe enviar la secuencia de apertura
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
IP-de-la-maquina-destino 7001 8001
f. Una vez enviada la secuencia de apertura se procede a establecer la conexión SSH
# ssh IP-de-la-maquina-destino
g. Compruebe que puede que sucede luego de la secuencia de apertura
h. Se pueden observar la bitácora de la apertura con el comando
# tail /var/log/knockd.log
Parte 3.Configuración del TCP Wrappers
Para configurar el TCP Wrappers los archivos de configuración son el /etc/hosts.allow y el
/etc/hosts.deny
a. En el archivo el /etc/hosts.allow configure su maquina para solo aceptar conexiones ssh
desde su red:
# vi /etc/hosts.allow
sshd: 192.168..X.Y/255.255.255.Z
b. Para negar el acceso a el resto de los servicios escriba en el /etc/hosts.deny
# vi /etc/hosts.deny
ALL:ALL except 127.0.0.1: Deny
Parte 4. Búsqueda de rootkits
Los rootkit son herramientas que tiene como finalidad esconderse a sí misma y esconder a
otros programas, procesos, archivos, directorios, llaves de registro, y puertos que permiten a
un intruso mantener el acceso a un sistema para remotamente poder ejecutar acciones o
extraer información.
a. Instalar los buscadores de rootkits
# aptitude install chkrootkit rkhunter
b. Ejecutar el chkrootkit y analizar la salida (esta operación tomara varios minutos)
# chkrootkit
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
c. Actualizar el rkhunter y ejecutarlo (esta operación tomara varios minutos)
# rkhunter --update
# rkhunter -c --sk
d. Discuta los resultado obtenidos
e. Puede revisar la bitácora del rkhunter con el siguiente comando
# more /var/log/rkhunter.log
Parte 5.Configuración del tripwire
En esta sección se configurar un IDS de target como es el caso Tripwire.
a. Instalar el tripwire
# aptitude install tripwire
b. Siga las intrusiones que se presentan por pantalla
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
c. Siga las instrucciones y coloque las contraseñas que se le soliciten. Importante Las
contraseñas Tripwire deben de ser diferentes de las de root o de cualquier otra contraseña
del sistema. Use contraseñas únicas tanto para la clave del sitio como para la local.
Introduzca la contraseña de sitio (site-key) y su confirmación La clave de sitio se usa para
proteger los archivos de políticas y los de configuración.
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
d. Introduzca la contraseña local (local key) y su confirmación. La clave local se utiliza para
firmar los informes generados tras las comprobaciones de integridad.
e. Una vez realizado el paso anterior hay que inicializar la base de datos del tripwire,
mediante el comando:
# tripwire --init
f. Una vez inicializada la base de datos ejecute una revisión del sistema mediante el
comando
# tripwire --check
Esta revisión debe hacerse periódicamente por tanto por omisión por tanto tripwire añade
un script llamado tripwire-check al directorio /etc/cron.daily/. Este script
automáticamente un control de integridad una vez al día.
ejecuta
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
g. Para visualizar los reportes del tripwire ejecute los siguientes comandos:
# cd /var/lib/tripwire/report/
# ls
debian-20120911-152322.twr
h. Para visualizar este reporte ejecute el comando:
# twprint --print-report --twrfile debian-20120911-152322.twr
Note: Report is not encrypted.
Open Source Tripwire(R) 2.4.1 Integrity Check Report
Report generated by:
root
Report created on:
Thu Oct 11 15:23:22 2012
Database last updated on:
Never
===============================================================================
Report Summary:
===============================================================================
Host name:
debian
Host IP address:
Host ID:
127.0.1.1
None
Policy file used:
/etc/tripwire/tw.pol
Configuration file used:
Database file used:
/etc/tripwire/tw.cfg
/var/lib/tripwire/debian.twd
Command line used:
tripwire --check
===============================================================================
Rule Summary:
===============================================================================
------------------------------------------------------------------------------Section: Unix File System
-------------------------------------------------------------------------------
Rule Name
---------
Severity Level Added Removed Modified
--------------
Invariant Directories
* Tripwire Data Files
Other binaries
Tripwire Binaries
Other libraries
-----
66
100
66
------- -------0
1
0
100
66
0
0
0
0
0
0
0
0
0
0
0
0
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Root file-system executables 100
0
0
0
System boot changes
100
0
0
0
Root file-system libraries
100
0
0
0
Critical system boot files
100
0
0
0
Other configuration files
66
0
0
0
(/lib)
(/etc)
Boot Scripts
100
0
0
0
Security Control
66
0
0
0
* Root config files
100
0
0
1
* Devices & Kernel information 100
211
152
0
Total objects scanned: 24060
Total violations found: 365
Parte 6. Revisión de logs del sistema
Para facilitar la visualización de los mismos puede usar herramientas tales como
logwatch.
Ejemplo:
# aptitude install logwatch
# logwatch --detail High --range All | more
Analice el resultado.
Parte 7. Prueba de los password del sistema
Para esta sección de la práctica trataremos de encontrar password fáciles de romper por
medio de la herramienta John de Ripper. Para esto copiaremos el archivo /etc/shadow en
el directorio /root y luego se ejecutara John.
a. Instale el paquete con el comando:
# aptitude install john
b. Ejecute John de Ripper:
# john /etc/apache2/users.dat &
c. Ejecute el siguiente comando para ver el progreso de el proceso:
# john -show /etc/apache2/users.dat
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Parte 8. Llaves para conexiones SSH
Para establecer conexión ssh de forma más segura los usuarios deben autentificarse en los
servidores mediante le uso de llaves, para ello se debe seguir los siguientes pasos:
a. Generar la llaves
# ssh-keygen -t dsa -b 1024
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
 introduzca un password
Enter same passphrase again:
 introduzca el password nuevamente
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
30:6c:73:a9:af:f7:b4:99:88:74:47:6a:26:b9:f2:e6 root@debian
b. Copie la llave recientemente generada al la maquina al la cual desea conectarse (cuidad
asegures de la identidad de la maquina destino)
# ssh-copy-id -i /root/.ssh/id_dsa.pub
root@IP-de-la-maquina-destino
The authenticity of host `IP-de-la-maquina-destino' can't be established.
RSA key fingerprint is 30:6c:73:a9:af:f7:b4:99:88:74:47:6a:26:b9:f2:e6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
root@IP-de-la-maquina-destino's password:  introduzca el password de root de la maquina destino
Now try logging into the machine, with "root@IP-de-la-maquina-destino", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
c. Establezca una conexión SSH al la maquina destino usada en el paso anterior
# ssh root@IP-de-la-maquina-destino
Enter passphrase for key '/root/.ssh/id_dsa':  introduzca el password utilizado en el paso “a”
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@nombre-de-la-maq-dest:~$
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Parte 9. Instalación de mod-chroot para asegurar el servidor Web
Mod-chroot sirve para enjaular las aplicaciones, restringiendo asi el acceso a el sistema de
archivos del host.
a. Para esto instalamos y habilitamos el modulo
# apt-get install libapache2-mod-chroot
# a2enmod mod_chroot
# /etc/init.d/apache2 restart
b. Creamos la estructura de directorios necesaria
# mkdir -p /var/www/var/
# mkdir -p /var/www/var/run
# cd /var/www/var
# ln -s ../../ www
# mkdir -p /var/www/etc
# mkdir -p /var/www/lib
# mkdir -p /var/www/var/run/apache2
# chown -R root:root /var/www/var/run
# cp /etc/mime.types /var/www/etc/
# cp /lib/libgcc_s.so.1 /var/www/lib
c. Editamos el archivo /etc/apache2/apache2.conf y agregamos al final la línea
ChrootDir /var/www
d. Detenemos el servicio, creamos un enlace para el pid y se arranca de nuevo el servicio
# /etc/init.d/apache2 stop
# sleep 10 && ln -s /var/www/var/run/apache2.pid /var/run/apache2.pid
# /etc/init.d/apache2 start
e. Revisamos el archivo de log de apache para ver que no existan problemas
# tail /var/log/apache2/error.log
Parte 10. Instalación de mod-evasive para mitigar ataques de DoS en
el servidor Web
Mod-evasive sirve para mitigar ataques de DoS en el servidor Web, y asi poder servir a
los clientes reales.
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
a. Para esto instalamos el modulo
# apt-get install libapache2-mod-evasive
b. Creamos la estructura para los archivos de logs
# mkdir /var/log/mod_evasive
# chown www-data:www-data /var/log/mod_evasive/
c. Configuramos el modulo
# vi /etc/apache2/mods-available/mod-evasive.conf
<ifmodule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 10
DOSLogDir /var/log/mod_evasive
#DOSWhitelist 127.0.0.1
</ifmodule>
d. Habilitamos el modulo y se reinicia el servicio
# a2enmod mod-evasive
# /etc/init.d/apache2 restart
e. Realizamos una prueba del funcionamiento del modulo
# perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl | more
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
Parte 11. Instalación de mod-security para asegurar el servidor Web
Mod-security es un firewall de aplicaciones Web que ejecuta como módulo del servidor
Web (Apache), El mismo se utiliza un modulo que se encarga de proporcionarle un nivel
de seguridad adicional a nuestro servidor Web
es muy potente, flexible y fácil de
personalizar.
f. Para observar con facilidad los efectos del mismo se procederá a verificar la firma del
servidor Web previa a la configuración del mod-security.
# nmap localhost -sV -p 80
Starting Nmap 5.00 ( http://nmap.org ) at 2012-10-11 15:38 EDT
Interesting ports on localhost (127.0.0.1):
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.2.16 ((Debian))
g. Para instalar el modulo debemos ejecutar el siguiente comando
# aptitude install libapache-mod-security
h. Para copiar las reglas debemos copiarlas de al ubicación actual a la configuración de
apache
# cp /root/reglas-modsec/* /etc/apache2/conf.d/
i. Cree el directorio para los LOGS
# mkdir /var/log/mod_sec
# chown www-data:www-data /var/log/mod_sec/
j. Edite el archivo de configuración de servidor Web /etc/apache2/httpd.conf y agregue las
siguiente líneas
# nano /etc/apache2/httpd.conf
ServerSignature Off
ServerTokens Full
k. Active el modulo
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
# a2enmod mod-security
l. Reinicie el servidor Web
# /etc/init.d/apache2 restart
m. Trate de acceder al servidor web y verifique que sucede, revise los log y la firma de la
versión del servicio
Parte 12. Correcto montado de las particiones
Para aumentar la seguridad de los servidores se deben montar las particiones de forma
correcta.
a. Primero instalamos el paquete que se utiliza para las cuotas
# aptitude install quota
b. Para montar las particiones de forma correcta se debe editar el archivo /etc/fstab
# nano /etc/fstab
///archivo original ///
# /etc/fstab: static file system information.
#
# <file system> <mount point>
<type> <options>
<dump> <pass>
proc
/proc
proc
defaults
0
0
/dev/sda2
/
ext3
defaults,errors=remount-ro 0
/dev/sda1
/boot
ext3
defaults
0
2
/dev/sda5
/home
ext3
defaults
0
2
/dev/sda11
/opt
ext3
defaults
0
2
/dev/sda9
/tmp
ext3
defaults
0
2
/dev/sda6
/usr
ext3
defaults
0
2
/dev/sda10
/usr/local
ext3
defaults
0
2
/dev/sda7
/var
ext3
defaults
0
2
/dev/sda8
/var/log
ext3
defaults
0
2
/dev/sda3
none
swap
sw
0
0
/dev/hdc
/media/cdrom0
udf,iso9660 user,noauto
0
0
/dev/fd0
/media/floppy0 auto
rw,user,noauto 0
0
1
///archivo modificado ///
# /etc/fstab: static file system information.
#
# <file system> <mount point>
<type> <options>
<dump> <pass>
proc
/proc
proc
defaults
0
0
/dev/sda2
/
ext3
defaults,errors=remount-ro 0
1
/dev/sda1
/boot
ext3
noauto,noatime
0
2
/dev/sda5
/home
ext3
rw,nosuid,nodev,exec,auto,nouser,async,usrquota,grpquota
/dev/sda11
/opt
ext3
defaults
0
2
/dev/sda9
/tmp
ext3
defaults,nodev,nosuid,noexec,usrquota,grpquota
0
/dev/sda6
/usr
ext3
defaults,ro,nodev
0
2
/dev/sda10
/usr/local
ext3
defaults
0
2
/dev/sda7
/var
ext3
defaults,nodev,usrquota,grpquota
0
2
/dev/sda8
/var/log
ext3
defaults,nodev,nosuid,noexec
0
2
/dev/sda3
none
swap
sw
0
0
/dev/hdc
/media/cdrom0
udf,iso9660 user,noauto
0
0
/dev/fd0
/media/floppy0 auto
rw,user,noauto 0
0
0
2
2
Prácticas de Laboratorio
Practicas básicas de de seguridad en Linux
c. Para que el sistema de pueda actualizar de forma correcta se debe modificar el archivo
/etc/apt/apt.conf.
# nano /etc/apt/apt.conf
DPkg
{
Pre-Invoke { "mount /usr -o remount,rw" };
Pre-Invoke { "mount /boot" };
Pre-Invoke { "mount -o remount,exec /tmp" };
Post-Invoke { "mount /usr -o remount,ro" };
Post-Invoke { "umount /boot" };
Post-Invoke { "mount -o remount /tmp" };
};
Descargar