Tengo una aplicación que registra rastreos de excepciones y quería que esos rastreos de pila incluyeran nombres de archivo y números de línea cuando se implementan en producción. Descubrí cómo implementar los símbolos de depuración con el ensamblado, pero en el proceso de investigación del problema me encontré con esta pregunta , lo que implica que no es una buena idea incluir archivos pdb en un entorno de producción. Un comentario a la respuesta aceptada dice "... depurar información puede revelar datos confidenciales y ser un vector de ataque. Dependiendo de cuál sea su aplicación".
Entonces, ¿qué tipo de datos sensibles podrían estar expuestos? ¿Cómo se pueden utilizar los símbolos de depuración para comprometer una aplicación? Tengo curiosidad por los detalles técnicos, pero lo que realmente estoy buscando es una forma práctica de evaluar el riesgo de incluir símbolos de depuración para cualquier aplicación y entorno de producción. O para decirlo de otra manera: ¿qué es lo peor que podría pasar?
EDITAR: pregunta de seguimiento / aclaración
Entonces, según las respuestas de todos hasta ahora, parece que esta pregunta se puede simplificar un poco para las aplicaciones .NET. Este fragmento del blog de John Robbins vinculado en la respuesta de Michael Maddox me llamó la atención :
Una PDB .NET solo contiene dos piezas de información, los nombres de los archivos de origen y sus líneas y los nombres de las variables locales. Toda la demás información ya está en los metadatos de .NET, por lo que no es necesario duplicar la misma información en un archivo PDB.
Para mí, esto reitera lo que otros han estado diciendo sobre Reflector, con la implicación de que el verdadero problema es el acceso a las asambleas. Una vez que se ha determinado, la única decisión que debe tomar con respecto a los PDB es si le importa o no exponer los nombres de archivo, los números de línea y los nombres de las variables locales (asumiendo que no está mostrando los rastros de pila a los usuarios finales para empezar). ¿O lo he simplificado demasiado?
Respuestas:
Aquí hay otra pregunta para mirar:
¿Existe algún problema de seguridad al dejar los archivos de depuración de PDB en los servidores activos?
Y más información sobre archivos PDB:
Archivos PDB: lo que todo desarrollador debe saber
En general, siempre incluyo archivos pdb en mis implementaciones, las ganancias son demasiado grandes para ignorarlas.
Si nunca expone un seguimiento de pila a sus usuarios (y generalmente no debería), no existe ningún riesgo de seguridad adicional al implementar archivos PDB.
Cuando ocurre un seguimiento de pila visible para el usuario, el usuario puede ver el seguimiento de pila completo, incluido el nombre de archivo y los números de línea de archivo. Esto podría darles una idea de cómo está diseñada su aplicación, lo que podría ayudarlos en caso de piratería.
Una amenaza de seguridad mayor es algo como Reflector que cuando se usa en sus DLL les permitirá ver su código fuente, con o sin archivos pdb.
fuente
Si está implementando en un entorno de producción en su propia organización, entonces no es un problema de seguridad.
Si está vendiendo su software a otras entidades, entonces el archivo .pdb puede darle una ventaja a alguien interesado en la ingeniería inversa, que puede ser un problema o no para usted.
Sin embargo (para que quede claro), no desea que sus rastros de pila se muestren al cliente, ya sea que los .pdbs estén disponibles o no. Pero si solo está registrando los rastros y presentando una página de error 'bonita' al cliente, no es un problema.
fuente
Al tener símbolos de depuración, un atacante puede determinar variables globales, compensaciones de funciones, etc., de interés.
Entonces pudo ver que su sistema tiene una función como:
AddAdminUser(string name, string password);
Y conoce su compensación. Si su programa está comprometido, podría llamar a esta función para darse privilegios de administrador.
O algo como:
typedef enum {Basic, NTLM} AuthenticationMode; AuthenticationMode g_authenticationMode;
Y sabe qué bit invertir para cambiar su aplicación a un modo inseguro.
Alternativamente, esto tomaría bastante tiempo de ingeniería inversa para resolverlo. Sin embargo, no es una cantidad de tiempo insuperable.
Pero . . . todo esto implica que su atacante ya está en una posición en la que puede comprometer su programa. Si ese es el caso, ya perdió.
Si tiene una buena razón comercial para implementar símbolos pdb, continúe. La implementación de PDB no lo hará inseguro. Si no tiene una buena razón para implementar, no debe hacer esto, ya que facilitará un poco los ataques.
También puede crear archivos PDB públicos: estos eliminan cierta información, pero le brindan suficientes símbolos para generar un seguimiento de pila y realizar una depuración básica. Los detalles están aquí . Microsoft implementa PDB públicos en su servidor de símbolos para que todos los usen.
EDITAR: La mayor parte de lo que dije se aplica a las preocupaciones en torno a la implementación de PDB para código nativo; creo que muchas de estas preocupaciones que la gente también traslada a .NET, aunque los metadatos de ensamblaje ya transmiten bastante de esto.
fuente
Alguien puede "restaurar" el código fuente completo de su aplicación. Si es de código abierto no tienes que preocuparte. Si tiene alguna IP (algoritmos, protección, licencias), probablemente no sea una buena idea.
Es cierto que herramientas como Reflector pueden reconstruir partes de su código incluso sin archivos PDB, pero las ofuscaciones pueden ayudar (bueno, solo un poco).
fuente