Зловредният софтуер се премести в инструментите, които разработчиците използват за изграждане и управление на облачна инфраструктура. Кампания, свързана с Graphalgo, внедри програма за отдалечен достъп в Terraform доставчици (providers) и Go софтуерни пакети, превръщайки рутинната работа по разработка във възможен маршрут към ценни машини.
Пакетите не се държаха като очевидни злонамерени изтегляния. Някои чакаха специфични входни данни, преди да стартират скрития код, което прави по-малко вероятно идентифицирането им при стандартно тестване.
Опасността напомня за по-ранни атаки, използващи фалшиви тестове за работа с Terraform, въпреки че тази кампания използва собствени злонамерени пакети и методи. Анализаторите от Aikido идентифицираха вариантите за Terraform и Go.
Aikido съобщи в доклад, споделен с Cyber Security News (CSN), че това е първият път, когато нейните изследователи наблюдават зловреден софтуер, разпространяван чрез Terraform доставчици.
Те свързаха Go версията с активността на Graphalgo, виждана по-рано в npm пакети. Известният отпечатък изглежда ограничен, а не широкоразпространен.
Изследователите преброиха 18 отделни имена на хостове в съобщенията за регистрация (check-in), включително три Windows системи, пет Linux системи и 10 Mac системи. Тези записи не доказват колко организации са били засегнати, но показват, че операцията е достигнала до реални машини.
Зловредният софтуер, скрит в инструментите за разработчици
Доставчиците на Terraform позволяват на екипите да свързват планове за инфраструктура с външни услуги. В началото на септември атакуващите публикуваха два доставчика, един от които с име, плътно наподобяващо популярен Docker доставчик с 56 милиона съобщени изтегляния.
Това визуално сходство беше от значение, тъй като бързият поглед върху името на пакета може да не улови липсващата буква. Скритият код се намираше в изходен файл на доставчика и се активираше само когато две входни стойности на Terraform генерираха определен хеш. В противен случай той оставаше неактивен.
След като бъде задействан, той декриптира местоположението на маскиран архив, разопакова съдържанието му, декриптира файловете вътре и стартира получения Go код като отделен процес.

Това се различава от скорошно компрометиране на Terraform регистъра, при което атакуващите промениха материалите, предоставяни от съществуващ регистър. В този случай самите злонамерени доставчици бяха примамката.
И двата случая показват защо кодът, който се изпълнява по време на работа по инфраструктурата, заслужава толкова щателен преглед, колкото и самият план на инфраструктурата. Кампанията достигна и до Go разработчици чрез два модула.
Един разкриваше своя зловреден код в четим вид; друг го криеше в архив, представящ се за файл от база данни, и чакаше специално създадена стойност. За последния атакуващите са фалшифицирали по-стари дати на коммитите, правейки пускането му да изглежда по-установено във времето, отколкото е било в действителност.
Отдалечен контрол и реакция
След активиране вторят етап събираше подробности за системата и ги докладваше чрез Slack. След това той създаваше временни ключове за криптиране, за да защити последващите съобщения.
Операторът можеше да изпраща инструкции чрез Slack или интелигентен договор (smart contract) в тестовата мрежа на Ethereum, насочвайки инфектираните системи да изпълняват допълнителен Go или JavaScript код или да изтрият зловредния софтуер.
Този подход се вписва в по-широк модел на атаки на Graphalgo върху пакети за разработчици, но новото изследване не идентифицира по независим начин оператора зад тези конкретни Terraform доставчици.
Изследователите откриха и две фалшиви среди за Go пакети, очевидно проектирани да направят предложенията да изглеждат надеждни. По време на анализа разследващите видяха 1240 криптирани съобщения в Slack и 1402 транзакции с интелигентни договори.
Тези цифри измерват активността в контролните канали, а не потвърдените инфекции. Използването на блокчейн като маршрут за управление също прилича на друг зловреден софтуер, който крие инструкции за управление в публични транзакции, въпреки че механизмите се различават.
За екипите, които са инсталирали засегнатия софтуер, премахването на пакета не е достатъчно. Aikido съветва да се изолира машината или инструмента за компилиране (build runner), да се ротират идентификационните данни, до които той е имал достъп, и да се прегледат последните промени в кода, версиите на пакетите, изпълненията на Terraform и автоматизираните билдове за злоупотреба. Преинсталирането на операционната система е по-сигурният начин за премахване на отделен зловреден код, който може да остане след деинсталирането на пакета.
Идентификационните данни за облака и инфраструктурата заслужават приоритет, когато е бил намесен Terraform доставчик. Организации без бизнес причина да се свързват с блокчейн услуги могат също да настроят предупреждения за неочаквани връзки към блокчейн уеб интерфейси.
Екипите трябва да запазят логовете и снимките на състоянието (snapshots) преди почистването, тъй като те могат да разкрият дали атакуващите са използвали все още валидни credentials на друго място.
Основният урок е практически: софтуерът, използван за внедряване на инфраструктура, сам по себе си може да се превърне в входна точка към тази инфраструктура.
Indicators of compromise (IoCs):-
| Type | Indicator | Description |
|---|---|---|
| Malicious Terraform provider | gocommunity-io/dockerd | Malicious Terraform provider |
| Malicious Terraform provider | kreuzwenker/docker | Typosquatted Terraform provider containing malware |
| Malicious Go module | gocommunity.io/orderedbtree | Go module containing malware in plaintext |
| Malicious Go module | gogets.dev/btreex | Go module containing malware in a disguised archive |
| File | import-resource.sqlite3 | Archive used by malicious Terraform providers |
| SHA-256 | 5f892a5424e88a21a3eb3d7f82ebf04d8ac31cdb19ada25153be4165df977d0f | Hash of import-resource.sqlite3 |
| File | btreex.sql | Disguised archive used by the malicious Go module |
| SHA-256 | ab01686d87565250fc4989faddb877d793667b07ec217a61cbd798f5695d62f5 | Hash of btreex.sql |
| SHA-256 | b9966e3762e9a0d5d263b8cb3cca07294f81af9714d40ddf4628cb85d74e8ad5 | Trigger hash used by the Terraform-provider payload |
| Domain | gocommunity[.]io | Threat actor-controlled fake Go package ecosystem |
| Domain | gogets[.]dev | Threat actor-controlled fake Go package ecosystem |
| Public key | 302a300506032b656e032100bad013df6eec5d686f4cc8551e0a5c87a0135164bdd1dafb1c75141d1b526702 | Hardcoded threat actor public key |
| Ethereum smart contract | 0xAD02b5cDE693529d3bdA0266299501ad0193036C | Arbitrum Sepolia contract used for command-and-control |
| Slack workspace | hxxps[:]//portfolio-devs.slack[.]com | Workspace associated with initial host check-ins |
| Slack workspace | hxxps[:]//portfolio-testers.slack[.]com | Workspace used for encrypted command communications |
| Slack workspace | hxxps[:]//mediumstar.slack[.]com | Historical unreported indicator |
Note: IP addresses and domains are intentionally defanged (e.g., [.]) to prevent accidental resolution or hyperlinking. Re-fang only within controlled threat intelligence platforms such as MISP, VirusTotal, or your SIEM.