actualidad sobre consultoria, normas y seguridad de la informacion
Guias, procesos y manuales sobre Ethical Hacking
Mostrando entradas con la etiqueta ssh. Mostrar todas las entradas

Hardening Sistema Linux (CentOS) #Parte3

Continuando con la plantilla de aseguramiento de Servidores con sistema CentOS
Leer las: #Parte1 #Parte2

8             Hardening de Nginx


Lo primero de asegurar en este servidor web es su versión, para eso eliminaremos información que identifique la versión de nginx lo más posible. Y así evitar buscarle vulnerabilidades a dicha versión.

Para eliminar el número de versión en la configuración especificamos la siguiente directiva en el archivo de configuración de nginx:

nginx.conf

Entre http agregamos lo siguiente:

server_tokens off;

Ejemplo:

http
{
...
server_tokens off;
...
}

Con el comando Curl –I  podemos verificar que la versión del servidor web esta oculta




Para coadyuvar a la seguridad del servidor web se deben haber configurado las siguientes opciones del archivo sysctl.conf.

• Evitar ataques smurf
• Evitar ataques SYN Flood

verificamos el archivo de configuración. con el comando /opt/server/nginx/sbin/nginx -t ó dependiendo de la ubicación de su instalación, 

ahora ademas de la versión ocultemos que usamos web server nginx al atacante, es editar el fichero src/http/ngx_http_header_filter_module.c 
y buscamos las líneas:
static char ngx_http_server_string[] = “Server: nginx” CRLF;
static char ngx_http_server_full_string[] = “Server: ” NGINX_VER CRLF;
Y las cambiamos por ejemplo por estas otras, podemos poner la cabecera que queramos yo por ejemplo simulare tener un webserver Apache.
static char ngx_http_server_string[] = “Server: Apache” CRLF;
static char ngx_http_server_full_string[] = “Server: Apache ” CRLF;
Salvamos el fichero y compilamos de nuevo

8.1             Controlar los ataques de desbordamiento de búfer

Editar nginx.conf y establecer las limitaciones de tamaño de búfer para todos los clientes
   1: ## Start: Size Limits & Buffer Overflows ##
   2: client_body_buffer_size  1K;
   3: client_header_buffer_size 1k;
   4: client_max_body_size 1k;
   5: large_client_header_buffers 2 1k;
   6: ## END: Size Limits & Buffer Overflows ##
Cuando,
client_body_buffer_size  (por defecto es 8k y 16k) La directiva especifica el tamaño del búfer de solicitud.

client_header_buffer_size  establece el tamaño headerbuffer para el encabezado de las solicitudes del cliente. Para la mayoría de las solicitudes un tamaño de búfer de 1K es suficiente. Se puede aumentar este valor si se tiene un header o una cookie grande enviado por el cliente (por ejemplo, el cliente de wap).

client_max_body_size  asigna el tamaño corporal máximo aceptado la petición del cliente, indica la línea Content-Length en el encabezado de la solicitud.

large_client_header_buffers asigna el número máximo y el tamaño de los búferes de header’s grandes, para leer a partir de la petición del cliente. Por defecto, el tamaño de una memoria intermedia es igual al tamaño de la página, dependiendo de la plataforma ya sea esta 4K o 8K, si al final de la petición de conexión de trabajo convierte al estado de mantenimiento de conexión, a continuación, se liberan estos tampones. 2x1k aceptan URI datos 2kB. Esto también ayudará a combatir el mal bots y ataques de denegación de servicio.

9             Hardening SSH

Para fortalecer la seguridad de un servicio SSH, existen ciertas medidas que deben implementarse con el fin de evitar o dificultar ataques contra la infraestructura.

En primer lugar, para implementar casi todas las medidas de seguridad que se mencionan a continuación, se debe conocer el fichero de configuración del servidor SSH, que normalmente se encuentra ubicado en "/etc/ssh/sshd_config".

Usar contraseñas Fuertes:
Comúnmente los primeros intentos de los atacantes es tratar de acceder para adivinar su nombre de usuario/contraseña. Típicamente un atacante escaneará el puerto 22 (el puerto por defecto por el cual ssh escucha) para encontrar máquinas que estén corriendo ssh, y entonces intentarán un ataque de fuerza-bruta contra esta.

Deshabilitar el acceso como root

La configuración del servidor SSH se encuentra almacenada en el fichero /etc/ssh/sshd_config. Para deshabilitar el acceso de root, asegúrese de tener la siguiente entrada

#Prevent root logins:
PermitRootLogin no
Y reiniciar el servicio sshd:
service sshd restart o/etc/init.d/sshd restart

