Любая версия Комплексная защита от атак (OOG и другое). Защита сервера от взлома C защита от

Большинство программ должны взаимодействовать с пользователем посредством ввода определённых данных, будь то ФИО, рост, вес для внесния в базу данных или геометрические размеры какого-то объекта, для которого нужно что-то рассчитать. Все эти данные вводит пользователь - человек, а значит в ответ может придти всё что угодно. Что выдаст программа, если вместо требуемого ей возраста пользователь напишет его словом? Скорее всего программа аварийно завершится или зависнет, но только не в том случае, если в ней предусмотрена "защита от дурака".

Почему программа может завершиться или зависнуть? Программа попытается перевести набор символов в число, что сделать не удастся, а значит дальнейшая работа приложения не определена. Поэтому очень важно организовывать структуру программы так, чтобы при вводе неожиданных для программы данных (некорректных с точки зрения требуемого формата: нужно число, а вводится слово), приложение не "падало", а сообщало пользователю о том, что произошла ошибка и предлагало повторить ввод. Это и есть "защита от дурака".

Реализация защиты от дурака на языке C

Чтобы реализовать хорошую защиту от дурака для ввода различных числовых (int, double...) данных, необходимо считывать не сами числа, а всю вводимую строку и уже потом анализировать ввод. В языке C есть очень хорошая функция sscanf(const char *, const char *, args) , которая работает аналогично функции scanf(const char *, args) , возвращая количество успешно считанных аргументов, только чтение данных происходит не из стандартного потока ввода, а из переданной ей первым аргументом строки.

Рассмотрим несколько примеров функций, которые реализуют проверку на дурака, используя функцию sscanf .

Ввод целого числа с проверкой на некорректный ввод

