secure practices ocean how hardening checklist best security webserver

security - practices - Sitio web hacking-¿Por qué siempre es posible hacerlo?



ubuntu server security best practices (17)

¿Podemos decir que el sitio web puede estar completamente a salvo de los ataques de hackers ( asumimos que el hosting no es vulnerable )?

Bueno, si vamos a comenzar a imponer restricciones al atacante, entonces, por supuesto, podemos diseñar un sistema completamente seguro: solo tenemos que excluir todos los ataques del atacante del escenario.

Si asumimos que el atacante realmente quiere entrar (y no está sujeto a las reglas de su enfrentamiento), entonces la respuesta es simplemente no, no puede estar completamente a salvo de los ataques.

Sabemos que cada archivo ejecutable puede ser creado mediante ingeniería inversa (desarmado, descompilado). No importa cuán fuerte sea la seguridad que implementará, de todos modos, si los crackers lo desean, ¡se agrietarán! Solo que es cuestión de tiempo.

¿Qué pasa con los sitios web? ¿Podemos decir que el sitio web puede estar completamente a salvo de los ataques de hackers (asumimos que el hosting no es vulnerable)? Si no, ¿cuál es la razón?


¿Puedo crackear tu sitio? Claro, solo contrataré a unos pocos terroristas suicidas para hacer explotar tus servidores. O ... explotaré las centrales eléctricas que activan tu sitio, o haré algún tipo de ingeniería social, y los ataques DDOS probablemente serían efectivos a gran escala por no hablar de las bombas atómicas ...

Respuesta corta: si.


Decir "completamente seguro" es algo malo, ya que establecerá dos cosas:

  1. no ha habido un análisis de amenazas adecuado, porque lo suficientemente seguro sería el término ''correcto''
  2. ya que la seguridad es siempre una compensación , significa que un sistema que es completamente seguro tendrá una capacidad de utilización abismal y el sitio será un gran recurso, ya que la seguridad se ha llevado a niveles insanos.

Así que en lugar de tratar de lograr la "seguridad completa" debes hacerlo;

  1. Hacer un adecuado análisis de amenazas.
  2. Prueba tu aplicación (o haz que alguien profesional la pruebe) contra ataques comunes
  3. Aplicar las mejores prácticas, no medidas extremas.

El hecho es que los hackers siempre están un paso por delante de los desarrolladores, nunca se puede considerar que un sitio sea a prueba de balas y 100% seguro. Solo evitas las cosas maliciosas tanto como puedas !! De hecho, debe seguir un enfoque de lista blanca en lugar de un enfoque de lista negra cuando se trata de seguridad.


En pocas palabras, tiene que encontrar un equilibrio entre la facilidad de uso y la seguridad, en la mayoría de los casos, y decidir qué proporciona el nivel óptimo de ambos para sus propósitos.

Un excelente ejemplo de ello son las contraseñas. La manera más fácil de hacerlo es tener uno, usarlo en todas partes y hacer que sea algo fácil de recordar. La forma segura de hacerlo es tener una secuencia de caracteres de longitud variable generada aleatoriamente en todo el espectro de codificación que solo el propio usuario conoce.

