hardenning openssh

18
ASEGURANDO UN SERVIDOR OPENSSH EN CENTOS Presentado por: DANIEL COLORADO PEREZ ANDRES FELIPE ECHAVARRIA ANDRES FELIPE ARBOLEDA HONEY FELIPE AGUDELO Instructor: ALEXANDER AUGUSTO ALVAREZ HIGUITA HARDENING OPENSSH SERVICIO NACIONAL DE APRENDIZAJE SENA ÁREA: GESTIÓN DE REDES DE DATOS FICHA: 600088 COLOMBIA 2015

Upload: danielcoloradoperez

Post on 16-Nov-2015

111 views

Category:

Documents


4 download

DESCRIPTION

(Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a través de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al programa Secure Shell, que es software propietario. El proyecto está liderado por Theo de Raadt, residente en Calgary.

TRANSCRIPT

ASEGURANDO UN SERVIDOR OPENSSH EN CENTOS

Presentado por:DANIEL COLORADO PEREZ

ANDRES FELIPE ECHAVARRIAANDRES FELIPE ARBOLEDAHONEY FELIPE AGUDELO

Instructor:ALEXANDER AUGUSTO ALVAREZ HIGUITA

HARDENING OPENSSH

SERVICIO NACIONAL DE APRENDIZAJE SENA

REA: GESTIN DE REDES DE DATOS

FICHA: 600088

COLOMBIA2015

OpenSSH (Open Secure Shell) es un conjunto de aplicaciones que permiten realizar comunicaciones cifradas a travs de una red, usando el protocolo SSH. Fue creado como una alternativa libre y abierta al programa Secure Shell, que es software propietario. El proyecto est liderado por Theo de Raadt, residente en Calgary.

1. Verificar actualizaciones, primero que todo en nuestro servidor centos podemos verificar si hay actualizaciones disponibles de la siguiente manera

# Yum update

En el transcurso de la instalacin nos van a hacer dos preguntas, la primera es si deseamos descargar ya las actualizaciones copiamos yes la segunda es si las deseamos instalar y le decimos yes esperamos que descarguen y reiniciamos.

2. Ahora instalamos o verificamos los paquetes de openssh de la siguiente forma

# yum install openssh-server openssh-clientss

Si usted ya actualizo debe tener ya los paquetes disponibles para empezar a configurar

3. Con los siguientes comandos arrancamos paramos o reiniciamos el servicio

# service sshd start (arrancamos el servicio)# service sshd stop (detenemos el servicio)# service sshd restart (reiniciamos el servicio)

4. Del siguiente modo agregamos el servicio al arranque del sistema y no tenemos que estar arrancando el servicio cada que reiniciamos el servidor

# chkconfig level 345 sshd on

5. El servicio de ssh ya viene prcticamente listo para su uso y lo podemos comprobar conectndonos de la siguiente manera

# ssh [usuario]@[ip del servidor] Ejemplo: # ssh [email protected]

Si se ha modificado el puerto defecto de ssh por otro (ms adelante veremos cmo hacerlo) se logearia de la siguiente manera

# ssh p [puerto] [usuario]@[ip del servidor]

Ejemplo: # ssh p 23115 [email protected]

6. Ahora vamos a seguir unos pasos para hacer nuestro servidor ssh ms seguro, entramos a la ruta /etc/ssh/ en la cual tendremos los archivos de configuracin, el primer archivo que vamos a editar es el sshd_conf, lo abrimos con nuestro editor de texto preferido y cambiamos o configuramos las siguientes variables#gedit sshd_conf (abrimos el archivo)6.1 cambio de puerto de escucha por defectoDonde dice #port 22 Lo des comentamos y agregamos un puerto diferente para este caso usaremos el 52134 y quedara asiPort 52134 Para que esto funcione por completo tambin tenemos que editar el puerto de las iptables y lo hacemos de la siguiente maneraEntramos a la ruta /etc/sysconfig/iptables con nuestro editor de texto preferido# gedit /etc/sysconfig/iptablesVeremos lo siguiente, donde dice 22 es la regla que permite el puerto ssh lo cambiamos a 52134

Y la regla queda de la siguiente manera Guardamos y reiniciamos los servicios de iptables y de sshd de la siguiente manera# service iptables restart# service sshd restart6.2 Es indispensable que el usuario root no pueda acceder via SSH. Siempre podremos escalar privilegios, una vez hayamos accedido al servidor, a travs de su o sudo, pero es importante que el usuario root no pueda acceder directamente desde el servidor SSH. Buscamos en el mismo archivo sshd_conf donde dice PermitRootLogin lo descomentamos y negamos la sentencia cambiando el yes por un no

Y quedara algo como esto

6.3 Limitar el intento de conexiones fallidas y cortar la conexin Esta opcin si la descomentamos y la ponemos en funcionamiento nos indica el nmero de intentos que tiene el usuario para hacer login, es decir el usuario se conecta, hace login y se equivoca, entonces vuelve y pone la contrasea y se quivoca se corta la conexin segn la regla si ponemos maxauthtries 2 nos indica que luego de dos intentos fallidos se cortara la conexin #MaxAuthTries 6Para nuestro ejemplo la dejaremos de la siguiente manera

6.4 hay otra opcin que define el nmero mximo de usuarios conectados simultneamente a tu mquina. Esto ha de adaptarse a tus propias necesidades y es maxsessions para nuestro servidor solo vamos a permitir el mximo de 4 sesiones activas

6.5 vamos a limitar el tiempo maximo de inactividad de una session, ya que por seguridad que un terminal olvidado y abierto pueda caer en malas manos, buscamos las directivas

#ClientAliveInterval 0 (especificamos el contador de segundos de inactividad para la desconexion)

#ClientAliveCountMax 0 (cada cuanto chequea si la cuenta esta activa )

Luego de esto en nuestro ejemplo vamos a especificar que luego de 5 min de inactividad y quedaria de la siguiente manera

6.6 Con la opcin MaxStartups conseguimos limitar el nmero de sesiones abiertas desde una misma IP. Por ejemplo si queremos limitar a 3 sesiones por IP emplearemos la siguiente linea de configuracin:MaxStartups 3

Asi lo encontramos en el archivo

Solo vamos a permitir 2 sessiones por ip entonces quedara de la siguiente manera

6.7 esta configuracin no es tan prescindible pero podremos advertir a un posible atacante que la piense dos veces, aca configuraremos un banner para que en el momento de logueo aparezca un mensaje donde podremos poner lo deseado por ejemplo advirtiendo las cuestiones legales si se accede de forma forzosa en el archivo ubicamos la sentencia

Lo editamos de la siguiente manera

Luego de esto guardamos reiniciamos y en el archivo issue.net es donde pondremos el mensaje que queremos que salga en el inicio de sesin#gedit /etc/issue.net

Otro punto importante es asegurarte que se utilice nicamente la versin 2 del protocolo pero esta configuracin la encontraremos en otro archivo, recordemos que estamos en el sshd_conf guardamos cerramos y salimos para abrir el archivo ssh_conf que esta ubicado en la misma ruta donde estamos que es /etc/ssh/ ahora abrimos el ssh_conf y buscamos la lnea #protocol 2,1 aparte de ahora vamos a hacer las configuraciones en este archivo

Descomentamos y dejamos solo el 2 y queda de la siguiente manera

Implementaremos denyhost para la prevencin de intrusos

DenyHosts es un programa de cdigo abierto y programa de seguridad de prevencin de intrusiones para servidores SSH desarrollados en lenguaje Python por Phil Schwartz. Su objetivo es controlar y analizar los registros del servidor SSH para los intentos de login fallidos, ataques basados en diccionario y ataques de fuerza bruta mediante el bloqueo de las direcciones IP que se originan por la adicin de una entrada al archivo /etc/hosts.deny en el servidor y evita que la direccin IP inicie de sesin.

Por instrumento DenyHosts predeterminada no est incluida en los sistemas Linux, tenemos que instalarlo mediante terceros repositorio EPEL . Una vez aadido repositorio, instalar el paquete usando los siguientes comandos YUM.

# yum --enablerepo=epel install denyhostsO# yum install denyhosts

Configuracin DenyHosts para lista blanca de direcciones IPUna vez que DenyHosts est instalado, asegrese de que en la lista blanca est su propia direccin IP, para que nunca se le cierre la puerta. Para ello, abra un archivo /etc/hosts.allow. # vi /etc/hosts.allowA continuacin la descripcin, agregue la direccin IP en una lnea separada, que nunca desea bloquear. El formato debe ser de la siguiente manera. # # Hosts.allow Este archivo contiene reglas de acceso que se utilizan para # Permitir o denegar la conexin a los servicios de red que # Utilizar la biblioteca tcp_wrappers o que han sido # Iniciado a travs de un xinetd tcp_wrappers habilitado. # # Vase 'man 5 hosts_options "y" man 5 hosts_access' # Para informacin sobre la sintaxis de la regla. # Vase 'man tcpd' para obtener informacin sobre tcp_wrappers # sshd: 172.16.25.125 sshd: 172.16.25.126 sshd: 172.16.25.127 Configuracin DenyHosts para alertas por correo electrnicoEl archivo de configuracin se encuentra en /etc/denyhosts.conf. Este archivo se utiliza para enviar alertas por correo electrnico acerca de los inicios de sesin sospechosos y los host restringidas. Abra el archivo utilizando el editor vi. vi /etc/denyhosts.confBusque el "ADMIN_EMAIL 'y aada su direccin de correo electrnico para recibir alertas por email acerca logins sospechosos (para mltiples alertas, utilizar comas para separar destinatarios). Por favor, eche un vistazo en el archivo de configuracin de mi servidor CentOS 6.3. Cada variable est bien documentada para configurarlo de acuerdo a su gusto. ############ DENYHOSTS REQUIRED SETTINGS ############SECURE_LOG = /var/log/secureHOSTS_DENY = /etc/hosts.denyBLOCK_SERVICE = sshdDENY_THRESHOLD_INVALID = 5DENY_THRESHOLD_VALID = 10DENY_THRESHOLD_ROOT = 1DENY_THRESHOLD_RESTRICTED = 1WORK_DIR = /var/lib/denyhostsSUSPICIOUS_LOGIN_REPORT_ALLOWED_HOSTS=YESHOSTNAME_LOOKUP=YESLOCK_FILE = /var/lock/subsys/denyhosts

############ DENYHOSTS OPTIONAL SETTINGS ############ADMIN_EMAIL = [email protected]_HOST = localhostSMTP_PORT = 25SMTP_FROM = DenyHosts SMTP_SUBJECT = DenyHosts Daily Report

############ DENYHOSTS OPTIONAL SETTINGS ############DAEMON_LOG = /var/log/denyhostsDAEMON_SLEEP = 30sDAEMON_PURGE = 1hReiniciar Servicio DenyHostsUna vez que haya terminado con la configuracin, reinicie el servicio denyhosts para hagan efectos los nuevos cambios. Tambin vamos a aadir el servicio denyhosts para el arranque del sistema. # chkconfig denyhosts on# service denyhosts startVer Logs DenyHostsPara ver los registros de cuantos atacantes por ssh trataron de obtener acceso a su servidor ssh, Utilice el comando siguiente para ver los registros en tiempo real. tail -f /var/log/secureNov 28 15:01:43 tecmint sshd[25474]: Accepted password for root from 172.16.25.125 port 4339 ssh2Nov 28 15:01:43 tecmint sshd[25474]: pam_unix(sshd:session): session opened for user root by (uid=0)Nov 28 16:44:09 tecmint sshd[25474]: pam_unix(sshd:session): session closed for user rootNov 29 11:08:56 tecmint sshd[31669]: Accepted password for root from 172.16.25.125 port 2957 ssh2Nov 29 11:08:56 tecmint sshd[31669]: pam_unix(sshd:session): session opened for user root by (uid=0)Nov 29 11:12:00 tecmint atd[3417]: pam_unix(atd:session): session opened for user root by (uid=0)Nov 29 11:12:00 tecmint atd[3417]: pam_unix(atd:session): session closed for user rootNov 29 11:26:42 tecmint sshd[31669]: pam_unix(sshd:session): session closed for user rootNov 29 12:54:17 tecmint sshd[7480]: Accepted password for root from 172.16.25.125 port 1787 ssh2es IP no permitidas de DenyHostsSi alguna vez ha bloqueado accidentalmente y desea eliminar la direccin IP baneada de las denyhosts. Es necesario detener el servicio. # /etc/init.d/denyhosts stopPara quitar o eliminar direcciones IP prohibido completamente. Hay que editar los siguientes archivos y eliminar la direccin IP. # vi /etc/hosts.deny# vi /var/lib/denyhosts/hosts# vi /var/lib/denyhosts/hosts-restricted# vi /var/lib/denyhosts/hosts-root# vi /var/lib/denyhosts/hosts-valid# vi /var/lib/denyhosts/users-hostsDespus de quitar la direccin IP prohibida, reinicie el servicio de nuevo. # /etc/init.d/denyhosts startLa direccin IP infractora, es aadida a todos los ficheros en el directorio / var/lib/denyhosts, as que se hace muy difcil determinar los archivos que contienen la direccin IP infractora. La mejor manera de averiguar la direccin IP es con el comando grep. Por ejemplo, para averiguar la direccin IP 172.16.25.125, hacer. cd /var/lib/denyhosts grep 172.16.25.125 * Lista blanca de direcciones IP en DenyHostsSi tienes la lista de direcciones IP estticas podr usarla como lista blanca de forma permanente. Abra el archivo de archivo /var/lib/DenyHosts/allowed-hosts. Sea cual sea la direccin IP incluida en este archivo no ser prohibido de forma predeterminada (considere esto como una lista blanca). # vi /var/lib/denyhosts/allowed-hostsY aadir la direccin IP de cada lnea por separado. Guarde y cierre el archivo. # No debemos bloquear localhost 127.0.0.1 172.16.25.125 172.16.25.126 172.16.25.127

Bibliografahttp://www.linux-party.com/index.php/57-seguridad/8971-instalar-denyhosts-para-bloquear-ataques-al-servidor-ssh-ataques-de-fuerza-bruta#

posibles ataques a open sshpor medio de la aplicacin hydra en este caso instalada en kali Linux realice un ataque hecho por medio de fuerza bruta en la cual se crea un diccionario de posibles cables y posibles usuarios ( si se conoce el usuario no es necesario crear un diccionario en el caso), este servidor ssh fue creado sin ningn tipo de proteccin a continuacin doy el paso paso a seguir y el resultado satisfactorio, vale aclarar que segn el grado de complejidad del password y/o la contrasea se dificultara mas el proceso o se tardara mas espero les sea de provecho va le aclarar que este proceso es meramente educaticoCreo un diccionario

El genera las posibles contraseas y convinaciones segn letras que nos le dimos

Lanzamos en ataque de fuerza bruta que buscara las posibles claves

De las posibles 46656 posibles claves acaba de encontrar la contrasea

Realizamos la prueba con el usuario en este caso es root el comando seria Ssh root@ip de la victima --- ssh [email protected] nos preguntara si queremos continuar con la coneccion le damos yes y ya ingresamos al equipo victima

Ya vemos lo que tiene la maquina victima

Creamos una carpeta

Ya quedo creada en la otra maquina