mitmproxy — це безкоштовний інтерактивний консольний інструмент з відкритим вихідним кодом, веб-інтерфейс та бібліотека Python, розроблені для перехоплення, інспекції, модифікації та повторного відтворення HTTP/S трафіку. Він слугує потужним проксі-сервером "людина посередині" для розробників, дослідників безпеки та інженерів з контролю якості, які працюють з веб-додатками, API та мобільним трафіком.
Огляд mitmproxy
mitmproxy працює як проксі-сервер, розташований між клієнтом і цільовим сервером. Весь HTTP та HTTPS трафік, що проходить через проксі, можна переглядати, фільтрувати та маніпулювати ним у реальному часі. Його основна функціональність дозволяє глибоко інспектувати заголовки запитів і відповідей, тіла та інші атрибути. Набір інструментів включає:
- mitmproxy: Інтерактивний термінальний інтерфейс для аналізу трафіку в реальному часі.
- mitmweb: Графічний інтерфейс користувача на основі браузера, що пропонує функціональність, подібну до
mitmproxy, але доступний через веб-браузер. - mitmdump: Інструмент командного рядка для програмної модифікації та логування трафіку, придатний для скриптингу та автоматизації.
Ключові функції
Перехоплення SSL/TLS
mitmproxy генерує власні SSL/TLS сертифікати на льоту, дозволяючи розшифровувати та інспектувати зашифрований HTTPS трафік. Для цього клієнт повинен довіряти CA сертифікату mitmproxy.
Інтерактивний інтерфейс
Як mitmproxy, так і mitmweb надають інтерактивні середовища для перегляду та керування потоками трафіку. Користувачі можуть фільтрувати потоки, шукати вміст, редагувати запити/відповіді та позначати певні потоки для подальшого аналізу.
Модифікація трафіку
Запити та відповіді можна модифікувати на льоту за допомогою інтерактивного інтерфейсу або за допомогою скриптів Python. Це дозволяє тестувати граничні випадки, вводити заголовки, змінювати дані або симулювати різні відповіді сервера.
Функціональність повторного відтворення
mitmproxy підтримує повторне відтворення записаних клієнтських запитів до сервера або повторне відтворення відповідей сервера клієнту. Це корисно для тестування конкретних сценаріїв без повторного виконання дій клієнта або для симуляції поведінки сервера.
Скриптинг та автоматизація
mitmdump надає Python API для розробки власних скриптів. Ці скрипти можуть програмно інспектувати, модифікувати, перенаправляти або відкидати трафік на основі визначеної логіки, що полегшує автоматизоване тестування та складні маніпуляції з трафіком.
Режим прозорого проксі
mitmproxy може працювати в режимі прозорого проксі, де клієнтам не потрібна явна конфігурація проксі. Мережевий трафік перенаправляється до mitmproxy на мережевому рівні, часто за допомогою правил маршрутизатора або конфігурацій брандмауера.
Встановлення
mitmproxy можна встановити за допомогою pip:
pip install mitmproxy
Для конкретних операційних систем попередньо скомпільовані бінарні файли доступні на офіційному веб-сайті mitmproxy, або його можна встановити за допомогою менеджерів пакетів, таких як Homebrew на macOS.
Базове використання
Запуск mitmproxy
Щоб запустити інтерактивний консольний інтерфейс:
mitmproxy
Щоб запустити веб-інтерфейс:
mitmweb
За замовчуванням mitmproxy прослуховує localhost:8080.
Конфігурація клієнта
Клієнти повинні бути налаштовані на використання mitmproxy як свого HTTP/S проксі.
Приклад браузера (Firefox):
1. Відкрийте налаштування Firefox.
2. Перейдіть до "Налаштування мережі" або "Налаштування проксі".
3. Виберіть "Ручна конфігурація проксі".
4. Встановіть HTTP Proxy на 127.0.0.1 та Port на 8080.
5. Встановіть SSL Proxy на 127.0.0.1 та Port на 8080.
6. Переконайтеся, що позначено "Використовувати цей проксі-сервер для всіх протоколів" або налаштуйте інші протоколи аналогічно.
Операційна система (macOS):
1. Перейдіть до System Settings > Network > Wi-Fi > Details.
2. Виберіть "Proxies".
3. Увімкніть "Web Proxy (HTTP)" та "Secure Web Proxy (HTTPS)".
4. Встановіть Server на 127.0.0.1 та Port на 8080 для обох.
Встановлення SSL/TLS сертифіката
Щоб розшифрувати HTTPS трафік, клієнти повинні довіряти CA сертифікату mitmproxy.
1. Коли mitmproxy запущено, перейдіть у браузері налаштованого клієнта за адресою http://mitm.it.
2. Завантажте та встановіть відповідний CA сертифікат для операційної системи або браузера клієнта.
3. Для систем, таких як Android або iOS, потрібні спеціальні кроки встановлення, які часто включають завантаження сертифіката та ручне довіряння йому в налаштуваннях безпеки.
Розширене використання
Модифікація запитів та відповідей
З інтерфейсу mitmproxy або mitmweb:
1. Виберіть потік.
2. Натисніть e (edit), щоб змінити запит або відповідь.
3. Виберіть компонент для редагування (наприклад, заголовки, тіло, URL).
4. Внесіть зміни та натисніть q, щоб зберегти та продовжити потік.
Скриптинг за допомогою mitmdump
Скрипти Python можуть бути передані mitmdump для автоматизації маніпуляцій з трафіком.
Приклад: Модифікація заголовка запиту
modify_header.py:
from mitmproxy import http
def request(flow: http.HTTPFlow):
if "example.com" in flow.request.pretty_host:
flow.request.headers["X-Modified-By"] = "mitmproxy-script"
print(f"Modified header for {flow.request.url}")
Запуск з mitmdump:
mitmdump -s modify_header.py
Цей скрипт додає власний заголовок X-Modified-By до запитів, що надсилаються на example.com.
Приклад: Модифікація тіла відповіді
modify_response.py:
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "api.example.com/data" in flow.request.url and flow.response.content:
# Assuming the response is JSON
data = flow.response.json()
data["status"] = "modified_by_mitmproxy"
flow.response.set_json(data)
print(f"Modified response body for {flow.request.url}")
Запуск з mitmdump:
mitmdump -s modify_response.py
Цей скрипт перехоплює відповіді від api.example.com/data, розбирає їх як JSON, модифікує поле та надсилає змінений JSON назад клієнту.
Повторне відтворення потоків
mitmproxy дозволяє повторно відтворювати захоплені HTTP потоки.
Повторне відтворення клієнтського запиту:
1. У mitmproxy або mitmweb виберіть потік.
2. Натисніть r, щоб повторно відтворити клієнтський запит до сервера. Це повторно надсилає точний запит без взаємодії з клієнтом.
Повторне відтворення відповіді сервера:
1. Виберіть потік.
2. Натисніть R (shift+r), щоб повторно відтворити відповідь сервера клієнту. Це надсилає записану відповідь сервера назад клієнту, оминаючи фактичну взаємодію з сервером. Корисно для тестування поведінки на стороні клієнта з конкретними відповідями сервера.
Варіанти використання
- Розробка та налагодження API: Інспектування запитів та відповідей для розуміння поведінки API, перевірки форматів даних та налагодження проблем інтеграції.
- Тестування безпеки: Виявлення вразливостей шляхом маніпулювання запитами (наприклад, впровадження SQL, XSS-навантажень), тестування механізмів автентифікації та аналіз зашифрованого трафіку.
- Аналіз мобільних додатків: Перехоплення та аналіз трафіку з мобільних додатків для розуміння їхньої взаємодії з бекендом, обробки даних та потенційних недоліків безпеки.
- Зворотна розробка: Деконструкція пропрієтарних протоколів або розуміння того, як програми взаємодіють з віддаленими серверами, спостерігаючи за їхніми мережевими комунікаціями.
- Автоматизоване тестування: Використання скриптів
mitmdumpдля симуляції конкретних мережевих умов, імітації відповідей API або виконання автоматизованих перевірок поведінки програми.
mitmproxy проти інших проксі-інструментів
Хоча кілька інструментів пропонують перехоплення HTTP/S, mitmproxy відрізняється своєю відкритою природою, потужною скриптовістю та гнучкими інтерфейсами.
| Функція | mitmproxy | Burp Suite Community Edition | Fiddler (Windows) |
|---|---|---|---|
| Ліцензія | Відкритий вихідний код (MIT) | Власницька (безкоштовні/платні рівні) | Власницька (безкоштовні/платні рівні) |
| Скриптовість | Python API (mitmdump) |
Обмежена (розширення через Java/Python/Ruby) | FiddlerScript (JScript.NET), розширення .NET |
| Інтерфейс | Консоль (mitmproxy), Веб-інтерфейс (mitmweb) |
Десктопний GUI | Десктопний GUI |
| SSL/TLS | Повне перехоплення | Повне перехоплення | Повне перехоплення |
| Модифікація трафіку | Так | Так | Так |
| Повторне відтворення | Так (клієнт/сервер) | Так (Repeater) | Так (Composer) |
| Прозорий проксі | Так | Так | Так |
| Цільова аудиторія | Розробники, дослідники безпеки, автоматизація | Тестери на проникнення, безпека веб-додатків | Розробники, тестери, безпека веб-додатків |
| Платформа | Кросплатформний (Linux, macOS, Windows) | Кросплатформний (на основі Java) | Windows, macOS (через Fiddler Everywhere) |
Це порівняння підкреслює сильні сторони mitmproxy в автоматизації та гнучкості відкритого вихідного коду, що робить його надійним вибором для технічних користувачів, яким потрібен глибокий контроль над робочими процесами аналізу трафіку.