Зламав це! Основні моменти з KringleCon 5: Золоті кільця

Зламав це! Основні моменти з KringleCon 5: Золоті кільця

Навчання поєднується з розвагою на SANS Holiday Hack Challenge 2022 – пристебніться до катання на Північному полюсі, поки я зламую нечесний план Грінчума та поверну п’ять золотих кілець

Це мій перший рік участі в SANS Holiday Hack Challenge і це був вибух. Пройшовши серію з 16 завдань, від простих до складних, я потренувався аналізувати підозрілий мережевий трафік і журнали PowerShell, писати Правила Суріката, вириваючись з a Контейнер Docker, пошук витоку ключів для використання a Конвеєр GitLab CI/CD і Користувач AWS, проведення Атаки на зовнішню сутність XML, і злом смарт-контракту для покупки a негорючий жетон.

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

Орієнтація

Кожен учасник отримує аватар для навігації у середовищі відеоігор у веб-переглядачі на Північному полюсі:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Під час ознайомлення ви отримуєте криптовалютний гаманець, який гра використовує для винагороди крінглкойнами за виконання завдань і який ви використовуєте в останньому завданні, щоб зламати смарт-контракт. Цікаво, що гра відстежує всі транзакції KringleCoin у блокчейні Ethereum, тобто повний запис вашого прогресу також зберігається в цьому блокчейні.

До першого дзвінка гри.

1. Кільце Толкіна

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Щоб знайти перстень Толкіна, мені довелося напружити м’язи аналізу журналів.

Фішинг Wireshark

Спочатку я використав Wireshark для аналізу наданого .pcap файл, який виявив сервер на adv.epostoday[.]uk завантаження файлу Ref_Sept24-2020.zip до комп'ютера:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Заглянувши в ZIP-файл, я знайшов виконуваний файл під назвою Ref_Sept24-2020.scr що викликало два виявлення в ESET Endpoint Security: BAT/Runner.ES та Generik.TAGTBG. Це зловмисне програмне забезпечення зрештою призводить до зловмисного виконуваного файлу, що працює в пам’яті під назвою config.dll і виявлені ESET Розширений сканер пам'яті as Win32/Dridex.DD.

Журнали подій Windows

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

Оскільки журнали містили 10,434 події, я згрупував події за датою, а потім запустив дію «Знайти», щоб знайти будь-які події, що містять $ характер. У PowerShell $ використовується для створення та посилання змінні. Я виявив, що атака сталася 24 грудня 2022 року, коли зловмисник запустив такий сценарій:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Схоже, зловмисник знайшов секретний рецепт, переключив секретний інгредієнт мед та цінності риб'ячий жир, а потім створив новий файл рецептів. Це викликало подію з ідентифікатором 4104, що означає виконання віддалених команд PowerShell. Тому я відфільтрував події за цим ідентифікатором, що допомогло мені швидше знаходити додаткові шкідливі події.

Регата Суріката

Останньою вправою для Кільця Толкіна було написання чотирьох правил Suricata для моніторингу мережевого трафіку на предмет зараження Dridex:

alert dns $HOME_NET будь-який -> будь-який будь-який (повідомлення: «Відомо про поганий пошук DNS, можливе зараження Dridex»; dns.query; content: «adv.epostoday.uk»; nocase; sid:1; rev:1;)

alert http 192.185.57.242 будь-який <> будь-який будь-який (повідомлення: «Дослідіть підозрілі з’єднання, можливе зараження Dridex»; sid:2; rev:1;)

alert tls any any -> any any (msg:”Дослідіть погані сертифікати, можливе зараження Dridex”; tls.cert_subject; content:”CN=heardbellith.Icanwepeh.nagoya”; sid:3; rev:1;)

alert http any any -> any any (msg:”Підозріла функція JavaScript, можливе зараження Dridex”; file_data; content:”let byteCharacters = atob”; sid:4; rev:1;)

Для цього ці правила вловлюють DNS-пошуки для adv.epostoday[.]uk, підключення до IP-адреси 192.185.57[.]242, використання шкідливого сервера hearbellith.Icanwepeh[.]nagoya ідентифікується за допомогою загальної назви (CN) у сертифікаті TLS і використання JavaScript atob() функція для декодування двійкового рядка, що містить дані в кодуванні base64 на клієнті.

Виконавши ці три завдання, я отримав перстень Толкіна:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

На друге кільце.

2. Ельфійське кільце

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Найвидатнішими викликами для Elfen Ring були Prison Escape і Jolly CI/CD.

Втеча з в'язниці

