Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Buscador

Entradas Mensuales

Suscripción

¿Quieres recibir las últimas novedades del blog en tu correo?

¡Suscríbete al feed!

Foro de elhacker.net - Noticias

elhacker.NET en Facebook

Entradas populares

PostHeaderIcon Cabeceras de Seguridad en el servidor web Nginx y Apache




Para dotar de una capa de cifrado a las comunicaciones electrónicas que utilizan típicamente el protocolo HTTP, los dos protocolos más utilizados son SSL (Secure Sockets Layer)  y TLS (Transport Layer Security). Ambos, son protocolos criptográficos que utilizan criptografía de clave pública (o asimétrica) para autenticar a una de las partes (obligatoriamente al servidor) o ambas, siendo opcional la autenticación del cliente.






Otro concepto importante dentro de la criptografía es que un algoritmo se considera seguro, si el tiempo y el esfuerzo necesarios para romperlo y descifrar el contenido sin el conocimiento de la clave, es mayor que el valor del contenido de los datos en sí.

Por esto, cada implementación de SSL/TLS, va mejorando de una versión a otra, soportando cada vez algoritmos considerados más seguros, ya sea por mayor longitud de clave, como por la complejidad criptográfica del algoritmo en sí. 



Cabeceras de Seguridad (HTTP Headers)

  • Content-Security-Policy (CSP): allows the website to define a policy concerning which domains external javascripts, css, images, etc, can be imported and rendered from. Prevents XSS and other cross-site injections.
  • X-Content-Type-Options: prevents IE and Google Chrome from MIME-sniffing a response away from the declared content-type.
  • X-Frame-Options: protects against clickjacking attacks.
  • X-XSS-Protection: essentially useless; it comes enabled by default in modern browsers.
  • Strict-Transport-Security (HSTS): tells your browser to always connect to a particular domain over HTTPS. Attackers aren’t able to downgrade connections, and users can’t ignore TLS warnings.
  • Public-Key-Pins (HPKP): tells your browser to associate a specific public key fingerprint with a particular domain. Prevents against an attacker getting a valid certificate from one of the hundreds of other Certificate Authorities out there.

 Testing SSL/TLS with SSL Breacher

  1. HeartBleed
  2. ChangeCipherSpec Injection
  3. BREACH
  4. BEAST
  5. Forward Secrecy support
  6. RC4 support
  7. CRIME & TIME (If CRIME is detected, TIME will also be reported)
  8. Lucky13
  9. HSTS: Check for implementation of HSTS header
  10. HSTS: Reasonable duration of MAX-AGE
  11. HSTS: Check for SubDomains support
  12. Certificate expiration
  13. Insufficient public key-length
  14. Host-name mismatch
  15. Weak/Insecure Hashing Algorithm (MD2, MD4, MD5, SHA1)
  16. SSLv2 support
  17. Weak ciphers check (Low, Anon, Null, Export)
  18. Null Prefix in certificate
  19. HTTPS Stripping
  20. Surf Jacking
  21. Non-SSL elements/contents embedded in SSL page
  22. Cache-Control


 Requerimientos SSL Labs (2014):

  • Support for TLS 1.2 is now required to get an A. If this protocol version is not supported, the grade is capped at B. Given that, according to SSL Pulse, TLS 1.2 is supported by only about 20% servers, we expect this change to affect a large number of assessments.
  • Keys below 2048 bits are now considered weak, with the grade capped at B.
  • Keys below 1024 bits are now considered insecure, and given an F.
  • MD5 certificate signatures are now considered insecure, and given an F.
  • We introduce two new grades, A+ and A-, to allow for finer grading. This change allows us to reduce the grade slightly, when we don’t want to reduce it to a B, but we still want to show a difference. More interestingly, we can now reward exceptional configurations.
  • We also introduce a concept of warnings; a server with good configuration, but with one ore more warnings, is given a reduced grade A-.
  • Servers that do not support Forward Secrecy with our reference browsers are given a warning.
  • Servers that do not support secure renegotiation are given a warning.
  • Servers that use RC4 with TLS 1.1 or TLS 1.2 protocols are given a warning. This approach allows those who are still concerned about BEAST to use RC4 with TLS 1.0 and earlier protocols (supported by older clients), but we want them to use better ciphers with protocols that are not vulnerable to BEAST. Almost all modern clients now support TLS 1.2.
  • Servers with good configuration, no warnings, and good support for HTTP Strict Transport Security (long max-age is required), are given an A+.

Configuración en Nginx

Ten en cuenta que no debes copiar-pegar las directivas de seguridad directamente en tu fichero de configuración sin antes entender lo que realmente estás haciendo o añadiendo. Debes antes consultar la documentación oficial para ver la compatibilidad con tu versión o las posibles notas de funcionamiento.

Directivas para añadir en el fichero de configuración de Nginx

Configuración SSL

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS";

o bien:

