реклама на сайте
подробности

 
 
> Защита сервера для GPRS приложений, Как практически реализовать?
MKdemiurg
сообщение Jun 29 2011, 07:37
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Написал собственный TCPшный сервак для своих устройств телеметрии. Создал протокол, как первую меру по защите от несанкционированного использования. Теперь встал вопрос: А КАК защитить его от "левых" подключений и пустых пакетов( DoS атак) ? От пустых пакетов ввёл ограничение на буффер. Когда буффер подключения забит более чем на 100 байт,а идентификаторов протокола не обнаружено , то клиент обрубается. От подключений хотел ввести таймауты. Но тут меня постиг fail. Двум устройствам, находящихся на тестировании , в тчении нескольких суток назначаются одни и теже адреса типа xxx.xxx.62.121 xxx.xxx.62.120 xxx.xxx.62.122. При этом например адрес первого устройства, уже отключившегося, даётся второму. Но адрес этот "забанен" на 5-10 минут. Столкнулся вот с такой особенностью GPRS - поэтому пишу здесь.
Кто реализовывал сам такие дела подскажите - может забить на эти защиты? Или както по другому их реализовать ? Неохото потом перегружать сервак по 10 раз на дню.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
MKdemiurg
сообщение Jun 30 2011, 11:27
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 624
Регистрация: 15-06-10
Из: Россия
Пользователь №: 57 939



Цитата(=F8= @ Jun 30 2011, 15:01) *
Успеете никакого кардинального различия там нет. Зато отладка на arm точней говоря на cortex просто ная-ням. Брекпоинты на изменение памяти, real-tim логи прерываний и пр. вкусности заметно упрощают жизнь.


Вообще да надо попробвать, если ещё отладочную плату купить... А вы можете посоветовать ARM с двумя-тремя uart и встроенными RTC ?


Цитата
IP адрес от ведь не часто меняется, может лучше просто последний бит АЦП? Если несколько случайных бит прохешировать с обычным rand() может неплохо получится. Можете в хеш текущее значение какого нибудь таймера добавить.


Ну была идея сделать так. Беру блок данных(32байта) в начало которого дописываю 1-2 байта(начальный вектор) от rand() и шифрую 8 байтным ключом по RC5. 4байта ключа - закрытый ключ (передаётся по закрытому каналу или просто константа) и ещё 4 байта - текущий динамический IP. На стороне сервера - IP известен - поэтому передавать его не надо. Начальный вектор дописываю в начало или конец или прячу внутри шифрованного блока. А подключиться с другого айпи, используя шифрованную посылку ЛОГа, не получиться. Даже если айпи один и тотже - посылки будут всёравно каждый раз разные. Или где то в этом есть подвох?

Сообщение отредактировал MKdemiurg - Jun 30 2011, 11:28
Go to the top of the page
 
+Quote Post
=F8=
сообщение Jun 30 2011, 12:57
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 567
Регистрация: 7-07-07
Из: Донецк
Пользователь №: 28 954



Цитата(MKdemiurg @ Jun 30 2011, 14:27) *
Вообще да надо попробвать, если ещё отладочную плату купить... А вы можете посоветовать ARM с двумя-тремя uart и встроенными RTC ?

LPC17xx(на ссылку ругается) STMF32 выбирайте. А лучше спросите в конфе по arm. Может чего поинтересней посоветуют.


Цитата
Ну была идея сделать так. Беру блок данных(32байта) в начало которого дописываю 1-2 байта(начальный вектор) от rand() и шифрую 8 байтным ключом по RC5. 4байта ключа - закрытый ключ (передаётся по закрытому каналу или просто константа) и ещё 4 байта - текущий динамический IP. На стороне сервера - IP известен - поэтому передавать его не надо. Начальный вектор дописываю в начало или конец или прячу внутри шифрованного блока. А подключиться с другого айпи, используя шифрованную посылку ЛОГа, не получиться. Даже если айпи один и тотже - посылки будут всёравно каждый раз разные. Или где то в этом есть подвох?


Я бы сделал так.
1. Серверу и клиенту известен некий постоянный секрет(ключ).
2. После соединения с сервером клиент передает серверу свой идентификатор.
3. Получив идентификатор сервер выбирает соответствующий ему секрет(ключ). После чего генерирует случайное число и передает его клиенту.
4. На основе этого случайного числа и известного обоим секрета клиент и сервер с помощью хеш алгоритма генерируют сеансовый ключ блочного шифра.
5. С помощью сеансового ключа клиент шифрует полученное от сервера число и передает его серверу.
6. Сервер проверяет полученное число. Таким образом происходит аутоидентификация клиента.
PS Я вообще-то не большой специалист в криптографии. Если хотите сделать что-то свое почитайте "Прикладная криптография" Брюса Шнайдера.

