Як досліднику вдалось зламати Apple, Microsoft, Tesla й інші компанії

7 хв. читання

Дослідник зміг проникнути до внутрішніх систем більш ніж 35 відомих компаній, зокрема Microsoft, Apple, PayPal, Shopify, Netflix, Yelp, Tesla та Uber. Для цього він використав нову атаку системи залежностей ПЗ.

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

Атака використовує проблему у дизайні екосистем проєктів з відкритим кодом, яку називають непевність із залежностями (dependency confusion).

Також досліднику вдалось отримати понад 130 000 доларів винагороди за виявлення вразливостей. У своєму пості на Medium він написав, що більшість винагород були максимальними для програм bug bounty, а іноді навіть вищими.

Автоматичне доставлення зловмисного коду

Минулого року, коли дослідник Алекс Бірсан (Alex Birsan) спілкувався з іншим дослідником Джастіном Гарднером (Justin Gardner), у них виникла цікава ідея.

Гарднер показав Бірсану маніфест (package.json), який використовувався в одній із внутрішніх систем PayPal.

Як досліднику вдалось зламати Apple, Microsoft, Tesla й інші компанії
Публічні та приватні (внутрішні) залежності пакета в PayPal. Джерело:Birsan.

Бірсан помітив, що деяких пакетів, які згадуються у маніфесті, немає у публічних npm-репозиторіях. Очевидно, вони були створені та зберігаються десь всередині компанії.

Тоді дослідник запитав себе: що буде, якщо у публічному репозиторії з'явиться npm-пакет з такою самою назвою? Який з них отримає пріоритет під час завантаження?

Для перевірки гіпотези Бірсан почав перебирати маніфести у всіх доступних публічних репозиторіях на GitHub та в CDN відомих компаній. Він шукав усі можливі назви внутрішніх пакетів, які не зберігаються у загальному доступі.

Потім дослідник почав розміщувати підробні пакети з такими самими назвами у загальних системах управління залежностями: npm, PyPi та RubyJems.

До кожного такого пакету додавалось явне зауваження: «Цей пакет призначений для дослідження безпеки та не містить ніякого корисного коду».

Як досліднику вдалось зламати Apple, Microsoft, Tesla й інші компанії
Пакет та застереження безпеки. Джерело: BleepingComputer

Досить швидко Бірсан виявив, що у разі конфлікту, коли пакет існує одночасно у приватному та публічному репозиторіях, перевага надається саме публічному. При цьому не потрібно жодного втручання розробника.

У деяких випадках, зокрема у PyPi, система обирала той пакет, у якому версія була вищою, незалежно від того, де він знаходився.

Використовуючи таку техніку, Бірсан зміг вдало атакувати Microsoft, Apple, PayPal, Shopify, Netflix, Tesla, Yelp та Uber. Він просто створював пакети з тими самими назвами, які вже використовувались всередині цих компаній.

«На мою думку, непевність з залежностями відрізняється від тайпскваттингу або підробки брендів (typosquatting or brandjacking). Запропонований підхід не вимагає від жертви виконання якихось специфічних дій».

«Натомість через вразливість або недоліки у дизайні система автоматичного збирання може переплутати публічні залежності з внутрішніми, які мають таку саму назву», — зазначив Бірсан у коментарі для BeepingComputer.

Дослідження та отримання даних за допомогою DNS

У пакетах були скрипти, які до встановлення (preinstall) повідомляли досліднику про те, що пакет використовується для збирання на якійсь машині.

Бірсан розумів, що, найімовірніше, комп'ютери, на яких виконується збирання, будуть розташовані всередині корпоративних мереж. Щоб обійти системи захисту, він використав протокол DNS.

У своєму пості дослідник пише, що «більшість потенційних жертв були у добре захищених корпоративних мережах, тому довелось використовувати DNS для передачі інформації про потрапляння».

Як досліднику вдалось зламати Apple, Microsoft, Tesla й інші компанії
Використання DNS для розвідки та повідомлення. Джерело:Birsan.

Наведений нижче зразок коду був у пакеті з назвою «analytics-paypal». Його вже не існує, однак копія збереглась в архівах зловмисного коду, зібраного компанією Sonatype, у якій я працюю дослідником з питань безпеки.

Скрипт запускався автоматично після того, як пакет «analytics-paypal» забирали з репозиторію. Він відправляє DNS-запит на dns.alexbirsan-hacks-paypal.com.

