Jump to content

Search the Community

Showing results for tags 'администрирование'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Russian Section
    • Новости и объявления
    • Пиратия: Документация
    • Пиратия: Релизы
    • Пиратия: Разработка
    • Пиратия: Web
    • Пиратия: Помощь
    • Совместные проекты / набор команды
    • Доска объявлений
    • Программирование
    • Оффтопик
    • Корзина
  • English Section
    • News & Announcements
    • Guides
    • Releases
    • Development
    • Web
    • Questions & Help
    • Shared Projects / Team search
    • Paid services & Requests
    • Programming
    • Offtopic
    • Recycle bin
  • Portuguese Section
    • Dúvidas & Ajuda
  • Spanish Section
    • Preguntas y Ayuda
  • Servers
    • Russian servers
    • English servers

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 1 result

  1. Обеспечение безопасности игрового сервера Автор: @Duduf В данном гайде мы рассмотрим основные проблемы, связанные с обеспечением безопасности нашего игрового сервера. Основными проблемами в работе игровых серверов являются: Несанкционированный доступ к учетной записи администратора ОС сервера SQL-инъекции через клиент игры SQL-инъекции через веб-обвязки игрового сервера Гайд состоит из следующих разделов: Выбор операционной системы для игрового сервера и базовые настройки его безопасности Обеспечение базовой безопасности SQL-сервера Защита баз данных SQL-сервера от SQL-инъекций Установка и базовые настройки веб-сервера Защита веб-обвязок от SQL-инъекций 1. Выбор операционной системы для игрового сервера и базовые настройки его безопасности В первую очередь, следует понимать, что игровой сервер должен являться отдельной машиной, предназначенной только для обеспечения работы этого самого игрового сервера. В качестве операционной системы необходимо использовать только серверные - Windows Server 2003, Windows Server 2008, никаких XP, Вист и семерок - эти системы априори не предназначены для функционирования в качестве серверов. Высшим пилотажем, в плане обеспечения безопасности, было бы разнесение служб игрового сервера по разным серверам - ПО игры, SQL-сервер, Веб-сервер, но в данном случае мы рассмотрим установку и настройку всего этого добра на одной машине. Почему именно серверная ОС В первую очередь, это повышенная отказоустойчивость, отсутствие ресурсоемких и небезопасных приложений, загружаемых "по умолчанию", полноценное логирование действий пользователей, полноценный трейс ошибок при крахе приложений, более полная, по сравнению с домашними ОС, защита системных файлов и директорий, а также более высокая производительность приложений. К базовым настройкам безопасности ОС относятся: Отключение учетной записи Администратор Установка антивируса с автоматическим обновлением Автоматическое обновление ОС Настройка удаленного доступа по протоколу RDP Установка межсетевого экрана (Брандмауэр, Файрволл) Автоматическое обновление ОС Настраивайте автоматическое обновление таким образом, чтобы обновления скачивались, но не устанавливались. Заведите привычку раз в неделю устанавливать эти самые обновления и после их установки перезагружать машину. Remote Desktop Сколь бы не велико было желание подключить монитор и клавиатуру к серверу, делайте это только в случае сбоя в работе RDP, т.е. если вы не можете подключиться к серверу удаленно. Для включения Remote Desktop откройте Панель управления > Система, выберите вкладку Удаленные сеансы и установите флажок Разрешить удаленное подключение к этому компьютеру. По умолчанию удаленное соединение разрешено только локальным администраторам. Учетную запись Администратор мы отключили, т.о. у нас остается только один локальный администратор. Теперь настроим сам сервер RDP Откройте Панель управления > Администрирование > Настройка служб терминалов. В дереве консоли выберите пункт Подключения. В области сведений щелкните правой кнопкой мыши подключение, которое нужно изменить, и выберите команду Свойства. На вкладке Общие, в разделе Уровень безопасности, выберите метод обеспечения безопасности Высокий. Рекомендую также ознакомиться со следующими ссылками по обеспечению безопасности RDP: http://technet.microsoft.com/ru-ru/library/cc781085(WS.10).aspx http://www.winblog.ru/win2003/1147766806-15021001.html Межсетевой экран Самый простой маршрутизатор, установленный между интернетом и вашим сервером во сто крат эффективнее и производительней любых программных файрволлов. Настройте маршрутизацию портов в своем роутере - 80 (для веб-сервера), 1973 (Gate Server), 3389 (RDP) и 1433 (SQL-сервер). Все пакеты от клиента приходят на порт GateServe'ra, поэтому нет необходимости открывать порты других служб игрового сервера. Ограничьте доступ по IP-адресам для порта 3389 (RDP) и 1433 (SQL-сервер). Желательно, чтобы доступ к этим портам был только из локальной сети. Если вы планируете администрировать сервер удаленно из Интернета и имеете статичный IP-адрес, то можете открыть порты 3389 и 1433 и для него. Добавьте перечисленные порты (80, 1973, 3389, 1433) в исключения в Брандмауэре Windows. В исключениях должны быть именно порты, а не приложения. Ничего другого в исключениях быть не должно. Если в вашем роутере есть возможность автоматической защиты от ARP и других атак, включите их. Если у вас нет роутера или аппаратного Файрволла, то ограничения на порты и службы необходимо установить в Брандмауэре Windows. Итогом наших мероприятий стало то, что даже если злоумышленник получит информацию о логине/пароле к SQL-серверу, воспользоваться им он не сможет, поскольку мы закрыли возможность удаленного подключения к игровому серверу с "неизвестных" машин. Работа игровых подсерверов Не запускайте игровые сервера из-под пользователя, обладающего административными правами. Создайте отдельного пользователя в группе Users (Пользователи), прав этой группы достаточно для работы игрового сервера. В противном случае, если злоумышленник получит доступ в игре к команде &lua, то он автоматически получит доступ к пользователю-администратору сервера, со всеми вытекающими. 2. Настройка SQL-сервера Итак, вы установили SQL-сервер, используя соответствующие гайды и присоединили базы данных игры. Запускаем SQL Server Management Studio. При авторизации выбираем проверку подлинности Windows. В обозревателе объектов открываем вкладку Безопасность > Имена входа, заходим в свойства пользователя sa и отключаем эту учетную запись. Для чего мы его отключаем? Пользователь sa по умолчанию имеет права суперпользователя на вашем SQL-сервере. Также права суперпользователя вы можете получить авторизовавшись на Windows-сервере под учетной записью администратора и авторизовавшись в SQL-сервере используя проверку подлинности Windows. Отключением пользователя sa мы оставляем единственную возможность авторизации в качестве суперпользователя - через Windows-аутентификацию. Теперь у вас не будет соблазна настраивать работу приложений из под пользователя sa (особенно с пустым паролем) Для работы игрового сервера и веб-сервера мы создадим отдельных пользователей, которые будут иметь ограниченные права. Вычищаем из БД дефолтные данные Многие сборки серверов поставляются с базами, в которых уже существуют всякие разные нехорошие записи. К таковым относятся пользователи и схемы самой БД, а также список аккаунтов с ГМ-правами. В данной ситуации лучше использовать базы, поставляемые со сборкой Base Server 2.0, там присутствует только один аккаунт с логином admin и паролем admin. Не забываем поменять хотя бы пароль... Добавляем отдельных пользователей для игрового сервера Нам необходимо создать трех пользователей для баз AccountServer и GameDB с ограниченным набором прав - одного для работы GameServer, второго для работы AccountServer, третьего для веб-обвязки. Откройте папку Безопасность > Имена входа и выберите в контекстном меню Создать имя входа. Создайте пользователя для работы игрового сервера (в моем случае это Gamemaster) Перейдите на страницу Роли сервера и выберите только public Перейдите на страницу Сопоставление пользователей и определите базы данных GameDB с правами db_datawriter, public. Схема по умолчанию - dbo. Данные права определяют, что пользователь может осуществлять выборку (SELECT), изменение (UPDATE), вставку (INSERT) и удаление (DELETE) записей в таблицах базы GameDB. Создайте пользователя под которым будет работать AccountServer (в моем случае это Accountmaster) по аналогии с пользователем Gamemaster. Задайте права на базу AccountServer как db_datawriter, public, на базу GameDB прав давать не надо. Создайте пользователя под которым будет работать веб-обвязка (в моем случае это Webmaster) по аналогии с пользователем Gamemaster. Задайте права на базу AccountServer как db_datawriter, public, а на базу GameDB как db_datareader, public. Не ставьте ни в коем случае прав db_owner или db_securityadmin, а также любую другую роль кроме public, эти права дадут доступ пользователю к системным функциям Базы данных, в т.ч. к ее остановке и уничтожению. 3. Защита объектов базы данных от несанкционированных изменений В первую очередь, следует понимать, что SQL-инъекции возможны в том случае если приложения, работающие с SQL-сервером в должной мере не обрабатывают приходящие от пользователей переменные. В случае если в качестве приложения выступает php-скрипт с открытым кодом, мы можем самостоятельно добавить обработку пользовательских переменных. В случае если в качестве приложения выступает скомпилированное приложение (в нашем случае GateServer, GameServer, GroupServer и AccountServer), возможности по модификации кода у нас отсутствуют. При таком раскладе нам остается контролировать данные другими средствами. Первое - это различные фильтры (FilterServer и др.) и модификации GateServer, второе - защита объектов базы средствами SQL-сервера. Ставим необходимые фильтры. Объекты базы защищаем следующим образом: Заходим в свойства пользователя Gamemaster в базе GameDB Переходим на страницу Защищаемые объекты и жмем кнопку Найти. Выбираем Определенные объекты и жмем ОК Нажимаем Типы объектов, выбираем Таблицы, жмем ОК. Затем Обзор и выбираем таблицу account и жмем ОК и еще раз ОК. Загрузится таблица прав. Напротив Изменение и Удаление отмечаем Запретить. Выберите разрешение Обновление, чтобы активировать кнопку Разрешения на доступ к столбцу. Жмем ее. В открывшемся окне отмечаем Запретить напротив столбца gm Ту же самую процедуру проделываем и для пользователя Webmaster Все, теперь гм-права можно выставить только из под учетной записи администратора, пользователи, из под которых работает веб-обвязка и игровой сервер этих прав не имеют. По аналогии вы можете запрещать доступ на изменение к столбцам и в других таблицах. Например, в character было бы неплохо запретить изменение столбца act_id. Теперь со спокойной душой можно защищать менее значимые объекты базы посредством триггеров и мониторинга базы игроков. Сами триггеры я писать не буду, опишу, что можно защищать: Стат-пойнты. Триггер должен при вставке/изменении записи проверять не выходит ли сумма статов за допустимые значения. Количество HP/SP Наличие невведенных/редких предметов в инвентарях игроков Наличие у игроков фей и экипировки со статами, выходящими за допустимыми значениями 4. Веб-сервер На форуме, как я заметил, существует любовь к различного рода NoName-сборкам Apache + PHP + MySQL + еще хрен знает чего (это я про всякие ксампы и денверы). Наличие доверия к ним крайне сомнительно ввиду, хотябы отсутствия документации к ним, особенно, это касается выставленных параметров "по умолчанию". Грамотным решением была бы установка всех компонент отдельно, скачанных и обновляемых с сайтов ПРОИЗВОДИТЕЛЕЙ (apache.org, php.net, mysql.com) либо использование промышленных сборок типа Zend.Server. Если вы устанавливаете MySQL, не забудьте задать пароль для root-пользователя (по умолчанию он пустой) и создать второго администратора. Не следует запускать приложения из-под пользователя root. Прежде чем устанавливать FTP-сервер, сто раз подумайте, нужен ли он вам, возможно, достаточно открыть доступ к нужным папкам в локальной сети. FTP - сам по себе крайне небезопасный протокол. Если установка FTP-сервера необходима, используйте лучше реализацию SFTP под Windows http://www.coreftp.com/server/ (в качестве клиента используйте WinSCP). 5. Веб-обвязки Ну, что тут говорить, большинство представленных на форуме веб-обвязок представляют собой "жалкое зрелище, душераздирающее зрелище": Принудительное подавление вывода ошибок без должной их обработки (error_reporting(0), ini_set('display_errors',0), волшебный символ @ и пр.) Использование "псевдоконструкторов" классов, которые с версии php 5.3.3 уже не поддерживаются Использование библиотеки ereg, которая не модернизировалась с 4-й версии PHP и в 6-й версии будет вырезана Использование морально устаревшей библиотеки mssql Но это еще цветочки по сравнению с отсутствием типизации данных и недолжной обработкой входящих переменных (что может привести к SQL-инъекциям и XSS-атакам). Я не буду вдаваться в экскурс, как писать безопасные приложения, рекомендую использовать только проверенные скрипты, не пихать на рабочий сайт "новинки" пока не появятся отзывы об их использовании и аудите, каким бы шикарным не был их функционал. При появлении новых версий, обязательно обновляйте их. Примеры инъекций в существующих обвязках Рассмотрю один пример уязвимостей в веб-обвязке (регистрации), но, увы, некоторые другие регистрации и обвязки, представленные на этом сайте, имеют уязвимости. Итак, рега Уязвимый код Строка 21 if ((eregi("[^a-z0-9_-]", $login)) || (eregi("[^a-z0-9_-]", $pass)) ) { eregi - устаревшее расширение, имеющее нульбайтовую уязвимость Строки 36-37 $email = $_POST['email']; do_query("INSERT INTO account_login (name,password,originalPassword,email) VALUES ('$login','$encr_pass','$pass', '$email')","AccountServer"); Переменная email не обрабатывается никак вообще
×
×
  • Create New...