Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. INTRODUCCIN
Este curso es una introduccin a la realizacin de la configuracin del sistema Linux y
endurecimiento opiniones. Este curso se detallan todos los pasos y ofrece ejemplos de
cuestiones que por lo general se pueden identificar en un servidor Linux. Ms que una forma
de comprobar un sistema Linux, este ejercicio debe ser visto como un modo general a
acercarse a una revisin de acogida y entender lo que los problemas de seguridad estn
presentes.
2.3. Licencia
Se le permite compartir y redistribuir el contenido del curso a los estudiantes que se estn
ejecutando para la formacin (con una licencia de entrenador), sin embargo no se le permite
para que est disponible en Internet o revenderlo. La aplicacin vulnerable (por ejemplo:
cdigo fuente, imagen virtual) no se puede proporcionar a los estudiantes. Slo durante el
entrenamiento el acceso puede ser proporcionada.
3. OPININ ANFITRIN
3.1. La comprensin de las funciones del sistema
Antes de comenzar cualquier revisin de la configuracin, es importante entender lo que el
sistema se utiliza para. Los requisitos de exposicin y de seguridad variarn segn el propsito
del sistema, por ejemplo, un servidor web en Internet y un servidor de archivos en la red
interna tienen totalmente diferentes modelos de seguridad. Aqu el sistema es un servidor
web disponible en Internet y que se utiliza para servir a una aplicacin web PHP (un blog de
Wordpress). Nada ms se utiliza o necesita en este sistema.
Este sistema se supone que estar disponible en Internet, es por lo tanto, propensos a ser
atacados de forma remota y es casi seguro que tienen ataques de fuerza bruta a cabo en
contra de ella.
A continuacin, puede iniciar el registro pulsando Ctrl-a y luego una H, el siguiente debera
aparecer:
Creating logfile "screenlog.0"
Creacin de archivo de registro "screenlog.0"
A continuacin, puede realizar su revisin del sistema. Una vez que haya terminado, usted
puede utilizar la misma combinacin de teclas para detener la tala: Ctrl-a y luego H. El
siguiente debera aparecer ahora:
Logfile "screenlog.0" closed.
Archivo de registro "screenlog.0" cerrado.
Para todos los comandos corrieron durante la revisin, que es una buena cosa a tener la salida.
Una buena manera de hacer esto es crear un directorio en /tmp para poner todo:
# mkdir /tmp/audit
Y a continuacin, ejecutar todos los comandos de una sola vez para obtener la informacin y
otra vez para guardar los resultados (salida estndar y error estndar) a un archivo en este
directorio:
# uname
Linux
# Uname y> /tmp/audit/uname.txt
Por ltimo, si usted necesita para leer los archivos, abrirlos en modo de slo lectura. Usted
puede hacer que el uso de:
-
4.2. Kernel
La versin del kernel puede ser recuperada mediante el comando uname:
# Uname -a
Linux Debian 2.6.32-5-amd64 # 1 SMP dom 06 de mayo 04:00:17 UTC 2012 x86_64
GNU / Linux
Sobre la base de esta informacin de la versin, es necesario identificar si las vulnerabilidades
se han publicado para esta versin especfica. Asegrese de que usted est mirando esta
versin con la lista de vulnerabilidades de distribucin, como la mayora de las distribuciones
de Linux backport parches sin cambiar la versin mayor y menor del ncleo.
Comprobacin del tiempo de actividad de un sistema Linux tambin puede ser un buen
indicador de cundo se realiz la ltima actualizacin del ncleo:
# uptime
21:14:58 up 70 days, 6:20, 21 users, load average: 0.74, 0.51, 0.58
# tiempo de actividad
21:14:58 hasta 70 das, 06:20, 21 usuarios, promedio de carga: 0.74, 0.51, 0.58
Aqu podemos ver que el sistema ha sido hasta 70 das, es muy poco probable que haya sido
parcheado durante este periodo el ncleo.
Otra cosa es utilizar un servidor NTP en lugar de establecer la hora manualmente usando
ntpdate:
- El tiempo se mantendr sincronizada;
- No hay riesgo de un salto en el tiempo que ocurren en los registros.
Si hay demasiado tiempo para recuperar o suelto, servidores NTP son propensos a darse por
vencido. As que es bueno para comprobar que el sistema est casi en tiempo antes de iniciar
un servidor NTP.
Aqu, podemos ver que se est ejecutando un servidor NTP:
Sin embargo tenemos que comprobar que el servidor NTP puede acceder a los servidores que
est tratando de conectarse a:
A continuacin, puede buscar en la lista de paquetes que no sean necesarios o paquetes que
presentan vulnerabilidades.
5. OPININ RED
5.1. Informacin general
Siempre es bueno para recuperar, analizar y almacenar la informacin de configuracin bsica
del sistema antes de realizar cualquier otro control. Mantengo la salida de los siguientes
comandos:
-
route -n para obtener las rutas del sistema. Si el sistema no tiene instalado el
comando route, netstat -rn puede ser un sustituto adecuado.
El sistema que estamos revisando es una instalacin estndar de Debian. Para el sistema ms
complejo mediante LDAP o NIS usted tendr que comprobar el `/ etc / nsswitch.conf` para
obtener la imagen completa de cmo estn configurados los DNS, los usuarios y grupos.
Una vez que tenga esta informacin, usted ser capaz de revisar la configuracin del servidor
de seguridad y servicios.
El puerto 80 (HTTP) tendr que ser el acceso de cualquier usuario de Internet para visitar el
sitio web alojado. Sin embargo, el puerto 22 (SSH) slo debe accederse por los administradores
del servidor. Una lista blanca de direcciones IP de confianza debe crearse para limitar el acceso
al servidor SSH.
Tambin podemos ver que no hay reglas se aplican al trfico saliente. Es una buena prctica
para limitar el trfico de salida tanto como sea posible mediante la restriccin del acceso a los
servidores de Internet y otros hosts internos. Limitar el trfico de salida es probable que
reducir la velocidad de un intruso y proporcionar una capa adicional de defensa en
profundidad. Para nuestra revisin del sistema, el servidor slo debe permite el acceso a la
salida a:
-
Tambin tenemos que comprobar que las reglas del firewall se aplicarn de forma automtica
cada vez que se inicia el servidor. La forma (http://wiki.debian.org/iptables) de hacer esto de
Debian es crear un archivo que contiene los comandos /etc/network/if-pre-up.d/iptables para
cargar las reglas:
Tenemos que comprobar que el archivo utiliza para cargar las reglas y el actual partido de
reglas:
Aqu podemos ver que se aplican las mismas reglas. Sin embargo, es muy comn para obtener
diferentes normas sobre los sistemas, o incluso en los dispositivos (como routers o firewall). Es
por eso que es muy importante para asegurarse de que se ajustan correctamente.
Despus de modificar las reglas del cortafuegos, asegrese de que los servicios como el NTP y
DNS pueden obtener todava el acceso a sus respectivos servidores.
5.3. ipv6
Podemos comprobar que no hay ninguna regla de firewall para IPv6 en este host:
Al menos las mismas reglas de firewall aplicadas a IPv4 deben aplicarse para IPv6. Si IPv6 no es
necesaria en este servidor, se puede desactivar, en Debian, mediante la creacin de un archivo
con el nombre /etc/sysctl.d/disableipv6.conf que contiene lo siguiente
net.ipv6.conf.all.disable_ipv6 = 1.
para el sistema de archivos como /tmp o /home, puede utilizar noexec y nosuid
para evitar que los usuarios ejecutar binarios y, respectivamente, para evitar
setuid debe interpretarse. Tambin se recomienda que nosuid est incluido para
de /dev, si /dev est usando devfs.
Que la configuracin del archivo que contiene no puede ser modificado por
cualquier usuario.
Por ejemplo, los siguientes archivos no deben ser legible por cualquier usuario:
Lo mismo, obviamente, se aplica a cualquier copia de estos archivos, aqu podemos ver que un
archivo llamado /etc/shadow.backup est presente en el sistema de archivos y puede ser ledo
por cualquier usuario. Incluso si los permisos se establecen correctamente en el archivo
/etc/shadow, este archivo "copia de seguridad" reduce fuertemente la seguridad del sistema.
6.3. Setuid
Archivos setuid son archivos corrieron con privilegios de usuario en lugar de binarios normales
que se ejecutan con los privilegios del usuario actual. Estos archivos son, obviamente, los
riesgos de seguridad potenciales, especialmente si su propietario es root. Un ejemplo comn
de un archivo setuid es la utilidad passwd. A fin de que los usuarios cambiar su contrasea,
que necesitan acceso al archivo /etc/shadow, pero no se puede permitir que leer el archivo
directamente, ya que este contiene las contraseas hash para todos los usuarios. El bit setuid
est establecido significa que este ejecutable se ejecutar como el propietario del archivo (en
este caso de la raz), lo que permite /etc/shadow para ser ledos y modificados sin permitir al
usuario acceder directamente al contenido de este archivo.
Puede recuperar una lista de los archivos setuid en el sistema ejecutando el siguiente
comando:
Para evitar todo el `No existe el fichero o directorio`, puede redirigir stderr (error estndar)
para `/dev/null` y aadiendo `2>/dev/null 'despus del comando.
Para cada archivo encontrado, es necesario comprobar si este archivo es legtimo y si los
permisos se establecen correctamente.
Es posible que desee para filtrar todo en /proc usando | grep -v /proc despus de los
comandos anteriores. Una vez que haya hecho esto, se puede ver que el archivo en /var/www/
se puede leer y escribir a cualquier usuario. Esto es probable que se reduzca el progreso de un
atacante el acceso ilegtimo al sistema.
7. RESEAS DE USUARIOS
7.1. Revisando el archivo passwd
Una mala configuracin (backdoor) comn de los archivos /etc/passwd es tener un usuario con
el uid 0. En los sistemas tradicionales, se supone que slo root para tener el uid 0. Si otro
usuario tiene el uid 0, que es bsicamente la raz en el sistema.
En FreeBSD, para el mantenimiento y la razn histrica, ` root` y `toor` tener el UID 0.
Al revisar /etc/passwd siempre es bueno comprobar qu usuarios tienen un shell (/bin/bash,
/bin/sh ...) y cules no (/bin/false, /usr/sbin/nologin ...), lo que restringe el acceso shell se
asegurar de que el usuario no puede conectarse y ejecutar comandos en el sistema.
En los sistemas modernos de Linux, se quiere evitar DES y MD5. Algoritmo DES para el cifrado
de la contrasea se limita el tamao de la contrasea de 8 caracteres y es realmente fcil de
descifrar. MD5 no presenta la misma debilidad longitud pero es bastante rpido a la fuerza
bruta en comparacin con otros algoritmos.
Usted puede revisar cul es el algoritmo predeterminado utilizado para la contrasea cifrada
mediante la comprobacin del contenido de /etc/pam.d/common-password. Aqu podemos
ver que se utiliza SHA512:
Para mejorar la seguridad del sistema, puede agregar algunos requisitos de la contrasea
mediante la instalacin de libpam-cracklib:
# apt-get install libpam-cracklib
Para hacer cumplir la complejidad, se puede jugar con el parmetro minlen para hacer cumplir
la complejidad y lcredit, ucredit, dcredit y ocredit para forzar el nmero de minsculas,
maysculas, dgitos y caracteres especiales en la contrasea.
Despus de instalar libcrack, la siguiente lnea se ha aadido a la /etc/pam.d/commonpassword para hacer cumplir la complejidad de contraseas:
Podemos ver aqu otro parmetro importante: difok, que dice pam cuntos personajes de la
nueva contrasea debe ser diferente de la contrasea anterior.
Para forzar el nmero de caracteres especiales y nmeros en la contrasea, puede cambiar la
lnea anterior a:
Se har cumplir un dgito y dos caracteres especiales en la contrasea. Usted puede leer ms
acerca de la configuracin pam_cracklib ejecutando: man pam_cracklib en el sistema.
Aqu, vimos que tenemos dos formatos utilizados. Utilizando el john instalado en este sistema,
se puede romper la clave user desde el DES es compatible con esta versin de Jhon:
# john password
Desafortunadamente (para el atacante), la contrasea de root est utilizando SHA-512. Con el
fin de romper esta contrasea, necesitaremos una versin de John cripta de apoyo. La versin
mejorada en la comunidad apoya cripta y se puede utilizar.
La siguiente lnea de comandos se puede utilizar para romper la clave previamente
recuperada:
$ ./john password --format=crypt --wordlist=dico --rules
--rules le dice a Juan para tratar las variaciones de cada palabra proporcionado
Podemos ver qu hay de que los nombre de usuario user puede ser cualquier usuario (incluido
root) sin ningn tipo de contraseas y sin restricciones.
Un error comn con sudo es proporcionar un usuario con un conjunto limitado de comandos
que todava le permitan obtener una shell de root en el sistema. Por ejemplo, un usuario con
acceso a /bin/chown (propietario modificar) y /bin/chmod (modo de cambio) ser capaz de
copiar una concha en su casa y cambiar el propietario de shell para root y agregue el bit setuid
en el archivo. De esta forma, este usuario podr tener un shell de root en el sistema.
8. SERVICES REVIEW
8.1. Identifying running services
Using ps, you can quickly identified running services:
Otra buena manera de listar los servicios potencialmente interesantes es utilizar lsof para
obtener la lista de conexin de red y especialmente los servicios de escucha en la red.
En primer lugar, podemos trabajar en el servicio de escucha en UDP:
8.2. OpenSSH
OpenSSH se ejecuta en este sistema; su archivo de configuracin se encuentra en /etc/ssh/ y
se llama sshd_config y se nombra. Lo principal para verificar si es la opcin PermitRootLogin
que evitar raz para conectar directamente al sistema. El valor predeterminado de esta opcin
es que s, por lo que debe asegurarse de que se me est establecido en no y que la lnea no se
comenta en el archivo de configuracin.
8.3. Mysql
Usando lsof, vimos que MySQL se escucha en todas las interfaces, dado el uso actual del
sistema, esto es innecesario, y para limitar la superficie de ataque del sistema, es mejor obligar
a la toma en localhost para evitar el acceso externo para este servicio.
Esto se puede hacer mediante la adicin de la opcin siguiente a la seccin [mysqld] del
archivo /etc/mysql/my.cnf:
[mysqld]
bind-address = 127.0.0.1
MySQL tiene su propio `root` usuario, incluso si usted no es` root` en el servidor, puede
conectarse a la base de datos utilizando el usuario root. El sistema `root` usuario y el usuario`
root` MySQL son dos cosas diferentes. Cuando se conecta a la base de datos, de forma
predeterminada, el cliente `mysql` utilice su nombre de usuario actual para conectarse.
Si usted no tiene la contrasea para conectarse como usuario root en la base de datos, pero
que sea root en el servidor, puede utilizar el comando strings en la tabla de usuarios Mysql
almacenada en /var/lib/mysql/mysql/user.MYD llegar los hashes:
Sobre la base de esta versin, podemos buscar cualquier vulnerabilidad en este comunicado.
A continuacin, debemos obtener la lista de usuarios y sus contraseas:
Aqu podemos ver los siguientes usuarios tienen acceso a la base de datos:
-
root de localhost;
debian-sys-maint;
wordpress;
Usted puede probar fcilmente esta vez est conectado a la base de datos:
La nueva versin del algoritmo es obviamente ms fuerte que la versin antigua y se debe
utilizar.
El uso de Jhon-The-Ripper, usted ser capaz de poner a prueba la fortaleza de las contraseas
de MySQL, slo tiene que copiarlos en un archivo con el formato correcto, como se muestra a
continuacin:
$ cat mysql-password
wordpress:*C260A4F79FA905AF65142FFE0B9A14FE0E1519CC
Aqu podemos ver que el wordpress usuario tiene privilegio FILE, este usuario slo se utiliza
por el blog para almacenar la informacin, el privilegio FILE no se necesita aqu y debe ser
eliminado.
Un atacante acceder o crear archivos usando MySQL ser restringido por los privilegios
otorgados a la `mysql` usuario y no podr acceder a` / etc / shadow` por ejemplo.
Podemos ver que los valores utilizados son extrados de / etc / apache2 / envvars:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
Todo bien, tenemos aqu una configuracin tradicional de Debian y el servicio no se est
ejecutando como root. Ejecucin de un servidor como root aumentar la consecuencia de la
explotacin de un bug en el propio servicio o en las aplicaciones web alojados.
Para asegurarse de que no hay usuarios locales puede modificar el sitio web alojado y
endurecer la explotacin de posible vulnerabilidad, siempre es una buena idea para limitar el
acceso a la raz web. Aqu, podemos ver que el DocumentRoot es /var/www/wordpress,
usando ls, podemos comprobar que el permiso no se limitan correctamente:
Los archivos no deben estar a disposicin de cualquier usuario. Con el fin de limitar el riesgo de
sobreescritura por el servidor web, la propiedad completa aplicacin se puede dar a un tercer
usuario. De esta manera, el servidor web no podr modificar la aplicacin web.
Esto es sin embargo probable que se rompan algunas aplicaciones.
Como mejores prcticas, siempre es bueno para evitar la informacin adicional en los
encabezados de servidor. Para evitar que Apache se escape a mucha informacin, los
siguientes parmetros deben ser revisadas:
-
Tambin podemos ver que PHP est deshabilitada para los directorios pblicos de los usuarios:
Esta es una buena prctica, ya que evitar que los usuarios ejecuten el cdigo PHP en su
propio public_directory (/ ~ nombre de usuario /), lo que les permite saltar de su ID de usuario
a la del servidor web.
Si corremos strings en ese binario y la bsqueda de apache2, podemos ver algunos datos
interesantes:
Podemos ver dos caminos que son en realidad donde PHP buscar es de configuracin.
Mediante la lectura de la documentacin de Debian, podemos confirmar que la configuracin
de PHP utilizado por Apache 2 se almacena en el directorio /etc/php5/apache2.
En primer lugar, como hemos visto para Apache, siempre es una buena idea para ocultar el
valor de PHP en uso. El expose_php parmetro le dice a PHP para agregar un encabezado HTTP
adicional X-Powered- por en todas las respuestas. Es mejor ocultar esta informacin girando
expose_php fuera.
Adems, las siguientes opciones deben ser revisadas:
-
safe_mode se puede omitir, pero que sin duda frenar a un atacante; debe ser
activada;
disable_functions se pueden utilizar para bloquear el acceso a las funciones
sensibles como: eval, exec, passthru, shell_exec, system, proc_open, popen ...
allow_url_include deben estar apagados.
Aqu, podemos ver que no hay opciones se han establecido, Suhosin est en su configuracin
por defecto.
Las siguientes opciones de que dispone Suhosin se pueden habilitar para aumentar la
seguridad de la aplicacin PHP:
-
8.6. Crontab
Crontab se usa en Linux/UNIX para ejecutar tareas en un momento dado. Usted puede
encontrar la lista de crontabs en /var/spool/cron/crontabs o usar el comando crontab -u
<usuario> -l para enumerar las tareas para un usuario determinado.
Uno de lo ms importante a buscar es el permiso en los scripts llamados por una tarea.
Por ejemplo, aqu la /root/backup.sh script se corri de forma automtica en la tarea roots
(/var/spool/cron/crontabs/root):
0 2 * * * /root/backup.sh
Podemos comprobar los permisos de este fichero y ver que cualquiera puede modificar este
archivo:
# ls -l /root/backup.sh
-rwxrwxrwx 1 root root 84 Aug 6 03:38 /root/backup.sh
Los permisos en este script debe modificarse para evitar que cualquier usuario de modificar la
secuencia de comandos para obtener acceso a la raz de la prxima vez que se ejecut la tarea.
Tambin es importante evitar las tareas sensibles 02 a.m.-03 a.m. o sern corrieron 0 o 2 veces
durante el horario de verano (esperar si el sistema de zona horaria no tiene horario de
verano).
9. CONCLUSIN
Este ejercicio le mostr cmo revisar un sistema Linux para encontrar posibles problemas de
seguridad y la forma de corregirlos. Espero que el curso le proporciona ms detalles sobre
cmo un sistema Linux se puede configurar de forma insegura y cmo se puede mejorar
rpidamente su seguridad. Este ejemplo es tranquilo sencillo, pero es representativa de la
mayora de los servidores web se encuentra en Internet. Ahora es el momento de aplicar lo
que ha aprendido en sus propios sistemas!