Колбек такого типу, відправлений з мережі PayPal, показував, що ця компанія стала жертвою атаки. Також дослідник отримував IP-адресу жертви, назву хосту та ім'я користувача, який виконував збирання.

Як досліднику вдалось зламати Apple, Microsoft, Tesla й інші компанії
Код, що повідомляє дані розвідки. Джерело: BleepingComputer.

Інформація з колбеку стала доказом того, що Бірсану вдалось проникнути всередину корпоративної мережі. Потім він зв'язувався з компаніями та отримував винагороду за виявлення проблеми.

Винагорода 130 000 $

В цілому, дослідник отримав понад 130 000 доларів за програмами з виявлення багів, а також за проведення тестів на проникнення за попередньою згодою.

Усі компанії, які підлягали тестуванню, заздалегідь давали дозвіл на його проведення. Це відбувалось або у відкритій формі (через публічні програми виявлення вразливостей) або через приватні домовленості. Будь ласка, ніколи не повторюйте нічого такого без дозволу.

Microsoft заплатила Бірсану найвищу можливу в її програмі винагороду — 40 000 $. Вразливість в Azure Artifactory отримала індекс CVE-2021-24105, також було випущено окреме повідомлення.

Водночас у листуванні з Бірсаном Microsoft зазначила, що це, найімовірніше, помилка у дизайні пакетних менеджерів.

«Ми опрацюємо це як серйозну загрозу безпеці, однак насправді її слід полагодити, змінивши засоби та підходи до інсталяції ПЗ. Не варто якось виправляти репозиторії самі по собі.

Для виправлення проблеми Microsoft внесе певні зміни у Azure Artifacts.

Проте основна проблема (а не конкретний баг) полягає у дизайні менеджерів пакетів, її треба виправляти зміною конфігурації», — зазначив представник Microsoft.

У коментарі для BleepingComputer представник Yelp підтвердив, що вони отримали звіт дослідника та виплатили йому нагороду наступного дня після виправлення вразливості.

«Алекс Бірсан повідомив Yelp про вразливість через нашу програму з виявлення вразливостей. Того ж дня ми її виправили.

*Ми завжди готові співпрацювати з експертами у галузі безпеки для того, щоб підтримувати належний рівень захисту. Також ми сподіваємось, що програма винагород за виявлення вразливостей дозволить Yelp покращити безпеку систем та сервісів», *—сказав представник Yelp для BeepingComputer

Apple повідомили BeepingComputer, що Бірсан отримує винагороду за відповідальне повідомлення про проблему у межах програми Apple Security Bounty.

PayPal зробив публічно доступним звіт про проблему, створений Бірсаном на HackerOne, а також виплатив винагороду 30 000 доларів.

Втім, знайшлись і люди, які не дуже схвально поставились до зусиль Бірсана.

«Думаю, саме тому в нас у PyPi немає проєктів такого роду», — сказав Дастін Інґрем (Dustin Ingram), Директор Python Software Foundation та Google Developer Advocate. Він обробив повідомлення Бірсана та видалив його пакети з PyPI.

Інґрем підкреслив, що додавання неправомірних пакетів до PyPI збільшує навантаження на волонтерів, які займаються розробкою репозиторію.

«Можна було б знайти кращий спосіб, щоб захистити користувачів від атак такого роду. Варто було б захистити усю екосистему, а не лише окремі корпорації, які пропонують винагороди», — додав Інґрем.

Проблему важко виправити, тому кількість атак зростатиме

Бірсан вважає, що після розповсюдження результатів дослідження більшість компаній розроблять певний механізм, щоб уникати подібних атак. Втім, схожі випадки будуть траплятись ще дуже довго.

Залишається імовірність того, що кількість атак зростатиме, особливо на платформах з відкритим кодом, вразливих до непевності з залежностями.

«З часом знайдуться нові способи пошуку імен внутрішніх пакетів, це приведе до зростання кількості вражених систем. Також пошук здійснюватиметься в інших мовах програмування та репозиторіях, тож проблем стане більше» — зазначив Бірсан у своєму пості.

Sonatype випустила скрипт, який користувачі Nexus Repository Manager можуть використати для перевірки імен своїх приватних пакетів. Тестується наявність таких назв у публічних репозиторіях npm, RubyGems та PyPI. Подібний підхід можуть також використати інші компанії.

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 6.7K
Приєднався: 6 місяців тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід / Реєстрація