Integrity Levels

Support HackTricks

Integrity Levels

Windows Vista 및 이후 버전에서는 모든 보호된 항목에 무결성 수준 태그가 있습니다. 이 설정은 주로 파일 및 레지스트리 키에 "중간" 무결성 수준을 할당하며, Internet Explorer 7이 낮은 무결성 수준에서 쓸 수 있는 특정 폴더 및 파일을 제외합니다. 기본 동작은 표준 사용자가 시작한 프로세스가 중간 무결성 수준을 가지며, 서비스는 일반적으로 시스템 무결성 수준에서 작동합니다. 높은 무결성 레이블은 루트 디렉터리를 보호합니다.

주요 규칙은 객체의 무결성 수준보다 낮은 무결성 수준을 가진 프로세스가 객체를 수정할 수 없다는 것입니다. 무결성 수준은 다음과 같습니다:

  • 신뢰할 수 없음: 이 수준은 익명 로그인이 있는 프로세스를 위한 것입니다. %%%예: Chrome%%%

  • 낮음: 주로 인터넷 상호작용을 위해, 특히 Internet Explorer의 보호 모드에서 관련 파일 및 프로세스와 특정 폴더(예: 임시 인터넷 폴더)에 영향을 미칩니다. 낮은 무결성 프로세스는 레지스트리 쓰기 접근 및 제한된 사용자 프로필 쓰기 접근을 포함하여 상당한 제한을 받습니다.

  • 중간: 대부분의 활동에 대한 기본 수준으로, 표준 사용자 및 특정 무결성 수준이 없는 객체에 할당됩니다. 관리자의 그룹 구성원조차도 기본적으로 이 수준에서 작동합니다.

  • 높음: 관리자를 위해 예약되어 있으며, 낮은 무결성 수준의 객체를 수정할 수 있도록 하며, 높은 수준의 객체도 포함됩니다.

  • 시스템: Windows 커널 및 핵심 서비스의 가장 높은 운영 수준으로, 관리자조차도 접근할 수 없으며, 중요한 시스템 기능을 보호합니다.

  • 설치자: 모든 다른 수준 위에 있는 고유한 수준으로, 이 수준의 객체가 다른 모든 객체를 제거할 수 있도록 합니다.

Process Explorer를 사용하여 프로세스의 무결성 수준을 확인할 수 있으며, 프로세스의 속성에 접근하고 "보안" 탭을 확인합니다:

whoami /groups를 사용하여 현재 무결성 수준을 확인할 수도 있습니다.

파일 시스템의 무결성 수준

파일 시스템 내의 객체는 최소 무결성 수준 요구 사항이 필요할 수 있으며, 프로세스가 이 무결성 수준을 가지지 않으면 상호작용할 수 없습니다. 예를 들어, 일반 사용자 콘솔에서 파일을 생성하고 권한을 확인해 보겠습니다:

echo asd >asd.txt
icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)

이제 파일에 최소 무결성 수준을 높음으로 설정합시다. 이는 관리자로 실행되는 콘솔에서 반드시 수행해야 하며, 일반 콘솔은 중간 무결성 수준에서 실행되므로 객체에 높은 무결성 수준을 할당할 수 없습니다:

icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
Successfully processed 1 files; Failed processing 0 files

C:\Users\Public>icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)

이제 흥미로운 부분입니다. 사용자 DESKTOP-IDJHTKP\user가 파일에 대해 전체 권한을 가지고 있는 것을 볼 수 있습니다(실제로 이 사용자가 파일을 생성했습니다). 그러나 최소 무결성 수준이 구현되어 있기 때문에, 그는 더 이상 파일을 수정할 수 없습니다. 그가 높은 무결성 수준에서 실행되지 않는 한 말이죠(그는 파일을 읽을 수는 있습니다):

echo 1234 > asd.txt
Access is denied.

del asd.txt
C:\Users\Public\asd.txt
Access is denied.

따라서 파일에 최소 무결성 수준이 있을 때, 이를 수정하려면 최소한 해당 무결성 수준에서 실행해야 합니다.

이진 파일의 무결성 수준

나는 C:\Windows\System32\cmd-low.execmd.exe의 복사본을 만들고 관리자 콘솔에서 낮은 무결성 수준으로 설정했다:

icacls C:\Windows\System32\cmd-low.exe
C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX)
Mandatory Label\Low Mandatory Level:(NW)

이제 cmd-low.exe를 실행하면 낮은 무결성 수준에서 실행됩니다. 대신 중간 수준에서 실행되지 않습니다:

호기심이 많은 분들을 위해, 이진 파일에 높은 무결성 수준을 할당하면(icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high) 자동으로 높은 무결성 수준으로 실행되지 않습니다(중간 무결성 수준에서 호출하면 --기본적으로-- 중간 무결성 수준에서 실행됩니다).

프로세스의 무결성 수준

모든 파일과 폴더가 최소 무결성 수준을 가지는 것은 아닙니다, 하지만 모든 프로세스는 무결성 수준에서 실행됩니다. 파일 시스템에서 발생한 것과 유사하게, 프로세스가 다른 프로세스 내부에 쓰기를 원할 경우 최소한 동일한 무결성 수준을 가져야 합니다. 이는 낮은 무결성 수준을 가진 프로세스가 중간 무결성 수준을 가진 프로세스에 대한 전체 액세스 핸들을 열 수 없음을 의미합니다.

이 섹션과 이전 섹션에서 언급된 제한으로 인해, 보안 관점에서 볼 때, 항상 가능한 낮은 무결성 수준에서 프로세스를 실행하는 것이 권장됩니다.

Support HackTricks

Last updated