Шифрование между сетевым и канальным уровнем

Тема в разделе "WASM.NETWORKS", создана пользователем afybc, 4 апр 2008.

  1. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    В общем хочу сделать сабж. Для этого мне нужно написать драйвер, который бы перехватывал пакеты от сетевого уровня, шифравал их и пихал в кадры канального уровня. Тут мне надо знать какие функции перехватывать, а эти функции наверняка недокументированы. Может у кого есть опыт в подобном или инфа?
     
  2. wvlg

    wvlg New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2007
    Сообщения:
    44
    Между каким канальным и каким сетевым уровнями? Для каких целей это требуется???? И как, вообще, это представляется тебе???? И кстати, зачастую, канальный и сетевой в паре работают (имеется ввиду нет четкого разделения между уровнями). Я так понял речь идет о шифровании между первым и вторым уровнями модели OSI(ну, если физический считать нулевым)?
    Хотя такой вопрос:
    "Шифровал их и пихал в пакеты канального уровня", а затем тут же отправлял??? Если так, то речь идет о простом шифровании сетевого трафика, на сетевом уровне. А шифровать между уровнями значит:
    Взять пакет сетевого уровня (например IP-протокола, любой IP-пакет), зашифровать его (правда не совсем ясно что именно там шифровать, но ладно зашифруем все). Что дальше-то с ним делать? В сетях TCP\IP такой пакет послать просто некуда, так как там зашифрован ИП-адрес получателя (мы зашифровали все). Если же есть желание отправить его по mac-адресу, тогда получиться, что мы не пользуемся протоколом сетевого уровня, тогда завчем он нам нужен и зачем его шифровать? В общем вопросов миллион.
     
  3. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Видимо я не совсем корректно задал вопрос и поэтому на него долго никто не отвечал =)
    Меня это интересует в целях самообразования.
    Рассмотрим Ethernet сеть на хабах. В такой сети хосты видят друг-друга. Допустим мне надо переслать конфиденциальные данные другому хосту. А данные могут получить все остальные хосты (тупо проснифить). Чтобы избежать этого, можно ли сделать что-то на подобие такого?:
    1. Взять данные из фрейма канального уровня и зашифровать (да хоть xor'ом) их.
    2. Переслать хосту.
    3. Хост по сигнатуре определяет, что данные зашифрованы, расшифровывает и передаёт их вышестоящему уровню.

    И хотелось бы, чтобы всё это работало прозрачно для приложений. Вообще реально ли это? Или же полный бред? =)
     
  4. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    afybc
    если хаб не дешовка , то он со свечой :)
    можеш в сторону VPN посмотреть.
     
  5. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    afybc
    а зачем шифровать на сетевом/канальном уровне? проще будет зашифровать в прикладном. и пусть летит мессага всем. зачем шифровать хидеры представительного, сеансового и транспортного уровней?
     
  6. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Да это я просто пример привёл =) Конечно легче всего было бы поставить свитч

    Потому что интересно сделать именно так =)

    Ладно Бог с ним с шифрованием. Приведу другой пример.
    Хосту А нужно послать IP пакет хосту Б. Оба хоста находятся в одной подсети. Весь трафик идет через шлюз. Трафик между хостами этой подсети заблокирован. Т. е. на шлюзе фильтр проверяет значение поле Type Ethernet фрейма и пропускает или не пропускает фреймы.
    Итак, вариант №1:
    Хост А вложил IP пакет, указал SMAC, DMAC(шлюза) и соответствующее значение Type. Фрейм пришел шлюзу. Фильтр проанализировал поле Type и не пропустил кадр. В итоге хост В не получил данные.
    Вариант №2:
    Хост B решил узнать IP-адрес А. При этом, MAC A он знал. В фрейме он указал SMAC(B), DMAC(A), Data(ARP-request), Type(ARP) и послал его. Фильтр проанализировал поле Type и пропустил кадр. В итоге хост A получил ARP-запрос.

    Идея обхода фильтрации:
    Хост В указал SMAC(B), DMAC(A), Data(ARP-request), Type(ARP). В поле FramePadding он засунул IP пакет целиком (влезает приличное количество байт) и посылает шлюзу. Шлюз смотрит, что Type=ARP и пропускает это фрейм. Хост А получает его и извлекает IP пакет.

    Собственно, как вам такая бредовая идея? И собственно как это можно реализовать?
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    вообще говоря, если два хоста находятся в одной подсети, то данные на шлюз не пойдут
    таблица маршрутизации IP в любом случае будет содержать элемент, описывающий подсеть
    в случае, если целевой адрес принадлежит подсети, пакет пойдет по этому адресу напрямую (возможно после получения MAC адреса целевого хоста через ARP)
    libpcap на обоих хостах
    главное, чтобы фиктивный запрос ARP не обрабатывался сетевой подсистемой ОС как валидный
     
  8. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Э, ненадо никакие функции перехватывать. Устанавливаете драйвер NDIS-фильтр над сетевой карточкой и все входящие IP (допустим) пакеты шифруете (их полезный контент) и посылаете получившееся безобразие на сетевую карту.
     
  9. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Так же - поверх сетевых карт на А и B прописывается NDIS-фильтр, который перелопачивает все поступающие сверху ethernet кадры с IP пакетами внутри в arpшные: переделывает соответствующие поля кадра на те которые вы задумали и шлет на сетевую карту.

    Ну и обратно: поступающие с сетевой карты arpшные фреймы переделываются в айпишные.

    Только вы уверены что ваш шлюз не фильтрует arp запросы?

    Кроме того, если я правильно понимаю, шлюз к arpшным запрос-ответам неравнодушен, в том смысле что он позволяет себе менять некоторые поля этих пакетов, так что м.б. ваш IP пакет как факультативная нагрузка во фрейме срежется при обработке этого запроса на шлюзе...
     
  10. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    2:Novi4ek
    Уже проверил, шлюз ничего не меняет. Получилось таким образом фильм переслать =)
    В программировании драйверов я не силён. А с помощью NDIS можно реализовать всё это так, чтобы приложения вообще об этом ничего не знали? Если, то как примерно это реализовать?
     
  11. Novi4ek

    Novi4ek New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    317
    Можно! Как - написал впосте 9. Нужен ндис-фильтр, который весь IP-трафик маскирует под ARP трафик.

    Как писать НДИС-фильтры по-моему был цикл статей (по сути просто статья зачем-то разрезанная на несколько частей) на сайте http://shelek.com/. Зашел сейчас на этот сайт - там какие-то странности с хостингом не знаю удастся ли теперь где-то найти эти статьи (Вот нашел на вебархиве зеркало http://web.archive.org/web/20070809113745/club.shelek.com/view.php?id=19). "Цикл" назывался "как писать драйверы". Я честно признаюсь не читал его, но просто наткнулся когда сам занимался не-фильтр драйвером - минипортом своей сетевой карты. Но вроде там вконце-концов у него чего-то получилось написать. Вообще это совсем несложно. Из всех возможных ндис драйверов самый простой. Примеры ндис-филтров есть в DDK, и наверняка есть в каких-то хакерских статьях, впрочем с темой вплне реально разобраться с одним лишь DDK.
     
  12. afybc

    afybc New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2006
    Сообщения:
    73
    Спасибо большое, буду разбираться! А сайт переехал shelek.ru