Криптование потока сетевого интерфейса

Вопросы программного кода и архитектуры Linux

Модератор: Olej

kit_D
Писатель
Сообщения: 52
Зарегистрирован: 13 мар 2012, 13:14
Откуда: Харьков
Контактная информация:

Криптование потока сетевого интерфейса

Непрочитанное сообщение kit_D » 16 мар 2012, 19:04

Передо мной поставлена следующая задача: необходимо шифровать весь трафик исходящий из сетевого интерфейса, а с другой стороны, с принимающей, расшифровывать его. Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений, позволяя тем самым принять такие фреймы удаленной сетевой картой. Удаленный хост, получив такой закодированный фрейм, расшифровывает его и толкает вверх в сетевой стек.

Идеи принимаются.
Заранее спасибо.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение Olej » 16 мар 2012, 19:14

kit_D писал(а): Идеи принимаются.
Заранее спасибо.
Ну и темп :!: :-o : вопросы поступают гораздо чаще, чем к ним подобрать ответы удаётся... :roll:

Будем стараться.

bose
Писатель
Сообщения: 107
Зарегистрирован: 23 фев 2012, 14:41
Откуда: Киев
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение bose » 16 мар 2012, 19:35

Olej писал(а):
kit_D писал(а): Идеи принимаются.
Заранее спасибо.
Ну и темп :!: :-o : вопросы поступают гораздо чаще, чем к ним подобрать ответы удаётся... :roll:

Будем стараться.
Это называется - экстремальное программирование (Whole team, Onsite customer - Заказчик всегда рядом)... Ну соответсвенно и все его идеи :-D

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение Olej » 16 мар 2012, 19:51

kit_D писал(а):Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений, позволяя тем самым принять такие фреймы удаленной сетевой картой.
Что значит не только IP?
Не ARP же вы собираетесь шифровать?
ICMP, IGMP ... это всё, в конечном итоге, IP. А что у вас там может ходить "не только IP".

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение Olej » 16 мар 2012, 20:01

kit_D писал(а):Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений,
Я прошу прощения за назойливость (я уже говорил, но вы не ответили), я в сторону фильтра-перехватчика skb в виде протокольной функции, на struct packet_type и функции из группы dev_add_pack() (всё из <linux/netdevice.h>) - вы не смотрели?
То, что делалось в примере, пусть и очень примитивном:
http://rus-linux.net/MyLDP/BOOKS/Moduli ... 05-14.html
- только не регистрировать интерфейс, а найти по имени wlan0, для него struct net_device, ... над ним и чудить,
- в фильтр протокола вы получите, в том числе, и struct net_device : ваш - не ваш...

kit_D
Писатель
Сообщения: 52
Зарегистрирован: 13 мар 2012, 13:14
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение kit_D » 17 мар 2012, 22:22

Я прошу прощения за назойливость (я уже говорил, но вы не ответили), я в сторону фильтра-перехватчика skb в виде протокольной функции, на struct packet_type и функции из группы dev_add_pack() (всё из <linux/netdevice.h>) - вы не смотрели?
Смотрел, мне показалось, что это регистрация именно "стандартных" обработчиков для обработки IP/IPv4/IPv6, IPX, ICMP, RIP, OSPF, ARP.

Как бы то ни было - направление раскопок меняется. Как оказалось, после разговора с заказчиком, надо шифровать/расшифровывать совсем на другом уровне. На уровне MPDU фрагментов 802.11 МАС уровня. Это тот уровень на котором производиться шифрование в рамках WPA, WPA2...
При моем случае для шифрования надо будет использовать AES (Advanced Encryption Standard) протоколом, с увеличенной длиной ключа. Протокол реализован в клиентском коде, который лицензирован по полной. Поэтому именно этот "клиентский" протокол и надо внедрить для шифрования, хотя его аналог возможно уже и присутствует в коде ядра.

Но суть не в протоколе, а в том как внедрить этот алгоритм. И первым делом надо разобраться куда его внедрить. Краем глаза я когда-то смотрел в сторону nl80211/cfg80211/mac80211 фреймврока, но забросил, так как мне это показалось очень сложным в тот момент. Теперь похоже придется разбираться.

Возможно у кого-то есть подобный опыт и он может поделиться советом?

kit_D
Писатель
Сообщения: 52
Зарегистрирован: 13 мар 2012, 13:14
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение kit_D » 18 мар 2012, 22:57

Что значит не только IP?
Не ARP же вы собираетесь шифровать?
ICMP, IGMP ... это всё, в конечном итоге, IP. А что у вас там может ходить "не только IP".
Да, надо шифровать весь трафик, не на IP уровне, на уровне WiFi фрагментов - MPDU, так как это делается в WEP, WPA, WPA2

kit_D
Писатель
Сообщения: 52
Зарегистрирован: 13 мар 2012, 13:14
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение kit_D » 19 мар 2012, 17:05

Покопавшись в коде нашел место, где надо копать - это /net/mac80211
В частности, /net/mac80211/aes_ccm.h содержит функции шифрования "frame body" в MPDU:
- ieee80211_aes_key_setup_encrypt
- ieee80211_aes_ccm_encrypt
- ieee80211_aes_ccm_decrypt
- ieee80211_aes_key_free

В моем же случае, так как базовая сеть открытая и без шифрования, то мне эти функции непосредственно не нужны, но вот то место откуда они вызываются - это то что мне надо.
В результате, находимЖ

ieee80211_xmit() - /net/mac80211/tx.c
|
ieee80211_tx() - net/mac80211/tx.c
|
invoke_tx_handlers() - net/mac80211/tx.c
|
ieee80211_tx_h_encrypt() - net/mac80211/tx.c
|
ieee80211_crypto_ccmp_encrypt() - net/mac80211/wpa.c
|
ieee80211_crypto_ccmp_encrypt() - /net/mac80211/aes_ccm.с

Это то все хорошо, но как же встрять туда со своим модулем? Пока не понятно.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение Olej » 19 мар 2012, 17:28

kit_D писал(а):Это то все хорошо, но как же встрять туда со своим модулем? Пока не понятно.
Что значит "как встрять"?
Вот они все у вас, в динамике:

Код: Выделить всё

[olej@notebook net]$ cat /proc/kallsyms | grep ' t ' | grep ' ieee80211'
f8fbcfb7 t ieee80211_get_tx_rate	[iwl3945]
f8e68e4c t ieee80211_exit	[mac80211]
f8e4d3c1 t ieee80211_restart_work	[mac80211]
f8e4dc0b t ieee80211_reconfig_filter	[mac80211]
f8e4d7b1 t ieee80211_tasklet_handler	[mac80211]
f8e4ec93 t ieee80211_wep_add_iv	[mac80211]
f8e4fe6c t ieee80211_rx_bss_free	[mac80211]
...
Или вы их подменить хотите?

kit_D
Писатель
Сообщения: 52
Зарегистрирован: 13 мар 2012, 13:14
Откуда: Харьков
Контактная информация:

Re: Криптование потока сетевого интерфейса

Непрочитанное сообщение kit_D » 19 мар 2012, 17:58

Ну это на PC, а вот на таргетах, на мобильном девайсе, скорее всего будут вкомпилированы :-(

Ответить

Вернуться в «Linux изнутри»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей