
Sniffing і Spoofing — це два ключові інструменти в арсеналі як кіберзлочинців, так і фахівців з етичного хакінгу. Вони використовуються для перехоплення трафіку, аналізу даних та обману мережевих пристроїв.
Sniffing-атака — це спосіб перехоплення даних, що передаються мережею. Йдеться про прослуховування мережевого трафіку в певному сегменті без активного втручання в нього. Цей метод дозволяє зловмиснику отримувати конфіденційну інформацію, наприклад логіни, паролі чи службові пакети, які передаються відкритим текстом.
Spoofing-атака полягає в імітації надійного джерела. Зловмисник видає себе за довірену систему або користувача, щоб отримати доступ до закритих даних чи функцій. Це може бути підробка IP-адреси, MAC-адреси або навіть електронної пошти.
Перехоплення даних у процесі злому іноді відбувається як частина атак типу «відмова в обслуговуванні» (DoS). У цьому випадку хакер фіксує або змінює пакети в потоці даних, після чого або надсилає їх повторно, або підмінює вміст перед відправкою. Сниффери при цьому виступають як інструменти для непомітного аналізу мережевого трафіку, особливо у випадках, коли відкритий або руйнівний вплив є небажаним.
Атака з перехопленням здатна застосовуватись і для відновлення парольної фрази — зокрема, у випадках, коли приватний ключ SSH опинився в руках зловмисника. У такій ситуації спеціальне програмне забезпечення фіксує SSH-пакети, в яких містяться зашифровані варіанти введеного користувачем пароля. Ці дані згодом можна розшифрувати в офлайн-режимі, використовуючи методи перебору (brute-force).
Термін “перехоплення” визначається в RFC 2301 як: “Будь-який акт захоплення мережевого трафіку та його відтворення, зазвичай з метою шпигунства або саботажу”.
Це визначення є неточним для систем на базі UNIX, оскільки будь-який трафік може бути перехоплений, якщо зловмисник має доступ до мережних інтерфейсів (NIC) або змінює пакети, які не можуть бути змінені під час передачі. Перехоплення може бути виконане за допомогою спеціальної програми, як-от tcpdump, tcpflow або LanMon, яка підключена до порту, через який пакети можуть бути перевірені віддалено.
Ще одним видом атаки перехоплення є ARP-підміна, яка полягає у надсиланні фальшивих повідомлень протоколу ARP на канальному рівні Ethernet, що дозволяє зловмиснику змусити комп’ютер-жертву переспрямовувати свій трафік через пристрій, який він контролює, шляхом підміни MAC-адреси.
Це використовується як для перехоплення сеансів, так і для переповнення мережі за допомогою атаки типу “відмова в обслуговуванні” (див. Smurf-атака).
Кожен IP-пакет містить, на додаток до свого корисного навантаження, два поля: IP-заголовок та інкапсулюючий його заголовок Ethernet.
Ті, хто працює з інтернет-комунікаціями, часто називають комбінацію цих двох заголовків “пакетом”. Таким чином, зловмисник може переглядати та змінювати IP-заголовок IP-пакета, не переглядаючи його корисне навантаження.
Заголовок Ethernet містить інформацію про MAC-адресу призначення (апаратну адресу комп’ютера одержувача), а поле Ether Type містить значення, що вказує, який тип послуги запитується (наприклад, пріоритет або керування потоком).
Тип Ether може бути “0xFFFF”, що вказує на те, що для кадру Ethernet не було включено службові поля. Це використовувалося у реалізації Cisco до версії 8.0.
Такі методи перехоплення становлять серйозну загрозу для мережевої безпеки й потребують постійного контролю та оновлення засобів захисту.
Існує кілька різних методів, які зловмисник може використовувати для виконання ARP-підміни. Вони включають:
Зловмисник має доступ до ARP-кешу на своїй зараженій машині, який також містить MAC-адреси інших машин, але які не мають або не використовують ті ж IP-адреси, що й інші машини з тими ж MAC-адресами у своїх ARP-кешах.
Зловмисник не знає, який метод використовують інші комп’ютери для зберігання таблиці MAC-адрес, і тому просто налаштовує мережу з безліччю записів, що повторюються.
Зловмисник відправляє підроблені ARP-повідомлення, намагаючись зв’язати свою заражену машину з MAC-адресою іншої машини.
Існує кілька способів завадити зловмиснику використовувати ці методи, зокрема:
Підміна ARP – не дуже ефективна атака, за винятком погано захищених мереж.
Щоб зловмисник міг використовувати цей метод як форму маскування, він повинен мати можливість відправляти пакети безпосередньо в мережу (або через доступ до Wi-Fi, або шляхом виявлення вразливості в системі безпеки). Через це IP-адресу зловмисника, ймовірно, стане відомий дуже швидко.
Атака з перехопленням – це форма атаки, за якої зловмисник намагається отримати доступ до певних даних по мережі, а перехоплення використовується як важливе завдання при захопленні даних. Термін “обнюхування” походить від дії обнюхування або нюху. Зловмисник отримує цю інформацію за допомогою спеціального програмного забезпечення під назвою “Мережевий аналізатор”.
Обнюхування під час злому: вважається вторгненням у вашу комп’ютерну систему без дозволу, без вашого відома і без законного дозволу.Це називається зломом, який може виконуватись кількома методами.
Під час дослідження було виявлено вразливість типу Cross Site Scripting (XSS), проте звичайне корисне навантаження не спрацьовувало через дію політики Content Security Policy (CSP), яка блокувала виконання зовнішнього JavaScript-коду. Згодом вдалося знайти ще одну XSS-вразливість в іншій кінцевій точці, яка також була обмежена CSP. Об’єднання цих двох векторів дозволило обійти політику безпеки та виконати XSS через механізм MIME sniffing.
Знаходження першого XSS
Наступне зображення показує кінцеву точку на головній сторінці, значення якої відображається в тілі веб-сайту.
Замість встановлення рядкового значення було вирішено спробувати використати просте навантаження у вигляді HTML-коду. Було введено конструкцію <h1>kleiton0x00</h1>
з очікуванням, що це навантаження буде оброблене та відображене у браузері як повноцінний HTML-контент.
Було виявлено HTML-інʼєкцію, тож наступним кроком стало тестування її потенціалу для реалізації XSS-атаки. Для цього було використано найпростіше можливе корисне навантаження: <script>alert(1)</script>
. Якщо веб-аплікаційний брандмауер (WAF) не відфільтрує або не заблокує цей скрипт, є висока ймовірність успішного виконання JavaScript-коду в браузері.
Корисне навантаження успішно впроваджене на веб-сайт, але немає спливаючого вікна?Дивлячись на вихідний код сторінки, бачимо, що нічого не фільтрувалося та не видалялося.
Поглянувши на інструменти розробника в браузері (Console), я зрозумів, що скрипт блокується Content-Security-Policy.
Це означає, що Content Security Policy (CSP) — це механізм захисту, який діє як додатковий рівень безпеки для веб-застосунків. Він реалізується за допомогою спеціального HTTP-заголовка, завдання якого — обмежити, з яких джерел можна завантажувати скрипти, стилі, зображення та інші ресурси. Основна мета — запобігти виконанню шкідливого коду, зокрема у випадках XSS-атак.
Зазвичай грамотно налаштована CSP дозволяє виконання скриптів лише з того ж домену, що й сам сайт (тобто self
), блокуючи завантаження зовнішніх JavaScript-файлів.
Перед тим як намагатися обійти або проаналізувати CSP, потрібно чітко визначити, як саме вона працює на конкретному ресурсі — тобто, з яких джерел дозволено завантажувати скрипти, та які обмеження накладаються на інші типи контенту.
Після аналізу HTTP-заголовків, зокрема директиви Content-Security-Policy, стало зрозуміло, що політика дозволяє завантаження скриптів лише з самого сайту, його піддоменів і внутрішніх каталогів. Це створює жорсткі обмеження, які унеможливлюють вставлення стороннього шкідливого JavaScript-коду.
У зв’язку з цим виникла необхідність пошуку альтернативних векторів атаки, зокрема додаткових XSS-вразливостей. Під час перегляду вихідного коду сторінки, при прокручуванні було помічено фрагмент PHP-коду з параметром, що обробляється динамічно — потенційно вразлива точка для подальшого аналізу.
Без зволікань було здійснено перехід за шляхом /js/countdown.php
. До кінця параметра додано просте рядкове значення з метою перевірки реакції веб-сайту та подальшого аналізу його поведінки у відповідь на введені дані.
Ми бачимо, як наш рядок (kleiton0x00) відображається у вихідному коді.Супер! Ми можемо розпочати впровадження нашого коду javascript.
Було прийнято рішення не просто вводити символи, а спробувати змінити структуру JavaScript-коду шляхом його розриву. З аналізу стало зрозуміло, що введені дані вставляються одразу після числового значення у коді.
Щоб закрити чинний вираз, додається );
— дужка )
завершує оголошення змінної, а крапка з комою ;
завершує поточний рядок коду. Після цього стає можливим впровадження нового JavaScript-коду — у цьому випадку використовується інструкція alert(1);
.
Однак залишок рядка — * 1000). getTime ();
— може спричинити синтаксичну помилку. Щоб уникнути цього, достатньо закоментувати решту рядка за допомогою //
.
Таким чином, фінальне корисне навантаження набуває вигляду:
); alert (1); //
Чудово — на основі аналізу вихідного коду вдалося впровадити JavaScript-код і зафіксувати другу XSS-вразливість.
Повна URL-адреса для тестування виглядає так:
http://website.com/js/countdown.php?end=2534926825);alert(1);//
Проте, незважаючи на правильність інʼєкції, при переході за цим посиланням XSS не виконується. Причина цього — знову ж таки, діюча політика Content Security Policy (CSP), яка блокує виконання навіть локально впровадженого скрипта.
Настав час об’єднати перший XSS, який ми знайшли на головній сторінці, і другий XSS, який ми знайшли на countdown.php.
Давайте подивимося, як MIME Sniffing може спричинити вразливість XSS. Щоб зловмисник міг виконати XSS-атаку за допомогою MIME Sniffing, мають бути виконані певні умови. Зверніть увагу, що обидві попередні умови на стороні клієнта:
Зловмисник повинен мати можливість контролювати контент у відповіді сервера, щоб можна було впровадити шкідливий JavaScript (другий знайдений нами XSS).
Зловмисник повинен мати можливість ввести контекст, що виконується, за допомогою HTML-ін’єкції або Javascript-ін’єкції (перший XSS, який ми знайшли).
Фінальне корисне навантаження XSS формується шляхом поєднання першої знайденої вразливості (в якій використовувалося класичне XSS-навантаження <script>alert(1)</script>
) із уразливою кінцевою точкою /js/countdown.php
, яка дозволяє вбудовувати шкідливий код.
Замість прямого виконання JavaScript у першому XSS, до коду додається завантаження URL-адреси:
http://website.com/js/countdown.php?end=2534926825);alert(1);//
Таким чином, об’єднане фінальне навантаження набуває такого вигляду:
<script src=’http://website.com/js/countdown.php?end=2534926825);alert(1);//></script>
Ми обійшли CSP та успішно виконали alert(1) з використанням MIME Sniffing.
У кібербезпеці часто використовуються спеціальні утиліти для аналізу трафіку, виявлення вразливостей та реалізації перехоплення в локальних мережах. Ось три популярні інструменти, які відіграють важливу роль у тестуванні захищеності систем:
Дозволяє перенаправляти пакети в локальній мережі, підміняючи ARP-відповіді. З її допомогою можна зробити так, щоб комп’ютери мережі почали надсилати свої пакети не до справжнього адресата, а до вузла, який контролюється зловмисником або дослідником.
Це потужний мультиінструмент для мережевих атак, моніторингу та збору даних. Підтримує ARP-спуфінг, перехоплення паролів, аналіз DNS-запитів, фільтрацію HTTPS та багато інших функцій. Часто використовується під час проведення пентестів та OSINT-досліджень.
ZAP — це один із найвідоміших інструментів для тестування безпеки веб-застосунків. Він дозволяє автоматично шукати вразливості, запускати атаки, відстежувати запити та відповіді HTTP/HTTPS, а також працювати як проксі-сервер для ручного аналізу.
У цій статті було продемонстровано, як навіть за наявності сучасного захисту у вигляді Content Security Policy (CSP) можна знайти нестандартні вектори для виконання XSS-атак. Незважаючи на те, що звичайні скрипти блокуються, комбінування кількох вразливих кінцевих точок, грамотне використання HTML-інʼєкції та маніпуляції з MIME-типами дозволяють обійти обмеження безпеки. Такий підхід ілюструє важливість глибокої перевірки кожного компонента веб-застосунку, адже навіть другорядні скрипти можуть стати критичною точкою доступу при складеній атаці.