Vous êtes sur la page 1sur 24

INTRODUCCIN A LINUX HOST REVIEW

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. ACERCA DE ESTE EJERCICIO


2.1. Diferentes maneras de utilizar este ejercicio
Este ejercicio puede ser utilizado de diferentes maneras:
-

Como material de entrenamiento, lea el curso y siga las instrucciones para


aprender;

Como material de clase de entrenamiento (con una licencia de entrenador), puede


proporcionar acceso a la que las mquinas virtuales para sus estudiantes y ayudar
a las personas siguen los pasos utilizando el pdf;

Como material de la entrevista (con una licencia reclutador), acaba de


proporcionar acceso a la mquina virtual a travs de SSH a la persona que est
entrevistando (no proporcionarles la imagen) y lo utilizan para ver cmo
funcionan. Usted puede dar informacin y asesoramiento para ayudar al
solicitante si decide hacerlo

2.2. Sintaxis de este curso


Las cajas rojas proporcionan informacin sobre errores / problemas que puedan suceder
durante la prueba:
Una cuestin que puede encontrar ...
Las cajas verdes ofrecen consejos e informacin si quieres ir ms all.
Probablemente debera comprobar ...

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.

2.4. El sistema Linux


Una vez que el sistema ha arrancado, a continuacin, puede recuperar la direccin IP actual
del sistema mediante el comando ifconfig:
$ Ifconfig eth0
eth0 Enlace encap: Ethernet HWaddr 52: 54: 00: 12: 34: 56
inet addr: 10.0.2.15 Bcast: 10.0.2.255 Mscara: 255.255.255.0
inet6 addr: fe80 :: 5054: FF: FE12: Alcance 3456/64: Enlace
ARRIBA DIFUSIN CORRIENDO MULTICAST MTU: 1500 Mtrica: 1
Paquetes RX: 88 errores: 0 cado: 0 sobrecostos: 0 frame: 0
Paquetes TX: 77 errores: 0 cado: 0: 0 sobrecostos de transporte: 0
colisiones: 0 txqueuelen: 1000
Bytes RX: 10.300 (10,0 KiB) TX bytes: 10243 (10,0 KiB)
Interrumpir: direccin 11 Base: 0x8000
En este ejemplo, la direccin IP es 10.0.2.15.
En caso de que esto no funciona, pruebe con el comando: ifconfig -a que enumerar todas las
interfaces, no slo eth0.
A lo largo de la formacin, el nombre de host vulnerable se utiliza para la mquina vulnerable,
puede reemplazarlo con la direccin IP de la mquina, o simplemente puede aadir una
entrada en el archivo de host con el nombre y la direccin IP correspondiente.
Se puede hacer fcilmente mediante la modificacin:
-

En Windows, la carpeta C:\Windows\System32\drivers\etc\hosts archive.

En UNIX/Linux y Mac OS X, /etc/hosts archivo.

La direccin IP se puede cambiar si se reinicia el sistema, si lo hace, no se olvide de actualizar


su archivo de hosts.

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.

3.2. El acceso es necesario


Con el fin de realizar una revisin de acogida necesitar raz o un acceso equivalente para el
sistema. Realizar una revisin del sistema sin este nivel de privilegios le impide hacer un
trabajo serio y exhaustivo.
Aqu tienes un shell en la consola se ejecuta como usuario, puede conectarse de forma remota
usando ssh y la contrasea live. Una vez conectado, usted puede conseguir acceso de root
usando sudo -s.

3.3. Despliegue automtico


Ms y ms sistemas se implementan utilizando la implementacin automtica como cfengine,
Marioneta o chef. Esto no va a cambiar cualquier problema encontrado durante la revisin, sin
embargo, la remediacin se debe aplicar a la configuracin implementador no en el propio
sistema.
De lo contrario, los nuevos sistemas (o incluso este sistema) pueden ser configurados de forma
incorrecta o volver a configurar.

3.4. Tomar notas


