Найти Π² Π”Π·Π΅Π½Π΅
SecureTechTalks

πŸ’£ npm ΠΊΠ°ΠΊ C2: история с axios

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ°Ρ€Ρ‚Π° исслСдоватСли ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² npm-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, связанных с экосистСмой axios. Π‘Π½Π°Ρ‡Π°Π»Π° это выглядСло ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ случай врСдоносной зависимости, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ supply chain Π°Ρ‚Π°ΠΊΠ΅ с бэкдором ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ. Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ axios Π½Π΅ Π±Ρ‹Π» скомпромСтирован. Атаку ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· сторонниС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ΄ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² dependency tree. 🧬 Как происходит Π·Π°Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ВрСдоносный ΠΏΠ°ΠΊΠ΅Ρ‚ выглядит ΠΊΠ°ΠΊ обычная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· явных ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ. Он спокойно устанавливаСтся Ρ‡Π΅Ρ€Π΅Π· npm ΠΈ активируСтся Π½Π° этапС npm install. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΒ  lifecycle-скрипты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, postinstall). ИмСнно ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π΅Ρ‰Ρ‘ Π΄ΠΎ запуска прилоТСния. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚: βž–ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Π΅Ρ‚ΡΡ внСшний payload ΠΈΠ»ΠΈ активируСтся встроСнный βž–ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ пСрвичная инициализация бэкдора βž–ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΊΠ°Π½Π°Π» связи с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ сСрвСром βš™οΈ Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ бэкдор ПослС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚

πŸ’£ npm ΠΊΠ°ΠΊ C2: история с axios

Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΌΠ°Ρ€Ρ‚Π° исслСдоватСли ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Π² npm-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ…, связанных с экосистСмой axios. Π‘Π½Π°Ρ‡Π°Π»Π° это выглядСло ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ случай врСдоносной зависимости, Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Π±ΠΎΡ€Π΅ Π²Ρ‹ΡΡΠ½ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ supply chain Π°Ρ‚Π°ΠΊΠ΅ с бэкдором ΠΈ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ.

Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ axios Π½Π΅ Π±Ρ‹Π» скомпромСтирован. Атаку ΠΏΡ€ΠΎΠ²Π΅Π»ΠΈ Ρ‡Π΅Ρ€Π΅Π· сторонниС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ°ΡΠΊΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΏΠΎΠ΄ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π² dependency tree.

🧬 Как происходит Π·Π°Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

ВрСдоносный ΠΏΠ°ΠΊΠ΅Ρ‚ выглядит ΠΊΠ°ΠΊ обычная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· явных ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠ² ΠΊΠΎΠΌΠΏΡ€ΠΎΠΌΠ΅Ρ‚Π°Ρ†ΠΈΠΈ. Он спокойно устанавливаСтся Ρ‡Π΅Ρ€Π΅Π· npm ΠΈ активируСтся Π½Π° этапС npm install.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΒ  lifecycle-скрипты (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, postinstall). ИмСнно ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π΅Ρ‰Ρ‘ Π΄ΠΎ запуска прилоТСния.

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚:

βž–ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°Π΅Ρ‚ΡΡ внСшний payload ΠΈΠ»ΠΈ активируСтся встроСнный

βž–ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ пСрвичная инициализация бэкдора

βž–ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΊΠ°Π½Π°Π» связи с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ сСрвСром

βš™οΈ Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ бэкдор

ПослС Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ скрытый Π°Π³Π΅Π½Ρ‚:

βž–ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ (OS, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΡƒΡ‚ΠΈ, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹)

βž–ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ исходящСС соСдинСниС с C2

βž–Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ исполняСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄

ΠŸΡ€ΠΈ этом ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² контСкстС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ процСсса, Ρ‚.Π΅. ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊΠΎ всСму, ΠΊ Ρ‡Π΅ΠΌΡƒ Π΅ΡΡ‚ΡŒ доступ Ρƒ сборки ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

🌐 ΠŸΠΎΡ‡Ρ‚ΠΈ Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ

ВрСдоносный ΠΊΠΎΠ΄:

βž–ΠΎΠ±Ρ„ΡƒΡΡ†ΠΈΡ€ΠΎΠ²Π°Π½

βž–ΠΌΠ°ΡΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ

βž–ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚ Π½Π° части

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости, ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· прямого ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ становятся Π½Π΅ самой Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ.

πŸ›‘ Как ΠΎΡ‚ этого Π·Π°Ρ‰ΠΈΡ‰Π°ΡŽΡ‚ΡΡ

ПослС выявлСния Π°Ρ‚Π°ΠΊΠΈ основной фокус Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π½Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ этапа установки зависимостСй.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π½ΡƒΠΆΠ½ΠΎ Тёстко ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ lifecycle-скриптов. Π’ ΠΏΡ€ΠΎΠ΄- ΠΈ CI-срСдах стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ установку с ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½Ρ‹ΠΌΠΈ скриптами (--ignore-scripts) ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ зависимостями. Ѐиксация вСрсий Ρ‡Π΅Ρ€Π΅Π· lock-Ρ„Π°ΠΉΠ»Ρ‹, Π°ΡƒΠ΄ΠΈΡ‚ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ «автоматичСских» ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ, Π° Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠ΅ΠΉ.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ стоит ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ изоляции CI. Π‘Π±ΠΎΡ€ΠΊΠΈ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² срСдах с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ ΠΈ Π±Π΅Π· прямого доступа ΠΊ сСкрСтам.

Π”Π°ΠΆΠ΅ Ссли врСдоносный ΠΊΠΎΠ΄ выполнится, ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎΠ³ΠΎ.

πŸ“„ Π Π°Π·Π±ΠΎΡ€ Π°Ρ‚Π°ΠΊΠΈ:

https://opensourcemalware.com/blog/axios-compromised

Stay secure and read SecureTechTalks πŸ“š

#cybersecurity #infosec #supplychain #npm #javascript #appsec #devsecops #malware #hacking #axios