Naturalmente, si va demasiado lejos en el lado fácil, es fácil descifrar los datos del usuario. Sin embargo, si va demasiado lejos del lado de la seguridad, la aplicación práctica podría llevar a situaciones que comprometan el valor agregado de las medidas de seguridad (por ejemplo, las personas no pueden recordar todo su llavero de contraseñas y nombres de usuarios correspondientes, y por lo tanto escribir Si la lista se ve comprometida, las medidas de seguridad que se pusieron en práctica son en vano. Por lo tanto, la mayoría de las veces se encuentra un saldo y lugares que le piden que ingrese un número en su contraseña y que no lo hagan. hacer algo estúpido como decírselo a otras personas.

Incluso si elimina la posibilidad de que una persona maliciosa tenga claves para todo lo que se filtre datos de la ecuación, la estupidez humana es infinita. No hay tal cosa como 100% de seguridad.


Este podría ser el sitio web equivocado para discutir eso. Sin embargo, es ampliamente conocido que la seguridad y la facilidad de uso están inversamente relacionadas. Vea esta post de Bruce Schneier, por ejemplo (que se refiere a otro sitio web, pero en el blog de Schneier hay muchas lecturas interesantes sobre el tema).


La clave a recordar es que los sitios web suelen ser parte de un sistema enorme y complejo y realmente no importa si el pirata informático ingresa al sistema a través de la aplicación web en sí o de alguna otra parte de la infraestructura. Si alguien puede obtener acceso a sus servidores, enrutadores, DNS o lo que sea, puede reducir incluso la mejor aplicación web. En mi experiencia, muchos sistemas son vulnerables de alguna manera u otra. Entonces, "completamente seguro" significa "estamos haciendo un gran esfuerzo para asegurar la plataforma" o "no tenemos ninguna pista en absoluto, pero esperamos que todo esté bien". He visto ambas cosas.


La respuesta a esta pregunta se encuentra cerca de las ideas sobre la teoría computacional que surgen al considerar el problema de la detención. http://en.wikipedia.org/wiki/Halting_problem En pocas palabras, si pudiera decir con claridad que había ideado una manera de determinar mediante programación si algún programa en particular era seguro, podría estar cerca de refutar la indecisión del problema que se detiene. en la clase de máquinas con las que trabajabas. Dado que se ha demostrado la indecidibilidad del problema de la detención, podemos saber que en el transcurso de las máquinas no podrá demostrar la seguridad, ya que el problema de la seguridad se reduce al problema de la detención. Incluso para las máquinas finitas, podría decidir todos los estados del programa, pero Minsk nos diría que el tiempo requerido para un árbol de estado completo para máquinas de hoy en día y servidores web simplistas sería enorme. Probablemente sepa mucho sobre un fragmento de código específico, pero tan pronto como cambie el código o lo actualice, se requerirá una nueva prueba completa. Fundamentalmente, esto es interesante porque todo se remonta al concepto de información y significado. Lea acerca de la teoría automatizada que demuestra comprender más sobre los límites de los sistemas computacionales. http://en.wikipedia.org/wiki/Automated_theorem_proving


Los sitios web sufren grandes ataques de injection y de secuencias de comandos de sitios

Las secuencias de comandos entre sitios realizadas en sitios web representaban aproximadamente el 80% de todas las vulnerabilidades de seguridad documentadas a partir de 2007

También parte de un sitio web (en algunos sitios web mucho) se envía al cliente en forma de CSS, HTML y javascript, que está abierto a la inspección de cualquier persona.


No es posible hacer nada 100% seguro.

Todo lo que se puede hacer es hacer algo lo suficientemente duro como para romperlo, que el tiempo y el esfuerzo invertido en hacerlo no valen la pena.


No para nítidas, pero su definición de "buen alojamiento" no asume que el servicio HTTP que se ejecuta en el host está completamente libre de vulnerabilidades.

Los servidores web populares, como IIS y Apache, a menudo están parcheados para protegerse contra tales explotaciones, que a menudo se descubren de la misma manera que se descubren las vulnerabilidades en los ejecutables locales.

Por ejemplo, una solicitud HTTP con formato incorrecto podría provocar un desbordamiento del búfer en el servidor, lo que provocaría la ejecución de parte de sus datos.


Para resumir y agregar a las publicaciones que preceden:

  1. La web como recurso compartido : los sitios web son útiles siempre que sean accesibles. Haz que el sitio web sea inaccesible y lo has roto. Los ataques de denegación de servicio se suman a inundar el servidor para que ya no pueda responder a solicitudes legítimas siempre será un factor. Es un juego de mantenerse alejado: los sitios de grandes servidores encuentran formas de distribuir, los piratas informáticos encuentran formas de inundarse.
  2. Datos dinámicos = riesgo dinámico : si el usuario puede ingresar datos, existe la posibilidad de que un pirata informático sea una referencia. Hoy en día, los grandes conceptos son los scripts entre sitios y la inyección de SQL, pero una vez que se resuelve una vía para el cracking, es probable que surja otro mecanismo. Podría, posiblemente, argumentar que un sitio totalmente estático se puede proteger de esto, pero ¿cuántos sitios útiles se ajustan a esa factura?
  3. Complejidad = cuanto más complejo, más difícil de asegurar, dado el rápido cambio de tecnología, dudo que cualquier desarrollador web pueda decir con 100% de confianza que un sitio web moderno es seguro: hay demasiado código desconocido. Dejando a un lado el host (el servidor, los protocolos de red, el sistema operativo y tal vez la base de datos), todavía hay todas las nuevas bibliotecas en Java EE y .Net. E incluso una arquitectura menos empresarial tendrá una complejidad seria que hace que conocer todas las entradas y salidas potenciales del código sea prohibitivamente difícil.
  4. El problema de autenticación = por definición, el sitio web le permite a un usuario remoto hacer algo útil en un servidor que está lejos. Conocer y confiar en el otro extremo de la comunicación es un viejo desafío. En estos días, la autenticación del lado del servidor está relativamente bien implementada y, por lo que sé, nadie ha logrado piratear la PKI. Pero conseguir que la autenticación del usuario se solucione es bastante complicado. Es factible, pero es una compensación entre la dificultad para el usuario y la configuración, y un sistema con un mayor riesgo de vulnerabilidad. E incluso un sistema sólido puede romperse cuando los usuarios no siguen las reglas o cuando ocurren accidentes. Todo esto no se aplica si desea hacer un sitio público para todos los usuarios, pero eso limita severamente las características que podrá implementar.

Yo diría que los sitios web simplemente cambian la naturaleza del desafío de seguridad de los desafíos del código del lado del cliente. El desarrollador no necesita estar tan preocupado por la replicación de código, pero el desarrollador debe ser consciente de los riesgos que conlleva la centralización de los datos y el acceso a un servidor (o colección de servidores). Es solo un tipo diferente de problema.


Puede escribir fácilmente una aplicación web que esté matemáticamente probada como segura ... Pero esa prueba solo se mantendrá mientras el sistema operativo subyacente, el compilador del intérprete y el hardware sean seguros, lo que nunca es el caso.


Sí, es posible que un sitio web sea completamente seguro, para una definición razonable de "completo" que incluya su premisa original de que el alojamiento no es vulnerable. El problema es el mismo que con cualquier software que contenga defectos; las personas crean software de una complejidad que está un poco más allá de su capacidad de administrar y, por lo tanto, las fallas no se detectan hasta que es demasiado tarde.

Puede comenzar más pequeño y demostrar que todo su trabajo es correcto y seguro a medida que lo construye, rehaciendo los componentes listos para usar que no se han diseñado con ese grado de calidad estricto, pero desafortunadamente eso lo deja en una desventaja comercial masiva en comparación con Las personas que pueden escribir software seguro al 99% en el 1% del tiempo. Por lo tanto, rara vez hay una buena razón comercial para seguir este camino.


Sí, siempre es posible hacerlo. Siempre hay una forma de entrar.

Es como mi abuelo siempre decía:

Las cerraduras están destinadas a mantener a la gente honesta fuera


Suponiendo que el servidor en sí no esté comprimido y que no haya otros clientes que lo compartan, el código estático debería estar bien. Por lo general, las cosas solo comienzan a ponerse de moda cuando se trata de algún tipo de lenguaje de scripting. Después de todo, nunca he visto un "¡Funciona!" Comprimido. página


¿Podemos decir que el sitio web puede estar completamente a salvo de los ataques de hackers?

No. Incluso la tecnología más segura del mundo es vulnerable a los ataques de ingeniería social , por una parte.