PSS И не забывайте при шифровании больших блоков добавлять к ним хотя-бы CRC и использовать CBC
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MKdemiurg   Защита сервера для GPRS приложений   Jun 29 2011, 07:37
- - Integral   а фаервол по защите от атак разве не помогает? ИР ...   Jun 29 2011, 09:27
- - MKdemiurg   Ну собственно что будет ловить фаервол? Сервер за ...   Jun 29 2011, 10:14
- - Integral   ну у нас на ПК любие хорошие серверы берут уже гот...   Jun 29 2011, 11:05
- - MKdemiurg   Ну я не с нуля его пишу, использую Qt библиотеку ...   Jun 29 2011, 11:16
- - Integral   ну я бы сделал так... во первых ограничить можно ч...   Jun 29 2011, 11:34
|- - follow_me   Цитата(Integral @ Jun 29 2011, 13:34) при...   Jun 29 2011, 12:13
- - MKdemiurg   Наверно последую вашему совету и ограничу размер п...   Jun 29 2011, 12:00
- - AlexandrY   Цитата(MKdemiurg @ Jun 29 2011, 10:37) Кт...   Jun 29 2011, 12:17
|- - follow_me   Цитата(AlexandrY @ Jun 29 2011, 14:17) Ка...   Jun 29 2011, 12:28
|- - AlexandrY   Цитата(follow_me @ Jun 29 2011, 15:28) ss...   Jun 29 2011, 13:04
- - MKdemiurg   Цитата(AlexandrY @ Jun 29 2011, 15:17) Ка...   Jun 29 2011, 12:45
- - =F8=   ИНХО защита от DoS это как-бы не задача вашего сер...   Jun 29 2011, 12:53
- - Integral   Значит задача переходит в создание собственного фа...   Jun 29 2011, 12:55
- - follow_me   тут посмотрел, по перебирал варианты - нет защиты ...   Jun 29 2011, 12:56
- - MKdemiurg   Цитата(AlexandrY @ Jun 29 2011, 16:04) Та...   Jun 29 2011, 16:02
|- - follow_me   Цитата(MKdemiurg @ Jun 29 2011, 18:02) Де...   Jun 29 2011, 17:59
|- - =F8=   Цитата(MKdemiurg @ Jun 29 2011, 20:02) Де...   Jun 29 2011, 18:22
|- - AlexandrY   Цитата(=F8= @ Jun 29 2011, 21:22) На стор...   Jun 29 2011, 19:34
|- - =F8=   Цитата(AlexandrY @ Jun 29 2011, 22:34) Хо...   Jun 30 2011, 09:19
||- - AlexandrY   Цитата(=F8= @ Jun 30 2011, 12:19) Если мн...   Jun 30 2011, 09:55
||- - =F8=   Цитата(AlexandrY @ Jun 30 2011, 12:55) С ...   Jun 30 2011, 10:42
|- - Telit   Цитата(AlexandrY @ Jun 29 2011, 23:34) Хо...   Jun 30 2011, 10:48
- - MKdemiurg   Цитата(follow_me @ Jun 29 2011, 20:59) ве...   Jun 29 2011, 19:45
- - follow_me   ну так вернемся к основному вопросу - каким образо...   Jun 29 2011, 19:52
|- - AlexandrY   Цитата(follow_me @ Jun 29 2011, 22:52) ну...   Jun 30 2011, 05:12
- - MKdemiurg   Цитата(=F8= @ Jun 30 2011, 13:19) А, что ...   Jun 30 2011, 10:20
|- - =F8=   Цитата(MKdemiurg @ Jun 30 2011, 13:20) Ме...   Jun 30 2011, 11:01
- - ArtemKAD   ЦитатаБрекпоинты на изменение памяти, real-tim лог...   Jun 30 2011, 13:11
- - andrewlekar   LPC17xx встроенный RTC имеет глючный. Всё равно вн...   Jul 1 2011, 05:10
|- - =F8=   Цитата(andrewlekar @ Jul 1 2011, 09:10) L...   Jul 1 2011, 08:51
- - MKdemiurg   Цитата(andrewlekar @ Jul 1 2011, 09:10) L...   Jul 1 2011, 06:04
- - andrewlekar   ЦитатаА вот не разу не глючный, а очень даже прави...   Jul 1 2011, 09:17
|- - =F8=   Цитата(andrewlekar @ Jul 1 2011, 12:17) Я...   Jul 1 2011, 10:24
- - MKdemiurg   Такой вопросец напишу в тему, всегда ли адрес полу...   Jul 1 2011, 10:57
- - =F8=   Цитата(MKdemiurg @ Jul 1 2011, 13:57) Так...   Jul 1 2011, 12:17


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016