ssl_prefer_server_ciphers On;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5;


 Añadir directiva cabeceras:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

HSTS

3 meses edad
add_header Strict-Transport-Security max-age=7776000;

CSP

CSP tiene dos modos de funcionamiento diferentes: hacer cumplir y de informes. Si utiliza la cabecera  Content-Security-Policy header, CSP operará en modo de aplicación; si utiliza Content-Security-Policy-Report-Only de sólo funcionará en el modo de informe

CSP es bastante complejo, y recomiendo que le informe en el modo en primer lugar, ya que permitirá a entender los cambios que necesita hacer para permitir la aplicación más adelante. También debe leer sobre las diferentes directivas de política CSP.

Con la ayuda de la consola de desarrollador de Chrome, fija el color rojo-advertencias uno por uno, lo que resulta en esta política final:
add_header Content-Security-Policy "default-src 'self'; 
script-src 'self' 'unsafe-eval' https://ssl.google-analytics.com https://ajax.cloudflare.com; 
img-src 'self' https://ssl.google-analytics.com ; 
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; 
font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; 
object-src 'none'";

 Para obtener una puntuación de A+ en  Security Headers:
add_header Strict-Transport-Security max-age=0;
add_header X-Frame-Options "ANYTHINGREALLY";
add_header X-Content-Type-Options anythingreally;
add_header X-XSS-Protection "0";
add_header Content-Security-Policy "default-src *";
add_header Public-Key-Pins max-age=0;

Configuración en Apache (Fortificando, Hardening Apache)

Directivas para añadir en el fichero de configuración httpd.conf

 HTTP Request Methods

Default apache configuration support OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT method in HTTP 1.1 protocol.

 
deny from all



Web Application Security

Disable Trace HTTP Request


TraceEnable off



Set cookie with HttpOnly and Secure flag


Requiere mod_headers


Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure


Clickjacking Attack




Opciones:

X-Frame-Options

DENY, SAMEORIGIN, ALLOW-URL url



Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

Cross Site Scripting (XSS)



Header set X-XSS-Protection "1; mode=block"



HTTP Strict Transport Security




Header set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Configuración SSL


 
SSLProtocol ALL -SSLv2 -SSLv3
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5
SSLCompression Off


Todo junto fichero confgiuración httpd.conf


CoreDumpDirectory /tmp

# bajar timeout, por defecto 300
Timeout 80

# Maximum size of the request body.
#LimitRequestBody 10000
# Maximum number of request headers in a request.
LimitRequestFields 40
# Maximum size of request header lines.
LimitRequestFieldSize 4094
# Maximum size of the request line.
#request failed: URI too long (longer than 500)
#LimitRequestLine 500

#nuevo antidos
#RLimitCPU 10 20
#RLimitCPU 100 100
#RLimitMEM 10000000 10000000
#RLimitNPROC 25 25

# esconder versión Apache, aka version banner
ServerTokens Prod

#seguridad
# http://httpd.apache.org/docs/2.2/mod/core.html#traceenable
TraceEnable off

#seguridad


Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
#https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
Header always append X-Frame-Options SAMEORIGIN
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options: "nosniff"


# https ssl

SSLRandomSeed startup file:/dev/urandom 1024



# enable SSLv3 and TLSv1, but not SSLv2
#SSLProtocol all -SSLv2
#SSLProtocol -ALL +SSLv3 +TLSv1
# https://community.qualys.com/blogs/securitylabs/2013/08/05/configuring-apache-nginx-and-openssl-for-forward-#secrecy
# new 2014
# https://www.ssllabs.com/ssltest/analyze.html?d=foro.elhacker.net
# Grade A, antes Grade F
SSLProtocol all -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 \
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 \
EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS"
#SSLCipherSuite ALL:!ADH:!NULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv3:+TLSv1 SLv2:+EXP:+eNULL

# mozilla
# https://wiki.mozilla.org/Security/Server_Side_TLS
# SSLCipherSuite AES256+EECDH:AES256+EDH:!aNULL:!eNULL

#
SSLProtocol All -SSLv2 -SSLv3
SSLHonorCipherOrder on
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+AESGCM EECDH EDH+AESGCM EDH+aRSA HIGH !MEDIUM !LOW !aNULL !eNULL !LOW !RC4 !MD5 !EXP !PSK !SRP !DSS"

Configuración segura para el servidor web  Lighttpd


ssl.honor-cipher-order = "enable"
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
ssl.use-compression = "disable"
setenv.add-response-header = (
    "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload",
    "X-Frame-Options" => "DENY",
    "X-Content-Type-Options" => "nosniff"
)
ssl.use-sslv2 = "disable"
ssl.use-sslv3 = "disable"
            



Fuentes:
https://diogomonica.com/2015/12/29/from-double-f-to-double-a/
http://foro.elhacker.net/desarrollo_web/seguridad_y_hardening_en_apache-t429857.0.html

0 comentarios :

Publicar un comentario en la entrada

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.