
Active Directory SMB 공유를 감사하여 과도한 권한을 인벤토리, 분석 및 보고합니다. 접근 가능한 시스템을 발견하고, 공유 ACL을 열거하며, 고위험 구성을 식별하고, 수정 우선순위를 위한 HTML/CSV 보고서를 생성합니다.
PowerHuntShares는 사이버 보안 팀과 침투 테스터가 Active Directory 환경에서 SMB 공유를 더 잘 식별, 이해, 공격 및 수정할 수 있도록 설계된 PowerShell 도구입니다. 모든 해커는 SMB 공유를 악용하는 이야기를 가지고 있지만, 사이버 보안 팀은 여전히 이 공격 표면을 방어하는 데 어려움을 겪고 있습니다. 이 프로젝트는 포괄적인 공유 인벤토리를 생성하고, 통계, 차트, 그래프 및 언어 모델을 활용하여 공유를 상황에 맞게 설명하고, 관계를 요약하고, 위험을 평가하고, 수정 우선순위를 지정하기 위한 오픈 소스 개념 증명 도구를 제공하는 것을 목표로 합니다.
다음 기능을 지원합니다:
추가 기능:
PowerHuntShares v2 리소스:
PowerHuntShares v1 리소스:
PowerHuntShares는 "과도한 권한"으로 구성된 SMB 공유 ACL을 인벤토리화하고 "고위험" ACL을 강조합니다. 이 맥락에서 각각의 정의는 아래와 같습니다.
과도한 권한
과도한 읽기 및 쓰기 공유 권한은 "Everyone", "Authenticated Users", "BUILTIN\Users", "Domain Users" 또는 "Domain Computers" 그룹에 대한 명시적 ACE(Access Control Entry)를 포함하는 모든 네트워크 공유 ACL로 정의됩니다. 이들 모두는 권한 상속 문제로 인해 도메인 사용자에게 영향을 받는 공유에 대한 액세스를 제공합니다. 참고: 운영자가 자신의 대상 그룹을 추가할 수 있는 매개변수가 있습니다.
다음은 추가 배경 정보입니다:
참고: 공유 권한은 NTFS 권한에 의해 재정의될 수 있습니다. 또한 다음 키워드를 포함하는 공유 이름은 테스트에서 제외됩니다:
print$, prnproc$, printer, netlogon,and sysvol
고위험 공유
이 보고서의 맥락에서 고위험 공유는 시스템 또는 애플리케이션에 대한 승인되지 않은 원격 액세스를 제공하는 공유로 정의됩니다. 기본적으로 여기에는
wwwroot, inetpub, c$, and admin$
다음은 현재 PowerShell 세션에 PowerHuntShares를 로드하는 데 사용할 수 있는 명령어 목록입니다. PowerShell이 실행될 때마다 이 중 하나를 실행해야 합니다. 영구적이지 않습니다.
# Bypass execution policy restrictions
Set-ExecutionPolicy -Scope Process Bypass
# Import module that exists in the current directory
Import-Module .\PowerHuntShares.psm1
or
# Reduce SSL operating level to support connection to github
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
[Net.ServicePointManager]::SecurityProtocol =[Net.SecurityProtocolType]::Tls12
# Download and load PowerHuntShares.psm1 into memory
IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")
중요 참고: 모든 명령은 권한이 없는 도메인 사용자로 실행해야 합니다.
.EXAMPLE 1: Run from a domain computer. Performs Active Directory computer discovery by default.
PS C:\temp\test> Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test
.EXAMPLE 2: Run from a domain computer with alternative domain credentials. Performs Active Directory computer discovery by default.
PS C:\temp\test> Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test -Credential domain\user
.EXAMPLE 3: Run from a domain computer as current user. Target hosts in a file. One per line.
PS C:\temp\test> Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test -HostFile c:\temp\hosts.txt
.EXAMPLE 4: Run from a non-domain computer with credential. Performs Active Directory computer discovery by default.
C:\temp\test> runas /netonly /user:domain\user PowerShell.exe
PS C:\temp\test> Import-Module PowerHuntShares.psm1
PS C:\temp\test> Invoke-HuntSMBShares -Threads 100 -RunSpaceTimeout 10 -OutputDirectory c:\folder\ -DomainController 10.1.1.1 -Credential domain\user
=============================================================== PowerHuntShares =============================================================== 이 함수는 다음 작업을 자동화합니다: o 현재 컴퓨터의 도메인 확인 o 도메인 컴퓨터 열거 o ping 요청에 응답하는 컴퓨터 필터링 o TCP 445가 열려 있고 접근 가능한 컴퓨터 필터링 o SMB 공유 열거 o SMB 공유 권한 열거 o 잠재적으로 과도한 권한이 있는 공유 식별 o 읽기 및 쓰기 액세스를 제공하는 공유 식별 o 고위험 공유 식별 o 일반적인 공유 소유자, 이름 및 디렉터리 목록 식별 o 생성, 마지막 작성 및 마지막 액세스 타임라인 생성 o HTML 요약 보고서 및 상세 CSV 파일 생성 참고: 대규모 환경에서는 실행하는 데 몇 시간이 걸릴 수 있습니다. --------------------------------------------------------------- ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| --------------------------------------------------------------- 공유 검색 --------------------------------------------------------------- [*][03/01/2021 09:35] 스캔 시작 [*][03/01/2021 09:35] 출력 디렉터리: c:\temp\smbshares\SmbShareHunt-03012021093504 [*][03/01/2021 09:35] 도메인 컨트롤러에 성공적으로 연결됨: dc1.demo.local [*][03/01/2021 09:35] demo.local 도메인과 연결된 컴퓨터에 대해 LDAP 쿼리 수행 중 [*][03/01/2021 09:35] - 245개의 컴퓨터 발견됨 [*][03/01/2021 09:35] 245개의 컴퓨터에 ping 보내는 중 [*][03/01/2021 09:35] - 55개의 컴퓨터가 ping 요청에 응답함. [*][03/01/2021 09:35] 55개의 컴퓨터에서 TCP 포트 445가 열려 있는지 확인 중 [*][03/01/2021 09:36] - 49개의 컴퓨터에서 TCP 포트 445가 열려 있음. [*][03/01/2021 09:36] 49개의 컴퓨터에서 SMB 공유 목록 가져오는 중 [*][03/01/2021 09:36] - 217개의 SMB 공유가 발견됨. [*][03/01/2021 09:36] 217개의 SMB 공유에서 공유 권한 가져오는 중 [*][03/01/2021 09:37] - 374개의 공유 권한이 열거됨. [*][03/01/2021 09:37] 33개의 SMB 공유에서 디렉터리 목록 가져오는 중 [*][03/01/2021 09:37] - 최대 3개의 중첩 디렉터리 수준 대상 [*][03/01/2021 09:37] - 563개의 파일 및 폴더가 열거됨. [*][03/01/2021 09:37] 잠재적으로 과도한 공유 권한 식별 중 [*][03/01/2021 09:37] - 12개 시스템에서 33개의 잠재적으로 과도한 권한이 발견됨.. [*][03/01/2021 09:37] 스캔 완료 --------------------------------------------------------------- 공유 분석 --------------------------------------------------------------- [*][03/01/2021 09:37] 분석 시작 [*][03/01/2021 09:37] - 12개 시스템에서 14개의 공유를 읽을 수 있음. [*][03/01/2021 09:37] - 1개 시스템에서 1개의 공유에 쓸 수 있음. [*][03/01/2021 09:37] - 32개 시스템에서 46개의 공유가 기본값이 아닌 것으로 간주됨. [*][03/01/2021 09:37] - 0개 시스템에서 0개의 공유가 고위험으로 간주됨 [*][03/01/2021 09:37] - 과도한 공유의 상위 5개 소유자 식별됨. [*][03/01/2021 09:37] - 상위 5개 공유 그룹 식별됨. [*][03/01/2021 09:37] - 상위 5개 공유 이름 식별됨. [*][03/01/2021 09:37] - 최근 90일 이내에 생성된 공유 식별됨. [*][03/01/2021 09:37] - 최근 90일 이내에 액세스된 공유 식별됨. [*][03/01/2021 09:37] - 최근 90일 이내에 수정된 공유 식별됨. [*][03/01/2021 09:37] 분석 완료 --------------------------------------------------------------- 공유 보고서 요약 --------------------------------------------------------------- [*][03/01/2021 09:37] 도메인: demo.local [*][03/01/2021 09:37] 시작 시간: 03/01/2021 09:35:04 [*][03/01/2021 09:37] 종료 시간: 03/01/2021 09:37:27 [*][03/01/2021 09:37] 실행 시간: 00:02:23.2759086 [*][03/01/2021 09:37] [*][03/01/2021 09:37] 컴퓨터 요약 [*][03/01/2021 09:37] - 245개의 도메인 컴퓨터가 발견됨. [*][03/01/2021 09:37] - 55개(22.45%)의 도메인 컴퓨터가 ping에 응답함. [*][03/01/2021 09:37] - 49개(20.00%)의 도메인 컴퓨터에서 TCP 포트 445에 접근 가능함. [*][03/01/2021 09:37] - 32개(13.06%)의 도메인 컴퓨터에 기본값이 아닌 공유가 있음. [*][03/01/2021 09:37] - 12개(4.90%)의 도메인 컴퓨터에 잠재적으로 과도한 권한이 있는 공유가 있음. [*][03/01/2021 09:37] - 12개(4.90%)의 도메인 컴퓨터에 READ 액세스를 허용하는 공유가 있음. [*][03/01/2021 09:37] - 1개(0.41%)의 도메인 컴퓨터에 WRITE 액세스를 허용하는 공유가 있음. [*][03/01/2021 09:37] - 0개(0.00%)의 도메인 컴퓨터에 고위험 공유가 있음. [*][03/01/2021 09:37] [*][03/01/2021 09:37] 공유 요약 [*][03/01/2021 09:37] - 217개의 공유가 발견됨. 최소 98개의 공유가 예상됨 [*][03/01/2021 09:37] (49개 시스템이 열린 포트를 가지고 있고 일반적으로 두 개의 기본 공유가 있기 때문). [*][03/01/2021 09:37] - 32개 시스템에서 46개(21.20%)의 공유가 기본값이 아님. [*][03/01/2021 09:37] - 12개 시스템에서 14개(6.45%)의 공유가 33개의 잠재적으로 과도한 ACL로 구성됨. [*][03/01/2021 09:37] - 12개 시스템에서 14개(6.45%)의 공유가 READ 액세스를 허용함. [*][03/01/2021 09:37] - 1개 시스템에서 1개(0.46%)의 공유가 WRITE 액세스를 허용함. [*][03/01/2021 09:37] - 0개 시스템에서 0개(0.00%)의 공유가 고위험으로 간주됨. [*][03/01/2021 09:37] [*][03/01/2021 09:37] 공유 ACL 요약 [*][03/01/2021 09:37] - 374개의 ACL이 발견됨. [*][03/01/2021 09:37] - 374개(100.00%)의 ACL이 기본값이 아닌 공유와 연결됨. [*][03/01/2021 09:37] - 33개(8.82%)의 ACL이 잠재적으로 과도한 것으로 발견됨. [*][03/01/2021 09:37] - 32개(8.56%)의 ACL이 READ 액세스를 허용하는 것으로 발견됨. [*][03/01/2021 09:37] - 1개(0.27%)의 ACL이 WRITE 액세스를 허용하는 것으로 발견됨. [*][03/01/2021 09:37] - 0개(0.00%)의 ACL이 고위험 공유 이름과 연결됨. [*][03/01/2021 09:37] [*][03/01/2021 09:37] - 가장 일반적인 공유 이름 상위 5개는 다음과 같습니다: [*][03/01/2021 09:37] - 발견된 14개 공유 중 9개(64.29%)가 상위 5개 공유 이름과 연결됨. [*][03/01/2021 09:37] - 4 backup [*][03/01/2021 09:37] - 2 ssms [*][03/01/2021 09:37] - 1 test2 [*][03/01/2021 09:37] - 1 test1 [*][03/01/2021 09:37] - 1 users [*] -----------------------------------------------




