Злом web 2

Фахівці зійшлися в думках: сьогодні безпеку корпоративних мереж знаходиться під великою загрозою, хакерам вдалося проникнути за периметр локальних мереж. Цього разу з бойового арсеналу вони вибрали найбільш уразлива ланка в безпеці - веб-додатки.

REMOTE_ADDR: 20.20.20.20
REMOTE_PORT: 37938
REMOTE_HOST: proxy.isp.com

У найпростішому вигляді схему підключення корпоративного користувача можна уявити як ланцюг з 4-х систем:

На цьому наші пошуки не закінчилися, продовжимо вивчати змінну
$ _SERVER.

Крім вже описаних даних, в змінних сервера можуть зберігатися заголовки X-Forwarded-For і Via. Вони є службовими і формуються проміжними серверами в міру транспортування запиту. Ці поля в подальшому використовуються для ідентифікації клієнта, що послав запит, щоб потім доставити йому відповідь сервера.

В результаті ми отримали:

X-FORWARDED-FOR: 192.168.10.5, 10.10.10.10
VIA: 1.1 proxy.intranet.com (squid / 2.6.STABLE9), 1.0 proxy.isp.com (squid / 2.6.STABLE9)

Тепер, нам відомо, що proxy.isp.com дійсно належить провайдеру. Якщо подивитися на значення VIA в заголовку, то видно, що пакет проходить через proxy.intranet.com, а вже потім через proxy.isp.com. Також можна додати, що обидві проксі працюють по порту 3128 і використовують squid 2.6.

Java applet

Для виконання аплета додаємо наступний код в наш скрипт go2intranet.php:

Аплет виводить дані в консоль віртуальної машини Ява:

Цей код ідентичний з:

Але буде вважатися безпечним для систем контролю вмісту. Але що якщо у клієнта відключена віртуальна машина
Java?

Firefox і Java

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

Cross Site Tracing

Атакуючий може використовувати об'єкт XmlHttpConnection, для того щоб робити POST- і GET-запити на зламаний їм сервер. У нього також є можливість додавати свої заголовки в запит, але X-Forwarded-For і Via генеруються проксі-сервером, а тому на момент підключення вони невідомі і доступні тільки веб-сервера. Як же дізнатися, які дані отримує сервер? Відповідь на це питання лежить в документації HTTP-протоколу. Як описано в стандарті, крім методів POST і GET, існують і інші. Деякі з них можна зустріти лише на папері, але є і такі, які можу допомогти нам з рішенням даного завдання.

В результаті responseText містить повний текст нашого запиту, який можна легко витягти, щоб отримати виключно потрібні нам значення:

Як бачите, якщо в запиті передаються цікавлять нас дані (X-Forwarded-For і Via), атакуючий має широкий спектр інструментарію, щоб з легкістю дістати їх. Але, як вже говорилося раніше, ці поля можуть бути відсутні. Якщо користувач для виходу в Інтернет використовує анонімний проксі-сервер, від них не залишиться й сліду. Що може зробити хакер, для того щоб обійти проксі?

Flash XMLSocket

Практично всі програмні засоби, доступні з браузера, використовують його настройки при мережевому обміні даними. Оскільки проксі-сервер налаштовується в ньому ж, то все підключення повинні робитися через нього. Так воно і є, за винятком деяких об'єктів, які ігнорують проксі сервер. Один з таких об'єктів - XMLSocket, реалізований у
Flash.

Metasploit Decloaking Engine

Дуже гарне рішення нашої задачі запропонував проект Metasploit. Демонстрація використовує кілька варіантів тестування, щоб більш точно визначити мережеву конфігурацію клієнта. Найцікавіше в цьому рішенні - це визначення DNS-сервера провайдера, який надає доступ в Інтернет.

Ініціювати такий запит дуже просто, достатньо послатися на ресурс з домену, наприклад, на зображення:

У демонстрації від Metasploit так і робиться. Але крім цього, таким же чином створюються запити з java. Політика безпеки в java блокує створення підключення до іншого хосту (hacker.com і 347205.hacker.com - це різні сайти), але DNS lookup все ж відбувається.

Комплексне рішення

Залежно від ситуації, хакер може застосувати ті чи інші методи. Кожен із способів специфічний, тому в деяких випадках доведеться відмовитися від деяких з них. Наприклад, варіант з використанням PHP буде працювати навіть через малюнок:

Решта проканати через підключення віддаленого скрипта:

Так може виглядати PHP-код, який об'єднує техніку Ява-сканування і отримання інформації з заголовків сервера:

Таким буде код Java-аплета:

Для прикладів під FireFox необхідно визначати ім'я браузера:

І в такому дусі реалізувати комплексну перевірку.

Для кінцевих користувачів можна лише порадити використовувати анонімні проксі, відключити підтримку Java і Flash. Не сама райдужна перспектива, зате корисна штука для дотримання корпоративної безпеки.

Покажи цю статтю друзям:

Компанія Oracle випустила екстрений патч для критичних вразливостей в продуктах PeopleSoft

Фахівці Cisco і «ІнЧіп» розкажуть про захист «розумних» автомобілів

Баг в роботі Amazon Key дозволяє зловмисникам таємно проникати в будинку користувачів

«Лабораторія Касперського» нарахувала понад 120 шкідливий на комп'ютері, з якого «витекли» дані АНБ

Схожі статті