Про уязвимости в Веб есть много статей, но хотелось бы обсудить, насколько безопаснее использовать бинарные протоколы. Например, я разрабатываю клиент-серверное приложение на .Net Framework, которое для обмена данными по сети использует собственный бинарный протокол. То есть пишет и читает из сокетов данные в массив и затем обрабатывает. Remoting не используется. Интересует, насколько реально найти уязвимость:
1) В собственно реализации приложения (разумеется, в SQL-запросы переменные не «вклеиваю», передаю через параметры). Я так понимаю, что атаки типа переполнения буфера уже не актуальны?
2) В .Net Framework 4.0
3) В ОС Windows 7, Windows 2008 R2
Переполнение буфера неактуально, так как в среде NET проверябтся типы данных и размеры, а вот если вы десериализуете данные из сети… тут уже возможны варианты.
Переполнения буфера всегда актуальны. А так же:
1. Целочисленные переполнения
2. Ошибки знаково-беззнаковых преобразований
3. Проблемы с аутентификацией и авторизацией, в т.ч. возможность подмены клиента или сервера, возможность релеинга данных авторизации, недостаточная или слабая аутентификация, повышение привилегий.
4. Передача незашифрованных данных или слабая криптография, replay-атаки
5. Различные DoS-атаки (исчерпание ресурсов одним запросом, флуд, установка большого числа параллельных соединений, установка «вечно живущих» соединений, блокировка ресурсов по запросу клиента и т.п.).
6. Доступ к потенциально опасным серверным или клиентским функциям (например перезаписать любой файл, выполнить код и т.п.)