¿Un alias de dominio da alguna seguridad contra hackers?

2

Tenemos una aplicación que se ejecuta fuera de una API privada. Tenemos un servidor que aloja la API, así como un panel de administración donde el personal puede iniciar sesión y realizar cambios en el contenido de la aplicación. La API y el panel de administración se ejecutan en el mismo dominio web. Supongamos que el dominio es appname.com y las URL son appname.com/api y appname.com/admin

Originalmente, no había páginas web públicas en el servidor o dominio. Sin embargo, agregamos una página de restablecimiento de contraseña en appname.com/resetpassword para que los usuarios de la aplicación que hayan olvidado su contraseña puedan solicitar un correo electrónico de restablecimiento de contraseña.

Inmediatamente después de agregar la página de restablecimiento de contraseña, el jefe del proyecto (que no es una persona técnica) se preocupó de que colocar la página de restablecimiento de contraseña en el mismo dominio que la API y el sitio de administración podría exponer el servidor a los piratas informáticos, que podrían De lo contrario, no se debe tener en cuenta el dominio ya que no tiene otras páginas públicas. Nos pidieron que pusiéramos la página de restablecimiento de contraseña en un dominio diferente para que los hackers no supieran cómo encontrar el dominio principal.

Esta lógica no tiene sentido para mí, por varias razones:

  1. Nunca he visto a nadie más hacer algo similar a esto, aunque es difícil pensar en paralelos directos
  2. El nombre de dominio del backend no es difícil de adivinar, incluso cuando no hay páginas públicas en el sitio
  3. Si agregamos un sitio web público en el futuro, lógicamente se ubicará en el mismo dominio, en cuyo punto el dominio ya no sería un secreto de todos modos.
  4. Cualquier pirata informático lo suficientemente sofisticado como para romper las medidas de seguridad en el servidor podría encontrar fácilmente la URL de la API y, por lo tanto, el dominio del sitio, siguiendo los paquetes enviados desde la aplicación.

Sin embargo, el jefe del proyecto está convencido de que la página de restablecimiento de contraseña no puede estar en el dominio principal. Lo que me parece la solución más fácil es configurar un alias de dominio, algo como appname-passwordreset.com , que apunta directa y exclusivamente a la página de restablecimiento de contraseña. Sin embargo, ¿esto nos comprará algo? appname.com y appname-passwordreset.com tendrían la misma dirección IP. ¿El uso de este último alias evitaría de manera realista que un pirata informático encuentre o se introduzca en el servidor?

Nota: me doy cuenta de que una alternativa es permitir que el usuario solo solicite un correo electrónico para restablecer la contraseña desde la aplicación. Sin embargo, el correo electrónico de restablecimiento de contraseña debe tener un enlace a una página web, lo que nos lleva de vuelta al problema original

    
pregunta Kevin 18.01.2018 - 00:04
fuente

2 respuestas

3

Es absolutamente trivial que un atacante (o investigador de seguridad o pirata informático) descubra cuál es el nombre del host para las solicitudes que van a la API para su aplicación. Existen múltiples técnicas que se pueden usar para resolver esto.

  1. Descompile la aplicación y busque el nombre de host en la fuente. ¿Quizás ofuscas la aplicación y todas las cadenas?
  2. MITM el tráfico entre su dispositivo y su API y observe las solicitudes. ¿Pero quizás haces TLS con el certificado de fijación?
  3. Detecta pasivamente el tráfico y mira el valor SNI en ClientHello . Ok, puede configurar la biblioteca SSL para que no use SNI.
  4. El nombre de host está en el certificado que se devuelve en claro. Pero supongo que podría fingir eso si está haciendo su propia verificación del nombre de host.
  5. Detectar pasivamente el tráfico DNS cuando tu aplicación comienza a establecer una conexión.

En este punto, podría volverse tonto y usar IP codificadas, o DNSCrypt u otras técnicas, pero el atacante también puede usar un dispositivo rooteado y volcar la memoria de su aplicación, o simplemente averiguar los nombres de host de las IP basadas en el el tráfico que está enviando.

Si ocultar su nombre de host es la diferencia entre estar comprometido y no, ya perdió y simplemente no lo sabe. Pensar que ocultar el nombre de host es útil es simplemente calmar la cabeza de su proyecto en una falsa sensación de seguridad.

    
respondido por el David 18.01.2018 - 01:32
fuente
0

El punto de tu cabeza no tiene mucho sentido para mí. Solo explíquele que, dado que su aplicación se ejecuta fuera de una API, su servidor estuvo expuesto incluso cuando no había páginas públicas en él. Cualquier atacante podría haber realizado un ataque MITM para ver desde dónde solicita la aplicación los datos, por lo que el servidor habría estado expuesto de todos modos. No es tanto para un atacante descubrir dónde se encuentra la API, ya sea desde una página pública en el servidor o desde la aplicación. Si un pirata informático quiere revertir el motor, calcular la salida de la API es casi trivial con las herramientas adecuadas (consulte mitmproxy ). En lugar de centrar la seguridad en tratar de ocultar su nombre de host, lo que es una pérdida de tiempo, sería mucho mejor diseñar una API segura que solo pueda usarse con la autenticación adecuada (es decir, OAuth )

    
respondido por el Miquel Perez 18.01.2018 - 02:30
fuente

Lea otras preguntas en las etiquetas