|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
|
Анализ\Блокировка\Редактирование трафика определенного процесса21.03.2024, 07:40. Показов 30486. Ответов 35
Метки нет (Все метки)
Привет. Появилась идея написать что-то аля сниффера который умел бы перехватывать траффик по фильтрам (srsIP\dstIP\PID).
Будет возможность создавать список правил. И если процесс пытается соединится с сервером который в правилах определен как заблокированный - то процесс просто драпал это соединение. Ну и как бонус еще может редактирование пакетов на лету по шаблону и пересылка от приложения к серверу и от серверу к приложению. Короче нужно функционал почти идентичный Charles proxy но с возможностью перехвата пакетов уровня Ethernet, как делает WireShark, например. Пока что почитал, погуглил и вроде как перехват трафика реализовать не очень сложно, просто через драйвер NpCap, а вот редактирование пакетов и пересылка в обе стороны я пока что даже не понимаю как это можно сделать... Пока что только одна идея - Прокси, но тут проблема что трафик нужно как то перенаправлять с процесса на этот прокси, а сторонний софт использовать не хочу. Есть может быть у кого какие идеи\готовые Open Source решения, или хотя бы примеры? Был бы благодарен за любую инфу по теме. Пока что буду сам пытаться гуглить само собой.
0
|
|
| 21.03.2024, 07:40 | |
|
Ответы с готовыми решениями:
35
Анализ трафика
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 22.03.2024, 14:00 | ||
|
1) Регистрировать в драйвере посредством IRP сообщений те srsIP\dstIP\PID, которы нужно заблокировать, и отслеживать в драйвере исходящий трафик, который проверять перед выходом в сеть на предмет заблокированности и блокировать его, если нужно 2) Перенаправлять трафик в локальную программу, которая будет выступать в качестве фильтрующего моста между программой, которая инициировала соединение и конечным сервером 3) Настройка прокси посредством сторонних софтов, принцип такой же как и в п.2, только вместо собственного драйвера придется еще и сторонний софт ставить, что бы перехватить трафик Но на этом приключения конечно же не заканчиваются. Нужно еще учесть то, что соединение с сервером может использовать шифрование TLS. По этой причине, вам так же нужно будет реализовать локальный Certificate Authority (CA), чей корневой сертификат должен быть доверенным в рамках ОС. Так же придется генерировать SSL сертификаты на лету для каждого домена, подписывать их вашим доверенным Certificate Authority, и использовать этот сертификат в TLS рукопожатии, причем домен целевого сервера должен быть прописан в этом сертификате. Так вы сможете перехватить зашифрованный трафик и прочитать его а так же отфильтровать/редактировать согласно заданным правилам.
1
|
||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
|
| 23.03.2024, 23:47 [ТС] | |
|
Undisputed,
Я тут еще погуглил по теме, и нашел еще такую технологию как LSP (Layered Service Provider), вроде тоже не плохая, но говорят сложно в разработке ибо любой косяк может сломать всю сеть, как я понял это что-то типа midleware в вин соккетах. И еще есть драйвер NpCap, его я уже протестировал немного и почитал примеры использования, в принципе вроде как не плохой вариант. На счет TLS то может быть как нить получится прикрутить что-то готовое, типа mitmproxy или не вариант? И еще меня интересует генерация пакетов например, я когда-то давно писал что-то типа сниффера, там было реализовано на TCP прокси, типа перенаправлял траффик на этот локальный прокси и на нем уже ловил пакеты, но там ловились не все а только TCP, но там помню можно было генерировать пакеты типа поймал один и можно было его отправить еще раз на сервер, ну либо на клиент в принципе тоже. Так вот, генерация (отправка в обе стороны) работает только через соккет как я понимаю да? Просто так создать пакет в ручную и открпавить его на сервер через например NpCap не получится или можно?
0
|
|
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
|
| 24.03.2024, 00:04 | |
|
2
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 24.03.2024, 14:52 | |||
|
В целом суть решения с нуля заключается в том что бы был прокси-сервер, который будет вести себя как целевой сервер, к которому собирался подключиться клиент. Когда надо, такой сервер сбрасывает соединение клиента (если соединение попадет под фильтр), а когда надо будет менять контент (прокси берет контент от целевого сервера, но клиенту может отдать его модифицированную версию). Конечно же, такой прокси должен уметь работать с TLS и без него, что бы уметь работать с пользователями независимо от того нужно ли им шифрование или нет. При этом когда прокси сервер собирается вести себя как целевой сервер клиента, то для случая с TLS он должен предоставлять SSL сертификат, которому доверяет ОС. Именно поэтому нужен собственный (и доверенный со стороны ОС) CA. Направить трафик в прокси можно как минимум двумя способами: 1) задать программе использующей соединения адрес прокси явным образом 2) реализовать драйвер (ну или взять готовый, если есть) который будет перенаправлять трафик в локальный прокси сервер без необходимости настраивать прокси вручную Насчет готовых решений (в том числе и LSP) не скажу, я ими не пользовался
1
|
|||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
|||
| 25.03.2024, 16:11 [ТС] | |||
|
Выходит, самый идеальный вариант для меня это прокси сервер на соккетах, и какой-то драйвер умеющий перенаправлять траффик. Типа что бы получилась такой алгоритм работы: Запускаю прокси, сетаплю правила на драйвер что бы он перенаправлял весь траффик по правилу, из нужного мне процесса на мой запущенный прокси, а уже прокси буде передавать пакеты на сервер. Все верно я понял?
0
|
|||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
||
| 25.03.2024, 16:24 | ||
|
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 25.03.2024, 20:09 | ||
|
1) если вы направляете исходящий трафик в локальный прокси (предположим, что трафик TCP), то этот локальный прокси ведь должен иметь возможность подключиться к удаленному серверу, который запросил клиент.. но как только локальный прокси попробует подключиться к удаленному серверу, настроенный прокси снова будет направлять его на себя, так как исходящий от прокси трафик тоже TCP, а весь TCP трафик из ОС как мы до этого выяснили, направляется в локальный прокси-сервер, и таким образом возникает цикл и пропадает возможность для локального прокси выйти в интернет 2) нужна возможность в случае завершения программы (как штатного, так и аварийного завершения) прекратить проксирование трафика... в случае с драйвером, при открытии HANDLE на драйвер, ОС должна будет отправить IRP_MJ_CLOSE драйверу, что бы тот мог прекратить проксирование (если проксирование не прекратить, а процесс локального прокси будет завершен, то на компьютере сломается интернет) 3) утилита которая будет проксировать трафик в локальный сервер, должна так же передавать айпи и порт целевого сервера, и ваш локальный прокси должен поддерживать протокол, по которому эти данные будут передаваться Все эти проблемы решаются, если правильно реализовать драйвер и взаимодействие с ним. В противном случае будут проблемы, которые частично можно решить, но в целом скорее всего это будет неграмотно и ненадежно. Не буду сейчас вдаваться в подробности, но если будут вопросы/аргументы, то я попробую на них ответить ![]() siriusED, Если решение которым вы пользуетесь позволяет только просматривать пакеты, то оно не годится. Здесь нужно иметь возможность не только просматривать, но и быть активным участником соединения (т.е иметь возможность отправлять данные).
1
|
||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
||
| 25.03.2024, 20:54 [ТС] | ||
|
Undisputed, Ну если так грубо сказать, то мне просто нужно сделать проксификатор который сетапится из кода, и прокси сервер.
Тот же Proxifier, например как то же работает И через него же можно перенаправить траффик на свой локальный прокси и траффик пойдет без проблем. Я даже вроде когда-то такое делал для экспериментов.Так что мне нужно что-то подобное по факту, локальный МИТМ прокси проксифицируующий IP пакеты с возможностю блока\едита\инжекта, и собственно сам проксификатор(драйвер) который будет просто перенаправлять исходящий траффик на мой прокси а уже прокси будет принимать этот траффик и передавать его в интернет на сервер, и принимать ответ от сервера и передавать его на приложение (например браузер). 1. 2. Ну первое что приходит на ум, сделать пинг моего софта драйвером или проверять запущен ли процесс, если пинга нету или процесс вылетел значит драйвер прекращает свою работу и ни как не взаимодействует с пакетами во обще. 3. Ну тут я тоже могу ошибаться, но разве драйвер не просто будет перенаправлять IP-пакеты по заданному правилу на мой прокси и все? То есть прилетел пакет на интерфейс, драйвер принял его и просто передал полученный пакет на мой прокси, ведь адрес получателя и будет мой прокси который и общается с сервером, а уже на клиент пойдет пакет с измененным адресом отправителя и получателя. Хотя тут я еще сам до конца не понимаю как именно это все работает так что извиняйте если написал бред ![]() А пока что, пойду искать инфу как работают проксификаторы, ибо на сколько я могу видеть на данный момент, мне нужен именно такой же функционал, просто с возможностью управления из кода.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||
| 25.03.2024, 21:14 | |||||
|
1
|
|||||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
|
| 25.03.2024, 23:41 [ТС] | |
|
И еще на счет отправки пакетов, а прокси сервер это точно единственный вариант? Нету никакого способа может быть как ни будь получить доступ к сокетам приложения и отправлять пакеты через нужный сокет что бы во обще прокси сервер не использовать, ведь когда приложение хочет связаться с сервером единственный вариант как это сделать это винсокеты, и вот вопрос к этим сокетам точно ни как нельзя получить доспут что бы отправлять пакеты в обе стороны прямо через сокет самого же приложения а не городить целый прокси сервер который по факту и будет двумя сокетами один на клиент(входящий) а второй на сервер(исходящий), нету вариантов если в эту сторону копнуть?
Пока писал сообщение одна идея уже пришла - хукнуть функцию создания сокета и получить указатель на него себе Но я прям очень не хочу ничего хукать, подменять итд, хочу что б все работало без этих костылей...
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 26.03.2024, 00:35 | |||
|
С другой стороны, вы можете попробовать использовать этот сокет для других функций, которые тоже похукаете. Например, можете попытаться читать из SSL_Read, функции библиотеки OpenSSL. Но спешу вас расстроить. Есть множество библиотек, и не факт что все приложения будут использовать OpenSSL. Нужно будет хукать функции всех возможных библиотек, и в принципе возможна ситуация, где например будет собственная имплементация протокола, и вы даже не поймете что хукать. В общем это плохая затея, даже если частично будет работать.
1
|
|||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
|
| 26.03.2024, 03:01 [ТС] | |
|
Undisputed, Да нет, TLS и другие шифрования, сериализацию и упаковку это все, думаю, можно разбирать через драйвер, в самом плохом случае можно будет сделать то же самое что делает mitmproxy, а вот что б именно отправлять собранные пакеты нужен либо прокси сервер либо каким-то образом получить доступ до сокета самого приложения, тогда может быть вышла схема что-то типа: Через драйвер посмотрел пакет, понял что за шифрование, использую все данные - собираю собственный пакет, формирую все хедеры и отправляю на сервер через сокет приложения. Что-то типа такого, но опять таки, что-то погуглил и не очень то и много инфы по доступу к сокетам процесса.
И кстати нашел хорошую инфу где рассказали во обще обо всех технологиях перехвата траффика. Прочитав возможности о описание всех остановился на NDIS Driver, Через него и блочить можно и делать симуляции плохого соединения, потери пакетов, а так же менять пейлоад пакетов. В принципе это куда лучше NpCap. Наверно остановлюсь на этом варианте для захвата траффика. А вот что с отправкой то тут надо что-то будет еще погуглить либо делать через прокси либо как то найти инфу по доступе к сокетам что бы передавать пакеты через них. Пока что, гуглю по теме дальше...
0
|
|
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
|
| 26.03.2024, 05:59 | |
|
Господа, вам не кажется что вы просто все переусложняете?
Есть же технология NAT. Заворачиваете все пакеты с нужного ПО/нужного Порта на loopback, где сидит ваш проксификатор, получает пакет и обрабатывает его? Хоть MitM из себя изображает, хоть тупо переправляет..
0
|
|
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||||
| 26.03.2024, 12:44 | |||||
![]() Ну вот теперь расскажите мне пожалуйста, как вы это решите.
1
|
|||||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
||
| 26.03.2024, 12:54 | ||
|
1
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|||
| 26.03.2024, 13:01 | |||
Что бы модифицировать защищенный трафик, его нужно расшифровать... а для этого придется возиться с TLS
1
|
|||
|
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
|
||
| 26.03.2024, 13:13 | ||
|
0
|
||
|
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
|
||
| 26.03.2024, 18:04 [ТС] | ||
А вот выбор либо весь адаптер либо процесс - это вполне адекватно было бы как по мне.На счет сокетов процесса гуглил вчера до утра и так ничего и не нашел Какой-то один вариант вроде на стаковере нашел, но там че-то слишком костыльно и не надежно... Так что скорей всего придется городить прокси, третьего варианта, видимо, не существует под мои задачи.На счет NDIS, вчера еще почитал примеры и пару статей по реализации и возможностях, и пока что это лучший вариант из всего, мне пока что все его возможности не нужны, но если вдруг будут нужны то они есть, и это не может не радовать ![]() Сегодня попробую уже что-то покодить, вроде как план накидал можно попробовать начать.
0
|
||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||||
| 26.03.2024, 18:35 | ||||
1
|
||||
| 26.03.2024, 18:35 | |
|
Помогаю со студенческими работами здесь
20
Удаление файлов в каталоге после завершения определенного процесса Полная блокировка трафика кроме определенного IP Учёт трафика определённого процесса Перенаправление трафика определённого процесса Анализ сетевого трафика используя регрессионный анализ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|