Prison Escape був суворим нагадуванням про те, що надання привілеїв root користувачеві в контейнері Docker так само добре, як надання привілеїв root на хост-системі. Завдання полягало в тому, щоб вирватися з контейнера. Що ж, це легко зробити, коли ви є адміністратором:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Як користувач root я перерахував таблиці розділів для пристрою, а потім змонтував файлову систему хоста, надавши мені повний доступ до хосту. Тепер я можу шукати ключ, який повинен знаходитися в домашньому каталозі, як показують підказки в грі:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Jolly CI/CD

Хоча це було швидко, Jolly CI/CD зайняло у мене найдовше з усіх завдань, щоб зрозуміти. По-перше, нам дали репозиторій Git для клонування через HTTP:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

З URL-адреси я бачив, що назва сховища була wordpress.flag.net.internal, тому я перейшов до репозиторію та знайшов веб-сайт WordPress. Я перевірив, чи працює веб-сайт:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Так, сайт працював. Мені було цікаво, чи є витік ключів в історії вихідного коду. Якщо так, я можу внести зміни до вихідного коду. Тому я побіг git log:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

З повідомлень фіксації це виглядає як a commit було створено після додавання ресурсів для виправлення помилок. Настав час перевірити фіксацію попереднього звернення:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Відмінно, я знайшов a .ssh каталог з ключами. Давайте скопіюємо ці ключі та налаштуємо агента SSH і користувача Git, щоб перевірити, чи можу я видати себе за власника цих ключів:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Тепер давайте повернемося до основної гілки та перевіримо, чи зможемо ми внести тривіальну зміну у вихідний код (використовуючи nano, я просто додав пробіл до одного з файлів):

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Отже, я виконав першу частину завдання, видавши себе за одного з розробників WordPress, але чи працював веб-сайт після мого натискання?

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Моє натискання щось змінило, тому що тепер веб-сайт переспрямовано на порт 8080.

До цього моменту я ігнорував частину завдання CI/CD, яка має бути ключовою для його завершення. Репозиторій містить a .gitlab-ci.yml файл, який містить конфігурацію конвеєра GitLab CI/CD. Кожного разу, коли ви натискаєте на репозиторій, запускається система CI/CD, і a GitLab Runner виконує сценарії в цьому файлі YML. Я подумав, що це так само добре, як досягти віддаленого виконання коду на сервері, де встановлено GitLab Runner.

Придивившись, я побачив rsync сценарій копіювання всіх файлів зі сховища Git до каталогу на веб-сервері, з якого обслуговувався веб-сайт. Спочатку пробувала використовувати rsync щоб повернути потік даних, скопіювавши всі файли з веб-сервера до сховища Git, але безуспішно.

Після багатьох перевірок гіпотез я зрештою дійшов свого проривного розуміння: замість того, щоб намагатися «виправити» веб-сайт WordPress або запустити зловмисні сценарії через систему збірки, обслуговуйте веб-сайт, який витікає з веб-сервера. Всередині index.php (розташований на верхньому рівні сховища), я можу закоментувати код, який завантажує веб-сайт WordPress і запускає команди PHP, які перевіряють веб-сервер.

Дійсно, я навіть можу запускати команди оболонки за допомогою PHP. Я знайшов це passthru () працював легко.

In index.php, Я використав // щоб закоментувати два рядки, і я додав passthru('ls -la /'); на останньому рядку. У результаті буде створено веб-сайт із переліком усіх файлів у кореневому каталозі веб-сервера:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Потім я відправив цю зміну в репозиторій Git, і система GitLab CI/CD подбала про оновлення веб-сайту замість мене:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Ах, кільце Ельфа має бути в наявності flag.txt! Я повторив попередні кроки, але цього разу використовуючи passthru('cat /flag.txt'); коли я наступного разу звертався за веб-сайтом, показую Перстень Ельфа:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

На третє кільце.

3. Веб-кільце

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Найцікавішим завданням для мене було Open Boria Mine Door, хоча Фонтан Гламтаріеля був цікавим, а також представляв загадки.

Відкрийте двері шахти Борія

У Open Boria Mine Door нам було запропоновано шість пінів або міні-завдань, щоб обійти перевірку введення або Політика безпеки вмісту для з’єднання вхідних і вихідних труб між штифтами, включно зі збігом кольорів труб. Для більшості шпильок я використовував HTML, щоб написати список сполучних букв «о». Ось моє остаточне рішення:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Шпилька 1

Для PIN-коду 1 не було перевірки, тому це була проста справа HTML і вбудованого CSS:

Шпилька 2