Es muy importante tomar notas durante una revisin de acogida, una buena manera de
mantener las notas en el examen es a utilizar los registros de la pantalla. Esto se puede hacer
en el sistema auditado directamente o en su sistema.
En primer lugar, usted necesita para poner en marcha la pantalla (si decide hacer esto en el
sistema auditado, vaya a /tmp primero):
$ pantalla

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.

A continuacin, puede cambiar el nombre del archivo para guardarlo:


# mv screenlog.0 Audit-`hostname`-`date +"%d-%b-%Y_%H:%M"`.txt
# Screenlog.0 mv Auditora-`hostname`-`date + "% d-% b-% Y_% H:% M" `.txt

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:
-

cat file y grep la salida


vi: vi -R file
nano: nano -v file

Esto evitar que la modificacin de archivos que realmente no debera!

4. REVISIN DEL SISTEMA


4.1. Sistema operativo
El sistema est la auditora es un sistema Debian 6; usted puede obtener esta informacin
mediante la recuperacin de los contenidos de /etc/debian_version. En otros sistemas basados
en Linux se puede:
- leer el contenido de /etc/redhat-release para sistemas basados en RedHat como
RedHat, CentOS y Fedora (/etc/fedora-release funciona tan bien)
- ejecutar lsb_release -a en sistemas basados en Ubuntu.
Debian 6 es la versin estable actual, de modo que usted no tiene que preocuparse de final de
la vida. Pero para la versin ms antigua, siempre es importante comprobar si la versin an se
admite para saber si sern parcheados nuevas vulnerabilidades. Por ejemplo, la versin
anterior de Debian (Lenny) No se admite desde febrero de 2012
(http://wiki.debian.org/DebianLenny).

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.

4.3. Gestin del tiempo


Es muy importante que el sistema se sincroniza correctamente con un servidor NTP. Es
importante para todas las operaciones basadas en el tiempo:
- Gestin de registros;
- La verificacin de los certificados SSL;
- Autenticacin basada en el tiempo.
Adems, para los sistemas de produccin sensibles siempre es mejor utilizar una zona horaria
que no presenta el horario de verano para evitar tiempo de salto en los registros. Saltos de
tiempo son malas ya que impiden la correlacin precisa entre mltiples fuentes de registro.
Aqu, podemos ver que la zona horaria est configurado a UTC:
# cat /etc/timezone
Etc/UTC
# Cat / etc / zona horaria
Etc / GMT

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:

Aqu, se puede acceder correctamente a sus compaeros.


NTP tambin puede utilizar las teclas para la autenticacin de servidores en entornos
extremadamente sensibles.

4.4. Paquetes instalados


Siempre es una buena cosa para comprobar que el nmero de paquetes se limita a lo
estrictamente necesario para limitar la exposicin del sistema. Adems, puesto que el sistema
auditivo se utiliza como un servidor web, algunos paquetes, tales como los relacionados con la
interfaz grfica (X, Gnome, KDE) o para juegos no son necesarios y no deben ser instalados.
En Debian, puede recuperar una lista de los paquetes instalados utilizando el siguiente
comando:

A continuacin, puede buscar en la lista de paquetes que no sean necesarios o paquetes que
presentan vulnerabilidades.

4.5. Inicio de sesin


Otra cosa que necesita ser comprobada es la forma en que se realiza el registro de eventos. En
este sistema, podemos ver que se usa rsyslog:

Configuracin de rsyslog se almacena en /etc/rsyslog.conf. Al revisar el archivo de


configuracin, podemos ver que rsyslog en este sistema no est configurado para recibir los
registros:
# Ofrece recepcin Syslog UDP
# provides UDP syslog reception
# $ MODLOAD imudp
#$ModLoad imudp
# $ UDPServerRun 514
#$UDPServerRun 514
# Ofrece recepcin syslog TCP
# provides TCP syslog reception
# $ MODLOAD imtcp
#$ModLoad imtcp
# $ InputTCPServerRun 514
#$InputTCPServerRun 514
El uso de configuracin de permisos de archivos y directorios se limita:
# Establezca los permisos por defecto para todos los archivos de registro.
#
Raz $ fileowner
$ Grupo de archivos adm
$ FileCreateMode 0640
$ DirCreateMode 0755
$ Umask 0022
Sin embargo, ninguno de la configuracin de registro que lleve a cabo el registro en un sistema
remoto. A menos que los registros estn respaldados por un sistema remoto, siempre es mejor
configurar el registro remoto para servidores, en rsyslog que se lleva a cabo @servername.

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:
-

ifconfig -a para ver qu interfaces de red estn presentes;

route -n para obtener las rutas del sistema. Si el sistema no tiene instalado el
comando route, netstat -rn puede ser un sustituto adecuado.

cat etcresolv.conf y cat /etc/hosts para conocer ms acerca de la configuracin de


DNS del sistema.

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.

5.2. Las reglas de firewall


Por las reglas firewall es necesario comprobar 2 cosas:
-

El servidor de seguridad gobierna a s mismos;


Si las reglas todava estar presente en caso de reinicio.

Aqu podemos recuperar las reglas de firewall usando iptables:

Podemos ver que estas normas permiten el trfico en curso:


- El acceso de todas partes para el puerto 80 (HTTP);
- El acceso de todas partes para el puerto 22 (SSH);
- El acceso al trfico ya conocido (respuesta a las conexiones iniciadas por el propio
servidor)

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:
-

Conexiones ya establecidas: los paquetes como ir de vuelta al cliente despus de


que se conecta a un servicio;
Servidores DNS para la resolucin de nombres;
Servidores HTTP de Debian para las actualizaciones de software.
Servidores NTP para sincronizacin de tiempo

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.

6. REVISIN DEL SISTEMA DE ARCHIVOS


6.1 particiones montadas
Aqu el CD en vivo no tiene un sistema de archivos "normal". Pero as es como se puede
comprobar que la configuracin es segura en un sistema de "normal". Para cada uno de las
entradas en el archivo /etc/fstab, es necesario revisar que:
-

noatime no se utiliza. "noatime" impide la actualizacin de tiempo de acceso de


inodo. En caso de intrusin, siempre es una buena idea tener esta informacin;

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.

6.2. Archivos sensibles


Es importante comprobar el permiso en los archivos confidenciales. Como regla general, que
desea comprobar:
-

Que los archivos que contienen informacin confidencial (contraseas, claves


privadas) no pueden ser ledos por cualquier usuario;

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:

/etc/shadow contiene las contraseas de los usuarios (hash);

/etc/mysql/my.cnf que contiene la contrasea del debian-sys-maint;

Claves privadas SSL utilizados por Apache.

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.

6.4. Archivos normales


El uso de find, que puede recuperar una lista de archivos que se pueden leer y escribir en
condiciones por cualquier usuario utilizando el siguiente comando:
# find / -type f -perm -006 2>/dev/null

y una lista de archivos de escribir-poder por cualquier usuario utilizando:


find / -type f -perm -002 2>/dev/null

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.

6.5. Copia de Seguridad (Backup)


Un error comn realizada por los administradores del sistema proviene de las copias de
seguridad. Con demasiada frecuencia, los archivos de copia de seguridad pueden ser ledos por
los usuarios sin privilegios.
En este sistema, podemos ver que un directorio llamado /backup est presente, si
comprobamos los permisos de su contenido, podemos ver que los archivos pueden ser ledos
por cualquier usuario. Un atacante puede usar esto para extraer etc.tgz y leer el archivo de
shadow. Es importante cambiar los permisos en estos archivos y en el directorio /backup y
para asegurarse de que el script utilizado para la copia de seguridad ajustado correctamente
los permisos cada vez que se llama.

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.

7.2. Revisando el archivo de sombra


En el archivo /etc/shadow, el ms importante es revisar los algoritmos utilizados para el
cifrado de la contrasea y la calidad de las contraseas.
Usted puede comprobar lo cifrado se utiliza marcando el formato de hash, si el hash:
-

No tiene un signo $, DES se utiliza;


Comienza en $1$, MD5 se utiliza;
Comienza en $2$ o $2a$, se usa Blowfish;
Comienza por $5$, SHA-256 se utiliza;

Se utiliza comienza por $6$, SHA-512.

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.

John-El-Ripper se puede utilizar para descifrar esta contrasea, ms moderna distribucin


Linux incluyen una versin de John, con el fin de descifrar la contrasea que necesita para
contar a john lo algoritmo ha sido utilizado para encriptado ella.
En la mayora de las distribuciones de Linux, la versin de John-El-Ripper proporcionado slo es
compatible con un pequeo nmero de formatos. Puede ejecutar john sin ningn argumento
para obtener una lista de los formatos compatibles de la informacin de uso. Por ejemplo, en
Fedora, los siguientes formatos son compatibles:

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

Las siguientes opciones se utilizan:


-

shadow le dice a john lo que contiene el archivo de hash de la contrasea

--format=crypt le dice a john que el hash de la contrasea puede ser descifrada


usando la cripta;

--wordlist=disco le dice a john a usar el disco archivo como un diccionario

--rules le dice a Juan para tratar las variaciones de cada palabra proporcionado

Jhon-The-Ripper tiene un comportamiento oportunista con respecto a la seleccin de


algoritmos, que tomar la primera se reconocen. Usted necesita asegurarse de que se ejecuta
John con cada uno de los formatos disponibles en el archivo de sombra.

7.3. Revisar la configuracin de sudo


La configuracin de sudo se almacenada en /etc/sudoers:

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:

Aqu podemos ver:


-

ntpd se est ejecutando en el puerto UDP / 123 sobre IPv6 y IPv4;


dhclient para la configuracin de red dinmica se est ejecutando en el puerto
UDP / 68.

A continuacin, obtener informacin acerca de los servicios TCP:

Aqu podemos ver:


-

Apache 2 est en marcha y que escucha en el puerto TCP / 80 en IPv4;


mysqld est escuchando en el puerto TCP / 3006 en IPv4;
sshd se est ejecutando en el puerto TCP / 22 sobre IPv6 y IPv4;
alguien (usuario) est conectado al servidor SSH.

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.

Adems, es aconsejable comprobar que SSH versin 1 est desactivado, si no es necesario.


Esta lnea se puede desactivar mediante la adicin de una lnea que especifica slo la versin 2
se va a utilizar:
Protocolo 2:
El uso de sudo en lugar de proporcionar `root` acceso al sistema aumentar la
trazabilidad de la accin administrativa. Adems, usted no tendr que cambiar la
contrasea de `root` cada vez que alguien sale de su empresa y que pueda mantener
el` root` contrasea en la caja de seguridad en caso de emergencia.
Dado que el sistema est disponible en Internet, es una buena idea para cambiar el puerto por
defecto (no se olvide de poner este nuevo valor en la configuracin del firewall) para que sea
menos probable que los escneres de la fuerza bruta-automatizado/SSH localizarn este
servicio. Esto se puede hacer cambiando el valor de Port en el archivo de configuracin
(/etc/ssh/sshd_config).
Dado que este servidor no es un cuadro de rebote, AllowTcpForwarding debe establecerse en
ninguna para evitar que los usuarios utilicen este sistema para acceder a otro sistema o para
eludir restricciones de seguridad network-layer. El valor por defecto es s, por lo que necesita
para asegurarse de que no se utiliza y que la lnea no est comentada.
Para actualizar su configuracin, SSH tendr que ser reiniciado.

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

Para actualizar su configuracin, MySQL tendr que ser reiniciado.


Ahora podemos revisar la configuracin de MySQL. En primer lugar, tenemos que conectar a
MySQL, aqu tenemos suerte y no se establece la contrasea para el usuario root:
$ mysql -u root

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:

En Debian, un usuario de mantenimiento con nombre debian-sys-maint tiene acceso a la base


de datos y se puede utilizar para volcar la informacin de la base de datos. Usted puede
encontrar la contrasea de esta cuenta en /etc/mysql/debian.cnf.
Una vez conectado, primero debemos recuperar la versin de la base de datos:

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;

En MySQL, dos algoritmos se utilizan para cifrar las contraseas:

La antigua, con este algoritmo, contraseas cifradas se parecen:


43e9a4ab75570f5b.

el nuevo, con este algoritmo contraseas se ver as:


* 4ACFE3202A5FF5CF467898FC58AAB1D61502944.

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

Y romper con el comando mysql-sha1 (disponible en la versin de la comunidad).


Asegrese de mantener la `*` en la contrasea al guardar en un archivo.
Otra comprobacin importante es revisar lo que los usuarios tienen el privilegio FILE, ya que
este privilegio puede ser utilizado por un usuario para acceder o crear archivos en el sistema
utilizando MySQL. La lista de usuarios que tienen el privilegio FILE puede ser revisado usando
la siguiente consulta SQL:

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.

8.4. Configuracin de Apache


Dado que el servidor se utiliza como un servidor web, es importante revisar la configuracin
del servidor web: Apache.
En primer lugar, siempre es bueno comprobar que el usuario del servidor web se est
ejecutando como, usted puede encontrar a cabo mediante la ejecucin de ps o mediante la
revisin de la configuracin de Apache y la bsqueda de los valores user e group. Aqu Estn
disponibles en /etc/apache2/apache2. conf:
# Estos deben establecerse en /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

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:
-

ServerTokens: El valor recomendado es Prod;


ServerSignature deben estar apagados.

En Debian, estos dos parmetros se configuran en el /etc/apache2/conf.d/security.


Para limitar la exposicin del servidor a fuga de informacin, siempre es bueno para desactivar
el listado de directorios. Lista de directorios se configura mediante el parmetro X. Al revisar la
configuracin de la pgina web disponible en /etc /apache2/sitesenable/000-default, podemos
ver que la lista de directorios est habilitada:

Puede acceder a la pgina siguiente para confirmar este ajuste:


http://vulnerables/wpadmin/images/
La configuracin debe ser revisado para reemplazar Indexes por -Indexes, para evitar posibles
fugas de informacin.
En este servidor, SSL no est habilitado. Si usted tiene que revisar una configuracin SSL de un
servidor Apache, usted debe asegurarse de que los cifrados dbiles y SSLv2 son discapacitados
y que los permisos de las claves privadas se han establecido correctamente.
Podemos ver que PHP est habilitado en este servidor:
# ls /etc/apache2/mods-enabled/php*
/etc/apache2/mods-enabled/php5.conf
/etc/apache2/mods-enabled/php5.load

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.

8.5. Configuracin de PHP


Aqu, nos vamos a centrar en la configuracin de PHP utilizada por Apache2. Podemos ver en la
configuracin de Apache que el siguiente archivo est cargado:
# cat /etc/apache2/mods-enabled/php5.load
LoadModule php5_module /usr/lib/apache2/modules/libphp5.so

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:
-

display_errors deben estar apagados en la produccin;


error_reporting debe establecerse en E_ALL;
log_errors debe encenderse;

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.

Como a menudo en versin reciente de Debian, Suhosin


(http://www.hardenedphp.net/suhosin/) est instalado en este servidor. Suhosin aade una
capa adicional de proteccin para el motor de PHP y todas las aplicaciones PHP alojados.
Primero eliminaremos todas las lneas comentadas y vacos, para conseguir una exportacin
simple de la configuracin Suhosin:
# egrep -v -e '^;|^$' /etc/php5/apache2/conf.d/suhosin.ini
extension=suhosin.so
[suhosin]

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:
-

suhosin.log.syslog que entrar a syslog usando el s_all valor;


suhosin.executor.include.max_traversal para prevenir recorrido de directorio, un
valor de 3 debera impedir ataques lmite impacto, manteniendo un ambiente de
trabajo;
suhosin.executor.disable_eval y suhosin.executor.disable_emodifier para desactivar
la funcin eval y posible ejecucin de cdigo usando preg_replace /e modificador.

Ms opciones se pueden encontrar en la documentacin Suhosin.

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!