[Enumeration] PowerView & SharpView¶
Active Directory 환경에서 정보 수집(Enumeration)을 위한 도구
PowerView: PowerShell 스크립트 기반, AMSI에 의한 쉬운 탐지, 현재는 유지보수 XSharpView: PowerView 기능을C#과.NET을 이용한 실행 파일
1. Tool Comparison¶
AD 기반의 점검 환경에 따라서 적절한 도구를 선택해서 사용
- AD 환경이
.ps1의 실행을 차단한다면,SharpView.exe방법으로 우회 시도
| 특징 | PowerView (.ps1) | SharpView (.exe) |
|---|---|---|
| 기반 | PowerShell Script | .NET Assembly (C#) |
| 장점 | 파이프라인(\|)을 통한 데이터 가공 용이 |
CLM(Constrained Language Mode) 우회, AMSI 회피 용이 |
| 데이터 출력 | PowerShell 객체(Objects) | 문자열(Strings) |
| 단점 | Windows Defender 탐지율 높음 | 결과가 Text로 출력되어 2차 가공 불편 |
| 실행 | Import-Module .\PowerView.ps1 |
.\SharpView.exe {Command} |
Note: SharpView는 인자값에 공백이 있을 경우 반드시 큰따옴표(
"")로 감싸야 한다.
2. 설정 및 실행¶
2.1. PowerView¶
AMSI 및 실시간 보호가 해제된 환경이거나 탐지 설정이 미흡한 경우 모듈을 로드하여 사용한다.
powerview는Windows에 내장된 명령어가 아닌Powershell Script를 기반으로 작성powerview.ps1을 다운로드 했다면, 실행할 경로에 저장하고 다음과 같이 명령어를 입력powerview.ps1파일 다운로드 시,Windows Defender에 의해서 위협 탐지 및 삭제되기 때문에 예외 허용 필요
#공개된 Github에서 powerview.ps1 다운로드 및 저장위치 접근하여 명령어 입력
Import-Module .\PowerView.ps1
#명령어 실행 확인
Get-DomainPolicy
2.2. SharpView¶
sharpview 도구의 경우 exe 로 실행하게 되는데 배포할 때는 컴파일된 실행 파일을 사용하지 않음
- Visual Studio 환경에서
sln파일을 다운로드 후에.exe로 빌드하여 실행 .NET FrameWork설치 필수
#실행 예시
.\SharpView.exe Get-DomainPolicy
3. Basic Command¶
주요 함수 docs : https://powersploit.readthedocs.io/en/latest/Recon/
3.1. 기본 정보 조회¶
도메인 컨트롤로 식별 및 정책 조회 (Domain/LDAP Functions)
Get-Domain #도메인 정보
Get-DomainController #도메인 컨트롤러 목록
Get-DomainPolicy #도메인 정책
Get-DomainOU #도메인의 조직 단위 정보, 파이프 라인으로 원하는 값 출력 가능(findstr)
Get-DomainOU | findstr /b "name"
Get-DomainUser -KerberosPreauthNotRequired #사용자 정보수집 및 속성 지정 가능
3.2. 사용자 및 그룹¶
사용자 식별 및 권한 확인
#사용자 상세 정보 확인
Get-DomainUser -Identity {UserName}
#'admin'이 포함된 사용자 검색 (PowerView 전용)
Get-DomainUser | ? { $_.name -like "*admin*" }
#특정 그룹의 멤버 확인 (예: Domain Admins)
Get-DomainGroupMember -Identity "Domain Admins"
3.3. 컴퓨터 및 정책¶
조직에 적용된 정책 및 컴퓨터 목록 확인
# 도메인 내 컴퓨터 목록 확인
Get-DomainComputer
Get-DomainComputer | select name # name을 기준으로 컴퓨터 이름만 전체 조회
Get-NetShare -ComputerName EXAMPLE01 #특정 컴퓨터의 공유 폴더 조회
# GPO(그룹 정책) 목록 확인
Get-DomainGPO
#특정 컴퓨터 대상의 GPO 조회
Get-DomainGPO -ComputerIdentity {data} | select {column}
# 특정 컴퓨터에 적용된 GPO 확인
Get-DomainGPOApplied -ComputerIdentity {ComputerName}
3.4. 권한¶
- 테스트 명령어를 사용해서 특정 컴퓨터 사용자가 로컬 관리자 권한을 가지고 있는지 관리자 접근 테스트를 수행할 수 있다.
IsAdmin컬럼을 기준으로True,False반환Test-AdminAccess -Computer {PC}NAME> Test-AdminAccess -Computer TEST01 #결과 ComputerName IsAdmin ----------------------- ------------ TEST01 False
3.5. Utility¶
도메인 사용자 이름을 SID로 변환 및 복원
#현재 사용자 확인
whoami
#사용자 이름을 SID 값으로 출력
ConvertTo-SID {username}
.\SharpView.exe ConvertTo-SID -Name {username}
#SID 값을 사용자 이름으로 출력
Convert-ADName -ObjectName {SID}
.\SharpView.exe Convert-ADName -ObjectName {SID}
도메인 사용자의 위치 조회 (Meta Functions)
- 도메인 사용자의 로그인한 컴퓨터, IP, 이름 등을 알 수 있음
Find-DomainUserLocation
도메인의 신뢰 관계 조회 (Domain Trust Functions)
- 도메인의 신뢰 관계는 신뢰를 기반으로 공격을 확장하는데 사용할 수 있음
Get-DomainTrust
참고¶
[1] PowerSploit¶
- 도구 사용에 필요한 함수들을 정의해두었으며, 각 함수가 어떤 기능을 수행하는지 확인할 수 있는 사이트
- https://powersploit.readthedocs.io/en/latest/Recon/
[2] PowerShell - findstr & select¶
명령어 실행 결과에서 원하는 데이터만 출력할 때 기준
| 구분 | select (Select-Object) | findstr |
|---|---|---|
| 기반 | PowerShell 객체 (Object) 기반 | 단순 텍스트 (String) 기반 |
| 작동 방식 | 원하는 속성(Column, 열)만 남김 | 특정 단어가 포함된 줄(Row, 행)만 남김 |
| 비유 | 엑셀에서 특정 열(A열, C열)만 선택 | 엑셀에서 Ctrl+F로 찾은 행만 필터링 |
| 데이터 유지 | 데이터 구조가 살아있음 (재가공 가능) | 데이터 구조가 깨짐 (단순 글자가 됨) |
| 속도 | 대량 데이터 처리 시 상대적으로 느림 | 텍스트 검색 속도는 매우 빠름 |