Bruteforce як засіб передачі інформації b> b> p>
Це дуже
схоже на звичайні побутові ситуації, коли одна людина не говорить про те, про що
у нього питають, відповідаючи однозначно "так" або "ні", а
відповідає завжди "ні", і лише в один з вдалих моментів відповідає
"так". p>
Технологія
передачі інформації за рахунок перебору являє собою передачу щодо
невеликого обсягу інформації, можливо, що дає ключ до більш широких перспектив.
Наприклад, ми можемо собі уявити перебір пароля на архів. Якщо ми його
дізнаємося, то, власне кажучи, ми зробимо саме те, що хотіли, а заодно і
дізналися ті кілька байт, які були для нас перешкодою - пароль! p>
Односторонній
перебір. p>
Перебір архіву
є прикладом одностороннього перебору, тобто ми одного разу підібравши пароль
втрачаємо весь інтерес до подальшого перебору або перебору з самого початку. Такий
перебір дає нам обмежену інформацію розміром навряд чи більше 16 байт, а
швидше близько 2-8. Подібний перебір не становить особливого інтересу. p>
Двосторонній
перебір. p>
Наша з вами
завдання - отримувати інформацію за допомогою перебору. Двосторонній перебір
має на увазі під собою знання того ж початкового пароля і як наслідок --
його використання. p>
Наприклад,
уявімо собі інтернет-сайт із доступом до нього тільки після аутентифікації.
Аутентифікаційні пароль може складатися тільки з одного байта, так що при
використання латинського алфавіту ми маємо. 66 комбінацій (a-zA-Z0-9). Отже, ми
зможемо за 65 запитів однозначно дізнатися пароль, після чого можемо встановити
свій. p>
Ось тут
включається друга сторона і проводить аналогічні дії: перебирає пароль
і максимум через 65 спроб впізнає його, після чого знову ж таки встановлює свій.
p>
У цей час сам
пароль буде носієм інформації. Тобто якщо наш перебір зупинився на 'j',
значить, ми отримали 6 6іт інформації. Який інформації - можна встановити за
заздалегідь виготовленим таблиць або алгоритмам. p>
Найпростіший
варіант - a = 1, b = 2, c = 3, ... p>
Застосування даного
способу можна знайти наступне. p>
Існує
внутрішній корпоративний сайт з обмеженим доступом в інтернет. У нього
існує власна сторінка, яка доступна як з боку внутрішньої
мережі, так і з боку інтернет. Сайт дозволяє робити аутентифікацію для
перегляду деяких даних. Маючи Web інтерфейс для зміни пароля доступу до
станиці і право на це, можна власне і влаштувати передачу інформації через
форму введення пароля. p>
Подібні
ситуації виникають нерідко. Наприклад, провайдер може надавати безкоштовний
доступ до сторінки перегляд статистики, при цьому нічого крім цієї сторінки не
працює. Такий же фокус використовують деякі підприємства, допускаючи всіх
корпоративних користувачів лише до єдину сторінку. p>
Цей спосіб є найбільш
універсальний, однак створює значно більш вузький канал, ніж інші способи
передачі даних через Web форми (та й будь-які інтерактивні елементи, що дозволяють
зберігати будь-яку інформацію на стороні сервера, або будь-яких його посередників). p>
Уявімо собі
наступну ситуацію: ви діалапнік, у вашого провайдера є сторінка з
доступом до статистики і її деяким налаштувань, що зберігається на сервері,
наприклад, пункт про періодичність розсилки зі станом вашого рахунку. Для
передачі інформації вам вже немає необхідності здійснювати перебір для
перегляду цього параметра, тому що він висвічується як елемент ваших особистих
налаштувань. Завдяки цьому ваша швидкість з передачі даних значно
збільшується. p>
Що значить
синхронізація передачі даних? Подумайте, як ви будете передавати інформацію,
якщо у вас немає безпосереднього зв'язку з вашим скриптом. Інформацію треба через
ЩОСЬ передавати. Ось тут ми і розглянемо механізми синхронізації передачі
даних. У нас є серверна частина (з боку інтернет) і клієнтська (зі
боку корпоративної мережі). Серверна частина виконує наші запити, команди, а
клієнтська їх задає. В обов'язки обох сторін відносяться відслідковування стану.
Візьмемо наш метод передачі даних через поле пароля. p>
Розглянемо
наступний варіант. Умовимося, що пароль p>
"1"
означатиме дефолтовую ситуацію, коли нічого не передається p>
"2" --
початок передачі даних, запит. p>
"3" --
підтвердження передачі, успішна передача. p>
З боку мережі
встановлюємо пароль "2" (за замовчуванням був встановлений пароль
"1") та періодично перевіряємо пароль. p>
Сервер, побачивши,
що пароль став "2", у свою чергу підтверджує це установкою
пароля "3". Це означає, що він прийняв наш сигнал і готовий до отримання
запиту. p>
Ми перевіряємо
ця подія перевіркою пароля, і якщо пароль дорівнює "3", то тепер
настала черга передачі даних. За один раз ми передамо 1 біт, а запит може
бути, наприклад, з 20 байт. Ми встановлюємо пароль "a". p>
З боку
сервера відбувається наступне. Сервер проводить перевірку, чи встановлений пароль
"a" або "b" (якщо жоден з них не підходить, то
перевіряється пароль "1", що означає кінець передачі даних). Виходячи
із значення пароля, робиться висновок, прийшов біт 1 або 0 - тобто ми передали
серверу 1 біт. p>
Після перебору
сервер встановлює пароль "2" - сигнал, що потрібно передати
Наступне біт. p>
Передається
Наступне біт. p>
По закінченні
передачі клієнт встановлює пароль "1" і тепер починає працювати в
режимі сервера. p>
У цей час
сервер, отримавши запит, виконує його (наприклад, завантажує вказаний урл). p>
Після скачування
даних сервер виставляє пароль "2", а клієнт чекає цього пароля. p>
Отримавши пароль
"2", клієнт встановлює пароль "3". p>
Server,
визначивши, що вже встановлений пароль "3", починає побітового
передачу. А ми підтверджуємо кожен біт установкою пароля "3". p>
Існує
дуже багато можливостей реалізувати даний трюк, проте всі ці можливості
настільки різноманітні, що написати якийсь універсальний движок буде
досить складно. Наприклад, для одного з місцевих провайдерів існує
спосіб передачі до себе інформації по каналу шириною в 2 бита за 1 запит, а в
зворотний бік, можна використовувати досить широкий канал шириною близько 24
байти. p>
Передісторія
знаходження такого збоченого методу передачі інформації досить
невесела. Вечорами і ночами я працював у місті Норильську, обслуговуючи одну з
місцевих контор, план робіт давно закінчив, а робити було нічого, от і згадав
про провайдерів далекого Уралу. p>
До даної
техніці намагався написати движок на Perl, але часу не вистачило, проте дещо
залишилося. p>
При передачі
інформації таким чином необхідно: p>
Шифрувати
інформацію p>
упаковувати p>
Звичайно ж
використовувати rar для такого не будеш, і тому мені допоміг друг, провівши тести
архіваторів. p>
Результат
виявився передбачуваний: p>
ASS
GZ 48 p>
ASS
BZ2 51 p>
ASS
LZH 54 p>
ASS
RAR 98 p>
ASS_
ZIP 118// winrar zip p>
ASS
7Z 119 p>
ASS
ARJ 121 p>
ASS
ZIP 130// 7z zip p>
ASS 512 p>
Вміст
файлу ass: p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasasasasasasasa p>
asasasasasasasasasasas p>
Режим движка "Очікування запиту". p>
Алгоритм
Наступне: p>
Запускається
модуль, що виробляє очікування запиту (все залежить від типу пароля або методу
передачі (не виключена можливість передачі засобами XSS атаки, як це
реалізоване в одного з Уральських провайдерів)). p>
При отриманні
запиту відбуваються операції, аналогічні 4-8. p>
Виконується
запит в Інтернет (так, ці пункти скоріше будуть у движку, тому що вони виробляються
звичайним способом, наприклад, за допомогою бібліотеки LWP). p>
Приймається
відповідь з Інтернету. p>
Упаковуються
дані. p>
зашифровуються
дані. p>
Запускається
модуль відправки результату, який і приймає відповідні дані. p>
Бібліотеки,
які я вам раджу для розробки: LWP, Compressed:: ZLib, MIME:: Base64. p>
Мабуть на цьому
можна зупинитися. Хочеться додати лише приклади збочених методів передачі:
p>
передача
інформації за рахунок лічильників відвідувань (потрібен контроль за правильністю
передачі, адже не виключені заходи інших користувачів); p>
аналіз затримок
відповіді сервера (можна штучно створювати незначні затримки з будь-якою
боку різними методами); p>
в деяких
випадках передачу даних можна здійснювати за рахунок сесій (номери яких
зазвичай зберігаються у клієнта в куках). p>
Список літератури h2>
Для підготовки
даної роботи були використані матеріали з сайту http://www.bugtraq.ru/
p>