필수 무결성 제어
MIC(필수 무결성 제어)는 보안 개체에 대한 액세스를 제어하는 메커니즘을 제공합니다. 이 메커니즘은 임의 액세스 제어 외에도 개체의 DACL(임의 액세스 제어 목록 )에 대한 액세스 검사를 평가하기 전에 액세스를 평가합니다.
MIC는 무결성 수준 및 필수 정책을 사용하여 액세스를 평가합니다. 보안 주체 및 보안 개체에는 보호 또는 액세스 수준을 결정하는 무결성 수준이 할당됩니다. 예를 들어 무결성 수준이 낮은 보안 주체는 해당 개체의 DACL에서 보안 주체에 대한 쓰기 액세스를 허용하더라도 중간 무결성 수준의 개체에 쓸 수 없습니다.
Windows는 낮음, 중간, 높음 및 시스템의 네 가지 무결성 수준을 정의합니다. 표준 사용자는 중간, 상승된 사용자가 높은 수신을 받습니다. 시작하는 프로세스와 사용자가 만든 개체는 실행 파일의 수준이 낮으면 무결성 수준(중간 또는 높음) 또는 낮음이 수신됩니다. 시스템 서비스는 시스템 무결성을 받습니다. 무결성 레이블이 없는 개체는 운영 체제에서 보통으로 처리됩니다. 이렇게 하면 낮은 무결성 코드에서 레이블이 지정되지 않은 개체를 수정할 수 없습니다. 또한 Windows는 낮은 무결성 수준으로 실행되는 프로세스가 앱 컨테이너와 연결된 프로세스에 액세스할 수 없도록 합니다.
무결성 레이블
무결성 레이블은 보안 개체 및 보안 주체의 무결성 수준을 지정합니다. 무결성 레이블은 무결성 SID로 표시됩니다. 보안 개체의 무결성 SID는 SACL(시스템 액세스 제어 목록)에 저장됩니다. SACL에는 무결성 SID를 포함하는 ACE(SYSTEM_MANDATORY_LABEL_ACE 액세스 제어 항목)가 포함됩니다. 무결성 SID가 없는 모든 개체는 중간 무결성을 가진 것처럼 처리됩니다.
보안 주체의 무결성 SID는 액세스 토큰에 저장됩니다. 액세스 토큰에는 하나 이상의 무결성 SID가 포함될 수 있습니다.
정의된 무결성 SID에 대한 자세한 내용은 잘 알려진 SID를 참조 하세요.
프로세스 만들기
사용자가 실행 파일을 시작하려고 하면 최소 사용자 무결성 수준 및 파일 무결성 수준으로 새 프로세스가 만들어집니다. 즉, 새 프로세스는 실행 파일보다 더 높은 무결성으로 실행되지 않습니다. 관리자 사용자가 낮은 무결성 프로그램을 실행하는 경우 새 프로세스에 대한 토큰은 낮은 무결성 수준으로 작동합니다. 이렇게 하면 해당 코드에서 수행하는 악의적인 행위로부터 신뢰할 수 없는 코드를 시작하는 사용자를 보호할 수 있습니다. 일반적인 사용자 무결성 수준에 있는 사용자 데이터는 이 새로운 프로세스에 대해 쓰기 보호됩니다.
필수 정책
보안 개체의 SACL에 있는 SYSTEM_MANDATORY_LABEL_ACE ACE에는 무결성 수준이 개체보다 낮은 보안 주체가 부여되는 액세스를 지정하는 액세스 마스크가 포함되어 있습니다. 이 액세스 마스크에 대해 정의된 값은 SYSTEM_MANDATORY_LABEL_NO_WRITE_UP, SYSTEM_MANDATORY_LABEL_NO_READ_UP 및 SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP. 기본적으로 시스템은 SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 액세스 마스크를 사용하여 모든 개체를 만듭니다.
모든 액세스 토큰은 토큰을 만들 때 LSA(로컬 보안 기관)에서 설정하는 필수 정책도 지정합니다. 이 정책은 토큰과 연결된 TOKEN_MANDATORY_POLICY 구조체에 의해 지정됩니다. TokenInformationClass 매개 변수 값이 TokenMandatoryPolicy로 설정된 GetTokenInformation 함수를 호출하여 이 구조를 쿼리할 수 있습니다.