
PSPKI 도구 키트를 기반으로 하는 AD CS 감사용 PowerShell 도구 키트.
Active Directory Certificate Services (AD CS) 감사를 위한 PowerShell 툴킷.
해당 툴킷은 PKISolution의 PSPKI 툴킷(Microsoft Public License)을 기반으로 구축되었습니다. 이 리포지토리에는 PSGallery에서 사용 가능한 버전보다 최신 버전의 PSPKI가 포함되어 있습니다(PSPKI 디렉토리 참조). Vadims Podans(PSPKI의 창시자)님께서 여러 버그 패치가 포함된 이 버전을 친절하게 제공해 주셨습니다.
이 README는 출발점일 뿐입니다. 완전한 세부 정보 및 방어 지침은 "Certified Pre-Owned" 백서를 참조하십시오.
모듈에는 다음과 같은 주요 기능이 포함되어 있습니다.
경고: 이 코드는 베타 버전입니다! Invoke-PKIAudit은 쿼리하는 데이터 양이 매우 제한적이므로 환경에 영향을 미치지 않을 것이라고 확신합니다. 일반적인 CA 서버 워크로드에 대한 Get-CertRequest의 엄격한 테스트는 수행하지 않았습니다. Get-CertRequest는 CA 데이터베이스를 직접 쿼리하며 수천 개의 결과를 처리해야 할 수 있으므로 성능에 영향을 미칠 수 있습니다.
결과가 없다고 해서 환경이 안전하다는 보장은 없습니다!!
또한 당사의 완화 권장 사항이 환경을 안전하게 만들거나 운영을 중단시키지 않을 것이라고 보장할 수 없습니다!
환경에 가장 적합한 완화 조치를 결정하려면 Active Directory/PKI/아키텍처 팀과 상담하는 것은 귀하의 책임입니다.
코드가 손상되거나 누락된 부분이 있으면 수정을 위해 이슈 또는 풀 리퀘스트를 제출해 주세요!
상승된 PowerShell 프롬프트(PowerShell 버전 5.1 이상)를 사용하여 Windows 머신에 다음을 설치합니다.
* [PSPKI PowerShell module](https://github.com/PKISolutions/PSPKI). 다음 명령어로 설치합니다:```
Install-Module -Name PSPKI
모듈을 다운로드하고 폴더에 압축을 푸세요. 그런 다음, 다음 명령어를 사용하여 모듈을 가져오세요:``` cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File
Import-Module .\PSPKIAudit.psd1
# AD CS 오류 구성 감사
`Invoke-PKIAudit`을 실행하면 현재 도메인의 AD CS에 대해 모든 감사 검사를 실행하며, 다양한 인증 기관 및 인증서 템플릿 설정을 열거합니다. 특정 CA를 감사하려면 `Invoke-PKIAudit -CAComputerName CA.DOMAIN.COM` 또는 `Invoke-PKIAudit -CAName X-Y-Z`를 실행하면 됩니다.
발견된 특정 오류 구성을 식별하기 위해 표시된 CA/템플릿 결과에 오류 구성(ESC1-8)이 속성으로 나타납니다.
등록/액세스 제어를 테스트하는 데 사용되는 그룹/사용자를 변경하려면 `Invoke-PKIAudit.ps1` 상단에 있는 `$CommonLowprivPrincipals` 정규식을 수정하세요.
모든 CA 정보를 csv로 내보내려면 다음을 실행하세요: `Get-AuditCertificateAuthority [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation CAs.csv`
모든 게시된 템플릿 정보를 csv로 내보내려면(취약한 템플릿뿐만 아니라) 다음을 실행하세요: `Get-AuditCertificateTemplate [-CAComputerName CA.DOMAIN.COM | -CAName X-Y-Z] | Export-Csv -NoTypeInformation templates.csv`
## 출력 설명
출력에는 두 가지 주요 섹션이 있습니다: 발견된 CA에 대한 세부 정보와 잠재적으로 취약한 템플릿에 대한 세부 정보입니다.
인증 기관 결과의 경우:
| 인증 기관 속성 | 설명 |
| ------------------------------ | ------------------------------------------------------------------ |
| ComputerName | CA가 실행 중인 시스템입니다. |
| CAName | CA의 이름입니다. |
| ConfigString | 전체 COMPUTER\CA_NAME 구성 문자열입니다. |
| IsRoot | CA가 루트 CA인지 여부입니다. |
| AllowsUserSuppliedSans | CA에 `EDITF_ATTRIBUTESUBJECTALTNAME2` 플래그가 설정되어 있는지 여부입니다. |
| VulnerableACL | CA에 취약한 ACL 설정이 있는지 여부입니다. |
| EnrollmentPrincipals | CA 수준에서 `Enroll` 권한이 있는 주체입니다. |
| EnrollmentEndpoints | CA의 웹 서비스 등록 엔드포인트입니다. |
| NTLMEnrollmentEndpoints | NTLM이 활성화된 CA의 웹 서비스 등록 엔드포인트입니다. |
| DACL | 전체 액세스 제어 정보입니다. |
| Misconfigurations | 존재하는 특정 오류 구성을 나타내는 ESCX(있는 경우). |
인증서 템플릿 결과의 경우:
| 속성 | 설명 |
| ----------------------- | -------------------------------------------------------------------------------------------------------- |
| CA | 템플릿이 게시된 전체 CA ConfigString입니다(게시되지 않은 경우 null). |
| Name | 템플릿 이름입니다. |
| SchemaVersion | 템플릿의 스키마 버전(1/2/3)입니다. |
| OID | 템플릿의 고유 개체 식별자입니다. |
| VulnerableTemplateACL | 템플릿에 취약한 ACL 설정이 있는 경우 True입니다. |
| LowPrivCanEnroll | 낮은 권한의 사용자가 템플릿에 등록할 수 있는 경우 True입니다. |
| EnrolleeSuppliesSubject | `CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT` 플래그가 있는 경우 True입니다(즉, 사용자가 임의의 SAN을 제공할 수 있음). |
| EnhancedKeyUsage | 템플릿에서 활성화된 사용 EKU입니다. |
| HasAuthenticationEku | 템플릿에 인증을 허용하는 EKU가 있는 경우 True입니다. |
| HasDangerousEku | 템플릿에 "위험한"(임의 목적 또는 null) EKU가 있는 경우 True입니다. |
| EnrollmentAgentTemplate | 템플릿에 "Certificate Request Agent" EKU가 있는 경우 True입니다. |
| CAManagerApproval | 등록에 관리자 승인이 필요한 경우 True입니다. |
| IssuanceRequirements | 인증된 서명 정보입니다. |
| ValidityPeriod | 인증서가 유효한 기간입니다. |
| RenewalPeriod | 인증서의 갱신 기간입니다. |
| Owner | 인증서를 소유한 주체입니다. |
| DACL | 전체 액세스 제어 정보입니다. |
| Misconfigurations | 존재하는 특정 오류 구성을 나타내는 ESCX(있는 경우). |
## ESC1 - 잘못 구성된 인증서 템플릿
### 세부 사항 <!-- omit in toc -->
이 권한 상승 시나리오는 다음 조건이 충족될 때 발생합니다:
1. **엔터프라이즈 CA가 낮은 권한의 사용자에게 등록 권한을 부여합니다.** 엔터프라이즈 CA의 구성은 낮은 권한의 사용자가 인증서를 요청할 수 있도록 허용해야 합니다. 자세한 내용은 백서 시작 부분의 "배경 - 등록" 섹션을 참조하십시오.
2. **관리자 승인이 비활성화되었습니다.** 이 설정은 인증서 "관리자" 권한이 있는 사용자가 요청된 인증서를 검토하고 승인해야 인증서가 발급됩니다. 자세한 내용은 백서 시작 부분의 "배경 - 발급 요구 사항" 섹션을 참조하십시오.
3. **인증된 서명이 필요하지 않습니다.** 이 설정은 모든 CSR이 기존 인증된 인증서로 서명되어야 합니다. 자세한 내용은 백서 시작 부분의 "배경 - 발급 요구 사항" 섹션을 참조하십시오.
4. **지나치게 허용적인 인증서 템플릿 보안 설명자가 낮은 권한의 사용자에게 인증서 등록 권한을 부여합니다.** 인증서 등록 권한이 있으면 낮은 권한의 공격자가 템플릿을 기반으로 인증서를 요청하고 획득할 수 있습니다. 등록 권한은 인증서 템플릿 AD 개체의 보안 설명자를 통해 부여됩니다.