hacktool_purpleknight_execution
Description
This detection rule identifies the execution of the Purple Knight tool, a free Active Directory security assessment utility developed by Semperis. Purple Knight is designed to scan for AD vulnerabilities, misconfigurations, and common attack paths. While it is a legitimate tool used by defenders, its execution in production environments may also indicate red team activity or unauthorized reconnaissance by adversaries attempting to map domain weaknesses.
Query · yara_l
events:
$purple_knight.metadata.event_type = "PROCESS_LAUNCH"
(
$purple_knight.target.process.file.full_path = /\\PurpleKnight\.exe$/ nocase or
$purple_knight.principal.process.file.full_path = /\\PurpleKnight\.exe$/ nocase or
$purple_knight.principal.process.command_line = /PurpleKnight/ nocase
)
// Capture the hostname where the event occurred
$purple_knight.principal.hostname = $hostname
match:
$hostname over 10m
outcome:
$risk_score = max(65)
$event_count = count_distinct($purple_knight.metadata.id)
$principal_process_pid = array_distinct($purple_knight.principal.process.pid)
$principal_process_command_line = array_distinct($purple_knight.principal.process.command_line)
$principal_process_file_sha256 = array_distinct($purple_knight.principal.process.file.sha256)
$principal_process_file_full_path = array_distinct($purple_knight.principal.process.file.full_path)
$principal_process_product_specific_process_id = array_distinct($purple_knight.principal.process.product_specific_process_id)
$principal_process_parent_process_product_specific_process_id = array_distinct($purple_knight.principal.process.parent_process.product_specific_process_id)
$target_process_pid = array_distinct($purple_knight.target.process.pid)
$target_process_command_line = array_distinct($purple_knight.target.process.command_line)
$target_process_file_sha256 = array_distinct($purple_knight.target.process.file.sha256)
$target_process_file_full_path = array_distinct($purple_knight.target.process.file.full_path)
$target_process_product_specific_process_id = array_distinct($purple_knight.target.process.product_specific_process_id)
$principal_user_userid = array_distinct($purple_knight.principal.user.userid)
condition:
$purple_knight