Группа Google Threat Intelligence Group (GTIG) активно отслеживает активность вредоносного программного обеспечения (malware) BRICKSTORM, которое используется для сохранения устойчивого доступа к организациям-жертвам в Соединенных Штатах. С марта 2025 года специалисты Mandiant Consulting расследовали вторжения в самых разных отраслях, особенно в сфере юридических услуг, среди провайдеров программного обеспечения как услуги (SaaS), компаний по аутсорсингу бизнес-процессов (BPO) и технологическом секторе. Ценность этих целей выходит за рамки типичных шпионских миссий, потенциально предоставляя данные для разработки уязвимостей нулевого дня (zero-day) и создавая точки для последующего доступа к клиентам этих компаний.
Описание
Эту деятельность эксперты приписывают группе UNC5221 и тесно связанным с ней кластерам угроз, предположительно связанным с Китаем, которые используют сложные возможности, включая эксплуатацию уязвимостей нулевого дня в сетевых устройствах. Хотя UNC5221 публично отождествляли с актором Silk Typhoon, GTIG в настоящее время не считает эти два кластера идентичными. Особенностью этих вторжений является упор на сохранение долгосрочного скрытного доступа путем развертывания бэкдоров на устройствах, которые не поддерживают традиционные инструменты обнаружения и реагирования на конечных точках (EDR). Злоумышленник использует методы lateral movement (перемещения по сети) и кражи данных, которые создают минимальную телеметрию безопасности или не создают ее вовсе. Это, в сочетании с модификациями бэкдора BRICKSTORM, позволило им оставаться незамеченными в средах жертв в среднем 393 дня.
Основным бэкдором, используемым этим актором, является BRICKSTORM, написанный на языке Go, что обеспечивает кроссплатформенную поддержку. Это важно для предпочтения злоумышленника развертывать бэкдоры на платформах устройств, не поддерживающих EDR. Mandiant обнаружил свидетельства BRICKSTORM на устройствах под управлением Linux и BSD от различных производителей. Хотя есть свидетельства существования варианта BRICKSTORM для Windows, он не наблюдался в расследованиях. Устройства часто плохо инвентаризированы, не контролируются командами безопасности и исключены из централизованных систем сбора логов. Анализ образцов, восстановленных из разных организаций-жертв, выявил признаки активной разработки BRICKSTORM. Некоторые образцы обфусцированы с помощью инструмента Garble, а некоторые содержат новую версию пользовательской библиотеки wssoft. В одном образце был обнаружен встроенный таймер задержки, который ждал жестко заданную дату в будущем, прежде чем начать связываться с командным сервером. Примечательно, что этот бэкдор был развернут на внутреннем сервере vCenter уже после того, как жертва начала расследование инцидента, что демонстрирует способность угрозы активно отслеживать ситуацию и быстро адаптировать тактику.
На одном из расследований Mandiant проанализировал сервер vCenter и обнаружил, что злоумышленник установил вредоносный сервлет-фильтр (Java Servlet filter) для сервера Apache Tomcat, который управляет веб-интерфейсом vCenter. Этот фильтр, отслеживаемый как BRICKSTEAL, работает при HTTP-запросах к URI входа в vCenter и может перехватывать учетные данные аутентификации, включая пароли. Поскольку многие организации используют аутентификацию Active Directory для vCenter, BRICKSTEAL может захватывать эти учетные данные, часто обладающие высокими привилегиями во всей корпоративной сети. VMware vCenter является привлекательной мишенью, так как действует как слой управления для платформы виртуализации vSphere и может выполнять действия с виртуальными машинами (ВМ). По крайней мере, в двух случаях злоумышленник использовал свой доступ к vCenter для клонирования ВМ Windows Server, таких как контроллеры домена, поставщики идентификации и хранилища секретов. Клонирование позволяет злоумышленнику смонтировать файловую систему и извлечь интересующие файлы, такие как база данных Active Directory, при этом никогда не включая клон, чтобы избежать срабатывания средств защиты.
Типичная активность включала наличие как минимум одного экземпляра BRICKSTORM в качестве основного источника активности с клавиатуры, а двух или более скомпрометированных устройств - в качестве резервных копий. Для установки BRICKSTORM актор использовал легитимные учетные данные для подключения к устройству, часто через SSH. Для поддержания доступа к средам жертв угроза модифицировала файлы инициализации, чтобы обеспечить запуск BRICKSTORM при перезагрузке устройства. Актор также создавал веб-шелл, отслеживаемый как SLAYSTYLE, на серверах vCenter.
Общей темой расследований стал интерес злоумышленника к электронной почте ключевых сотрудников организации-жертвы. Для доступа к почтовым ящикам целевых учетных записей угроза использовала корпоративные приложения Microsoft Entra ID с разрешениями на чтение почты. При эксфильтрации файлов злоумышленник использовал SOCKS-прокси функцию BRICKSTORM для туннелирования своего рабочего места и прямого доступа к системам и веб-приложениям.
Mandiant подчеркивает снижающуюся полезность простых индикаторов компрометации и необходимость перехода к охоте на основе тактик, техник и процедур. В расследованиях BRICKSTORM не наблюдалось повторного использования доменов командных серверов или образцов вредоносного ПО, что в сочетании с высокой операционной безопасностью означает, что эти индикаторы быстро устаревают. Поэтому подход, основанный на ТТП, является не просто лучшей практикой, а необходимостью. Компания выпустила сканнер-скрипт, который может работать на устройствах и других системах на базе Linux или BSD, для помощи в поиске активности BRICKSTORM. Рекомендации по обнаружению включают создание или обновление инвентаря активов, сканирование файлов и резервных копий, мониторинг интернет-трафика с периферийных устройств, анализ доступа к системам Windows и учетным данным, а также отслеживание клонирования виртуальных машин и создания локальных учетных записей в vSphere.
Последние операции вторжения, связанные с BRICKSTORM, вероятно, представляют собой спектр целей: от геополитического шпионажа и операций по обеспечению доступа до кражи интеллектуальной собственности для разработки эксплойтов. Нацеливание на юридический сектор США в первую очередь направлено на сбор информации, связанной с национальной безопасностью и международной торговлей. Целью атак на провайдеров SaaS является получение доступа к средам конечных клиентов или данным, которые SaaS-провайдеры хранят от их имени. Нацеливание на технологические компании представляет возможность кражи ценной ИС для дальнейшей разработки эксплойтов для уязвимостей нулевого дня.
Индикаторы компрометации
SHA256
2388ed7aee0b6b392778e8f9e98871c06499f476c9e7eae6ca0916f827fe65df
90b760ed1d0dcb3ef0f2b6d6195c9d852bcb65eca293578982a8c4b64f51b035
YARA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | rule G_APT_Backdoor_BRICKSTORM_3 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = { 48 8B 05 ?? ?? ?? ?? 48 89 04 24 E8 ?? ?? ?? ?? 48 B8 ?? ?? ?? ?? ?? ?? ?? ?? 48 89 04 24 [0-5] E8 ?? ?? ?? ?? EB ?? } $str2 = "regex" ascii wide nocase $str3 = "mime" ascii wide nocase $str4 = "decompress" ascii wide nocase $str5 = "MIMEHeader" ascii wide nocase $str6 = "ResolveReference" ascii wide nocase $str7 = "115792089210356248762697446949407573529996955224135760342422259061068512044369115792089210356248762697446949407573530086143415290314195533631308867097853951" ascii wide nocase condition: uint16(0) == 0x457F and all of them } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | rule G_Backdoor_BRICKSTORM_2 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $obf_func = /[a-z]{20}\/[a-z]{20}\/[a-z]{20}\/[a-z]{20}.go/ $decr1 = { 0F B6 4C 04 ?? 0F B6 54 04 ?? 31 D1 88 4C 04 ?? 48 FF C0 [0-4] 48 83 F8 ?? 7C } $decr2 = { 40 88 7C 34 34 48 FF C3 48 FF C6 48 39 D6 7D 18 0F B6 3B 48 39 CE 73 63 44 0F B6 04 30 44 31 C7 48 83 FE 04 72 DA } $decr3 = { 0F B6 54 0C ?? 0F B6 5C 0C ?? 31 DA 88 14 08 48 FF C1 48 83 F9 ?? 7C E8 } $str1 = "main.selfWatcher" $str2 = "main.copyFile" $str3 = "main.startNew" $str4 = "WRITE_LOG=true" $str5 = "WRITE_LOGWednesday" $str6 = "vami-httpdvideo/webm" $str7 = "/opt/vmware/sbin/" $str8 = "/home/vsphere-ui/" $str9 = "/opt/vmware/sbin/vami-http" $str10 = "main.getVFromEnv" condition: uint32(0) == 0x464c457f and ((any of ($decr*) and $obf_func) or (any of ($decr*) and any of ($str*)) or 5 of ($str*)) and filesize < 10MB } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | rule G_APT_Backdoor_BRICKSTORM_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $ = "WRITE_LOGWednesday" $ = "/home/vsphere-ui/" $ = "WRITE_LOG=true" $ = "dns rcode: %v" $ = "dns query not specified or too small" $ = "/dev/pts: bad file descriptor" $ = "/libs/doh.Query" $ = "/libs/doh.createDnsMessage" $ = "/libs/doh.unpackDnsMessage" $ = "/core/protocol/websocket.(*WebSocketNetConfig).Dial" $ = "/core/protocol/websocket.(*connection).Read" $ = "/core/protocol/websocket.(*connection).getReader" $ = "/core/protocol/websocket.(*connection).Write" $ = "/core/protocol/websocket.(*connection).Close" $ = "/core/protocol/websocket.(*connection).LocalAddr" $ = "/core/protocol/websocket.(*connection).RemoteAddr" $ = "/core/protocol/websocket.(*connection).SetDeadline" $ = "/core/protocol/websocket.(*connection).SetReadDeadline" $ = "/core/protocol/websocket.(*connection).SetWriteDeadline" $ = "/core/protocol.UnPackHeaderData" $ = "/core/protocol.NewWebSocketClient" $ = "/libs/func1.(*Client).BackgroundRun" $ = "/libs/func1.CreateClient" $ = "/libs/func1.NewService" $ = "/libs/func1.(*Service).Get" $ = "/libs/func1.(*Service).DoTask" $ = "/libs/func1.(*Service).Put" $ = "/core/extends/command.Command" $ = "/core/extends/command.CommandNoContext" $ = "/core/extends/command.ExecuteCmd" $ = "/core/extends/command.RunShell" $ = "/core/extends/socks.UnPackHeaderData" $ = "/core/extends/socks.handleRelay" $ = "/libs/fs.(*RemoteDriver).realPath" $ = "/libs/fs.(*RemoteDriver).ChangeDir" $ = "/libs/fs.(*RemoteDriver).Stat" $ = "/libs/fs.(*SimplePerm).GetMode" $ = "/libs/fs.(*SimplePerm).GetOwner" $ = "/libs/fs.(*SimplePerm).GetGroup" $ = "/libs/fs.(*RemoteDriver).ListDir" $ = "/libs/fs.(*RemoteDriver).DeleteDir" $ = "/libs/fs.(*RemoteDriver).DeleteFile" $ = "/libs/fs.(*RemoteDriver).Rename" $ = "/libs/fs.(*RemoteDriver).MakeDir" $ = "/libs/fs.(*RemoteDriver).GetFile" $ = "/libs/fs.(*RemoteDriver).PutFile" $ = "/libs/fs.(*RemoteDriver).UpFile" $ = "/libs/fs.(*RemoteDriver).MD5" $ = "/libs/doh/doh.go" $ = "/core/protocol/websocket/config.go" $ = "/core/extends/command/command.go" $ = "/libs/fs/driver_unix.go" $ = "/libs/fs/perm_linux.go" condition: uint32(0) == 0x464c457f and 8 of them } |
1 2 3 4 5 6 7 8 9 | rule G_APT_Backdoor_BRICKSTORM_2 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = { 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? C6 44 ?? ?? 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? 0F 11 84 ?? ?? ?? ?? ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 04 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 4C ?? ?? E8 ?? ?? ?? ?? 4? 83 7C ?? ?? 00 0F 84 ?? ?? ?? ?? 4? 8D 05 ?? ?? ?? ?? 4? 89 ?? ?? E8 ?? ?? ?? ?? 4? 8B 7C ?? ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 47 08 83 3D ?? ?? ?? ?? 00 75 ?? 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 07 4? 89 BC ?? ?? ?? ?? ?? 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 0F 57 C0 0F 11 84 ?? ?? ?? ?? ?? 4? 8B ?? ?? ?? ?? ?? ?? 4? 81 C4 ?? ?? ?? ?? C3 } $str2 = { 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? 8B 84 ?? ?? ?? ?? ?? 4? 89 04 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 4C ?? ?? E8 ?? ?? ?? ?? 4? 8B 44 ?? ?? 4? 85 C0 0F 84 ?? ?? ?? ?? 4? 8D 05 ?? ?? ?? ?? 4? 89 ?? ?? E8 ?? ?? ?? ?? 4? 8B 44 ?? ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 48 08 8B 0D ?? ?? ?? ?? 85 C9 75 ?? 4? 8B 8C ?? ?? ?? ?? ?? 4? 89 08 84 00 4? 89 84 ?? ?? ?? ?? ?? 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 01 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 4? C7 84 ?? ?? ?? ?? ?? 00 00 00 00 90 E8 ?? ?? ?? ?? 4? 8B ?? ?4 D8 00 00 00 4? 81 C4 E0 00 00 00 C3 } condition: uint32be(0) == 0x7F454C46 and any of them } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | rule G_APT_BackdoorWebshell_SLAYSTYLE_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = /String \w{1,10}=request\.getParameter\(\"\w{1,15}\"\);/ ascii wide nocase $str2 = "=new String(java.util.Base64.getDecoder().decode(" ascii wide nocase $str21 = /String\[\]\s\w{1,10}=\{\"\/bin\/sh\",\"-c\",\w{1,10}\+\"\s2>&1\"\};/ ascii wide nocase $str3 = "= Runtime.getRuntime().exec(" ascii wide nocase $str4 = "java.io.InputStream" ascii wide nocase $str5 = "java.util.Base64.getEncoder().encodeToString(org.apache.commons.io.IOUtils.toByteArray(" ascii wide nocase condition: filesize < 5MB and all of them } |
1 2 3 4 5 6 7 8 9 10 11 12 | rule G_APT_BackdoorWebshell_SLAYSTYLE_2 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = "request.getParameter" nocase $str2 = "/bin/sh" $str3 = "java.io.InputStream" nocase $str4 = "Runtime.getRuntime().exec(" nocase $str5 = "2>&1" condition: (uint16(0) != 0x5A4D and uint32(0) != 0x464C457F) and filesize < 7KB and all of them and @str4 > @str2 } |
1 2 3 4 5 6 7 8 9 10 11 12 | rule G_Backdoor_BRICKSTEAL_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = "comvmware" $str2 = "abcdABCD1234!@#$" $str3 = "ads.png" $str4 = "User-Agent" $str5 = "com/vmware/" condition: all of them and filesize < 10KB } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | rule G_Dropper_BRICKSTEAL_1 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = "Base64.getDecoder().decode" $str2 = "Thread.currentThread().getContextClassLoader()" $str3 = ".class.getDeclaredMethod" $str4 = "byte[].class" $str5 = "method.invoke" $str6 = "filterClass.newInstance()" $str7 = "/websso/SAML2/SSO/*" condition: all of them } |
1 2 3 4 5 6 7 8 9 10 11 12 13 | rule G_Dropper_BRICKSTEAL_2 { meta: author = "Google Threat Intelligence Group (GTIG)" strings: $str1 = /\(Class<\?>\)\smethod\.invoke\(\w{1,20},\s\w{1,20},\s0,\s\w{1,20}\.length\);/i ascii wide $str2 = "(\"yv66vg" ascii wide $str3 = "request.getSession().getServletContext" ascii wide $str4 = ".getClass().getDeclaredField(" ascii wide $str5 = "new FilterDef();" ascii wide $str6 = "new FilterMap();" ascii wide condition: all of them } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | rule hunting_t1071_001_multiple_dns_over_https_services_queried { meta: rule_name = "Multiple DNS-over-HTTPS Services Queried" severity = "Low" tactic = "TA0011" // Command and Control technique = "T1071.001" // Application Layer Protocol: Web Protocols reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign" description = "Detects on requests by a source IP address to DNS-over-HTTPS (DoH) resolver IP addresses associated with multiple services, such as Quad9, Google DNS, and CloudFlare DNS. DoH is a protocol that encrypts DNS queries and responses using the HTTPS protocol. Threat actors may use DoH to obfuscate domain names associated with their externally hosted infrastructure that would otherwise be visible in standard DNS queries." events: $e.metadata.event_type = "NETWORK_CONNECTION" $e.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9|9\.9\.9\.11|1\.1\.1\.1|1\.0\.0\.1|45\.90\.28\.160|45\.90\.30\.160|149\.112\.112\.112|149\.112\.112\.11)$/ nocase ( $e.target.port = 443 or $e.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase ) $source_entity = strings.coalesce($e.principal.asset_id,$e.principal.ip) match: $source_entity over 2h outcome: $risk_score = max(35) $unique_doh_ips_count = count_distinct($e.target.ip) condition: $e and $unique_doh_ips_count >= 5 options: allow_zero_values = true } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | rule hunting_t1071_001_unknown_endpoint_generating_doh_and_web_development_services_communication { meta: rule_name = "Unknown Endpoint Generating DNS-over-HTTPS and Web Application Development Services Communication" severity = "Medium" tactic = "TA0011" // Command and Control technique = "T1071.001" // Application Layer Protocol: Web Protocols reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign" description = "Detects on requests by an unknown source IP address to multiple DNS-over-HTTPS (DoH) resolver services and web application development services, such as Cloudflare Workers or Heroku hosted web applications. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains." events: $c1.metadata.event_type = "NETWORK_CONNECTION" $c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4|9\.9\.9\.9|9\.9\.9\.11|1\.1\.1\.1|1\.0\.0\.1|45\.90\.28\.160|45\.90\.30\.160|149\.112\.112\.112|149\.112\.112\.11)$/ nocase $c1.principal.hostname = "" $c1.principal.asset_id = "" ( $c1.target.port = 443 or $c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase ) $c2.metadata.event_type = "NETWORK_CONNECTION" $c2.target.hostname = /\.workers\.dev$|\.herokuapp\.com$/ nocase $c2.principal.hostname = "" $c2.principal.asset_id = "" $c2.target.port = 443 $source_entity = $c1.principal.ip $source_entity = $c2.principal.ip match: $source_entity over 24h outcome: $risk_score = max(65) $unique_doh_ips_count = count_distinct($c1.target.ip) condition: $c1 and $c2 and $unique_doh_ips_count >= 3 options: allow_zero_values = true } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | rule hunting_t1071_001_unknown_endpoint_generating_google_doh_and_cloudflare_communication { meta: rule_name = "Unknown Endpoint Generating Google DNS-over-HTTPS and Cloudflare Hosted IP Communication" severity = "Medium" tactic = "TA0011" // Command and Control technique = "T1071.001" // Application Layer Protocol: Web Protocols reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign" description = "Detects on requests by an unknown source IP address to Google DNS-over-HTTPS (DoH) resolver service and a Cloudflare hosted IP address. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains." events: $c1.metadata.event_type = "NETWORK_CONNECTION" $c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4)$/ nocase $c1.principal.hostname = "" $c1.principal.asset_id = "" ( $c1.target.port = 443 or $c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase ) $c2.metadata.event_type = "NETWORK_CONNECTION" $c2.principal.hostname = "" $c2.principal.asset_id = "" $c2.target.ip_geo_artifact.network.carrier_name = /cloudflare/ nocase $c2.target.port = 443 $source_entity = $c1.principal.ip $source_entity = $c2.principal.ip match: $source_entity over 1h outcome: $risk_score = max(65) $time_diff = math.abs(min($c1.metadata.event_timestamp.seconds) - min($c2.metadata.event_timestamp.seconds)) condition: $c1 and $c2 and $time_diff <= 2 options: allow_zero_values = true } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | rule hunting_t1071_001_unknown_endpoint_generating_google_doh_and_amazon_communication { meta: rule_name = "Unknown Endpoint Generating Google DNS-over-HTTPS and Amazon Hosted IP Communication" severity = "Medium" tactic = "TA0011" // Command and Control technique = "T1071.001" // Application Layer Protocol: Web Protocols reference = "https://cloud.google.com/blog/topics/threat-intelligence/brickstorm-espionage-campaign" description = "Detects on requests by an unknown source IP address to Google DNS-over-HTTPS (DoH) resolver service and an Amazon hosted IP address. To investigate this activity further, determine the source of the network activity and verify if the communication is consistent with the device's intended use and standard allow-list domains." events: $c1.metadata.event_type = "NETWORK_CONNECTION" $c1.target.ip = /^(8\.8\.8\.8|8\.8\.4\.4)$/ nocase $c1.principal.hostname = "" $c1.principal.asset_id = "" ( $c1.target.port = 443 or $c1.target.url = /dns-query|:443\/$|\d\.\d\.\d\.\d\/$/ nocase ) $c2.metadata.event_type = "NETWORK_CONNECTION" $c2.principal.hostname = "" $c2.principal.asset_id = "" $c2.target.ip_geo_artifact.network.carrier_name = /amazon/ nocase $c2.target.port = 443 $source_entity = $c1.principal.ip $source_entity = $c2.principal.ip match: $source_entity over 24h outcome: $risk_score = max(65) $time_diff = math.abs(min($c1.metadata.event_timestamp.seconds) - min($c2.metadata.event_timestamp.seconds)) condition: // As observed by Mandiant IR, the two connection events to DoH and Amazon occurred nearly simultaneously $c1 and $c2 and $time_diff <= 2 options: allow_zero_values = true } |