예외 strack 추적을 기록하는 응용 프로그램이 있으며 프로덕션에 배포 할 때 해당 스택 추적에 파일 이름과 줄 번호를 포함하고 싶었습니다. 어셈블리와 함께 디버그 기호를 배포하는 방법을 알아 냈지만 문제를 조사하는 과정 에서이 질문을 건너 뛰었습니다 . 이는 프로덕션 환경에 pdb 파일을 포함하는 것이 좋지 않음을 의미합니다. 허용 된 답변에 대한 의견은 “… 정보를 디버깅하면 민감한 데이터를 제공 할 수 있으며 공격 벡터가 될 수 있습니다. 앱이 무엇인지에 따라 다릅니다.”
그렇다면 어떤 종류의 민감한 데이터가 노출 될 수 있습니까? 애플리케이션을 손상시키기 위해 디버그 기호를 어떻게 사용할 수 있습니까? 기술적 인 세부 사항에 대해 궁금합니다.하지만 제가 정말로 찾고있는 것은 주어진 응용 프로그램 및 프로덕션 환경에 대한 디버그 기호를 포함하는 위험을 평가하는 실용적인 방법입니다. 또는 다른 말로하면, 일어날 수있는 최악의 상황은 무엇일까요?
수정 : 후속 질문 / 설명
따라서 지금까지 모든 사람의 답변을 바탕으로 .NET 응용 프로그램에서는이 질문을 약간 단순화 할 수있는 것 같습니다. Michael Maddox의 답변에 링크 된 John Robbins 블로그 에서이 비트 는 나에게 도약했습니다.
.NET PDB에는 소스 파일 이름과 해당 행 및 로컬 변수 이름의 두 가지 정보 만 포함됩니다. 다른 모든 정보는 이미 .NET 메타 데이터에 있으므로 PDB 파일에서 동일한 정보를 복제 할 필요가 없습니다.
나에게 이것은 Reflector에 대해 다른 사람들이 말하는 것을 반복하며, 실제 문제는 어셈블리에 대한 액세스라는 의미입니다. 이것이 결정되면 PDB와 관련하여 내려야 할 유일한 결정은 파일 이름, 줄 번호 및 로컬 변수 이름을 노출하는 데 관심이 있는지 여부입니다 (시작하기 위해 최종 사용자에게 스택 추적을 표시하지 않는다고 가정). 아니면 너무 많이 단순화 했나요?
답변
살펴볼 또 다른 질문이 있습니다.
라이브 서버에 PDB 디버그 파일을 남기는 보안 문제가 있습니까?
PDB 파일에 대한 추가 정보 :
일반적으로 배포시 항상 pdb 파일을 포함하고 있지만 그 이득은 무시하기에는 너무 큽니다.
사용자에게 스택 추적을 노출하지 않는 경우 (일반적으로 그렇게해서는 안 됨) PDB 파일 배포에 대한 추가 보안 위험이 없습니다.
사용자에게 보이는 스택 추적이 발생하면 사용자는 파일 이름과 파일 줄 번호를 포함한 전체 스택 추적을 볼 수 있습니다. 이를 통해 해킹시 잠재적으로 도움이 될 수있는 앱 설계 방식에 대한 아이디어를 얻을 수 있습니다.
더 큰 보안 위협은 Reflector 와 같은 것으로 DLL에 사용될 때 pdb 파일의 유무에 관계없이 소스 코드를 볼 수 있습니다.
답변
자체 조직의 프로덕션 환경에 배포하는 경우 보안 문제가 아닙니다.
소프트웨어를 다른 기관에 판매하는 경우 .pdb 파일은 리버스 엔지니어링에 관심이있는 사람에게 문제가 될 수도 있고 그렇지 않을 수도 있습니다.
그러나 (명확하게 말하면) .pdb를 사용할 수 있는지 여부에 관계없이 스택 추적이 클라이언트에 표시되는 것을 원하지 않습니다. 그러나 추적을 기록하고 클라이언트에게 ‘예쁜’오류 페이지를 표시하는 경우 문제가되지 않습니다.
답변
디버깅 기호를 사용하여 공격자는 관심있는 전역 변수, 함수 오프셋 등을 결정할 수 있습니다.
따라서 그는 시스템에 다음과 같은 기능이 있음을 알 수 있습니다.
AddAdminUser(string name, string password);
그리고 그것의 오프셋을 알고 있습니다. 프로그램이 손상되면이 함수를 호출하여 관리자 권한을 부여 할 수 있습니다.
또는 다음과 같습니다.
typedef enum {Basic, NTLM} AuthenticationMode;
AuthenticationMode g_authenticationMode;
그리고 애플리케이션을 안전하지 않은 모드로 전환하기 위해 어떤 비트를 뒤집어 야하는지 알고 있습니다.
또는이를 파악하는 데 상당한 리버스 엔지니어링 시간이 소요됩니다. 그러나 극복 할 수없는 시간은 아닙니다.
하지만. . . 이 모든 것은 공격자가 이미 프로그램을 손상시킬 수있는 위치에 있음을 의미합니다. 그렇다면 이미 패배 한 것입니다.
pdb 기호를 배포해야하는 비즈니스 이유가 있다면 계속 진행하십시오. PDB를 배포해도 안전하지 않습니다. 배포 할 타당한 이유가없는 경우 공격이 약간 더 쉬워 지므로 이렇게하면 안됩니다.
공개 PDB 파일을 만들 수도 있습니다. 이러한 파일은 특정 정보를 제거하지만 스택 추적을 생성하고 기본 디버깅을 수행 할 수있는 충분한 기호를 제공합니다. 자세한 내용은 여기에 있습니다 . Microsoft는 모두가 사용할 수 있도록 심볼 서버에 공용 PDB를 배포합니다.
편집 : 내가 말한 대부분은 네이티브 코드 용 PDB 배포에 대한 우려에 적용됩니다. 어셈블리 메타 데이터가 이미 상당 부분을 전달하고 있음에도 불구하고 사람들이 .NET에도 이러한 우려를 전달한다고 생각합니다.
답변
누군가 애플리케이션의 전체 소스 코드를 “복원”할 수 있습니다. 오픈 소스라면 걱정할 필요가 없습니다. IP (알고리즘, 보호, 라이센스)가 있다면 좋은 생각이 아닐 것입니다.
Reflector와 같은 도구가 PDB 파일 없이도 코드의 일부를 재구성 할 수 있다는 것은 사실이지만 난독 화가 도움이 될 수 있습니다 (음, 조금만).