Навчання поєднується з розвагою на SANS Holiday Hack Challenge 2022 – пристебніться до катання на Північному полюсі, поки я зламую нечесний план Грінчума та поверну п’ять золотих кілець
Це мій перший рік участі в SANS Holiday Hack Challenge і це був вибух. Пройшовши серію з 16 завдань, від простих до складних, я потренувався аналізувати підозрілий мережевий трафік і журнали PowerShell, писати Правила Суріката, вириваючись з a Контейнер Docker, пошук витоку ключів для використання a Конвеєр GitLab CI/CD і Користувач AWS, проведення Атаки на зовнішню сутність XML, і злом смарт-контракту для покупки a негорючий жетон.
Найкраща частина цього досвіду полягала в тому, що він познайомив мене з новими інструментами та технологіями, таким чином значно розширивши мої знання з кібербезпеки. Тут я ділюся кількома основними моментами вирішення завдань.
Орієнтація
Кожен учасник отримує аватар для навігації у середовищі відеоігор у веб-переглядачі на Північному полюсі:
Під час ознайомлення ви отримуєте криптовалютний гаманець, який гра використовує для винагороди крінглкойнами за виконання завдань і який ви використовуєте в останньому завданні, щоб зламати смарт-контракт. Цікаво, що гра відстежує всі транзакції KringleCoin у блокчейні Ethereum, тобто повний запис вашого прогресу також зберігається в цьому блокчейні.
До першого дзвінка гри.
1. Кільце Толкіна
Щоб знайти перстень Толкіна, мені довелося напружити м’язи аналізу журналів.
Фішинг Wireshark
Спочатку я використав Wireshark для аналізу наданого .pcap файл, який виявив сервер на adv.epostoday[.]uk завантаження файлу Ref_Sept24-2020.zip до комп'ютера:
Заглянувши в 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 року, коли зловмисник запустив такий сценарій:
Схоже, зловмисник знайшов секретний рецепт, переключив секретний інгредієнт мед та цінності риб'ячий жир, а потім створив новий файл рецептів. Це викликало подію з ідентифікатором 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 на клієнті.
Виконавши ці три завдання, я отримав перстень Толкіна:
На друге кільце.
2. Ельфійське кільце
Найвидатнішими викликами для Elfen Ring були Prison Escape і Jolly CI/CD.
Втеча з в'язниці
Prison Escape був суворим нагадуванням про те, що надання привілеїв root користувачеві в контейнері Docker так само добре, як надання привілеїв root на хост-системі. Завдання полягало в тому, щоб вирватися з контейнера. Що ж, це легко зробити, коли ви є адміністратором:
Як користувач root я перерахував таблиці розділів для пристрою, а потім змонтував файлову систему хоста, надавши мені повний доступ до хосту. Тепер я можу шукати ключ, який повинен знаходитися в домашньому каталозі, як показують підказки в грі:
Jolly CI/CD
Хоча це було швидко, Jolly CI/CD зайняло у мене найдовше з усіх завдань, щоб зрозуміти. По-перше, нам дали репозиторій Git для клонування через HTTP:
З URL-адреси я бачив, що назва сховища була wordpress.flag.net.internal, тому я перейшов до репозиторію та знайшов веб-сайт WordPress. Я перевірив, чи працює веб-сайт:
Так, сайт працював. Мені було цікаво, чи є витік ключів в історії вихідного коду. Якщо так, я можу внести зміни до вихідного коду. Тому я побіг git log:
З повідомлень фіксації це виглядає як a commit було створено після додавання ресурсів для виправлення помилок. Настав час перевірити фіксацію попереднього звернення:
Відмінно, я знайшов a .ssh каталог з ключами. Давайте скопіюємо ці ключі та налаштуємо агента SSH і користувача Git, щоб перевірити, чи можу я видати себе за власника цих ключів:
Тепер давайте повернемося до основної гілки та перевіримо, чи зможемо ми внести тривіальну зміну у вихідний код (використовуючи nano, я просто додав пробіл до одного з файлів):
Отже, я виконав першу частину завдання, видавши себе за одного з розробників WordPress, але чи працював веб-сайт після мого натискання?
Моє натискання щось змінило, тому що тепер веб-сайт переспрямовано на порт 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 /'); на останньому рядку. У результаті буде створено веб-сайт із переліком усіх файлів у кореневому каталозі веб-сервера:
Потім я відправив цю зміну в репозиторій Git, і система GitLab CI/CD подбала про оновлення веб-сайту замість мене:
Ах, кільце Ельфа має бути в наявності flag.txt! Я повторив попередні кроки, але цього разу використовуючи passthru('cat /flag.txt'); коли я наступного разу звертався за веб-сайтом, показую Перстень Ельфа:
На третє кільце.
3. Веб-кільце
Найцікавішим завданням для мене було Open Boria Mine Door, хоча Фонтан Гламтаріеля був цікавим, а також представляв загадки.
Відкрийте двері шахти Борія
У Open Boria Mine Door нам було запропоновано шість пінів або міні-завдань, щоб обійти перевірку введення або Політика безпеки вмісту для з’єднання вхідних і вихідних труб між штифтами, включно зі збігом кольорів труб. Для більшості шпильок я використовував HTML, щоб написати список сполучних букв «о». Ось моє остаточне рішення:
Шпилька 1
Для PIN-коду 1 не було перевірки, тому це була проста справа HTML і вбудованого CSS:
<p style=“letter-spacing: -4px; margin: 0; padding: 0;”>oooooooooooooo</p> |
Шпилька 2
Пін 2 мав політику безпеки вмісту, яка забороняла JavaScript, але дозволяла вбудований CSS, тому це не було проблемою для мого методу:
1 2 3 4 5 6 7 8 9 10 11 12 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>oooooooooooooo</li> </ul> |
Шпилька 3
Pin 3 мав політику безпеки вмісту, яка забороняла CSS, але дозволяла вбудований JavaScript, тому я використовував JavaScript для зміни стилів:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>oooooooooooooooooooooo</li>” + “<li>o</li><li>o</li><li>o</li><li>o</li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.color = “blue”; o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; </script> |
Шпилька 4
Pin 4 не мав політики безпеки вмісту, але мав функцію sanitizeInput на стороні клієнта, яка видаляла подвійні лапки, одинарні лапки, ліві кутові дужки та праві кутові дужки. Хитрість тут полягала в тому, щоб усвідомити, що ця функція запускається не через надсилання форми, а через onblur подія. Іншими словами, переміщення миші від поля введення викликало onblur подія, очищаючи будь-який вхід. Рішенням було відправити форму, натиснувши кнопку Що натомість? Створіть віртуальну версію себе у клавішу, стежачи за тим, щоб курсор миші не вийшов за межі поля введення:
1 2 3 4 5 6 7 8 9 10 11 |
<ul style=“list-style: none; line-height:0.5; letter-spacing: -4px; margin: 0; padding: 0;”> <li>o</li> <li>o</li> <li>oooooooooooooo</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li>o</li> <li style=“color: blue;”>oooooooooooooo</li> </ul> |
Шпилька 5
Пін 5 мав те саме sanitizeInput функціонувати та обходити разом із політикою безпеки вмісту, яка забороняє вбудований CSS, але дозволяє вбудований JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
<script> document.write(“” + “<ul id=’o’>” + “<li>o</li>” + “<li>o</li>” + “<li class=’red’>oooooooooooooo</li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> ooooooooooo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li><span class=’red’>o</span>” + “<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> oo</span></li>” + “<li>o<span class=’blue’> B</span></li>” + “</ul>”); const o = document.getElementById(‘o’); o.style.listStyle = “none”; o.style.lineHeight = “0.5”; o.style.letterSpacing = “-4px”; o.style.margin = “0”; o.style.padding = “0”; o.style.fontSize = “xx-large”; const reds = document.getElementsByClassName(“red”); for (let red of reds) { red.style.color = “red”; } const blues = document.getElementsByClassName(“blue”); for (let blue of blues) { blue.style.color = “blue”; } </script> |
Шпилька 6
Нарешті, Pin 6 не дезінфікував введення, але використовував суворішу політику безпеки вмісту, яка забороняла як вбудований CSS, так і JavaScript. Моїм рішенням було використати застарілий HTML, щоб отримати потрібні стилі, і використовувати таблицю замість списку:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<table border=“0” frame=“void” rules=“none” cellpadding=“0” cellspacing=“0” width=“100%”> <tr bgcolor=“#00FF00”> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> <td><font color=“#00FF00” size=“7”>o</font></td> </tr> <tr bgcolor=“red”> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> <td><font color=“red” size=“5”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td bgcolor=“red”><font color=“red” size=“9”>o</font></td> </tr> <tr bgcolor=“blue”> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> <td><font color=“blue” size=“9”>o</font></td> </tr> </table> |
Фонтан Гламтаріеля
Фонтан Гламтаріеля була можливість потренуватися Атаки XML External Entity (XXE).. З’ясувати, як визначити спеціальну сутність XML, визначити сутність, яка запитує файл із сервера, і додати цю сутність як корисне навантаження до HTTP-запиту було неважко. Найважчим було розгадати загадки в грі, щоб вгадати шлях до файлів, які сервер міг би вилити. Ось запит на прорив, що розкриває місцезнаходження золотого персня:
Я б запропонував два уроки, отримані з цього виклику. По-перше, використовуйте Конвертер типів вмісту розширення в Відрижка для перетворення корисних даних JSON у XML. По-друге, спробуйте розмістити корисне навантаження XXE в різних тегах – мені знадобилося багато часу, щоб зрозуміти, що все, що мені потрібно зробити, це розмістити &xxe; корисне навантаження в reqType тег замість imgDrop бирка.
На четверте кільце.
4. Хмарне кільце
Гра за Cloud Ring була для початківців набігом на інтерфейс командного рядка (CLI) Amazon Web Services (AWS).
Основним моментом цього набору завдань було використання трюфель щоб знайти облікові дані AWS у сховищі Git, а потім використати їх для автентифікації як користувача AWS. Зловмисник, який потрапляє на цю позицію, може використовувати aws iam команди для запиту політик, які застосовуються до користувача, і, таким чином, до яких ресурсів хмари можна отримати доступ і зловживати ними.
На п'ятий дзвінок.
5. Палаюче кільце вогню
Найбільш повчальною частиною цього набору викликів було вивчення Дерева Меркла використовувати смарт-контракт і потрапити в список попередніх продажів для придбання незамінного токена (NFT). Тут завдання полягало в тому, щоб знайти доказові значення, які разом з адресою мого гаманця та кореневим значенням дерева Merkle підтвердили моє включення до списку передпродажу.
Після кількох невдалих спроб надати доказові значення я зрозумів, що ніколи не зможу визначити доказові значення для наданого кореневого значення, оскільки не було способу дізнатися всі листкові значення, використані для його обчислення. Мені потрібно було змінити кореневе значення, щоб я міг надати дійсне дерево Merkle.
використання Інструмент професора QPetabyte, я створив дерево Меркле з двох листків, які складаються з адреси мого гаманця та адреси для BSRS_nft смарт-контракт, який я знайшов за допомогою внутрішньоігрового Blockchain Explorer у другому блоці блокчейну гри Ethereum. Інструмент створив кореневе значення цього дерева та значення доказу для адреси мого гаманця. Потім я використав Burp для перехоплення запиту до сервера та змінив кореневе значення за замовчуванням, щоб я міг надіслати дійсне дерево Merkle. Ось мій Споруда NFT придбано за фіксованою ціною 100 крінглкойнів:
Дійсно, потворний екземпляр.
Остаточний
Велика вдячність організаторам SANS Holiday Hack Challenge за те, що вони розширили мою думку новими способами та допомогли поглибити мої знання з кібербезпеки. Я не тільки з нетерпінням чекаю виклику наступного року, але навіть спробую видання цього завдання 2020 та 2021 років. І якщо ви раніше не брали участь у цьому конкурсі, сподіваюся, ці основні моменти зацікавили вас.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- Платоблокчейн. Web3 Metaverse Intelligence. Розширені знання. Доступ тут.
- джерело: https://www.welivesecurity.com/2023/01/09/cracked-it-highlights-kringlecon-5-golden-rings/
- 1
- 10
- 100
- 11
- 202
- 2020
- 2021
- 2022
- 7
- 9
- a
- Здатний
- МЕНЮ
- доступ
- доступний
- досягнутий
- досягнення
- дію
- доданий
- Додатковий
- адреса
- після
- Агент
- ВСІ
- Дозволити
- хоча
- Amazon
- Amazon Web Services
- Веб-служби Amazon (AWS)
- аналіз
- аналізувати
- Аналізуючи
- та
- Застосовувати
- Активи
- атака
- Спроби
- перевіряти справжність
- аватар
- нагорода
- AWS
- поганий
- оскільки
- перед тим
- буття
- КРАЩЕ
- між
- Великий
- Блокувати
- blockchain
- синій
- куплений
- Філія
- Перерва
- вибухнути
- Розрив
- прорив
- будувати
- купити
- званий
- який
- Залучайте
- сертифікат
- сертифікати
- виклик
- проблеми
- зміна
- характер
- перевірка
- клієнт
- ближче
- хмара
- код
- color
- коментар
- commit
- загальний
- повний
- завершення
- комп'ютер
- Проведення
- конфігурація
- З'єднуватися
- З'єднувальний
- Зв'язки
- Складається
- Контейнер
- містить
- зміст
- контракт
- конвертувати
- копіювання
- може
- створювати
- створений
- створює
- Повноваження
- криптовалюта
- Криптовалютний гаманець
- CSS
- цікавий
- виготовлений на замовлення
- Кібербезпека
- дані
- Дата
- Грудень
- Поглибити
- дефолт
- Захисники
- визначаючи
- виявлено
- розробників
- пристрій
- DID
- Померти
- різний
- важкий
- відкрити
- DNS
- Docker
- документ
- Двері
- подвійний
- зароблений
- легко
- Кінцева точка
- Захист кінцевої точки
- суб'єкта
- запис
- Навколишнє середовище
- Ефіріума
- Блокчейн Ethereum
- Навіть
- Event
- Події
- врешті-решт
- Виконує
- виконання
- Здійснювати
- вихід
- досвід
- Експлуатувати
- дослідник
- розширення
- зовнішній
- кілька
- поле
- Рисунок
- філе
- Файли
- остаточний
- знайти
- виявлення
- Перший
- виправляти
- фіксованою
- потік
- фольга
- після
- Напад
- форма
- формат
- Вперед
- знайдений
- фонтан
- Четвертий
- від
- Повний
- веселощі
- функція
- функціональний
- далі
- гра
- Games
- генерується
- отримати
- GIF
- Git
- GitHub
- даний
- золото
- Золотий
- добре
- Надання
- зламати
- злом
- Жорсткий
- допомогу
- тут
- приховувати
- Виділіть
- основний момент
- підказки
- історія
- свято
- Головна
- надія
- господар
- Як
- How To
- HTML
- HTTPS
- ідентифікований
- in
- В інших
- у грі
- У тому числі
- включення
- інформація
- вхід
- розуміння
- замість
- інтерес
- цікавий
- інтерфейс
- введені
- IP
- IP-адреса
- IT
- JavaScript
- json
- ключ
- ключі
- Kicks
- Знати
- знання
- останній
- вести
- витік
- Витоку
- вчений
- вивчення
- Уроки
- Уроки, витягнуті
- лист
- рівень
- Li
- Лінія
- ліній
- список
- Перераховані
- списки
- жити
- вантажі
- розташований
- розташування
- Довго
- багато часу
- подивитися
- шукати
- ВИГЛЯДИ
- пошук
- серія
- made
- головний
- шкідливих програм
- Маржа
- узгодження
- Матерія
- макс-ширина
- сенс
- відповідає
- пам'ять
- повідомлення
- метод
- Microsoft
- mind
- монітор
- більше
- найбільш
- рухатися
- переміщення
- Mozilla
- ім'я
- нано
- рідний
- Переміщення
- мережу
- мережу
- мережевий трафік
- Нові
- наступний
- НФТ
- не замінний
- негорючий жетон
- На північ
- пропонувати
- ONE
- відкрити
- операційний
- операційна система
- Можливість
- порядок
- організатори
- Інше
- поза
- власник
- частина
- участь
- участь
- шлях
- PHP
- сосна
- труба
- трубопровід
- місце
- розміщення
- план
- plato
- Інформація про дані Платона
- PlatoData
- Політика
- політика
- положення
- це можливо
- PowerShell
- практика
- попереднє замовлення
- представлений
- попередній
- price
- в'язниця
- привілеї
- зонд
- Проблема
- прогрес
- видатний
- доказ
- доведений
- забезпечувати
- за умови
- забезпечує
- покупка
- Штовхати
- штовхнув
- Швидко
- швидко
- радар
- ранжування
- реалізувати
- зрозумів,
- отримати
- отримує
- рецепт
- запис
- Відновлювати
- червоний
- віддалений
- повторний
- Сховище
- запросити
- запитів
- вимагається
- повертати
- Показали
- виявлення
- зворотний
- Ride
- кільце
- корінь
- Правила
- прогін
- бігун
- біг
- scripts
- Пошук
- другий
- seconds
- секрет
- безпеку
- Серія
- служити
- Послуги
- комплект
- Поділитись
- Склад
- Повинен
- сторона
- простий
- просто
- один
- SIX
- розумний
- розумний контракт
- So
- М'який
- рішення
- Розв’язування
- що в сім'ї щось
- Source
- вихідні
- Простір
- стенди
- залишатися
- заходи
- Як і раніше
- зберігати
- суворіші
- стиль
- представляти
- успіх
- підозрілі
- переключено
- синтаксис
- система
- таблиця
- TAG
- взяття
- TD
- Технології
- тест
- Тестування
- Команда
- Джерело
- третій
- думка
- три
- через
- час
- до
- знак
- занадто
- інструмент
- інструменти
- топ
- трек
- трафік
- Transactions
- спрацьовує
- при
- оновлення
- URL
- використання
- користувач
- перевірка достовірності
- значення
- Цінності
- через
- Відео
- відеогра
- Wallet
- способи
- Web
- Веб-сервер
- веб-сервіси
- веб-сайт
- який
- в той час як
- широкий
- волі
- без
- WordPress
- слова
- Work
- працював
- б
- запис
- лист
- XML
- рік
- Ти
- вашу
- себе
- зефірнет
- Zip