메시지 로깅에 대한 보안 문제
이 항목에서는 메시지 로깅에서 생성된 이벤트뿐만 아니라 메시지 로그에 중요한 데이터가 노출되지 않도록 보호하는 방법에 대해 설명합니다.
보안 문제
중요한 정보 로깅
WCF(Windows Communication Foundation)는 애플리케이션별 헤더 및 본문의 데이터를 수정하지 않습니다. 또한 WCF는 애플리케이션별 헤더 또는 본문 데이터의 개인 정보를 추적하지 않습니다.
메시지 로깅을 사용하도록 설정하면 애플리케이션별 헤더의 개인 정보(예: 쿼리 문자열) 신용 카드 번호와 같은 신체 정보가 로그에 표시될 수 있습니다. 애플리케이션 배포자는 구성 및 로그 파일에 액세스 제어를 적용할 책임이 있습니다. 이러한 종류의 정보를 표시하지 않으려면 로깅을 사용하지 않도록 설정하거나 로그를 공유하려는 경우 데이터의 일부를 필터링해야 합니다.
다음 팁은 로그 파일의 콘텐츠가 의도치 않게 노출되지 않도록 방지하는 데 도움이 될 수 있습니다.
로그 파일이 웹 호스트 및 자체 호스트 시나리오 모두에서 ACL(액세스 제어 목록)에 의해 보호되는지 확인합니다.
웹 요청을 사용하여 쉽게 처리할 수 없는 파일 확장자를 선택합니다. 예를 들어 .xml 파일 확장명은 안전한 선택이 아닙니다. IIS(인터넷 정보 서비스) 관리 가이드를 확인하여 제공 가능한 확장 목록을 확인할 수 있습니다.
웹 브라우저를 사용하여 외부 당사자가 액세스하지 못하도록 웹 호스트 vroot 공용 디렉터리 외부에 있어야 하는 로그 파일 위치에 대한 절대 경로를 지정합니다.
기본적으로 키와 PII(개인 식별 정보)(예: 사용자 이름 및 암호)는 추적 및 기록된 메시지에 기록되지 않습니다. 그러나 컴퓨터 관리자는 Machine.config 파일의 machineSettings
요소에 enableLoggingKnownPII
특성을 사용하여 컴퓨터에서 실행 중인 애플리케이션이 알려진 PII(개인 식별 정보)를 기록하도록 허용할 수 있습니다. 다음 구성에서는 이 작업을 수행하는 방법을 보여 줍니다.
<configuration>
<system.serviceModel>
<machineSettings enableLoggingKnownPii="true"/>
</system.serviceModel>
</configuration>
그런 다음 애플리케이션 배포자는 App.config 또는 Web.config 파일에서 logKnownPii
특성을 사용하여 다음과 같이 PII 로깅을 사용하도록 설정할 수 있습니다.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="true">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
두 설정이 모두 true
경우에만 PII 로깅을 사용할 수 있습니다. 두 스위치를 조합하면 각 애플리케이션에 대해 알려진 PII를 유연하게 기록할 수 있습니다.
중요하다
.NET Framework 4.6.1에서 logEntireMessage
및 logKnownPii
플래그를 Web.config 파일 또는 App.config 파일에서 true
로 설정해야 PII 로깅을 사용할 수 있습니다, 다음 예와 같이 <system.serviceModel><messageLogging logEntireMessage="true" logKnownPii="true" …
.
구성 파일에서 두 개 이상의 사용자 지정 원본을 지정하는 경우 첫 번째 원본의 특성만 읽습니다. 다른 항목은 무시됩니다. 즉, 다음 App.config파일의 경우 PII 로깅이 두 번째 원본에 대해 명시적으로 사용하도록 설정되어 있더라도 두 원본 모두에 대해 PII가 기록되지 않습니다.
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging"
logKnownPii="false">
<listeners>
<add name="messages"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\messages.svclog" />
</listeners>
</source>
<source name="System.ServiceModel"
logKnownPii="true">
<listeners>
<add name="traces"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\logs\traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<machineSettings enableLoggingKnownPii="Boolean"/>
요소가 Machine.config 파일 외부에 있으면 시스템에서 ConfigurationErrorsExceptionthrow합니다.
변경 내용은 애플리케이션이 시작되거나 다시 시작될 때만 적용됩니다. 두 특성이 모두 true
설정되면 시작 시 이벤트가 기록됩니다.
logKnownPii
이 true
로 설정되었지만 enableLoggingKnownPii
이 false
인 경우에도 이벤트가 기록됩니다.
컴퓨터 관리자와 애플리케이션 배포자는 이러한 두 스위치를 사용할 때 매우 주의해야 합니다. PII 로깅을 사용하도록 설정하면 보안 키와 PII가 기록됩니다. 이 기능을 사용하지 않도록 설정하면 중요한 데이터와 애플리케이션별 데이터가 메시지 헤더 및 본문에 계속 기록됩니다. 개인 정보 보호 및 PII 노출 방지에 대한 자세한 내용은 사용자 개인 정보 보호참조하세요.
주의
PII는 잘못된 형식의 메시지에 숨겨져 있지 않습니다. 이러한 메시지는 수정 없이 as-is 기록됩니다. 앞에서 언급한 특성은 이에 영향을 주지 않습니다.
사용자 지정 추적 수신기
메시지 로깅 추적 원본에 사용자 지정 추적 수신기를 추가하는 것은 관리자로 제한해야 하는 권한입니다. 악의적인 사용자 지정 수신기를 원격으로 메시지를 보내도록 구성할 수 있기 때문에 중요한 정보가 공개됩니다. 또한 원격 데이터베이스와 같이 유선으로 메시지를 보내도록 사용자 지정 수신기를 구성하는 경우 원격 컴퓨터의 메시지 로그에 적절한 액세스 제어를 적용해야 합니다.
메시지 로깅에 의해 트리거되는 이벤트
다음은 메시지 로깅에서 내보낸 모든 이벤트를 나열합니다.
메시지 로그온: 이 이벤트는 구성에서 또는 WMI를 통해 메시지 로깅을 사용할 때 내보내집니다. 이벤트의 콘텐츠는 "메시지 로깅이 켜져 있습니다. 중요한 정보는 메시지 본문과 같이 유선에서 암호화된 경우에도 명확한 텍스트로 기록될 수 있습니다."
메시지 로깅 해제: 이 이벤트는 WMI를 통해 메시지 로깅을 사용하지 않도록 설정할 때 내보내집니다. 이벤트의 콘텐츠는 "메시지 로깅이 꺼져 있습니다."입니다.
알려진 PII 로그 켜기: 알려진 PII 로깅을 사용하도록 설정하면 이 이벤트가 내보내집니다. 이 문제는 Machine.config 파일의
machineSettings
요소에 있는enableLoggingKnownPii
특성이true
설정되고 App.config 또는 Web.config 파일에서source
요소의logKnownPii
특성이true
설정되는 경우에 발생합니다.알려진 PII 로그 허용 안 함: 알려진 PII 로깅이 허용되지 않을 때 이 이벤트가 내보내집니다. 이 문제는 App.config 또는 Web.config 파일에서
source
요소의logKnownPii
특성이true
설정되지만 Machine.config 파일의machineSettings
요소에 있는enableLoggingKnownPii
특성이false
설정되는 경우에 발생합니다. 예외가 던져지지 않습니다.
이러한 이벤트는 Windows와 함께 제공되는 이벤트 뷰어 도구에서 볼 수 있습니다. 이에 대한 자세한 내용은 이벤트 로깅참조하세요.