pub const RESERVED_EVENT_ID_MAX: u32 = 0;
#[must_use]
pub fn is_reserved_event_id(event_id: u32) -> bool {
event_id <= RESERVED_EVENT_ID_MAX
}
pub const LOW_VOLUME_CHANNEL_MAX_RECORDS: u64 = 10;
#[must_use]
pub fn is_low_volume_channel(record_count: u64) -> bool {
record_count <= LOW_VOLUME_CHANNEL_MAX_RECORDS
}
pub const RARE_SOURCE_ID_PAIR_MAX: u64 = 3;
#[must_use]
pub fn is_rare_source_id_pair(occurrence_count: u64) -> bool {
occurrence_count > 0 && occurrence_count <= RARE_SOURCE_ID_PAIR_MAX
}
pub const BIG_THREE_CHANNELS: &[&str] = &["Security", "System", "Application"];
#[must_use]
pub fn is_big_three_channel(channel_name: &str) -> bool {
BIG_THREE_CHANNELS
.iter()
.any(|c| c.eq_ignore_ascii_case(channel_name))
}
#[must_use]
pub fn is_overlooked_channel(channel_name: &str) -> bool {
!is_big_three_channel(channel_name)
}
pub const SUPER_TIMELINE_CHANNELS: &[&str] = &[
"Security",
"System",
SYSMON_CHANNEL,
POWERSHELL_OPERATIONAL_CHANNEL,
TASKSCHEDULER_OPERATIONAL_CHANNEL,
];
pub const SYSMON_CHANNEL: &str = "Microsoft-Windows-Sysmon/Operational";
pub const POWERSHELL_OPERATIONAL_CHANNEL: &str = "Microsoft-Windows-PowerShell/Operational";
pub const TASKSCHEDULER_OPERATIONAL_CHANNEL: &str = "Microsoft-Windows-TaskScheduler/Operational";
pub const EID_SYSMON_PROCESS_CREATE: u32 = 1;
pub const EID_SYSMON_NETWORK_CONNECT: u32 = 3;
pub const EID_SYSMON_IMAGE_LOAD: u32 = 7;
pub const EID_SYSMON_FILE_CREATE: u32 = 11;
pub const EID_SYSMON_FILE_CREATE_STREAM_HASH: u32 = 15;
pub const EID_SYSMON_DNS_QUERY: u32 = 22;
pub const EID_BOOT: u32 = 6005;
pub const EID_SHUTDOWN: u32 = 6006;
pub const EID_UNEXPECTED_SHUTDOWN: u32 = 6008;
pub const SYSMON_FIELD_PROCESS_GUID: &str = "ProcessGuid";
pub const SYSMON_FIELD_PARENT_PROCESS_GUID: &str = "ParentProcessGuid";
pub const SYSMON_FIELD_TARGET_FILENAME: &str = "TargetFilename";
pub const SYSMON_FIELD_IMAGE: &str = "Image";
pub const SYSMON_FIELD_PARENT_IMAGE: &str = "ParentImage";
pub const SYSMON_FIELD_COMMAND_LINE: &str = "CommandLine";
pub const SYSMON_FIELD_PARENT_COMMAND_LINE: &str = "ParentCommandLine";
pub const EID_LOGON: u32 = 4624;
pub const EID_LOGON_FAILURE: u32 = 4625;
pub const EID_LOGOFF: u32 = 4634;
pub const EID_LOGOFF_USER: u32 = 4647;
pub const EID_SPECIAL_LOGON: u32 = 4672;
pub const EID_PROCESS_CREATE: u32 = 4688;
pub const EID_PROCESS_EXIT: u32 = 4689;
pub const EID_SERVICE_INSTALLED_SECURITY: u32 = 4697;
pub const EID_DIRECTORY_SERVICE_ACCESS: u32 = 4662;
pub const EID_KERBEROS_TGT_REQUEST: u32 = 4768;
pub const EID_KERBEROS_TGS_REQUEST: u32 = 4769;
pub const EID_LOG_CLEARED: u32 = 1102;
pub const EID_SMB_SHARE_ACCESS: u32 = 5140;
pub const EID_SMB_OBJECT_ACCESS: u32 = 5145;
pub const EID_SERVICE_INSTALLED: u32 = 7045;
pub const EID_LOG_CLEARED_SYSTEM: u32 = 104;
pub const EID_CHANNEL_LOG_CLEARED: u32 = 105;
pub const EID_TASK_REGISTERED: u32 = 106;
pub const EID_TASK_UPDATED: u32 = 140;
pub const EID_TASK_DELETED: u32 = 141;
pub const EID_TASK_LAUNCHED: u32 = 200;
pub const EID_TASK_COMPLETED: u32 = 201;
pub const EID_WMI_FILTER_SUBSCRIBED: u32 = 5860;
pub const EID_WMI_FILTER_TRIGGERED: u32 = 5861;
pub const EID_BITS_TRANSFER_START: u32 = 59;
pub const EID_BITS_TRANSFER_COMPLETE: u32 = 60;
pub const EID_PS_SCRIPT_BLOCK: u32 = 4104;
pub const EID_DEFENDER_MALWARE_DETECTED: u32 = 1116;
pub const EID_DEFENDER_REALTIME_DISABLED: u32 = 5001;
pub const EID_DEFENDER_CONFIG_CHANGED: u32 = 5007;
pub const EID_W32TIME_NTP_FAILED: u32 = 37;
pub const EID_W32TIME_SYNC: u32 = 158;
pub const EID_SYSMON_DRIVER_LOAD: u32 = 6;
pub const EID_SYSMON_PROCESS_ACCESS: u32 = 10;
pub const EID_SYSMON_REGISTRY_ADD: u32 = 12;
pub const EID_SYSMON_REGISTRY_MODIFY: u32 = 13;
pub const EID_SYSMON_CONFIG_CHANGE: u32 = 16;
pub const EID_SYSMON_FILE_DELETE_DETECTED: u32 = 26;
pub const EID_SYSMON_DRIVER_UNLOAD: u32 = 255;
pub const SYSMON_FIELD_QUERY_NAME: &str = "QueryName";
pub const SYSMON_FIELD_GRANTED_ACCESS: &str = "GrantedAccess";
pub const SYSMON_FIELD_TARGET_IMAGE: &str = "TargetImage";
pub const SYSMON_FIELD_SOURCE_IP: &str = "SourceIp";
pub const SYSMON_FIELD_DEST_IP: &str = "DestinationIp";
pub const SYSMON_FIELD_DEST_PORT: &str = "DestinationPort";
pub const GUID_DS_REPLICATION_GET_CHANGES: &str = "{1131f6aa-9c07-11d1-f79f-00c04fc2dcd2}";
pub const GUID_DS_REPLICATION_GET_CHANGES_ALL: &str = "{1131f6ad-9c07-11d1-f79f-00c04fc2dcd2}";
pub const GUID_DS_REPLICATION_FILTERED: &str = "{89e95b76-444d-4c62-991a-0facbeda640c}";
pub const AMSI_BYPASS_PATTERNS: &[&str] = &[
"amsiInitFailed",
"amsiContext",
"amsiSession",
"AmsiUtils",
"PatchAmsi",
"amsi.dll",
"AmsiScanBuffer",
"AmsiScanString",
"[Runtime.InteropServices.Marshal]::Copy",
];
pub const ARCHIVER_PROCESS_NAMES: &[&str] = &[
"7z.exe",
"7za.exe",
"winrar.exe",
"rar.exe",
"pkzip.exe",
"winzip.exe",
"compress.exe",
"compact.exe",
"xcopy.exe",
];
pub const STAGING_ARCHIVE_EXTENSIONS: &[&str] =
&[".zip", ".7z", ".rar", ".tar", ".gz", ".bz2", ".xz", ".cab"];
pub const LSASS_IMAGE_NAME: &str = "lsass.exe";
pub const LSASS_DUMP_ACCESS_MASKS: &[u32] = &[
0x0010, 0x1010, 0x1410, 0x1fffff, ];
pub const PSEXEC_SERVICE_PATTERNS: &[&str] = &[
"PSEXESVC",
"psexesvc",
"PAExec",
"paexec",
"remcom",
"RemComSvc",
];
pub const DEFENDER_TAMPER_PATTERNS: &[&str] = &[
"Set-MpPreference",
"Add-MpPreference",
"DisableRealtimeMonitoring",
"ExclusionPath",
"ExclusionProcess",
"ExclusionExtension",
"DisableAntiSpyware",
"DisableAntiVirus",
];
pub const WMI_ACTIVITY_CHANNEL: &str = "Microsoft-Windows-WMI-Activity/Operational";
pub const TASKSCHEDULER_CHANNEL: &str = "Microsoft-Windows-TaskScheduler/Operational";
pub const BITS_CLIENT_CHANNEL: &str = "Microsoft-Windows-Bits-Client/Operational";
pub const DEFENDER_CHANNEL: &str = "Microsoft-Windows-Windows Defender/Operational";
pub const HYPERV_VMMS_CHANNEL: &str = "Microsoft-Windows-Hyper-V-VMMS/Admin";
pub const EID_SYSMON_FILE_DELETE: u32 = 23;
pub const EID_REGISTRY_VALUE_SET: u32 = 4657;
pub const HVCI_REGISTRY_VALUE_NAMES: &[&str] = &[
"VulnerableDriverBlocklistEnable",
"EnableVirtualizationBasedSecurity",
"HypervisorEnforcedCodeIntegrity",
"Enabled",
];
pub const HVCI_REGISTRY_KEY_PATHS: &[&str] = &[
"\\Control\\CI\\Config",
"\\Control\\DeviceGuard",
];
pub const QWCRYPT_IOC_FILENAMES: &[&str] = &[
"rbcw.exe",
"ADNotificationManager.exe",
];
pub const QWCRYPT_IOC_IPS: &[&str] = &[
"109.206.236.209",
];
pub const QWCRYPT_IOC_EXTENSION: &str = ".qwCrypt";
pub const WEBDAV_LOL_PROCESSES: &[&str] = &[
"rundll32.exe",
"msiexec.exe",
"regsvr32.exe",
"wscript.exe",
"cscript.exe",
"mshta.exe",
"odbcconf.exe",
"ieexec.exe",
"certutil.exe",
"pcalua.exe",
];
pub const WEBDAV_COMMANDLINE_INDICATORS: &[&str] = &[
"DavWWWRoot", "@SSL\\", "@80\\", "@443\\", ];
pub const PS_HISTORY_PATH_FRAGMENT: &str = "ConsoleHost_history.txt";
pub const EID_VSS_ERROR: u32 = 8193;
pub const EID_VSS_SNAPSHOT_DELETED: u32 = 524;
pub const EID_HYPERV_VM_STATE_CHANGE: u32 = 13002;
pub const EID_HYPERV_VM_STOPPED: u32 = 13003;
pub const EID_WMI_QUERY: u32 = 5857;
pub const EID_WMI_OPERATION_FAILURE: u32 = 5858;
pub const EID_SECURITY_TASK_CREATED: u32 = 4698;
pub const BYOVD_DRIVER_NAMES: &[&str] = &[
"ZemanaAntiMalware",
"zamguard64",
"ZAM",
"gdrv", "AsrDrv104", "AsrDrv10",
"RTCore64", "dbutil_2_3", "ATSZIO64", "WinRing0_1_2_0",
"cpuz136_x64", "speedfan",
];
pub const QWCRYPT_PS_PATTERNS: &[&str] = &[
"Get-VM",
"Stop-VM",
"Start-VM",
"Save-VM",
"Set-VMFirmware",
"Export-VM",
"vssadmin delete shadows",
"wbadmin delete",
"bcdedit /set.*recoveryenabled",
];
pub const EID_SCM_SERVICE_STATE_CHANGE: u32 = 7036;
pub const WEBCLIENT_SERVICE_NAME: &str = "WebClient";
pub const SIDELOAD_HIJACK_DLLS: &[&str] = &[
"srvcli.dll",
"netutils.dll",
];
pub const SYSTEM_DLL_SAFE_PATH_PREFIXES: &[&str] = &[
"C:\\Windows\\System32\\",
"C:\\Windows\\SysWOW64\\",
"C:\\Windows\\WinSxS\\",
];
pub const ADEXPLORER_EULAACCEPTED_KEY_FRAGMENT: &str =
"Sysinternals\\Active Directory Explorer";
pub const ZEMANA_SIGNER_THUMBPRINT: &str = "96A7749D856CB49DE32005BCDD8621F38E2B4C05";
pub const CHISEL_CMDLINE_INDICATORS: &[&str] = &[
"--reverse",
"R:socks",
"socks5",
"--tls-skip-verify",
":127.0.0.1:",
];
pub const RPIVOT_CMDLINE_INDICATORS: &[&str] = &[
"cl.py",
"client.py",
"--headless",
];
pub const STAGING_PARENT_IMAGES: &[&str] = &[
"pcalua.exe",
"WmiPrvSE.exe",
"wmic.exe",
"cscript.exe",
"wscript.exe",
"mshta.exe",
];
pub const ARCHIVER_HEADER_ENCRYPT_FLAG: &str = "-mhe";
pub const BROWSER_UPDATE_TASK_PATTERNS: &[&str] = &[
"GoogleUpdateTask",
"MicrosoftEdgeUpdate",
"MozillaMaintenance",
"ChromeUpdate",
"BraveSoftwareUpdate",
"OperaScheduled",
];
pub const CLOUDFLARE_WORKERS_DOMAIN_SUFFIX: &str = ".workers.dev";
pub const BROWSER_PROCESS_NAMES: &[&str] = &[
"chrome.exe",
"msedge.exe",
"firefox.exe",
"iexplore.exe",
"brave.exe",
"opera.exe",
"safari.exe",
"vivaldi.exe",
];
pub const WMI_IMPACKET_INDICATORS: &[&str] = &[
"\\\\127.0.0.1\\ADMIN$\\__",
"127.0.0.1\\ADMIN$\\__",
];
pub const SYSTEM_CHANNEL: &str = "System";
pub const EID_USER_ACCOUNT_CREATED: u32 = 4720;
pub const EID_USER_ADDED_TO_LOCAL_GROUP: u32 = 4732;
pub const LOCAL_ADMINS_GROUP_SID: &str = "S-1-5-32-544";
pub const VSSADMIN_SHADOW_DELETE_PATTERNS: &[&str] = &[
"delete shadows",
"delete shadow",
];
pub const WMIC_SHADOW_DELETE_PATTERNS: &[&str] = &[
"shadowcopy delete",
"shadowstorage delete",
];
pub const BCDEDIT_RECOVERY_DISABLE_PATTERNS: &[&str] = &[
"recoveryenabled no",
"bootstatuspolicy ignoreallfailures",
"safeboot network",
"safeboot minimal",
];
pub const WEVTUTIL_CLEAR_SUBSTRINGS: &[&str] = &[
" cl ", " clear-log ", ];
pub const PS_CLEAR_EVENTLOG_PATTERNS: &[&str] = &[
"Clear-EventLog",
"Remove-EventLog",
"wevtutil cl",
"wevtutil clear-log",
];
pub const COMSVCS_MINIDUMP_PATTERNS: &[&str] = &[
"comsvcs.dll",
"comsvcs",
"MiniDump",
"minidump",
];
pub const RMM_BINARY_NAMES: &[&str] = &[
"anydesk.exe",
"atera_agent.exe",
"ateraagent.exe",
"splashtop_remote_svc.exe",
"srservice.exe", "screenconnect.windowsclient.exe",
"screenconnect.clientservice.exe",
"connectwisecontrol.client.exe",
"teamviewer.exe",
"teamviewer_service.exe",
"ninjarmm-agent.exe",
"ninjaagent.exe",
"kaseya.exe",
"kaseyaendpoint.exe",
"lmiignition.exe", "lmiguardiansvc.exe",
"gotomypc.exe",
"isllight.exe", "remotepc.exe",
"supremo.exe",
"pulseway.exe",
"pulsewayservice.exe",
];
pub const RMM_SAFE_INSTALL_PATHS: &[&str] = &[
"C:\\Program Files\\",
"C:\\Program Files (x86)\\",
];
pub const RDP_FDENYTSC_KEY_FRAGMENT: &str = "fDenyTSConnections";
pub const ADMIN_SHARE_NAMES: &[&str] = &[
"ADMIN$", "IPC$", "C$", "D$",
"E$",
"F$",
"G$",
"H$",
];
pub const SHELL_PARENT_PROCESS_NAMES: &[&str] = &[
"explorer.exe",
];
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn reserved_event_id_max_is_zero() {
assert_eq!(RESERVED_EVENT_ID_MAX, 0);
}
#[test]
fn low_volume_channel_max_records_is_ten() {
assert_eq!(LOW_VOLUME_CHANNEL_MAX_RECORDS, 10);
}
#[test]
fn rare_source_id_pair_max_is_three() {
assert_eq!(RARE_SOURCE_ID_PAIR_MAX, 3);
}
#[test]
fn big_three_contains_security_system_application() {
assert!(BIG_THREE_CHANNELS.contains(&"Security"));
assert!(BIG_THREE_CHANNELS.contains(&"System"));
assert!(BIG_THREE_CHANNELS.contains(&"Application"));
assert_eq!(BIG_THREE_CHANNELS.len(), 3);
}
#[test]
fn event_id_zero_is_reserved() {
assert!(is_reserved_event_id(0));
}
#[test]
fn event_id_one_is_not_reserved() {
assert!(!is_reserved_event_id(1));
}
#[test]
fn event_id_4624_logon_is_not_reserved() {
assert!(!is_reserved_event_id(4624));
}
#[test]
fn event_id_max_is_not_reserved() {
assert!(!is_reserved_event_id(u32::MAX));
}
#[test]
fn empty_channel_is_low_volume() {
assert!(is_low_volume_channel(0));
}
#[test]
fn channel_with_ten_records_is_low_volume() {
assert!(is_low_volume_channel(10));
}
#[test]
fn channel_with_eleven_records_is_not_low_volume() {
assert!(!is_low_volume_channel(11));
}
#[test]
fn busy_channel_is_not_low_volume() {
assert!(!is_low_volume_channel(50_000));
}
#[test]
fn zero_occurrence_pair_is_not_rare() {
assert!(!is_rare_source_id_pair(0));
}
#[test]
fn single_occurrence_pair_is_rare() {
assert!(is_rare_source_id_pair(1));
}
#[test]
fn three_occurrence_pair_is_rare() {
assert!(is_rare_source_id_pair(3));
}
#[test]
fn four_occurrence_pair_is_not_rare() {
assert!(!is_rare_source_id_pair(4));
}
#[test]
fn very_common_pair_is_not_rare() {
assert!(!is_rare_source_id_pair(10_000));
}
#[test]
fn security_is_big_three() {
assert!(is_big_three_channel("Security"));
}
#[test]
fn system_is_big_three() {
assert!(is_big_three_channel("System"));
}
#[test]
fn application_is_big_three() {
assert!(is_big_three_channel("Application"));
}
#[test]
fn big_three_match_is_case_insensitive() {
assert!(is_big_three_channel("security"));
assert!(is_big_three_channel("SYSTEM"));
assert!(is_big_three_channel("ApPlIcAtIoN"));
}
#[test]
fn key_management_service_is_overlooked() {
assert!(is_overlooked_channel("Key Management Service"));
}
#[test]
fn microsoft_windows_powershell_operational_is_overlooked() {
assert!(is_overlooked_channel(
"Microsoft-Windows-PowerShell/Operational"
));
}
#[test]
fn security_is_not_overlooked() {
assert!(!is_overlooked_channel("Security"));
}
#[test]
fn empty_channel_name_is_overlooked() {
assert!(is_overlooked_channel(""));
}
#[test]
fn super_timeline_channels_has_five_entries() {
assert_eq!(SUPER_TIMELINE_CHANNELS.len(), 5);
}
#[test]
fn super_timeline_channels_includes_security_and_system() {
assert!(SUPER_TIMELINE_CHANNELS.contains(&"Security"));
assert!(SUPER_TIMELINE_CHANNELS.contains(&"System"));
}
#[test]
fn super_timeline_channels_includes_sysmon() {
assert!(SUPER_TIMELINE_CHANNELS.contains(&SYSMON_CHANNEL));
}
#[test]
fn super_timeline_channels_includes_powershell_and_taskscheduler() {
assert!(SUPER_TIMELINE_CHANNELS.contains(&POWERSHELL_OPERATIONAL_CHANNEL));
assert!(SUPER_TIMELINE_CHANNELS.contains(&TASKSCHEDULER_OPERATIONAL_CHANNEL));
}
#[test]
fn sysmon_channel_name_is_correct() {
assert_eq!(SYSMON_CHANNEL, "Microsoft-Windows-Sysmon/Operational");
}
#[test]
fn sysmon_process_create_is_eid_1() {
assert_eq!(EID_SYSMON_PROCESS_CREATE, 1);
}
#[test]
fn sysmon_file_create_is_eid_11() {
assert_eq!(EID_SYSMON_FILE_CREATE, 11);
}
#[test]
fn sysmon_file_create_stream_hash_is_eid_15() {
assert_eq!(EID_SYSMON_FILE_CREATE_STREAM_HASH, 15);
}
#[test]
fn eid_boot_is_6005() {
assert_eq!(EID_BOOT, 6005);
}
#[test]
fn eid_shutdown_is_6006() {
assert_eq!(EID_SHUTDOWN, 6006);
}
#[test]
fn eid_unexpected_shutdown_is_6008() {
assert_eq!(EID_UNEXPECTED_SHUTDOWN, 6008);
}
#[test]
fn sysmon_field_process_guid_is_correct() {
assert_eq!(SYSMON_FIELD_PROCESS_GUID, "ProcessGuid");
}
#[test]
fn sysmon_field_target_filename_is_correct() {
assert_eq!(SYSMON_FIELD_TARGET_FILENAME, "TargetFilename");
}
#[test]
fn eid_logon_is_4624() {
assert_eq!(EID_LOGON, 4624);
}
#[test]
fn eid_special_logon_is_4672() {
assert_eq!(EID_SPECIAL_LOGON, 4672);
}
#[test]
fn eid_process_create_is_4688() {
assert_eq!(EID_PROCESS_CREATE, 4688);
}
#[test]
fn sysmon_driver_load_is_eid_6() {
assert_eq!(EID_SYSMON_DRIVER_LOAD, 6);
}
#[test]
fn sysmon_registry_add_is_eid_12() {
assert_eq!(EID_SYSMON_REGISTRY_ADD, 12);
}
#[test]
fn sysmon_registry_modify_is_eid_13() {
assert_eq!(EID_SYSMON_REGISTRY_MODIFY, 13);
}
#[test]
fn sysmon_file_delete_detected_is_eid_26() {
assert_eq!(EID_SYSMON_FILE_DELETE_DETECTED, 26);
}
#[test]
fn scm_service_state_change_is_eid_7036() {
assert_eq!(EID_SCM_SERVICE_STATE_CHANGE, 7036);
}
#[test]
fn webclient_service_name_is_correct() {
assert_eq!(WEBCLIENT_SERVICE_NAME, "WebClient");
}
#[test]
fn webdav_lol_processes_includes_certutil() {
assert!(
WEBDAV_LOL_PROCESSES.contains(&"certutil.exe"),
"certutil.exe must be in WEBDAV_LOL_PROCESSES"
);
}
#[test]
fn webdav_lol_processes_includes_pcalua() {
assert!(
WEBDAV_LOL_PROCESSES.contains(&"pcalua.exe"),
"pcalua.exe must be in WEBDAV_LOL_PROCESSES"
);
}
#[test]
fn sideload_hijack_dlls_includes_srvcli() {
assert!(SIDELOAD_HIJACK_DLLS.contains(&"srvcli.dll"));
}
#[test]
fn sideload_hijack_dlls_includes_netutils() {
assert!(SIDELOAD_HIJACK_DLLS.contains(&"netutils.dll"));
}
#[test]
fn system_dll_safe_paths_includes_system32() {
assert!(SYSTEM_DLL_SAFE_PATH_PREFIXES.iter().any(|p| p.contains("System32")));
}
#[test]
fn adexplorer_key_fragment_is_correct() {
assert_eq!(
ADEXPLORER_EULAACCEPTED_KEY_FRAGMENT,
"Sysinternals\\Active Directory Explorer"
);
}
#[test]
fn zemana_thumbprint_is_40_hex_chars() {
assert_eq!(ZEMANA_SIGNER_THUMBPRINT.len(), 40);
assert!(
ZEMANA_SIGNER_THUMBPRINT.chars().all(|c| c.is_ascii_hexdigit()),
"Zemana thumbprint must be hex digits only"
);
}
#[test]
fn chisel_indicators_includes_socks5() {
assert!(CHISEL_CMDLINE_INDICATORS.contains(&"socks5"));
}
#[test]
fn rpivot_indicators_includes_cl_py() {
assert!(RPIVOT_CMDLINE_INDICATORS.contains(&"cl.py"));
}
#[test]
fn rpivot_indicators_includes_headless() {
assert!(RPIVOT_CMDLINE_INDICATORS.contains(&"--headless"));
}
#[test]
fn archiver_header_encrypt_flag_is_mhe() {
assert_eq!(ARCHIVER_HEADER_ENCRYPT_FLAG, "-mhe");
}
#[test]
fn staging_parent_images_includes_pcalua() {
assert!(STAGING_PARENT_IMAGES.contains(&"pcalua.exe"));
}
#[test]
fn staging_parent_images_includes_wmiprvse() {
assert!(STAGING_PARENT_IMAGES.contains(&"WmiPrvSE.exe"));
}
#[test]
fn browser_update_patterns_includes_google() {
assert!(BROWSER_UPDATE_TASK_PATTERNS.iter().any(|p| p.contains("GoogleUpdateTask")));
}
#[test]
fn browser_update_patterns_includes_edge() {
assert!(BROWSER_UPDATE_TASK_PATTERNS.iter().any(|p| p.contains("MicrosoftEdgeUpdate")));
}
#[test]
fn workers_dev_suffix_is_correct() {
assert_eq!(CLOUDFLARE_WORKERS_DOMAIN_SUFFIX, ".workers.dev");
}
#[test]
fn browser_process_names_includes_chrome() {
assert!(BROWSER_PROCESS_NAMES.contains(&"chrome.exe"));
}
#[test]
fn browser_process_names_includes_edge() {
assert!(BROWSER_PROCESS_NAMES.contains(&"msedge.exe"));
}
#[test]
fn wmi_impacket_indicators_not_empty() {
assert!(!WMI_IMPACKET_INDICATORS.is_empty());
}
#[test]
fn wmi_impacket_indicators_includes_admin_share_pattern() {
assert!(WMI_IMPACKET_INDICATORS.iter().any(|s| s.contains("ADMIN$")));
}
#[test]
fn system_channel_is_correct() {
assert_eq!(SYSTEM_CHANNEL, "System");
}
#[test]
fn eid_user_account_created_is_4720() {
assert_eq!(EID_USER_ACCOUNT_CREATED, 4720);
}
#[test]
fn eid_user_added_to_local_group_is_4732() {
assert_eq!(EID_USER_ADDED_TO_LOCAL_GROUP, 4732);
}
#[test]
fn local_admins_group_sid_is_correct() {
assert_eq!(LOCAL_ADMINS_GROUP_SID, "S-1-5-32-544");
}
#[test]
fn vssadmin_patterns_include_delete_shadows() {
assert!(
VSSADMIN_SHADOW_DELETE_PATTERNS
.iter()
.any(|p| p.contains("delete shadow")),
"must include 'delete shadows' variant"
);
}
#[test]
fn wmic_patterns_include_shadowcopy_delete() {
assert!(
WMIC_SHADOW_DELETE_PATTERNS
.iter()
.any(|p| p.contains("shadowcopy")),
"must include 'shadowcopy delete' variant"
);
}
#[test]
fn bcdedit_patterns_include_recoveryenabled_no() {
assert!(
BCDEDIT_RECOVERY_DISABLE_PATTERNS
.iter()
.any(|p| p.contains("recoveryenabled")),
"must include 'recoveryenabled no'"
);
}
#[test]
fn bcdedit_patterns_include_bootstatuspolicy() {
assert!(
BCDEDIT_RECOVERY_DISABLE_PATTERNS
.iter()
.any(|p| p.contains("bootstatuspolicy")),
"must include 'bootstatuspolicy ignoreallfailures'"
);
}
#[test]
fn wevtutil_clear_substrings_not_empty() {
assert!(!WEVTUTIL_CLEAR_SUBSTRINGS.is_empty());
}
#[test]
fn ps_clear_eventlog_patterns_include_clear_eventlog() {
assert!(
PS_CLEAR_EVENTLOG_PATTERNS
.iter()
.any(|p| p.contains("Clear-EventLog")),
);
}
#[test]
fn comsvcs_patterns_include_minidump() {
assert!(
COMSVCS_MINIDUMP_PATTERNS
.iter()
.any(|p| p.contains("MiniDump")),
"must include 'MiniDump' substring"
);
}
#[test]
fn comsvcs_patterns_include_comsvcs_dll() {
assert!(
COMSVCS_MINIDUMP_PATTERNS
.iter()
.any(|p| p.contains("comsvcs")),
"must include 'comsvcs.dll' substring"
);
}
#[test]
fn rmm_binary_names_includes_anydesk() {
assert!(
RMM_BINARY_NAMES
.iter()
.any(|n| n.to_lowercase().contains("anydesk")),
"must include AnyDesk"
);
}
#[test]
fn rmm_binary_names_includes_teamviewer() {
assert!(
RMM_BINARY_NAMES
.iter()
.any(|n| n.to_lowercase().contains("teamviewer")),
"must include TeamViewer"
);
}
#[test]
fn rmm_safe_paths_includes_program_files() {
assert!(
RMM_SAFE_INSTALL_PATHS
.iter()
.any(|p| p.contains("Program Files")),
"must include Program Files as a safe path"
);
}
#[test]
fn rdp_fdenyts_key_is_correct() {
assert_eq!(RDP_FDENYTSC_KEY_FRAGMENT, "fDenyTSConnections");
}
#[test]
fn shell_parent_process_names_includes_explorer() {
assert!(
SHELL_PARENT_PROCESS_NAMES
.iter()
.any(|s| s.eq_ignore_ascii_case("explorer.exe")),
"must include explorer.exe"
);
}
#[test]
fn shell_parent_process_names_is_nonempty() {
assert!(!SHELL_PARENT_PROCESS_NAMES.is_empty(), "must not be empty");
}
#[test]
fn admin_share_names_includes_admin_dollar() {
assert!(
ADMIN_SHARE_NAMES.iter().any(|s| s.eq_ignore_ascii_case("ADMIN$")),
"must include ADMIN$"
);
}
#[test]
fn admin_share_names_includes_c_dollar() {
assert!(
ADMIN_SHARE_NAMES.iter().any(|s| s.eq_ignore_ascii_case("C$")),
"must include C$"
);
}
#[test]
fn admin_share_names_includes_ipc_dollar() {
assert!(
ADMIN_SHARE_NAMES.iter().any(|s| s.eq_ignore_ascii_case("IPC$")),
"must include IPC$"
);
}
}