다른 프로세스를 디버깅하는 기능은 특히 원격으로 디버깅할 때 사용할 수 없는 매우 광범위한 기능을 제공합니다. 악의적인 디버거는 디버깅 중인 컴퓨터에 광범위한 피해를 줄 수 있습니다.
그러나 많은 개발자는 보안 위협이 반대 방향으로 흐를 수도 있다는 것을 인식하지 못합니다. 디버깅 프로세스의 악성 코드가 디버깅 머신의 보안을 위태롭게 할 수 있습니다. 보호해야 하는 보안 악용이 많이 있습니다.
보안 모범 사례
디버깅하는 코드와 디버거 사이에는 암시적 신뢰 관계가 있습니다. 디버그하려는 의지가 있다면 실행할 의지도 있어야 합니다. 결론은 디버깅하는 항목을 신뢰할 수 있어야 한다는 것입니다. 신뢰할 수 없는 경우 디버그해서는 안 되며, 위험할 수 있는 컴퓨터와 격리된 환경에서 디버그해야 합니다.
잠재적인 공격 노출 영역을 줄이려면 프로덕션 머신에서 디버깅을 사용하지 않도록 설정해야 합니다. 같은 이유로 디버깅을 무기한으로 사용하도록 설정해서는 안 됩니다.
관리되는 디버깅 보안
다음은 모든 관리되는 디버깅에 적용되는 몇 가지 일반적인 권장 사항입니다.
신뢰할 수 없는 사용자의 프로세스에 연결할 때는 주의해야 합니다. 이렇게 하면 신뢰할 수 있다고 가정합니다. 신뢰할 수 없는 사용자의 프로세스에 연결하려고 하면 프로세스에 연결할지 여부를 묻는 보안 경고 대화 상자 확인이 표시됩니다. "신뢰할 수 있는 사용자"에는 사용자 및 .NET Framework가 설치된 컴퓨터(예: aspnet, localsystem, networkservice 및 localservice)에 일반적으로 정의된 표준 사용자 집합이 포함됩니다. 자세한 내용은 보안 경고를 참조하세요. 신뢰할 수 없는 사용자가 소유한 프로세스에 연결하는 것은 위험할 수 있습니다. 다음 정보가 의심스럽거나 확실하지 않은 경우 이 프로세스에 연결하지 마세요.
인터넷에서 프로젝트를 다운로드하고 Visual Studio에 로드할 때는 주의해야 합니다. 디버깅하지 않고도 이 작업을 수행하는 것은 매우 위험합니다. 이렇게 하면 프로젝트와 프로젝트에 포함된 코드가 신뢰할 수 있다고 가정합니다.
자세한 내용은 관리 코드 디버깅을 참조하세요.
원격 디버깅 보안
로컬 디버깅은 일반적으로 원격 디버깅보다 안전합니다. 원격 디버깅은 프로브할 수 있는 총 노출 영역을 증가합니다.
Visual Studio 원격 디버깅 모니터(msvsmon.exe)는 원격 디버깅에 사용되며 구성을 위한 몇 가지 보안 권장 사항이 있습니다. Windows 인증이 선호되는 이유는 인증 모드가 없는 것이 안전하지 않기 때문입니다.
Windows 인증 모드를 사용하는 경우 msvsmon을 호스트하는 컴퓨터에 대한 모든 권한이 사용자에게 부여되므로 신뢰할 수 없는 사용자에게 msvsmon에 연결할 수 있는 권한을 부여하는 것은 위험합니다.
원격 컴퓨터에서 알 수 없는 프로세스를 디버그하지 마세요. 디버거를 실행하는 컴퓨터에 영향을 줄 수 있는 잠재적인 악용이 있거나 msvsmon을 손상시킬 수 있습니다. 알 수 없는 프로세스를 디버그해야 하는 경우 로컬로 디버깅을 시도하고 방화벽을 사용하여 잠재적인 위협을 지역화 상태로 유지합니다.
msvsmon 구성에 대한 자세한 내용은 원격 디버거 설정을 참조하세요.
웹 서비스 디버깅 보안
로컬로 디버그하는 것이 더 안전하지만 웹 서버에 Visual Studio가 설치되어 있지 않을 수 있으므로 로컬 디버깅이 실용적이지 않을 수 있습니다. 일반적으로 웹 서비스 디버깅은 개발 중에를 제외하고 원격으로 수행되므로 원격 디버깅 보안에 대한 권장 사항은 웹 서비스 디버깅에도 적용됩니다. 다음은 몇 가지 추가 모범 사례입니다. 자세한 내용은 XML 웹 서비스 디버깅을 참조하세요.
손상된 웹 서버에서 디버깅을 사용하도록 설정하지 마세요.
웹 서버를 디버깅하기 전에 웹 서버가 안전하다는 것을 알고 있는지 확인합니다. 보안이 확실하지 않은 경우 디버그하지 마세요.
인터넷에 노출되는 웹 서비스를 디버깅하는 경우 특히 주의해야 합니다.
외부 구성 요소
특히 코드를 작성하지 않은 경우 프로그램에서 상호 작용하는 외부 구성 요소의 신뢰 상태를 알고 있어야 합니다. Visual Studio 또는 디버거에서 사용할 수 있는 구성 요소도 알고 있어야 합니다.
기호 및 소스 코드
보안을 고려해야 하는 두 가지 Visual Studio 도구는 다음과 같습니다.
소스 서버- 소스 코드 리포지토리의 소스 코드 버전을 제공합니다. 현재 버전의 프로그램 소스 코드가 없는 경우에 유용합니다. 보안 경고: 디버거는 신뢰할 수 없는 명령을 실행해야 합니다.
기호 서버는 시스템 호출 중에 충돌을 디버그하는 데 필요한 기호를 제공하는 데 사용됩니다.