Кража привилегий и обход бана -проблема, с которой сталкиваются владельцы серверов…
В данной теме поговорим о проблеме подмены SteamID и базовых вариантах усложнения этого действия для нечестных игроков.
Чем грозит подмена SteamID?
- Кража привилегий у другого игрока, допустим админ права
- Переадресация бана на другого игрока, чей steamid был скопирован и так же обход бана.
Настройка Reunion / Dproto
Рассмотрим конфиг модуля и варианты его настройки
Данные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
В самом начале конфига у нас есть подсказка, как будут генерироваться steamid игроков на нашем сервере
# ClientID types (for cid_* options) # 1: Real (or generated by HW) steam (STEAM_xx:xx:xx) # 2: Real (or generated by HW) valve (VALVE_xx:xx:xx) # 3: STEAM_ by IP # 4: VALVE_ by IP # 5: Deprecated - client will be rejected # 6: reserved for future use # 7: HLTV # 8: STEAM_ID_LAN # 9: STEAM_ID_PENDING # 10: VALVE_ID_LAN # 11: VALVE_ID_PENDING # 12: STEAM_666:88:666
Пояснение:
1 - Настоящий (или сгенерированный по HW (Hardware Identification Number)) идентификатор, который будет иметь вид STEAM_xx:xx:xx
2 - Настоящий (или сгенерированный по HW (Hardware Identification Number)) идентификатор, который будет иметь вид VALVE_xx:xx:xx
3 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид STEAM_xx:xx:xx
4 - Генерирование будет происходить по IP игрока и идентификатор будет иметь вид VALVE_xx:xx:xx
5 - Запрет на подключение клиента к серверу
6 - Идентификатор будет зарезервирован для будущего клиента и будет иметь вид STEAM_xx:xx:xx
7 - Назначает идентификатор HLTV
8 - Идентификатор примет вид STEAM_ID_LAN
9 - Идентификатор примет вид STEAM_ID_PENDING
10 - Идентификатор примет вид VALVE_ID_LAN
11 - Идентификатор примет вид VALVE_ID_PENDING
12 - Идентификатор примет вид 666:88:666
Для начала укажем, как будет генерироваться steamid для каждого протокола клиента
# For Legit Steam clients (default is real STEAM_xx:xx:xx [1]) cid_Steam = 1
Steam клиент, советую оставить 1, подделать его крайне сложно и "время жизни" на сервере будет не долгое
# Client recognized as pending when they sucessfully authorized, but did not get steam id # REMARK: Actually, it got steamid, but it is useless (STEAM_0:0:0 for example) # default is STEAM_ID_PENDING [9] cid_SteamPending = 9
Данный идентификатор сработает, когда steam сервер отвалится и клиент не сможет получить свой идентификатор. Блокируем
cid_SteamPending = 5
# for HLTV (default is HLTV [7]) cid_HLTV = 7
Не важно, есть у нас HLTV или его нет, мы запрещаем подключение других, не известных нам клиентов с идентификатором HLTV
cid_HLTV =5
Если у Вас используется HLTV на сервере, то просто укажите его ip в настройке
HLTVExcept_IP = 127.0.0.1
# for p.47 clients that do not support unique id generation (default is STEAM_ID_LAN [8]) cid_NoSteam47 = 8 # for p.48 clients that do not support unique id generation (default is VALVE_ID_LAN [10]) cid_NoSteam48 = 8
Старые игровые клиенты, почти не используются и чаще всего эксплуатируются из-за читов, которые требуют конкретный протокол клиента для своей работы. Запрещаем этих единичных пользователей.
cid_NoSteam47 = 5
cid_NoSteam48 = 5
# For players having revEmu ( >= 9.74) on client-side: # default is real STEAM_xx:xx:xx [1] cid_RevEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_RevEmu = 2
# For players having RevEmu 2013 on client-side: # default is real STEAM_xx:xx:xx [1] cid_RevEmu2013 = 1
Выставляем вид VALVE_xx:xx:xx
cid_RevEmu2013 = 2
# For players having SteamClient 2009 / revEmu > 9.82 on client-side: # default is real STEAM_xx:xx:xx [1] cid_SC2009 = 1
Выставляем вид VALVE_xx:xx:xx
cid_SC2009 = 2
# For players having old revEmu on client-side: # default is real STEAM_xx:xx:xx [1] cid_OldRevEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_OldRevEmu = 2
# For players having hCupa's SteamEmu on client-side: # default is real STEAM_xx:xx:xx [1] cid_SteamEmu = 1
Выставляем вид VALVE_xx:xx:xx
cid_SteamEmu = 2
# For players having AVSMP (Cracked Steam) on client-side: # default is real STEAM_xx:xx:xx [1] cid_AVSMP = 1
Мертвый эмулятор. Блокируем
cid_AVSMP = 5
# For SETTI ServerScanner # default is STEAM_xx:xx:xx generated by IP [3] cid_Setti = 3
Мертвый эмулятор. Блокируем
cid_Setti = 5
# For SXEI Clients # default is real STEAM_xx:xx:xx [1] cid_SXEI = 1
Мертвый эмулятор. Блокируем
cid_SXEI = 5
# For players having SmartSteamEmu > 1.2.4 on client-side: # default is real STEAM_xx:xx:xx [1] cid_SSE3 = 1
Выставляем вид VALVE_xx:xx:xx
cid_SSE3 = 2
# SteamIdHashSalt (string) # Salt string for SteamIDs hashing. Irreversibly changes SteamIDs. Applies only to SteamIDs generated by emulators. # Should be more than 16 chars length. If string is empty, hashing is not applied. SteamIdHashSalt =
Данная настройка (она же "соль") скроет истинный steamid игроков на вашем сервере. Минимальная длина 16 символов !
Придумайте свою строку, можно использовать буквы разного регистра, цифры и символы (!@#$% и т.д.)
SteamIdHashSalt = QWERTYASDFG123456
На лицензионный клиент игры данная настройка не распространяется.
# EnableGenPrefix2 (0 / 1) # Enable second prefix (0 or 1) for generated by HW authids. Reduces chance of authid collisions. Works only with configured SteamIdHashSalt. EnableGenPrefix2 = 1
Активируем генерирование второго префикса, когда используется "соль"
Делаем разграничение префиксов
Префикс - это числа, которые мы видим перед самим сгенерированный id клиента STEAM_xx:xx:xxxxxx
* Префикс 1 Допустимые значения [0-99]
* Префикс 2 Допустимые значения [0-99]
Числовой идентификатор клиента
# IPGen_Prefix1 (int) # STEAM_a:b:c # first prefix (a) for authids generated by IP IPGen_Prefix1 = 0
Первый префикс, который будет указан, если у протокола стоит генерирование по IP. Данный тип генерирования не удобен, т.к. очень мало клиентов с статическим IP адресом.
Не меняем
# IPGen_Prefix2 (int) # STEAM_a:b:c # second prefix (b) for authids generated by IP IPGen_Prefix2 = 4
Второй префикс, который будет указан, если у протокола стоит генерирование по IP.
Не меняем
# Native_Prefix1 (int) # STEAM_a:b:c # first prefix (a) for authids generated by native auth method (Steam) Native_Prefix1 = 0;
Первый префикс, который будет задан Steam клиенту. Дадим ему максимальный номер.
Native_Prefix1 = 99;
Придется поправить csbans
Либо используйте число от 0 до 9
# RevEmu_Prefix1 (int) # STEAM_a:b:c # first prefix (a) for authids generated by Steamclient 2009 SC2009_Prefix1 = 0;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
SC2009_Prefix1 = 12;
# RevEmu_Prefix1 (int) # STEAM_a:b:c # first prefix (a) for authids generated by RevEmu RevEmu_Prefix1 = 1;
Зададим любой порядковый номер, чтобы отделить протокол от остальных
RevEmu_Prefix1 = 13;
Остальные протоколы трогать не будет, их префиксы и так уникальны от 1 до 7.
Ура, конец спойлера!
ННастройка ReChecker
Мы можем обнаружить запрещенные файлы в клиенте игрока, которые имеют функционал подмены steamid и не пускать таких игроков на свой сервер.
Применять или нет наказание для таких игроков, каждый админ решает сам, т.к. протекторы используются не только для подмены steamid, но и для защиты своего клиента игроками от не добросовестных админов желающих испортить клиент.
Актуальную базу вы можете найти в релизах
Приведем в качестве примера несколько строк обнаружения таких запрещенных файлов
Примеры
"/CSXGuard.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/CTShield.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/protector.dll" UNKNOWN "amx_ban 1440 [userid] 'Protector';wait;rc_log Protector | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- "/change~1.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/bin/steamid_changer.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "changersteambyostrog.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/bin/steam.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/SteamID.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK "/ChangerSteamByOstrog.dll" UNKNOWN "amx_ban 1440 [userid] 'SteamID Changer';wait;rc_log SteamID Changer | md5hash '[file_md5hash]' - file '[file_name]' - '<[steamid]><[ip]>' - [name]" BREAK
ВВыдача прав на сервере
При назначении привилегий другим игрокам на сервере админ сталкивается с выбором, какой вариант выбрать?
Напомним, что у нас есть несколько способов назначить права другому игроку:
- По нику и паролю
- По IP по ip+пароль
- По SteamID по steamid+пароль
Первый вариант через ник и пароль плох тем, что вы не можете гарантировать безопасность такой учетной записи, т.к. записи хранятся в открытом виде и человека нужно просто заманить на сервер, где будут получены его steamid, setinfo (all) и многое другое.
Кроме того, человек может отдать свои данные (логин и пароль) друзьям и они будут использовать его права, данный вариант не приятен администраторам, которые доверяют полномочия одному человеку, а на практике полномочия использует группа лиц без ведома главного администратора. Так же это может сказаться на продаже привилегий, зачем людям тратить деньги, если можно попросить учетную запись у своего друга и получить все бесплатно. Данный вариант менее защищенный, не советую его использовать.
Второй вариант тоже не идеален, т.к. статический IP большая редкость. А динамические адреса часто меняются и вас постоянно будут спрашивать "куда делись мои права?". Идеальный вариант, если у человека статический ip.
Третий вариант - steamid+пароль. Привязка прав происходит по уникальному идентификатору клиента, который он получает на сервере. Если игрок не будет менять non-steam сборку каждую неделю и не использовать средства подмены/рандомизации steamid, то это наш самый стабильный вариант. Главное, не забудьте указать "соль", которую мы рассмотрели в разделе выше
Просто steamid привязку (без пароля) вы можете назначить игрокам с лицензионной версией игры (Steam).
Steamid+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.