forensic_catalog/
processes.rs1pub const WINDOWS_MASQUERADE_TARGETS: &[&str] = &[
3 "svchost.exe",
4 "lsass.exe",
5 "csrss.exe",
6 "spoolsv.exe",
7 "dllhost.exe",
8 "conhost.exe",
9 "wermgr.exe",
10 "services.exe",
11 "winlogon.exe",
12 "smss.exe",
13 "taskhost.exe",
14 "taskhostw.exe",
15 "explorer.exe",
16 "system",
17 "registry",
18];
19
20pub const KNOWN_MALWARE_PROCESS_NAMES: &[&str] = &[
22 "xmrig",
23 "mimikatz",
24 "meterpreter",
25 "beacon",
26 "empire",
27 "cobaltstrike",
28 "ngrok",
29 "frp",
30 "chisel",
31 "ligolo",
32 "sliver",
33 "havoc",
34 "brute",
35 "pwncat",
36 "reptile",
37 "diamorphine",
38];
39
40pub fn is_masquerade_target(name: &str) -> bool {
42 let lower = name.to_ascii_lowercase();
43 WINDOWS_MASQUERADE_TARGETS
44 .iter()
45 .any(|t| t.to_ascii_lowercase() == lower)
46}
47
48pub fn is_known_malware_process(name: &str) -> bool {
50 let lower = name.to_ascii_lowercase();
51 KNOWN_MALWARE_PROCESS_NAMES
52 .iter()
53 .any(|t| t.to_ascii_lowercase() == lower)
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
62 fn masquerade_targets_contains_svchost() {
63 assert!(WINDOWS_MASQUERADE_TARGETS.contains(&"svchost.exe"));
64 }
65
66 #[test]
67 fn masquerade_targets_contains_lsass() {
68 assert!(WINDOWS_MASQUERADE_TARGETS.contains(&"lsass.exe"));
69 }
70
71 #[test]
72 fn malware_names_contains_mimikatz() {
73 assert!(KNOWN_MALWARE_PROCESS_NAMES.contains(&"mimikatz"));
74 }
75
76 #[test]
77 fn malware_names_contains_xmrig() {
78 assert!(KNOWN_MALWARE_PROCESS_NAMES.contains(&"xmrig"));
79 }
80
81 #[test]
83 fn detects_svchost_lowercase() {
84 assert!(is_masquerade_target("svchost.exe"));
85 }
86
87 #[test]
88 fn detects_lsass_uppercase() {
89 assert!(is_masquerade_target("LSASS.EXE"));
90 }
91
92 #[test]
93 fn detects_explorer_mixed_case() {
94 assert!(is_masquerade_target("Explorer.exe"));
95 }
96
97 #[test]
98 fn does_not_flag_random_process() {
99 assert!(!is_masquerade_target("mygame.exe"));
100 }
101
102 #[test]
104 fn empty_string_not_masquerade_target() {
105 assert!(!is_masquerade_target(""));
106 }
107
108 #[test]
110 fn detects_mimikatz() {
111 assert!(is_known_malware_process("mimikatz"));
112 }
113
114 #[test]
115 fn detects_meterpreter_uppercase() {
116 assert!(is_known_malware_process("METERPRETER"));
117 }
118
119 #[test]
120 fn detects_beacon() {
121 assert!(is_known_malware_process("beacon"));
122 }
123
124 #[test]
125 fn does_not_flag_chrome() {
126 assert!(!is_known_malware_process("chrome"));
127 }
128
129 #[test]
131 fn empty_string_not_malware_process() {
132 assert!(!is_known_malware_process(""));
133 }
134}