int get_integer(const char *msg) { char answer; // строка для чтения int n; // итоговое целое число printf("%s", msg); // выводим приглашение ко вводу fgets(answer, sizeof(answer), stdin); // считываем строку // пока не будет считано целое число while (sscanf(answer, "%d", &n) != 1) { printf("Incorrect input. Try again: "); // выводим сообщение об ошибке fgets(answer, sizeof(answer), stdin); // и заново считываем строку } return n; // возвращаем корректное целое число }

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

Ввод вещественного числа с проверкой на некорректный ввод

double get_double(const char *msg) { char answer; // строка для чтения double x; // итоговое вещественное число printf("%s", msg); // выводим приглашение ко вводу fgets(answer, sizeof(answer), stdin); // считываем строку // пока не будет считано вещественное число while (sscanf(answer, "%lf", &x) != 1) { printf("Incorrect input. Try again: "); // выводим сообщение об ошибке fgets(answer, sizeof(answer), stdin); // и заново считываем строку } return x; // воозвращаем корректное вещественное число }

Ввод точки на координатной плоскости (структура с двумя вещественными полями)

// описание структуры даных typedef struct point_t { double x; // координата x double y; // координата y } point_t; point_t get_point(const char *msg) { char answer; // строка для чтения point_t point; // итоговая точка printf("%s", msg); // выводим приглашение ко вводу fgets(answer, sizeof(answer), stdin); // считываем строку // пока не будут считаны обе координаты точки while (sscanf(answer, "(%lf,%lf)", &point.x, &point.y) != 2) { printf("Incorrect input. Try again: "); // выводим сообщение об ошибке fgets(answer, sizeof(answer), stdin); // и заново считываем строку } return point; // возвращаем корректную точку }

Как видно из примеров, особенность возвращения функцией sscanf числа считанных аргументов позволяет контролировать корректность введённых данных в указанном формате, а считывание всей строки защищает от того, что в потоке ввода останутся символы пробела или переноса строки "\n" , которые уж очень часто заставляют потратить на поиск ошибки ни один час или даже день.

Всем здравствуйте от команды UNITWAY PW. Этой темой мы хотели бы продемонстрировать отсутствие нечестной конкуренции с нашей стороны и черной, некрасивой, лживой конкуренцией со стороны проекта NewDestiny.

Здесь публикуется список решений от атак, которые когда-либо использовали администраторы NewDestiny loko9988, TyrikMan (Вчерашняя атака OOG была с IP адреса Йошкар Ола), Killer_Pooh (Так же фиксировалась атака с города Волжский). Помимо атак на нас, до нас дошла информация об атаке на ряд других серверов, которое связали с нашим открытием. Публикацией ряда фиксов от этих атак мы демонстрируем нашу непричастность к атакам на кого-либо, не смотря на ярко озабоченную позицию администратора Zzebra PW (mirthost) по нашему проекту. Мы совершенно не держим зла на всех, кто повелся на желтую статью о нас, у каждого своя голова на плечах.


И это только часть их аккаунтов.

Одной из причин публикации этой темы стали слухи, которые до нас дошли. Суть этих слухов в том, что loko9988 атакует сервера не только из-за конкуренции, но и для того, чтобы предлагать этим серверам защиту через него.

Защита от OOG атак на основе iptables:
Первым делом мы создаем скрипт-правила фаерволла, назвать можете как пожелаете.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -j LOG --log-prefix "PW"

Нажмите, чтобы раскрыть...

Этим правилом мы записываем все игровые пакеты с порта 29000 размером от 500 до 65535 байтов.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length 500:65535 -m recent --name packets --update --seconds 1 --hitcount 100 -j REJECT

Нажмите, чтобы раскрыть...

Этими правилами мы блокируем пользователя, если сервер получил от него больше 100 пакетов размером 500 - 65535 байт за 1 секунду на 29000 (игровой) порт.

iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m length --length SIZE -m recent --name packet1 --update --seconds 15 --hitcount 3 -j REJECT

Нажмите, чтобы раскрыть...

Этими правилами мы блокируем пользователей, которые отправили больше 3-х пакетов за 15 секунд на порт 29000. SIZE - размер пакета в байтах.
Как отследить размер пакета в байтах?
После первого правила, где мы логируем все игровые пакеты, Вы сможете увидеть их в файле /var/log/syslog или командой dmesg в консоли сервера.
Когда идет атака в syslog будет множество одинаковых пакетов за короткое время.

PW IN=ipip1 OUT= MAC= SRC=USER IP ADRESS DST=*.*.*.* LEN=547 TOS=0x00 PREC=0x00 TTL=241 ID=13328 DF PROTO=TCP SPT=22511 DPT=63947 WINDOW=254 RES=0x00 ACK PSH URGP=0

Нажмите, чтобы раскрыть...

В примере выше - размером пакета является "LEN=547".

С OOG защитой разобрались. Перейдем к другим способам конкуренции NewDestiny.
Брут аккаунтов. Здесь все совершенно просто:
#block brute force login

iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m recent --name brute --set
iptables -A INPUT -p tcp -m multiport --dports 29000 -m conntrack --ctstate NEW -m recent --name brute --update --seconds 30 --hitcount 3 -j REJECT

Нажмите, чтобы раскрыть...

Этим правилом мы блокируем IP пользователя на 30 секунд, если он сделал больше 3-х запросов на подключение к порту 29000.
  • Делайте полное ограничение по портам, кроме игрового через iptables.
  • Делайте подключение к серверу по ssh key (ключи) с кодовым словом.
  • Используйте последние версии mysql, apache2 и других немаловажных пакетов.
  • После нагрузки через OOG используйте logrotate, иначе при резервном копировании логов оперативная память Вашего сервера будет полностью использована. Это может стать последствием для взлома.
  • Не используйте постороннее ПО на игровом сервере.
  • Используйте нестандартный фильтр паролей игроков. За несколько часов на нашей авторизации было свыше 50.000 невалидных попыток авторизаций. У 30% наших игроков совпадали логины из этих пар логин-пароль.
Мы предпочитаем честное ведение конкуренции, у нас нет времени и лишних финансов на атаки. Не связывайтесь с этими людьми, это может плохо кончиться.

Невозможно защитить сервер от внешнего доступа раз и навсегда, ведь каждый день обнаруживаются новые уязвимости и появляются новые способы взлома сервера. О защите серверов от несанкционированного доступа мы и расскажем в этой статье.

Сервера любой компании рано или поздно могут стать мишенью для взлома или вирусной атаки. Обычно результатом такой атаки становится потеря данных, репутационный или финансовый ущерб, поэтому вопросам обеспечения безопасности серверов стоит уделить внимание в первую очередь.

Следует понимать, что защита от взлома серверов – это комплекс мер, в том числе подразумевающий постоянный мониторинг работы сервера и работу по совершенствованию защиты. Невозможно защитить сервер от внешнего доступа раз и навсегда, ведь каждый день обнаруживаются новые уязвимости и появляются новые способы взлома сервера.

О защите серверов от несанкционированного доступа мы и расскажем в этой статье.

Способы и методы защиты серверов от несанкционированного доступа

Физическая защита сервера

Физическая защита. Желательно, чтобы сервер находился в защищенном ЦОДе, закрытом и охраняемом помещении, у посторонних не должно быть доступа к серверу.

Установите аутентификацию по SSH

При настройке доступа к серверу используйте аутентификацию по ключам SSH вместо пароля, поскольку такие ключи гораздо сложнее, а иногда и попросту невозможно взломать с помощью перебора вариантов.

Если же считаете, что вам все-таки требуется пароль, обязательно ограничьте число попыток его ввода.

Обратите внимание, если при входе вы видите подобное сообщение:

Last failed login: Tue Sep 28 12:42:35 MSK 2017 from 52.15.194.10 on ssh:notty
There were 8243 failed login attempts since the last successful login.

Оно может свидетельствовать, что ваш сервер пытались взломать. В таком случае для настройки безопасности сервера смените порт SSH, ограничьте список IP, с которых возможен доступ к серверу или установите ПО, автоматически блокирующее чрезмерно частую и подозрительную активность.

Регулярно устанавливайте последние обновления

Для обеспечения защиты сервера вовремя устанавливайте последние патчи и обновления серверного ПО, которое используете – операционной системы, гипервизора, сервера баз данных.

Желательно проверять наличие новых патчей, обновлений и сообщения об обнаруженных ошибках / уязвимостях каждый день, чтобы предотвратить атаки, использующие уязвимости нулевого дня. Для этого подпишитесь на новости от компании-разработчика ПО, следите за ее страницами в соцсетях.

Защищайте пароли

До сих пор одним их самых распространенных способов получить доступ к серверу является взлом пароля сервера. Поэтому придерживайтесь общеизвестных, но тем не менее актуальных рекомендаций, чтобы не оставить сервер без защиты:

  • не используйте пароли, которые легко подобрать, такие как название компании;
  • если вы до сих пор используете дефолтный пароль для консоли администратора – немедленно измените его;
  • пароли на разные сервисы должны быть разными;
  • если вам необходимо передать пароль кому-либо, никогда не отправляйте IP-адрес, логин и пароль в одном и том же письме или сообщении в мессенджере;
  • для входа в учетную запись администратора можно установить двухэтапную аутентификацию.

Файрвол

  • Убедитесь, что на сервере есть , он настроен и он работает все время.
  • Защищайте и входящий, и исходящий трафик.
  • Следите за тем, какие порты открыты и для каких целей, не открывайте ничего лишнего, чтобы снизить число вероятных уязвимых мест для взлома сервера.

В частности, файрвол очень помогает в защите сервера от ddos атак, т.к. можно быстро создавать запрещающие правила файрвола и вносить в них IP-адреса, с которых идет атака, или блокировать доступ к определенным приложениям, по определенным протоколам.

Мониторинг и обнаружение вторжений

  • Ограничьте ПО и службы, работающие у вас на сервере. Периодически проверяйте все, что у вас запущено, и если обнаружатся какие-то незнакомые вам процессы, удаляйте их немедленно и начинайте проверку на вирусы.
  • Периодически проверяйте наличие следов взлома. О взломе могут свидетельствовать новые учетные записи пользователей, которые вы не создавали, перемещение или удаление файла /etc/syslog.conf , удаленные файлы /etc/shadow и /etc/passwrd .
  • Мониторьте работу вашего сервера, следите за его обычной скоростью и пропускной способностью, так вы сможете заметить отклонения, например, когда нагрузка на сервер стала значительно больше обычного.

Использование VPN и шифрования SSL/TLS

Если необходим удаленный доступ к серверу, он должен быть разрешен только с определенных IP-адресов и происходить по VPN.

Следующим этапом обеспечения безопасности может быть настройка SSL, которая позволит не только шифровать данные, но и проверять идентичность других участников сетевой инфраструктуры, выдавая им соответствующие сертификаты.

Проверка безопасности сервера

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

Что еще грозит серверам кроме взлома

Сервер может выйти из строя по ряду других причин, кроме взлома. Например, это может быть заражение вредоносным ПО или просто физическая поломка какого-либо из компонентов.

Поэтому мероприятия по защите сервера должны включать:

  • Установку и обновление программ для защиты сервера – антивирусов.
  • Регулярные зашифрованные копии данных, по меньшей мере, раз в неделю, поскольку, согласно статистике, жесткие диски сервера на первом месте по частоте поломок. Убедитесь, что резервная копия хранится в физически безопасной среде.
  • Обеспечение бесперебойного электропитания серверной.
  • Своевременная физическая профилактика серверов, включающая их чистку от пыли и замену термопасты.

Опыт специалистов “Интегруса” говорит нам, что лучшая защита от такого рода угроз – это применение лучших практик в области систем защиты серверов.

Для обеспечения безопасности серверов наших заказчиков мы применяем сочетание инструментов:брандмауэры, антивирусы, технологии безопасности / управления событиями (SIM / SEM), технологии обнаружения вторжений / защиты (IDS / IPS), технологии сетевого поведенческого анализа (NBA), конечно же регулярное профилактическое обслуживание серверов и обустройство защищенных серверных под ключ. Это позволяет свести риски взлома или отказа сервера по другим причинам к минимуму.

Готовы провести аудит безопасности серверов вашей компании, провести консультирование специалистов, выполнить все виды работ по настройке защиты серверного оборудования.