Si se requiere acceder como root, se debe acceder como un usuario normal y hacer uso del comando SU.

Usar un Puerto No-Estándar

Por defecto, SSH escucha las conexiones entrantes en el puerto 22. Para que un atacante determine si SSH se está ejecutando en su máquina, lo más probable es que escanee el puerto 22.
Un método efectivo es ejecutar ssh en un puerto no-estándar. Cualquier puerto sin usar funcionará, pero es preferible usar uno por encima del 1024.
Para hacer los cambios añada una línea como está a su fichero /etc/ssh/sshd_config:
# Ejecutar ssh en un puerto No-Estándar:
Port 2345 
Y reiniciamos el servicio SSH
Service sshd restart
Recuerde hacer cualquier cambio necesario a los puertos de reenvío en su enrutador y a cualquier regla aplicable al cortafuego

Filtrar SSH en el Cortafuegos

Si solamente se requiere tener acceso desde algunas direcciones IP, entonces consideremos la posibilidad de adicionar una regla en el cortafuego de su enrutador o en el de su iptables para limitar el acceso al puerto de SSH a una dirección IP específica. Por ejemplo, en iptables esto podría realizarse con la siguiente regla:
iptables -A INPUT -p tcp -s 72.232.194.162 --dport 22 -j ACCEPT
En mi caso simplemente nos dirigimos al administrador de firewalls (FWbuilder) y agregamos la ip y puerto en las políticas del firewall.

Número máximo de intentos de conexión

Definir un número bajo de intentos de autenticación, reduce el riesgo y evidentemente el éxito, de ataques por fuerza bruta.
Editar el archivo /etc/ssh/sshd_config añadir o modificar:
MaxAuthTries 3
Se definen 3 intentos de autenticación máximos.

10       Actualización de paquetes, Kernel y Sistema Operativo

La aplicación de los parches de seguridad es una parte importante del mantenimiento de servidores Linux.
Haremos uso del gestor de paquetes de yum tratándose de distribuciones basadas en RED HAT
yum –y update

Actualización de paquetes y kernel

Mantener los paquetes y kernel actualizados es un paso que nos ayuda a mantener nuestros servidores en buen estado y con los últimos parches de seguridad.

Antes de realizar una actualización de Kernel se debe realizar un backup de la información necesaria.

• Backup / etc diretory
• Copia de seguridad de los registros importantes / var / log
• Configuraciones de servidor de copia de seguridad y sitios web
• Volcado de bases de datos
• Copia de todos lo que la empresa o el administrador necesita si algo sale mal


1. Para actualizar el kernel de distribuciones basadas en Red Hat.
Primero preparamos el sistema para la descarga y compilacion del kernel con el siguiente comando:
yum -y install gcc glibc-devel ncurses-devel rpm-build

Descargamos el kernel actual.
Ejemplo:
Cd /usr/src
Wget http://www.kernel.org/pub/linux/kernel/vX.X/linux-.X.X.tar.bz2

Descomprimimos el Kernel:
tar xjf linux-3.5.1.tar.bz2
ln -s linux-3.5.1 linux

Configuración del kernel:
cd /usr/src/linux
ls /boot/config*
cp /boot/config-2.6.32-279.el6.i686 /usr/src/linux/.config


Compilamos el Kernel.
sudo make menuconfig
make

Y por último lo instalamos
make modules_install
make binrpm-pkg

rpm -ivh /root/rpmbuild/RPMS/i386/kernel-headers-X.X.X-X.i386.rpm
rpm -ivh /root/rpmbuild/RPMS/i386/kernel-X.X.X-X.i386.rpm


Actualización de paquetes:
Para actualizar los paquetes independientemente 
yum install paquete.arch
Para actualizar todos los paquetes: puede hacer uso de 
Yum – y update
Y reinicia el servidor

Esto es todo hasta aquí espero que les sea de mucha ayuda la plantilla de aseguramiento para Servidores CentOS


Read more

Hardening Sistema Linux (CentOS) #Parte2

Continuando con la plantilla de aseguramiento de Servidores con sistema CentOS
Leer la #Parte1

6             Hardening de Sysctl.conf


Con el siguiente comando, Se podrá observar un listado con las variables asignadas y su valor.

sysctl -a

En la actualidad existe vulnerabilidad en todos los kernel centos/redhat 6 también hay varios exploit que hacen uso de esta vulnerabilidad hasta el momento no hay un kernel que incluye el parche para esta vulnerabilidad.

Es posible prevenir el exploit con el siguiente comando.

sysctl -w kernel.perf_event_paranoid=2

Ó bien

echo "kernel.perf_event_paranoid=2" >> /etc/sysctl.conf

Se puede encontrar información acerca esta vulnerabilidad en:

Evitar ataques Smurf:

Para evitar este tipo de ataques se agrega/modifica la siguiente línea:
net.ipv4.icmp_echo_ignore_broadcasts = 1

Evitar ataques SYN Flood

Para evitar este tipo de ataques se agrega/modifica la siguiente línea:
net.ipv4.tcp_syncookies = 1

Si no se va hacer uso de IPV6 Deshabilitarla:

Agregar al final del archivo
net.ipv6.conf.all.disable_ipv6=1

7             Hardening de Apache

Los servidores de Apache son unos de los elementos o servicios que primero realizan análisis de vulnerabilidades los atacantes.
Debido a esto se deben tomar medidas de aseguramiento para la configuración de este.

1. Primero que todo debemos cambiar algunas configuraciones por defecto.
Abrir /etc/httpd/conf/httpd.conf y cambiar lo siguiente:
ServerSignature Off 
(Oculta su versión de apache en las páginas de error)
ServerTokens Prod
(Detiene la inclusión de información en el encabezado HTTP que da las versiones de Apache).

Añadiremos una configuración personalizada. 
Agregaremos lo siguiente a /etc/httpd/config/httpd.conf. Explicado que hace en los comentarios.
# Utilice esto para evitar el método TRACE http el cual sirve
# Para recabar (gathering path information) información de proxy o servidores (cache servers)

deny from all

# El ‘-’ deshabilita las siguientes funciones
# FollowSymLinks – puede ser utilizado para buscar carpetas fuera del árbol del directorio
#
# Includes – maneja a .shtml; previene incluir archivos del servidor, local file include
#
# AllowOverride None – previene a los desarrolladores cambiar opciones con el
# .htaccess

Options -FollowSymLinks -Includes -Indexes -MultiViews
AllowOverride None
Order allow,deny
Allow from all
Además, de añadir lo anterior, para prevenir acceso al root de su directorio, añadiremos lo siguiente:


Order deny,allow
deny from all


Cambiemos algunos permisos.
La carpeta public html (por default es /var/www/html) debería ser escribible solo por el usuario root. Y solo puede ser leída por todo el mundo por ente se configurara así:
chown -R root /var/www 
chmod -R 775 /var/www


Actualizar el servidor APACHE a la última versión estable.
Desactivar las opciones para explorar directorios, esto se puede hacer con las opciones de directiva dentro de la etiqueta ; tiene dos posibles valores: none o indexes.

Options -Indexes
Disminuir el valor máximo de tiempo de espera, por defecto, el tiempo de espera es 60 a 300 segundos dependiendo de la versión de Apache. Este se puede disminuir por seguridad (para mejorar la resistencia a ataques de denegación de servicio) así:
Timeout 45

Deshabilitar el método TRACE
A partir de la versión 2 de apache podemos deshabilitar el método TRACE fácilmente con una variable.
TraceEnable off
Esta debe ingresarse en el archivo de configuración principal de apache.

Para configurar Apache para enviar el encabezado X-Frame-Options para todas las páginas, añadir lo siguiente a la configuración
Header always append X-Frame-Options SAMEORIGIN

Como plus.. ya que mas adelante pretendo compartir plantilla de aseguramiento para los CMS Joomla y WordPress añadiremos una configuracion segura de Apache para estos CMS si hacen uso de ellos en el servidor.

7.1             Hardening de Apache para uso de CMS Joomla - WordPress


Denegar vulnerabilidades típicas y otros escaneos

Las siguientes configuraciones deben agregarse al archivo de configuración de apache /etc /httpd/conf/httpd.conf.
#Poner fuera a los  Script Kiddies
RewriteCond %{HTTP_USER_AGENT} ^()$ [NC,OR] # void of UserAgent
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pykto|pikto|scan|acunetix|qualys|fuck|kiss|ass|Morfeus|0wn|hack|h4x|h4x0r).* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]

# Sondeo la versiòn de PHP
RewriteCond %{QUERY_STRING} (?=PHP).* [NC,OR]

# Sondeo XSS
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]

# Sondeo inyecciòn SQL
RewriteCond %{QUERY_STRING} ^.*(OR%201=1|/select/|/union/|/insert/|/update/|/delete/).* [NC,OR]

# Archivos de inlusion Remoto/Local
RewriteCond %{QUERY_STRING} (http://)*(?)$ [NC,OR]

# Bloqueo los ataques comunes de cadenas
RewriteCond %{QUERY_STRING} ^.*(/\*|\*/).* [NC,OR]

# Permirir solo GET y POST 
RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR]

# Peticiones en las variables PHP
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2})

# Acceso denegado
RewriteRule ^(.*)$ index.php [F,L]

Reiniciamos el servicio de apache service httpd restart

Continuar leyendo
#Parte3


Read more

Hardening Sistema Linux (CentOS) #Parte1

Estuve hace un tiempo trabajando en unas plantillas de aseguramiento para servidores CentOS las cuales estaré compartiendo con ustedes. ya que el tema y la información es algo extensa estaremos dividiéndolas en parte. 

Este es el indice que he realizado para este sistema constando que el sistema como aplicativos o servicios posee APACHE ó NGINX


Plantilla de aseguramiento S.O Centos
INDICE

1             Introducción.. 2
2             Desactivar servicios no necesarios. 3
3             Remoción de paquetes no usados. 3
4             Permisos de archivos del sistema. 3
5             Remoción de usuarios y grupos no necesarios. 4
6             Hardening de Sysctl.conf 5
7             Hardening de Apache
8             Hardening de Nginx. 9
9             Hardening SSH
10          Actualización de paquetes, Kernel y Sistema Operativo.. 14



1             Introducción
El Hardening o aseguramiento es el proceso de configuración de seguridad de sistemas, para reducir la mayor cantidad de riesgos y minimizar la cantidad de vulnerabilidades sobre dichos sistemas.
Esta técnica es compuesta por un conjunto de acciones para reforzar al máximo posible la seguridad de los servidores y así protegerlos contra los ataques, cerrando brechas de seguridad y asegurando los controles de acceso. 
Este proceso incluye la evaluación de la arquitectura de seguridad del servidor y la auditoria de la configuración de sus sistemas con el fin de desarrollar e implementar procedimientos de consolidación para asegurar sus recursos críticos.

2             Desactivar servicios no necesarios

Este procedimiento permite determinar si se desea que un servicio se inicie o no automáticamente después de iniciado (boot) el sistema operativo.

Revisamos los servicios que están corriendo y enlistamos todos los servicios que se inician con chkconfig
   1: netstat -putan | grep listen
   2: chkconfig --list
Para deshabilitarlos, utilizaremos el comando chkconfig:

   1: chkconfig --level off

Es muy importante determinar el runlevel de arranque del sistema

si no se desea especificar el runlevel puede deshabilitarlo directamente con:
   1: chkconfig --del ip6tables

3             Remoción de paquetes no usados

La gestión de paquetes se realiza de una manera más detallada, tomando en cuenta algunos conceptos que son considerados como la procedencia del paquete, servidores dedicados de paquetes (repositorios) y dependencias.Para remover los paquetes debemos hacer uso del gestor con que fue instalado si fue por RPM o YUM.

Ejemplo con YUM:
   1: yum remove nmap
Ejemplo con RPM:
   1: rpm -e ftp-0.17-33.fc6
4             Permisos de archivos del sistema

En los sistemas operativos basados en UNIX cada elemento del sistema de archivos, como archivos, directorios, enlaces simbólicos, etc., tiene la característica de poseer permisos que lo ubican dentro del mismo. Éstos sirven como uno más de los niveles de seguridad del sistema operativo al impedir que cualquier usuario pueda leer, escribir, ejecutar o acceder a dichos archivos y directorios de manera arbitraria. Estos permisos vistos de manera básica son: lectura (r, read), escritura (w, write) y ejecución (x, execution) y se agrupan en bloques (rwx) para 3 diferentes clases (usuario, grupo y otros).

La asignación de permisos de acceso (de lectura, escritura y ejecución) pueden gestionarse a través de modos, los cuales consisten de combinaciones de números de tres dígitos (usuario, grupo y otros) y los mandatos chmod y setfacl.

Es muy importante dar los permisos adecuados a nuestros archivos y carpetas. No usar chmod 777 para todos los casos que se requieran permisos.


No doy una recomendación como tal ya que los permisos difieren de acuerdo a su contenido y propietarios.

5             Remoción de usuarios y grupos no necesarios

La administración de usuarios y grupos solamente puede realizarlas el usuario root utilizando los comandos de gestión de usuarios. Las tareas y los comandos para realizarlas son:
Creación de usuarios / useradd
Modificación de usuarios / usermod
Eliminación de usuarios / userdel
Creación de grupos / groupadd
Modificación de grupos / groupmod
Eliminación de grupos / groupdel
Añadir usuarios a un grupo / adduser
Quitar usuarios de un grupo / deluser
La idea de esta tarea es depurar los usuarios o grupos no usados o modificar los usuarios que no requieran shell. 

Continuar leyendo
#Parte2
#Parte3


Read more