Пін 2 мав політику безпеки вмісту, яка забороняла JavaScript, але дозволяла вбудований CSS, тому це не було проблемою для мого методу:

Шпилька 3

Pin 3 мав політику безпеки вмісту, яка забороняла CSS, але дозволяла вбудований JavaScript, тому я використовував JavaScript для зміни стилів:

Шпилька 4

Pin 4 не мав політики безпеки вмісту, але мав функцію sanitizeInput на стороні клієнта, яка видаляла подвійні лапки, одинарні лапки, ліві кутові дужки та праві кутові дужки. Хитрість тут полягала в тому, щоб усвідомити, що ця функція запускається не через надсилання форми, а через onblur подія. Іншими словами, переміщення миші від поля введення викликало onblur подія, очищаючи будь-який вхід. Рішенням було відправити форму, натиснувши кнопку Що натомість? Створіть віртуальну версію себе у клавішу, стежачи за тим, щоб курсор миші не вийшов за межі поля введення:

Шпилька 5

Пін 5 мав те саме sanitizeInput функціонувати та обходити разом із політикою безпеки вмісту, яка забороняє вбудований CSS, але дозволяє вбудований JavaScript:

Шпилька 6

Нарешті, Pin 6 не дезінфікував введення, але використовував суворішу політику безпеки вмісту, яка забороняла як вбудований CSS, так і JavaScript. Моїм рішенням було використати застарілий HTML, щоб отримати потрібні стилі, і використовувати таблицю замість списку:

Фонтан Гламтаріеля

Фонтан Гламтаріеля була можливість потренуватися Атаки XML External Entity (XXE).. З’ясувати, як визначити спеціальну сутність XML, визначити сутність, яка запитує файл із сервера, і додати цю сутність як корисне навантаження до HTTP-запиту було неважко. Найважчим було розгадати загадки в грі, щоб вгадати шлях до файлів, які сервер міг би вилити. Ось запит на прорив, що розкриває місцезнаходження золотого персня:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Я б запропонував два уроки, отримані з цього виклику. По-перше, використовуйте Конвертер типів вмісту розширення в Відрижка для перетворення корисних даних JSON у XML. По-друге, спробуйте розмістити корисне навантаження XXE в різних тегах – мені знадобилося багато часу, щоб зрозуміти, що все, що мені потрібно зробити, це розмістити &xxe; корисне навантаження в reqType тег замість imgDrop бирка.

На четверте кільце.

4. Хмарне кільце

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Гра за Cloud Ring була для початківців набігом на інтерфейс командного рядка (CLI) Amazon Web Services (AWS).

Основним моментом цього набору завдань було використання трюфель щоб знайти облікові дані AWS у сховищі Git, а потім використати їх для автентифікації як користувача AWS. Зловмисник, який потрапляє на цю позицію, може використовувати aws iam команди для запиту політик, які застосовуються до користувача, і, таким чином, до яких ресурсів хмари можна отримати доступ і зловживати ними.

На п'ятий дзвінок.

5. Палаюче кільце вогню

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Найбільш повчальною частиною цього набору викликів було вивчення Дерева Меркла використовувати смарт-контракт і потрапити в список попередніх продажів для придбання незамінного токена (NFT). Тут завдання полягало в тому, щоб знайти доказові значення, які разом з адресою мого гаманця та кореневим значенням дерева Merkle підтвердили моє включення до списку передпродажу.

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

використання Інструмент професора QPetabyte, я створив дерево Меркле з двох листків, які складаються з адреси мого гаманця та адреси для BSRS_nft смарт-контракт, який я знайшов за допомогою внутрішньоігрового Blockchain Explorer у другому блоці блокчейну гри Ethereum. Інструмент створив кореневе значення цього дерева та значення доказу для адреси мого гаманця. Потім я використав Burp для перехоплення запиту до сервера та змінив кореневе значення за замовчуванням, щоб я міг надіслати дійсне дерево Merkle. Ось мій Споруда NFT придбано за фіксованою ціною 100 крінглкойнів:

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Дійсно, потворний екземпляр.

Остаточний

Cracked it! Highlights from KringleCon 5: Golden Rings PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Велика вдячність організаторам SANS Holiday Hack Challenge за те, що вони розширили мою думку новими способами та допомогли поглибити мої знання з кібербезпеки. Я не тільки з нетерпінням чекаю виклику наступного року, але навіть спробую видання цього завдання 2020 та 2021 років. І якщо ви раніше не брали участь у цьому конкурсі, сподіваюся, ці основні моменти зацікавили вас.

Часова мітка:

Більше від Ми живемо безпеки