Está en la página 1de 14

Asegurando Linux

Julián Rodríguez

Whitepaper

Asegurando Linux
Protegiendo Nuestro Sistema

20 de Julio del 2008

Page 1
Asegurando Linux
Julián Rodríguez

Eres libre de:

Copiar, Distribuir y Comunicar públicamente la obra.

Bajo las condiciones siguientes:

Atribución. You must attribute this work to Julian Antonio Rodriguez Vergara (with link).

No comercial. No puedes utilizar esta obra para fines comerciales.

No Derivadas. No está permitido que alteres, transformes o generes una obra derivada a partir de esta obra.

 Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra.
 Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de
autor
 Nada en esta licencia menoscaba o restringe los derechos morales del autor.

Creative Commons

Page 2
Asegurando Linux
Julián Rodríguez

Al instalar un sistema bajo entorno Unix lo primero que nos preocupa es la seguridad de nuestros datos,
archivos, carpetas y documentos. En este documento vamos a explicar y detallar como asegurar nuestro sistema
para prevenir ataques, y evitar las formas mas comunes de intrusión; el documento, comandos y ejemplos son
probados bajo Slackware 12.0.0 , Kernel 2.6.21.5 y entorno de escritorio KDE.

 Remover RPMs Innecesarios

Al manejar un sistema tenemos que obtener mayor provecho de las características del mismo por lo cual
cualquier detalle que nos haga obtener mayor rendimiento puede ser muy importante por lo cual en este paso
vamos a remover todos los rpm innecesarios.

[root@root] ~# rpm -qa

Un comando para eliminar rpms que ya no necesitamos en el sistema es el siguiente el cual les puede ayudar
a liberar espacio en el disco duro y producir más rendimiento:

[root@root] ~# rpm -e <paquete>

Un problema que puede resultar a la hora de estar removiendo paquetes rpms es que no nos de autorización
ya que el proceso aun esta corriendo por lo cual tenemos que ejecutar en consola lo siguiente:

[root@root] ~# /etc/rc.d/init.d/service stop

Si lo que queremos hacer es volver a poner nuestro servicio en ejecución tenemos que hacer lo mismo pero
simplemente sustituyendo la palabra “stop” por “start” como en el siguiente ejemplo:

[root@root] ~# /etc/rc.d/init.d/service start

Page 3
Asegurando Linux
Julián Rodríguez

 Detectar Puertos a la escucha

Uno de los problemas mas comunes es detectar backdoors en nuestro sistema por lo cual podemos utilizar
netstat para verificar que puertos se encuentran a la escucha, ya que con esto se pueden hacer conexiones
reversas a otras maquinas; esto se hace para poder burlar la seguridad de los Firewall.

[root@root] ~# netstat -tulp


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 *:bootpc *:* 3210/dhcpcd

Como ejemplo deje el output de mí maquina para que pudieran observar un ejemplo real; en el output
anterior de nuestro sistema podemos ver que todo se encuentra en perfecto estado, pero si nuestro sistema
estuviera con un puerto a la escucha, la respuesta del programa seria como la siguiente:

[root@root] ~# netstat -tlup


Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:9666 *:* LISTEN 4791/nc
udp 0 0 *:bootpc *:* 3210/dhcpcd

En el ejemplo anterior vemos como existe un puerto a la escucha ( Transfer Control Protocol ) el cual es el
puerto 9666 , la manera de detener este tipo de ataques silenciosos es primeramente matar el proceso para que
no siga corriendo el backdoor; por lo cual ejecutaremos lo siguiente para obtener el PID y matar al programa en
ejecución :

[root@root] ~# ps aux | grep nc


root 4922 0.0 0.0 1692 600 pts/2 S+ 12:22 0:00 nc -vv -l -p 9666

Ahora que ya tenemos el PID ( 4922 ) podemos matar el proceso con el siguiente comando :

[root@root] ~# kill -9 4922

El parámetro -9 es un tipo de termino de proceso especial el cual no nos dará problemas para terminar el
backdoor en nuestro sistema. ( Nota: El parámetro funciona cuando estas con el usuario root ).

Page 4
Asegurando Linux
Julián Rodríguez

Otra forma de obtener información sobre los puertos que se encuentran abiertos en nuestra maquina es correr
un escáner como Nmap, esta herramienta es desarrollada por Insecure.
Usted puede ejecutar un escaneo simple para detectar puertos a la escucha, citare un ejemplo de como puede
ser el resultado:

[root@root] ~# nmap xxx.xxx.xxx.xxx

