Хакери превърнаха доверен Rust пакет в система за разпространение на зловреден софтуер

Популярен Rust пакет стана най-новата жертва в нарастващата тенденция на атаки срещу софтуерната верига за доставки. Според репортаж на The Register, хакери компрометираха акаунта на поддържащия зад arrayref, широко използван Rust пакет, и публикуваха злонамерени актуализации, предназначени да крадат идентификационни данни на разработчици. Пакетът, изтеглен приблизително 245 милиона пъти, е точно онзи вид основополагаща, лесна за пренебрегване зависимост, която прави този стил на атака толкова ефективен.

Вместо да се насочат директно към отделни разработчици, атакуващите се насочиха към самата софтуерна верига за доставки. След като получиха контрол над акаунта на поддържащия, те успяха да промъкнат зловреден софтуер за кражба на информация в това, което изглеждаше като рутинна актуализация. Всеки, който изтегли компрометираната версия в своята компилация, несъзнателно превърна собствената си среда за разработка в точка за разпространение на код, крадящ идентификационни данни.

Защо тази атака проработи толкова добре

Екосистемата на Rust, подобно на повечето съвременни среди за програмиране, разчита силно на споделени библиотеки с код, наречени пакети (crates). Разработчиците рядко одитират всяка зависимост ред по ред. Вместо това те се доверяват, че пакет с милиони изтегляния и утвърден поддържащ вече е проверен от общността. Именно това доверие атакуващите експлоатират.

Този инцидент попада в модела на т.нар. атака срещу веригата за доставки, при която атакуващите се насочват към по-слабото звено — в този случай един-единствен акаунт на поддържащ — за да достигнат до много по-голям набор от жертви надолу по веригата. Тъй като arrayref е вграден в толкова много други проекти, една единствена компрометирана актуализация имаше потенциала да се разпространи в безброй кодови бази, преди някой да забележи, че нещо не е наред.

Това, което прави този случай забележителен, е конкретният товар. Вместо просто да вмъкне заден канал или скрипт за копаене на криптовалута, злонамерената актуализация беше създадена да събира идентификационни данни на разработчици директно от заразените системи. Това е значителна ескалация. Откраднатите идентификационни данни на разработчици могат да бъдат използвани за достъп до хранилища на изходен код, облачна инфраструктура, регистри на пакети и други системи с висока стойност, което потенциално позволява допълнителни атаки далеч отвъд първоначалната жертва.

Залаганията за поверителността на разработчиците

Повечето дискусии за атаки срещу софтуерната верига за доставки се фокусират върху техническите последици: счупени компилации, компрометирани производствени системи, спешни кръпки. Но тук има и измерение на поверителността, което заслужава повече внимание.

Разработчиците съхраняват огромно количество чувствителна информация на своите машини: API ключове, SSH ключове, токени за облачни услуги и идентификационни данни за вход във вътрешни инструменти. Зловреден софтуер за кражба на информация, предназначен да работи по време на рутинен процес на компилация, има директен достъп точно до този вид данни. За разлика от фишинг имейл, който внимателният разработчик би могъл да забележи, злонамерената зависимост се изпълнява мълчаливо като част от нормалното, очаквано поведение. Няма подозрителен линк, върху който да се кликне, и няма очевиден червен флаг — просто актуализация на пакет, която изглежда като всяка друга.

Точно това прави атаките срещу пакети (crates) и отравянето на пакети особено тревожни от гледна точка на поверителността. Жертвите често нямат представа, че техните идентификационни данни са били изложени, докато откраднатите данни не бъдат използвани другаде — независимо дали става въпрос за неоторизиран достъп до облачната среда на компанията или за по-нататъшна компрометация на други проекти с отворен код, които разработчикът поддържа.

Какво означава това за вас

Ако сте Rust разработчик или работите с който и да е език, който разчита на екосистеми от пакети с отворен код, този инцидент е напомняне, че доверието в популярността на даден пакет не е същото като доверие в настоящата му сигурност. Пакет, изтеглен 245 милиона пъти, все още може да бъде компрометиран, ако бъде превзет един-единствен акаунт на поддържащ.

Практични стъпки, които си заслужава да обмислите, включват фиксиране на версиите на зависимостите, вместо автоматично изтегляне на най-новата версия, преглед на журналите с промени преди ъпгрейд на критични пакети и използване на инструменти, които сканират зависимостите за известно злонамерено поведение. Активирането на двуфакторна автентикация за всички акаунти, свързани с публикуване на пакети, както и редовната ротация на идентификационни данни, също намалява радиуса на поражение, ако даден акаунт бъде компрометиран.

Организациите, които разчитат в голяма степен на зависимости с отворен код, също трябва да обмислят поддържането на вътрешен списък на използваните пакети и наблюдение за необичайна активност при актуализации, особено за пакети с непропорционално влияние върху много проекти.

Оставайки пред заплахите за веригата за доставки

Тази атака срещу arrayref едва ли ще бъде последният път, когато хакери се насочват към екосистемата с отворен код, за да крадат идентификационни данни на разработчици. Тъй като софтуерните вериги за доставки стават все по-взаимосвързани, един компрометиран акаунт на поддържащ може да има последици далеч отвъд един проект.

За разработчиците изводът не е да изоставят инструментите с отворен код, а да третират управлението на зависимостите със същата степен на внимание, както всяка друга система, чувствителна към сигурността. Преглеждайте актуализациите, преди да ги обедините, ограничавайте разрешенията, предоставени на средите за компилация, и приемайте, че дори доверени пакети с много изтегляния могат да се превърнат в вектори за атака. Информираността за инциденти като този е един от най-простите начини да разпознаете предупредителните знаци рано и да защитите както своите идентификационни данни, така и системите, които помагате да изградите.