15강 — Windows 토큰·Deny only·특권¶
학습 목표: 계정·그룹·특권·무결성 정보를 읽고, 그룹 소속과 프로그램의 현재 권한, 실제 동작의 증거를 구분합니다.
Windows 실습 VM을 사용합니다. 출력은 설명용이며 학습자의 컴퓨터에서 측정한 결과가 아닙니다. 추가 질문, 상세 해답, 더 쉬운 권한 카드 설명을 함께 담았습니다.
한 계정과 두 프로그램¶
같은 사람이 실행한 두 프로그램도 서로 다른 권한을 사용할 수 있습니다.
student가 로컬 Administrators 그룹 소속이라고 하겠습니다. 일반 PowerShell을 하나 열고, 다른 하나는 관리자 권한으로 실행하여 정상 UAC 승인을 거쳤습니다. 일반적인 관리자 승인 구성에서는 다음과 같습니다.
flowchart TD
A["Same account: student<br/>Member of Administrators"]
A --> B["Ordinary PowerShell"]
A --> C["PowerShell started with<br/>administrator approval"]
B --> D["Filtered permission card<br/>Administrators: Deny only<br/>Integrity: Medium"]
C --> E["Administrative permission card<br/>Administrators: Enabled<br/>Integrity: High"]
사용자 이름은 같아도 권한 카드가 다를 수 있습니다. 이 카드가 접근 토큰, Access Token입니다. UAC에서는 일반 프로그램에 제한된 토큰을, 승인하여 승격한 프로그램에 관리용 토큰을 사용할 수 있습니다. Microsoft UAC 설명
승격 PowerShell을 열었다고 이미 실행 중인 Implant까지 자동으로 승격되지는 않습니다. 실제 동작에 사용되는 프로그램과 컨텍스트를 확인합니다.
권한 카드에 들어 있는 정보¶
접근 토큰은 프로세스·스레드의 보안 컨텍스트를 설명합니다. Windows는 관련 토큰과 자원의 규칙, 다른 통제를 함께 확인합니다. Microsoft 접근 토큰
| 정보 | 쉬운 질문 |
|---|---|
| 사용자 신원 | 누구의 계정인가? |
| 그룹과 속성 | 이 그룹 정보를 접근 검사에 어떻게 사용할까? |
| 특권과 상태 | 어떤 시스템 작업 특권이 있고 활성 상태인가? |
| 무결성 수준 | 어떤 무결성 보호 수준을 적용하는가? |
다음 두 문장에는 서로 다른 증거가 필요합니다.
첫 번째가 두 번째를 입증하지는 않습니다. 사용자 이름 하나가 모든 토큰 속성을 설명하지 않습니다. 토큰도 모든 자원의 접근 결과 목록은 아닙니다.
Windows 실행 컨텍스트 조회¶
Windows 실습 VM의 PowerShell에서 입력합니다.
나눠서 볼 수도 있습니다.
| 옵션 | 정보 |
|---|---|
/user |
계정 이름과 SID |
/groups |
그룹과 속성 |
/priv |
특권과 상태 |
/all |
현재 토큰의 관련 정보 함께 표시 |
SID는 Windows의 보안 식별자입니다. 이 명령은 해당 터미널에서 시작한 whoami.exe의 컨텍스트를 조회합니다. 별도 Implant의 사용자 이름이 같다는 이유로 같은 토큰이라고 판단하면 안 됩니다. Microsoft whoami 설명
getprivs로 Implant 조회¶
Sliver 콘솔에서 실제 Windows Session을 선택합니다.
꺾쇠괄호 없이 실제 ID를 넣습니다. getprivs는 Armory 패키지가 필요 없는 Windows 대상 내장 명령입니다. 확인한 구현은 프로세스 특권과 무결성 수준을 표시합니다. 이 특권 목록이 모든 그룹 속성을 별도로 조사한 결과를 대신하지는 않습니다. Sliver getprivs 구현
단순화한 설명용 출력입니다.
Privilege Information for lab-implant.exe (PID: 2030)
Process Integrity Level: Medium
Name Attributes
SeChangeNotifyPrivilege Enabled
SeShutdownPrivilege Disabled
실제 목록과 표시 형태는 달라집니다. 불완전한 정보나 수집 오류도 읽습니다. Beacon 작업은 체크인과 결과 반환을 기다려야 할 수 있습니다.
| 조회 | 설명하는 컨텍스트 |
|---|---|
터미널의 whoami.exe /all |
그 프로그램의 실행 컨텍스트 |
선택한 Implant의 getprivs |
Implant 프로세스의 특권·무결성 정보 |
Deny only는 무슨 뜻인가요?¶
학습자는 ‘아니요. 그런데 Deny only는 무슨 뜻인가요?’라고 질문했습니다.
이 그룹 정보는 거부 규칙 검사에 사용하며, 그 그룹에 허용한 규칙으로 접근 권한을 얻는 데는 사용하지 않는다는 뜻입니다.
| 자원의 규칙 | Deny only인 Administrators 정보 처리 |
|---|---|
| Administrators에게 읽기 허용 | 이 그룹 정보로 해당 허용 권한을 얻지 않음 |
| Administrators에게 수정 거부 | 거부 여부를 검사할 때 이 정보를 고려 |
비유하면 관리자 명찰로 관리자 혜택을 받을 수 없지만, 그 명찰에 적용되는 제한은 여전히 확인하는 상태입니다. Microsoft 토큰 SID 속성
현재 토큰의 속성입니다. 계정 삭제나 관리자 그룹 탈퇴를 뜻하지 않습니다. 모든 파일에 새로운 거부 규칙을 만드는 표시도 아닙니다.
Deny only면 모든 파일 작업이 금지되나요?¶
아닙니다. 토큰의 다른 신원 정보로 접근할 수 있습니다. 원리만 보기 위해 다른 허용·제약이 없는 단순한 예를 사용합니다.
| 파일 | 읽기 허용 |
|---|---|
notes.txt |
사용자 student에게 직접 허용 |
admin.txt |
Administrators에만 허용 |
일반 실행 프로그램의 토큰입니다.
| 파일 | 이 예시의 해석 |
|---|---|
notes.txt |
사용자 자신의 신원으로 읽기 허용을 얻음 |
admin.txt |
Deny only인 그룹 정보로 그 허용을 얻을 수 없음 |
Deny only는 특정 그룹 정보 하나를 어떻게 사용하는지 설명합니다. 다른 활성 그룹이나 사용자 정보도 영향을 줄 수 있습니다. 실제 접근에는 다른 규칙·통제도 작용하며 이 예시는 완전한 ACL 평가 알고리즘이 아닙니다.
그룹 속성과 특권 상태는 다름¶
| 예시 | 설명하는 것 |
|---|---|
Administrators — Deny only |
그룹 정보의 속성 |
SeShutdownPrivilege — Disabled |
특정 특권의 상태 |
특권 Privilege는 로컬 종료, 시스템 시간 변경 같은 시스템 작업에 관한 권리입니다. 파일 읽기·쓰기 권한은 해당 객체의 동작을 다룹니다. 같은 도메인 계정도 컴퓨터마다 특권이 다를 수 있습니다. Microsoft 특권 설명
| 상태 | 의미 |
|---|---|
| Enabled | 조회한 토큰에 존재하고 현재 활성 상태 |
| Disabled | 조회한 토큰에 존재하지만 현재 비활성 상태 |
Disabled는 특권이 없다는 뜻이 아닙니다. Enabled는 사용했다거나 성공의 모든 조건이 갖춰졌다는 뜻이 아닙니다.
상태와 실제 동작 기록의 차이¶
다음 결과를 관찰했다고 하겠습니다.
조회한 토큰에서 특권이 활성 상태라는 증거입니다. 종료 요청, 요청 성공, 실제 종료를 입증하지는 않습니다.
flowchart LR
A["Privilege present"] --> B["Privilege enabled"]
B --> C["Operation requested"]
C --> D["Operation succeeds"]
특권이 필요한 작업의 단계이며 실제 종료를 수행하라는 명령이 아닙니다. 이후 주장에는 각각의 증거가 필요합니다.
| 질문 | Enabled만으로 알 수 있나요? |
|---|---|
| 특권이 활성 상태인가? | 네 |
| 종료를 요청했는가? | 아니요 |
| 요청이 성공했는가? | 아니요 |
| 컴퓨터가 종료되었는가? | 아니요 |
무결성 수준은 또 다른 보호 정보¶
| 수준 | 입문 단계의 예 |
|---|---|
| Low | 제한된 실행 환경 |
| Medium | 일반 사용자 프로그램 |
| High | 승격 프로그램에서 흔히 관찰 |
| System | 시스템 서비스에서 흔히 관찰 |
무결성 제어는 객체 접근 규칙과 함께 작용합니다. 기본 보호 원리 중 하나는 낮은 무결성 코드가 높은 무결성 객체에 쓰는 것을 제한합니다. High도 모든 파일 접근이나 다른 서버의 관리자 권한을 입증하지는 않습니다. Microsoft 무결성 제어
이번 예에서 일반 PowerShell은 Medium, 승인하여 승격한 프로그램은 High입니다. 계정 소속만으로 추정하지 말고 실제 프로세스를 확인합니다.
전체 예시 읽기¶
관련 관찰을 모은 학습용 메모이며 한 명령의 실제 출력이 아닙니다.
Account: student
Account membership: Administrators
Current implant:
Administrators: Deny only
Integrity: Medium
SeShutdownPrivilege: Disabled
| 질문 | 뒷받침되는 답 |
|---|---|
| 어떤 계정인가? | student |
| 그룹 소속만으로 승격을 입증할까? | 아니요 |
| 이 Administrators 항목으로 그룹의 허용 권한을 얻을까? | 아니요. Deny only임 |
| 관찰한 무결성 수준은? | Medium |
| 표시된 종료 특권이 활성 상태일까? | 아니요. Disabled임 |
| 모든 파일을 읽거나 수정할 수 있을까? | 미확인. 해당 동작과 자원 규칙을 확인해야 함 |
관리자 그룹의 계정이 제한된 토큰으로 Implant를 실행하는 예입니다. 신원, 현재 토큰, 자원 권한, 실제 동작은 별개의 관찰입니다.
확인 문제 해답과 학습자의 판단¶
문제 1: Administrators가 있지만 Deny only이고 Medium입니다. 그룹 이름만 보고 승격된 프로세스라고 판단할까요?
학습자 답: ‘아니요. 그런데 Deny only는 무슨 뜻인가요?’
정확합니다. 이름과 속성을 함께 읽습니다. 해당 그룹 항목은 허용 규칙으로 접근 권한을 제공하지 않지만 일치하는 거부 규칙은 영향을 줄 수 있습니다. 모든 동작 금지라는 뜻이 아닌 이유는 두 파일 예시에서 확인합니다.
문제 2: SeShutdownPrivilege가 Enabled입니다. 실제 종료를 입증할까요?
학습자 답: ‘아니요. 특권이 있다는 것이지 실행 여부는 모르겠습니다.’
정확하며 한 가지를 더 분명히 하면, 조회한 토큰에 특권이 있고 현재 활성 상태라는 점까지 알 수 있습니다. 요청·사용 여부와 종료 결과에는 별도의 증거가 필요합니다. HTTP 200, TCP ESTABLISHED, 패키지 설치도 입증 범위가 한정된 것과 같습니다.
이전: EXE·.NET·BOF 실행 · 다음: Windows 서비스와 진단 결과 · 학습 범위 · 강좌 개요