Starting Nmap 4.60 ( http://nmap.org ) at 2008-7-20 12:36 MDT


Interesting ports on localhost (xxx.xxx.xxx.xxx):
Not shown: 1714 closed ports
PORT STATE SERVICE
5555/tcp open freeciv

Nmap done: 1 IP address (1 host up) scanned in 0.194 seconds

Aquí se puede detectar que nuestro sistema tiene el puerto abierto 5555, para verificar si realmente esta en
uso podemos averiguar información sobre este puerto, en este caso freeciv es un video juego para computadora
el cual nuestro sistema obviamente no contiene por lo cual podemos deducir fácilmente que nuestro sistema
esta comprometido con una puerta trasera para el atacante.

Page 5
Asegurando Linux
Julián Rodríguez

 Detectando Rootkits

Un rootkit es un conjunto de programas que un atacante infiltra a nuestro sistema para seguir obteniendo
permisos root, mantener el control del sistema y tener todo bajo control. Esto afecta archivos, procesos y
llamadas al sistema por lo cual puede ser bastante complicado detectar un rootkit en nuestro sistema pero para
esto tenemos herramientas como RkHunter (1.3.2). Descarga: http://sourceforge.net/projects/rkhunter/

[root@root] ~# tar -xzvf rkhunter-1.3.2.tar.gz


[root@root] ~# cd rkhunter-1.3.2
[root@root] ~# ./installer.sh

Después de haber ejecutado la instalación de nuestra herramienta para detectar rootkits podemos hacer varias
cosas pero lo primero que realizaremos será un simple escaneo a nuestro sistema para que nos informe cuales
son las partes mas sensibles del mismo y si realmente existe un rootkit.

[root@root] ~# rkhunter -c

El parámetro que utilizamos ( -c ) significa “check local system” por lo cual el output de nuestro programa
será algo largo quizá con “Warnings” o sin ellos pero hay que prestar atención a cuales son los puntos que nos
marca como vulnerables.
Existe una manera de hacer escaneos diarios a nuestro sistema y recibir los resultados a nuestro e-mail por lo
cual podemos estar monitoreando una red de sistemas desde otro lugar por lo cual puede ser bastante cómodo
para un administrador.

[root@root] ~# nano /etc/crondaily/rkhunter.sh

Después de que nano abra el archivo rkhunter.sh agregamos las siguientes líneas:

[root@root] ~#
#!/bin/bash
(/usr/local/bin/rkhunter -c --cronjob 2>&1 | mail -s “Reporte diario de RkHunter" tucorreo@gmail.com)

Aquí simplemente guardamos nuestro archivo correctamente y a partir de ese momento podremos recibir
nuestros resultados del escaneo que realice RkHunter en nuestro sistema.

Page 6
Asegurando Linux
Julián Rodríguez

 Firewall para Linux

Mantener control sobre los servicios que presta nuestro sistema es algo muy importante pero también hay que
mantener un régimen dentro de los protocolos que se utilizan para evitar intrusiones y proteger la información
sensible que estemos manejando por lo cual un Firewall es indispensable.

[root@root] ~# wget http://prdownloads.sourcefoge.net/firestarter/firestarter-1.0.3.tar.gz?download


[root@root] ~# tar -xzvf firestarter-1.0.3.tar.gz
[root@root] ~# cd firestarter-1.0.3
[root@root] ~# ./configure sysconfdir=/etc
[root@root] ~# make
[root@root] ~# make install

Para esto simplemente con ejecutar en modo consola el programa comenzara su interfaz grafica y comenzara
a trabajar en nuestro sistema pero lo recomendable es que comience junto con el sistema por lo cual para
agregarlo al startup es muy fácil dentro de algunos desktops como Gnome pero en este caso pondré la manera
de realizarlo dentro de KDE.

[root@root] ~# ln -s /usr/bin/firestarter ~/.kde/Autostart/firestarterlink

Espero que este pequeño tip les funcione para mantener su sistema muy bien protegido desde el comienzo de
este, al igual que con otras aplicaciones de seguridad como el RkHunter que antes se hablo de el.

Page 7
Asegurando Linux
Julián Rodríguez

 Asegurando SSH

Que significa SSH ? Significa Secure Shell el cual permite a un usuario conectarse a la maquina
remotamente para mantener control de ella bajo entornos seguros. Pero confiar en los parámetros por defecto es
un gran error por lo cual nosotros vamos a personalizar la configuración y hacerlo realmente seguro.

Muchos servicios que se manejan en la red como telenet, rlogin, rsh no son muy seguros por lo cual es
recomendable utilizar ssh ya que nos brinda mas seguridad para realizar conexiones. El problema de esto son
las configuraciones por defecto por lo cual comenzaremos a cambiar las siguiente cosas, el archivo de
configuración se encuentra en /etc/ssh/sshd_config.

[root@root] ~# nano /etc/ssh/sshd_config

Cambiamos los parametros a lo siguiente :

 PermitRootLogin no
 UsePrivilegeSeparation yes # Esto nos ayudara a mantener control dentro de los comandos que corren.
 Protocol 2 # Limitando el protocolo a la version 2.
 AllowTcpFowarding no # Si no lo necesitan.
 X11Fowarding no # Si no lo necesitan.
 StrictModes yes # Si algún tipo de autentificación falla no dejara que el usuario se logee de nuevo.
 IgnoreRhosts yes # Métodos principales para la autentificación.
 HostbasedAuthentification no
 RhostRSAAuthentification no
 #Subsystem sftp /usr/lib/misc/sftp-server # La almohadilla para quitar este servicio.

Después de haber cambiado estos parámetros por defecto podrán confiar mas en que su servicio SSH estará
mas seguro simplemente para ver los cambios en ejecución tienen que volver a comenzar el proceso por lo cual
simplemente ejecutan en su consola lo siguiente :

[root@root] ~# /etc/init.d/sshd restart

Page 8
Asegurando Linux
Julián Rodríguez

 IDS – Intrusion Detection System

El mantener un IDS dentro de nuestro sistema es muy importante. Esto puede ser usado para detectar
movimientos dentro del sistema que puedan comprometer los datos que estamos protegiendo ya sea malware
( virus, troyanos, worms ) o ataques directamente al sistema; un IDS tiene diferentes componentes que lo
constituyen como censores que genera eventos de seguridad para proteger el sistema, una consola para
monitorear eventos, alertas y tener el control de los censores del IDS y un motor central que es lo importante
del IDS que maneja a los censores y la consola.

Descargando snort ( No hacen falta explicaciones los comandos son muy básicos, puede que algunos nombres
de los folders no concuerden por lo cual deben de estar atentos en este tipo de detalles. ) :

[root@root] ~# cd /user/home/

[root@root] ~# mkdir .snortids

[root@root] ~# cd .snortids

[root@root] ~# wget http://www.snort.org/dl/current/snort-2.8.2.1.tar.gz

[root@root] ~# tar -xzvf http://www.snort.org/dl/current/snort-2.8.2.1.tar.gz

[root@root] ~# rm snort-2.8.2.1.tar.gz

[root@root] ~# wget
http://www.snort.org/pub-bin/downloads.cgi/Download/sub_rules/snortrules-snapshot-2.8_s.tar.gz

[root@root] ~# mv snortrules-snapshot-2.8_s.tar.gz /usr/home/.snotids/snort-2.8.2.1

[root@root] ~# cd snort-2.8.2.1

[root@root] ~# tar -xvzf snortrules-pr-2.8.tar.gz

[root@root] ~# rm snortrules-pr-2.8.tar.gz

Ahora la base de nuestro Snort esta funcionando, simplemente instalamos.

[root@root] ~# ./configure --enable-dynamicplugin


[root@root] ~# make
[root@root] ~# make install

Page 9
Asegurando Linux
Julián Rodríguez

Ya que termino la instalación es hora de hacer algunos cambios en el snort.conf y terminar de crear algunos
folders para que se guarden correctamente los logs de Snort ( IDS ).

[root@root] ~# mkdir /etc/snort


[root@root] ~# mkdir /etc/snort/rules
[root@root] ~# mkdir /var/log/snort

Ahora vamos al proceso de los logs y algunas modificaciones mas.

[root@root] ~# cd snort-2.8.x.x
[root@root] ~# cd rules
[root@root] ~# cp * /etc/snort/rules
[root@root] ~# cd ../etc
[root@root] ~# cp * /etc/snort

Ahora que hicimos estos cambios es hora de que cambiemos los parámetros de snort.conf:

[root@root] ~# cd /etc/snort
[root@root] ~# nano snort.conf

Y los cambios que tenemos que realizar son los siguientes :

"var HOME_NET any" -> "var HOME_NET xxx.xxx.xxx.xxx/xx"


"var EXTERNAL_NET any" -> "var EXTERNAL_NET !$HOME_NET"
"var RULE_PATH ../rules" -> "var RULE_PATH /etc/snort/rules"

Ahora simplemente para correrlo ponemos el siguiente comando:

[root@root] ~# snort –u snort –c /etc/snort/snort.conf

Esto pueden agregarlo a algún .sh y después agregan la ejecución del archivo a el startup con esto su snort
estará trabajando desde que inicie el sistema al igual que con Firestarter ( Firewall ).

Page 10
Asegurando Linux
Julián Rodríguez

 Permisos de Folders

Uno de los mayores problemas que se puede presentar en un sistema que no ha recibido ningún tipo de
mantenimiento son las configuraciones por defecto y uno de ellos puede ser que los folders que contienen
mucha importancia deberían de tener determinados tipos de permisos. Aquí dejare un tabla que tal vez les
pueda ayudar para cambiar permisos y mantener todo en orden en caso de una intrusión. Estas son solo
pequeñas trabas que hacen que el atacante se de por vencido si es que no tiene mucha experiencia manejando
sistemas.

/bin/ root.root 711


/boot/ root.root 700
/dev/ root.root 711
/dev/audio* root.audio 600
/dev/dsp* root.audio 600
/etc/ root.adm 711
/etc/conf.modules root.adm 640
/etc/cron.daily/ root.adm 750
/etc/cron.hourly/ root.adm 750
/etc/cron.monthly/ root.adm 750
/etc/cron.weekly/ root.adm 750
/etc/crontab root.adm 640
/etc/dhcpcd/ root.adm 750
/etc/dhcpcd/* root.adm 640
/etc/esd.conf root.audio 640
/etc/ftpaccess root.adm 640
/etc/ftpconversions root.adm 640
/etc/ftpgroups root.adm 640
/etc/ftphosts root.adm 640
/etc/ftpusers root.adm 640
/etc/gettydefs root.adm 640
/etc/hosts.allow root.adm 640
/etc/hosts.deny root.adm 640
/etc/hosts.equiv root.adm 640
/etc/inetd.conf root.adm 640
/etc/rc.d/init.d/ root.adm 750
/etc/rc.d/init.d/syslog root.adm 740
/etc/inittab root.adm 640
/etc/ld.so.conf root.adm 640
/etc/lilo.conf root.adm 600
/etc/modules.conf root.adm 640

Page 11
Asegurando Linux
Julián Rodríguez

/etc/motd root.adm 644


/etc/printcap root.lp 640
/etc/profile root.root 644
/etc/rc.d/ root.adm 640
/etc/securetty root.adm 640
/etc/sendmail.cf root.adm 640
/etc/shutdown.allow root.root 600
/etc/ssh_config root.root 644
/etc/ssh_host_key root.adm 640
/etc/ssh_host_key.pub root.adm 644
/etc/sshd_config root.adm 640
/etc/syslog.conf root.adm 640
/etc/updatedb.conf root.adm 640
/home/ root.adm 751
/home/* current 700
/lib/ root.adm 751
/mnt/ root.adm 750
/root/ root.root 700
/sbin/ root.adm 751
/tmp/ root.root 1777
/usr/ root.adm 751
/usr/* root.adm 751
/usr/X11R6/ root.xgrp 751
/usr/bin/ root.adm 751
/usr/bin/* root.root 755
/usr/sbin/ root.adm 751
/usr/sbin/* root.root 755
/var/ root.root 755
/var/log/ root.root 711
/var/log/* root.root 600
/var/spool/mail/ root.mail 771

Algunos de los grupos en la lista que se presento puede que no existan en tu sistema por lo cual deberías
crearlos para mantener tu sistema mas seguro y evitar problemas.

Page 12
Asegurando Linux
Julián Rodríguez

 Asegurando PAM

PAM son las iniciales de Pluggable Authentication Modules. La mayoría de las distribuciones linux corren
PAM por lo cual es muy importante darle su debido mantenimiento. Los módulos de PAM se encuentran en las
siguientes rutas :

- /etc/pam.d/
- /etc/security/
- /etc/pam.d/

Muchos de los ataques mas recientes ( '08 ) y que están en su apogeo son los ataques Ddos, la denegación de
servicio es un ataque común cuando un atacante simplemente lo que quiere es que el sistema no siga
funcionando ya que por determinadas circunstancias no tiene los medios para realizar una intrusión. Así que
aseguremos nuestro PAM para evitar ataques tan molestos como la denegación de servicio, abramos el archivo
limits.conf con nano o algún otro editor :

[root@root] ~# nano /etc/security/limits.conf

Lo que nos mostrara nuestra consola será lo siguiente ( Elimine parte del output porque en este caso puede
resultar innecesario ) :

# ...
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4

# End of file

Los parametros que tenemos agregar son los siguientes :

# Limit user processes


* soft nproc 100
* hard nproc 150

Con esto vamos a restringir acceso a aquellos usuarios que pasen de nuestro limite que en este caso son 40 MB.

# limits size of any one of users' files" /etc/security/limits.conf

* hard 40000

Page 13
Asegurando Linux
Julián Rodríguez

Conclusión

Este documento es una pequeña guía que muestra algunos tips o métodos para asegurar nuestro sistema de
ataques y detalles que hacen que nuestro sistema este bien asegurado junto con que nuestra información
permanecerá en total privacidad.

Créditos

Autor: Julián Antonio Rodríguez Vergara


Website: http://www.julianrdz.uni.cc
Contacto: julianrdz91@gmail.com

Page 14

También podría gustarte