Криптование потока сетевого интерфейса
Модератор: Olej
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Криптование потока сетевого интерфейса
Передо мной поставлена следующая задача: необходимо шифровать весь трафик исходящий из сетевого интерфейса, а с другой стороны, с принимающей, расшифровывать его. Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений, позволяя тем самым принять такие фреймы удаленной сетевой картой. Удаленный хост, получив такой закодированный фрейм, расшифровывает его и толкает вверх в сетевой стек.
Идеи принимаются.
Заранее спасибо.
Идеи принимаются.
Заранее спасибо.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Ну и темп : вопросы поступают гораздо чаще, чем к ним подобрать ответы удаётся...kit_D писал(а): Идеи принимаются.
Заранее спасибо.
Будем стараться.
-
- Писатель
- Сообщения: 107
- Зарегистрирован: 23 фев 2012, 14:41
- Откуда: Киев
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Это называется - экстремальное программирование (Whole team, Onsite customer - Заказчик всегда рядом)... Ну соответсвенно и все его идеиOlej писал(а):Ну и темп : вопросы поступают гораздо чаще, чем к ним подобрать ответы удаётся...kit_D писал(а): Идеи принимаются.
Заранее спасибо.
Будем стараться.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Что значит не только IP?kit_D писал(а):Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений, позволяя тем самым принять такие фреймы удаленной сетевой картой.
Не ARP же вы собираетесь шифровать?
ICMP, IGMP ... это всё, в конечном итоге, IP. А что у вас там может ходить "не только IP".
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Я прошу прощения за назойливость (я уже говорил, но вы не ответили), я в сторону фильтра-перехватчика skb в виде протокольной функции, на struct packet_type и функции из группы dev_add_pack() (всё из <linux/netdevice.h>) - вы не смотрели?kit_D писал(а):Суть в том, что надо шифровать именно все фреймы, не только IP, отдавать в сеть, оставляя L2 заголовок (МАК адреса в частности) без изменений,
То, что делалось в примере, пусть и очень примитивном:
http://rus-linux.net/MyLDP/BOOKS/Moduli ... 05-14.html
- только не регистрировать интерфейс, а найти по имени wlan0, для него struct net_device, ... над ним и чудить,
- в фильтр протокола вы получите, в том числе, и struct net_device : ваш - не ваш...
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Смотрел, мне показалось, что это регистрация именно "стандартных" обработчиков для обработки IP/IPv4/IPv6, IPX, ICMP, RIP, OSPF, ARP.Я прошу прощения за назойливость (я уже говорил, но вы не ответили), я в сторону фильтра-перехватчика skb в виде протокольной функции, на struct packet_type и функции из группы dev_add_pack() (всё из <linux/netdevice.h>) - вы не смотрели?
Как бы то ни было - направление раскопок меняется. Как оказалось, после разговора с заказчиком, надо шифровать/расшифровывать совсем на другом уровне. На уровне MPDU фрагментов 802.11 МАС уровня. Это тот уровень на котором производиться шифрование в рамках WPA, WPA2...
При моем случае для шифрования надо будет использовать AES (Advanced Encryption Standard) протоколом, с увеличенной длиной ключа. Протокол реализован в клиентском коде, который лицензирован по полной. Поэтому именно этот "клиентский" протокол и надо внедрить для шифрования, хотя его аналог возможно уже и присутствует в коде ядра.
Но суть не в протоколе, а в том как внедрить этот алгоритм. И первым делом надо разобраться куда его внедрить. Краем глаза я когда-то смотрел в сторону nl80211/cfg80211/mac80211 фреймврока, но забросил, так как мне это показалось очень сложным в тот момент. Теперь похоже придется разбираться.
Возможно у кого-то есть подобный опыт и он может поделиться советом?
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Да, надо шифровать весь трафик, не на IP уровне, на уровне WiFi фрагментов - MPDU, так как это делается в WEP, WPA, WPA2Что значит не только IP?
Не ARP же вы собираетесь шифровать?
ICMP, IGMP ... это всё, в конечном итоге, IP. А что у вас там может ходить "не только IP".
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Покопавшись в коде нашел место, где надо копать - это /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.с
Это то все хорошо, но как же встрять туда со своим модулем? Пока не понятно.
В частности, /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: Криптование потока сетевого интерфейса
Что значит "как встрять"?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]
...
-
- Писатель
- Сообщения: 52
- Зарегистрирован: 13 мар 2012, 13:14
- Откуда: Харьков
- Контактная информация:
Re: Криптование потока сетевого интерфейса
Ну это на PC, а вот на таргетах, на мобильном девайсе, скорее всего будут вкомпилированы
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость