Опасности Windows API и учетных записей администратора? - PullRequest
2 голосов
/ 17 января 2010

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

Я хотел бы узнать, есть ли что-нибудь еще в WindowsAPI, который создал бы такую ​​огромную уязвимость, хотя?Думаю, я просто хочу убедиться, что когда учетные записи игровых серверов клиента будут перемещены в учетные записи с ограниченным доступом, нам не придется беспокоиться о том, чтобы кто-либо из них использовал Windows API для саботажа машин.В самой игре уже достаточно эксплойтов, чтобы беспокоиться, не беспокоясь о том, что клиент захватывает компьютеры с помощью плагинов.из с ++?Можете ли вы получить список групп пользователей AD с C ++?(не тот, к которому принадлежит пользователь, а полный список)

Ответы [ 4 ]

4 голосов
/ 17 января 2010

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

Нет, это не так. Вот что означает запуск под учетной записью администратора: права администратора ! Если вы не хотите, чтобы это происходило, не запускайте от имени администратора.

IMO, однако, кажется довольно необычным и странным, что ваш игровой сервер допускает плагины, которым впоследствии разрешается доступ к локальным функциям Windows API. Это довольно необычно и само по себе считается уязвимостью безопасности. Есть ли какая-то конкретная причина для этого? Почему бы просто не ограничить доступ исключительно к функциям библиотеки вашей игры, вместо того, чтобы широко открывать?

Можно ли отключить / включить удаленный рабочий стол из c ++?

Да. Когда вы являетесь администратором, у вас, вероятно, есть доступ к оболочке, поэтому, например, просто выполнить netsh firewall set service remotedesktop enable как процесс.

1 голос
/ 20 января 2010

Теперь, когда я понимаю, что вы не можете контролировать то, что делает программное обеспечение игрового сервера (я знаю, что различные разработчики игр не слишком озабочены практическими аспектами людей, размещающих игровые серверы):

Microsoft, безусловно, постарается избежать использования в Windows API-интерфейсов, которые бы позволяли ограниченным учетным записям пользователей выполнять действия типа администратора. По моему опыту, большинство изменений типа администратора требуют, чтобы вы (а) были членом группы администраторов или (б) были членами какой-либо группы, настроенной с помощью локальной политики безопасности или групповой политики, чтобы иметь возможность вносить эти изменения. Поэтому вы должны иметь возможность использовать списки ACL для ограничения доступа к файлам и политики, чтобы существенно ограничить доступ к API. Обычно, когда есть какой-то способ использовать API для получения доступа, которого у вас нет, это обычно считается ошибкой безопасности, которую исправит Microsoft - посмотрите все совпадения при поиске в Интернете для «повышения локальных привилегий Windows».

1 голос
/ 17 января 2010

Обычно, если вы хотите ограничить доступ к тому, что может делать плагин на сервере, вы бы не разрешали писать плагины на C ++, вы использовали бы язык сценариев.

Для кода C ++ вам следует беспокоиться не только о API-интерфейсах Windows, которые можно вызывать - если вы разрешаете запускать код плагина, написанный на C ++ кем-то, кому вы не доверяете, в том же процессе, что и ваш игровой сервер. , этот код плагина может просто сбить ваш игровой сервер и выполнить любой доступ к файлу, доступ к которому разрешен учетной записи, под которой работает игровой сервер (возможно, включая изменение или удаление файлов данных игры).

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

0 голосов
/ 18 января 2010

Возможность того, что плагин сервера может создать учетную запись с правами администратора, на самом деле определяется не вашим выбором языка (C и C ++ ведут себя точно так же), а тем, работает ли сам процесс сервера с правами администратора. Если серверный процесс выполняется как обычный пользователь, он не может создавать учетные записи администратора, и поэтому ни один из его подключаемых модулей не может.

Это означает, что за такие проблемы ответственен не Valve или другой автор игрового сервера, а тот, кто настроил сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...