저자
Scott Sutherland (@_nullbind)
사용된 오픈 소스 코드
이 프로젝트의 일부로 오픈 소스 코드를 작성한 분들입니다. 그분들의 작업에 큰 감사를 드립니다!
| 이름 | 사이트 |
|---|---|
| Will Schroeder (@harmj0y) | https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1 |
라이선스
BSD 3-Clause
수정해야 할 사항/버그
추가 예정 기능
다음은 PowerHuntShares가 어떻게 작동하고, 어떤 데이터를 추출하며, 실행 가능한 결과를 어떻게 제시하는지에 대한 시각적 설명입니다.
발견된 공유 및 관련 위험에 대한 개괄적인 보기를 제공합니다.

쉬운 분석 및 오프라인 검토를 위해 자동 생성된 보고서입니다.

공유 이름과 해당 속성의 자세한 매핑입니다.

식별된 위험을 해결하기 위한 권장 수정 단계입니다.

시간 경과에 따른 발견된 문제의 시각화입니다.

다른 시스템에서 발견된 공유 및 권한을 비교합니다.

더 나은 컨텍스트를 위해 관련 폴더와 공유를 그룹화합니다.

발견된 지문을 기반으로 한 자산 노출을 보여줍니다.

발견된 공유와 관계의 시각적 표현입니다.

스캔 중 발견된 민감한 정보와 비밀을 강조합니다.

공유에서 발견된 잠재적으로 흥미롭거나 고가치 파일을 나열합니다.

민감한 데이터가 노출될 수 있는 영역을 강조합니다.

상세한 분석과 함께 포괄적인 위험 노출 보기입니다.

| Warren F (@pscookiemonster) | https://github.com/RamblingCookieMonster/Invoke-Parallel |
| Luben Kirov | http://www.gi-architects.co.uk/2016/02/powershell-check-if-ip-or-subnet-matchesfits/ |