AtilKurt is a read-only Active Directory security assessment tool. It collects directory data through LDAP, runs a broad set of security analyzers, scores the findings, and generates a self-contained HTML report for offline review.
The tool is designed for security assessments, internal red-team style reviews, and directory hygiene analysis. It does not modify Active Directory and is built around LDAP search operations only.
Core goals:
- Collect identity, group, computer, GPO, and ACL data from Active Directory
- Detect misconfigurations, weak controls, and known attack paths
- Consolidate findings into a severity-based risk model
- Produce offline-capable HTML, JSON, and optional checkpoint exports
- Support large environments with paging, caching, parallel collection, and incremental execution
- User, computer, group, and GPO collection
- Object SID collection for identity and ACL correlation
- Large-domain friendly paging and query caching
- User, computer, and group risk analysis
- Kerberos, delegation, privilege escalation, and ACL review
- Kerberoasting, AS-REP roasting, DCSync, GPP, LAPS, trust, and password policy checks
- AD CS analysis, including extended certificate abuse paths
- Extended LDAP checks for common privileged-object and configuration weaknesses
- Domain security, audit policy, stale object, gMSA, KRBTGT, machine quota, and replication metadata analysis
- Severity-based domain score
- Exploitability scoring
- Risk prioritization and remediation cost estimation
- Business impact and ROI-style remediation views
- Single-file HTML report with embedded assets
- JSON export for downstream processing
- Compliance reporting for CIS, NIST CSF, ISO 27001, and GDPR
- Executive summary and analysis summary tables
- Offline use without a separate
vendor/directory
- Python 3.9 or later
- LDAP read access to the target domain
- Valid credentials for the target Active Directory environment
Recommended environment:
- A dedicated assessment workstation
- Network reachability to the domain controller
- Read-only credentials with the minimum permissions needed for the checks you want to run
Clone the repository:
git clone https://github.com/cumakurt/AtilKurt.git
cd AtilKurtInstall dependencies:
pip install -r requirements.txtFor local development:
pip install -e .You can provide the password through ATILKURT_PASS instead of the command line.
Supported environment variables:
ATILKURT_DOMAINATILKURT_USERATILKURT_PASSATILKURT_DC_IP
TLS certificate validation is enabled by default when SSL/TLS is used. Disable it only for controlled lab environments.
By default, the tool writes:
- HTML report
- Optional JSON export
- Optional Kerberoasting export
- Optional checkpoint file
python3 AtilKurt.py \
--domain example.com \
--username username \
--password your_password \
--dc-ip 192.168.1.10 \
--output report.htmlShort form:
python3 AtilKurt.py \
-d example.com \
-u username \
-p your_password \
--dc-ip 192.168.1.10 \
--output report.htmlpython3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--page-size 1000 \
--timeout 60 \
--max-retries 3 \
--parallel \
--max-workers 4 \
--analysis-profile fastpython3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--stealth \
--rate-limit 3.0 \
--random-delay 1 5python3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--skip-analysis acl_securitypython3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--checkpoint scan_001python3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--resume scan_001python3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--incrementalpython3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--json-export data.jsonpython3 AtilKurt.py \
-d corp.local \
-u admin \
-p SecurePass123 \
--dc-ip 10.0.0.1 \
--hourly-rate 150.0-d, --domain: Active Directory domain-u, --username: LDAP username-p, --password: LDAP password, deprecated in favor ofATILKURT_PASS--dc-ip: Domain controller IP address--ssl: Use SSL/TLS--validate-cert: Backward-compatible certificate validation flag--no-validate-cert: Disable certificate validation
--page-size: LDAP page size--timeout: Base LDAP timeout--max-retries: Retry count for LDAP operations--parallel: Enable parallel top-level collection--max-workers: Maximum parallel workers--no-progress: Disable progress output
--stealth: Enable stealth mode--rate-limit: Minimum seconds between LDAP network queries--random-delay MIN MAX: Random delay range between queries
--analysis-profile {full,fast}: Select the scan profile--skip-analysis KEY: Skip a specific analysis step--check-user USERNAME: Evaluate whether a user can reach Domain Admin paths--incremental: Enable incremental scanning
--output: HTML report output path--single-file-report: Generate an offline-capable self-contained HTML report--json-export: JSON export output path--kerberoasting-export: Kerberoasting target export path--checkpoint: Save a checkpoint--resume: Resume from a checkpoint
--hourly-rate: Hourly remediation cost used for ROI calculations
--verbose: Informational logging--debug: Debug logging--log-file: Write logs to a file
The HTML report includes:
- Executive summary and domain score
- Risk breakdown by severity and category
- Individual finding details with mitigation guidance
- Attack paths and exploitability scoring
- Compliance sections for supported frameworks
- Risk management summary with remediation prioritization
- Offline assets embedded directly in the report
The report is self-contained by default, so it can be copied to another machine and opened without a separate asset directory or network access.
AtilKurt includes several controls for large domains:
- LDAP paging for large result sets
- Query caching to reduce repeated lookups
- Parallel collection for top-level object sets
- Incremental checkpoint support
- Optional profile-based analysis selection
- Optional skipping of expensive modules
Practical guidance:
- Use
--parallelon large domains - Use
--analysis-profile fastwhen you need a shorter scan window - Use
--skip-analysisto exclude a single expensive module - Use
--stealthonly when you need controlled pacing for operational reasons
- The tool performs read-only LDAP search operations only
- It does not modify Active Directory objects
- Passwords should be provided through
ATILKURT_PASSor interactive input - Use
--no-validate-certonly in lab environments - Ensure you are authorized to scan the target domain before use
Run the full test suite with:
PYTHONDONTWRITEBYTECODE=1 python -m pytest -q -p no:cacheproviderThe repository includes tests for:
- Core analyzers
- LDAP escaping and caching
- Progress persistence
- Report generation
- New analysis modules
- Performance controls
AtilKurt/
├── AtilKurt.py
├── analysis/
├── core/
├── reporting/
├── risk/
├── scoring/
├── tests/
├── requirements.txt
├── pyproject.toml
├── Dockerfile
├── docker-compose.yml
└── README.md
Main areas:
core/: LDAP connection, configuration, caching, validation, collectors, persistenceanalysis/: risk detectors, compliance logic, attack path analysis, and specialized checksreporting/: HTML, compliance, dashboard, and export generationscoring/: risk scoring and consolidationrisk/: business impact and remediation prioritizationtests/: unit and regression coverage
This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.
Cuma KURT
GitHub: https://github.com/cumakurt/AtilKurt
*** End Patch