Подмена SteamID

Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
В данной теме поговорим о проблеме подмены SteamID и базовых вариантах усложнения этого действия для нечестных игроков.

Чем грозит подмена SteamID?
  • Кража привилегий у другого игрока, допустим админ права
  • Переадресация бана на другого игрока, чей steamid был скопирован и так же обход бана


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

Остальные листаем дальше.
risovach.ru (12).jpg



Настройка 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+пароль золотая середина, которую стоит использовать, но для этого нужно настроить свой сервер.


Сразу уточню, что информация из 2013г, когда держал сервера и мониторил эту проблему, поэтому не откажусь от дополнений и уточнений.
 
Сообщения
152
Реакции
17
Помог
2 раз(а)
На сегодняшний день актуально?
Подскажите кто знает)
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
GrafkO, не актуально только для steam-only.
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Решил поставить такие же настройки, как в посте, кроме соли (своя есть).
В итоге: сбилось у всех звание, бонусы и т.д.
Steam игроки стали вылетать с сервера с такой причиной: Sorry, no-steam p48 clients are not allowed on this server
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Minni, сбились, потому что были изменены префиксы и, возможно, метод генерации.
Подобные симптомы с киком Steam были на dproto, лечилось рестартом сервера.
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Tranquillity, и часто приходилось делать рестарты на dproto?
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Minni, Ни разу, за 3 года жизни сервера, мне не писали с такой проблемой.
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
А на сколько хороши дефолтные настройки?желательно ли менять? Раньше просто не задумывался над этим
 
Сообщения
432
Реакции
409
Помог
14 раз(а)
Pokemoshka, дефолтные настройки не менялись уже лет 10, сейчас их вообще нельзя оставлять
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Ну если сравнивать с дпрото, то да. В дпрото по умолчанию все префиксы по нулям.
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
Tranquillity, Сорри забыл уточнить, я про Reunion. Лучше поменять все таки или оставить дефолт?
 
Сообщения
133
Реакции
441
Помог
2 раз(а)
Pokemoshka, Поменять, т.к. по стандарту можно будет даже с солью (хоть это и усложняет процесс) подменить Steamid админа, не говоря уже об отсутствии соли - в этом случае достаточно просто будет использовать RevEmu или в случае Steamid вида STEAM_0:1:xxxx использовать AVSMP.

+ я бы еще использовал настройку для cid_RevEmu = 2

Ну и в дополнение скажу, что сервер с настройками от Tranquillity и админкой по Steamid + паролю не будет являться полной защитой, т.к. можно похитить ваш тикет, уже 2 публичными способами, meta плагином для reHLDS и PHPFake Сервером, так что советовал бы, как минимум не давать вообще никому доступа к amx_rcon команде.
 
Сообщения
2,143
Реакции
1,223
Помог
44 раз(а)
Появилась новая проблема. Перестали работать привилегии, даже которые прописаны по нику. С чем это может быть связано?
 
Сообщения
152
Реакции
17
Помог
2 раз(а)
Статью бы сделать актуальной на сегодняшней день общими усилиями)
Просто пару переменных поменял и топ послетал у всех, пришлось сделать обратно.
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
GrafkO, вы просто копируете настройки и даже не понимаете, что делаете. Актуальность текущих реалий описана в посте # 12 пользователем medusa
  • Вы изменили метод генерации - id игроков поменяется
  • Вы изменили префиксы - id игроков поменяется
  • Вы установили/изменили соль - id игроков поменяется
Данные настройки делаются один раз в момент создания сервера и больше не трогаются, чтобы не сбивать свои привязки прав. Либо вы их делаете сейчас и просто перекидываете права на новые идентификаторы.

Ваш SteamID - это аналог паспорта в жизни
Префикс1: Префис2: Идентификатор = Имя: Отчество: Фамилия

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

Тут вы сделали тоже самое:
1. У пользователя был id 0:0:12345 и у него была админка
2. Вы сменили префиксы и его id стал 1:0:12345
3. Система увидела, что какой-то пользователь хочет воспользоваться правами админа но его id нет в базе, ясное дело, что система не даст ему никакие права и достижения, потому что для нее это новый пользователь.
 
Сообщения
152
Реакции
17
Помог
2 раз(а)
Tranquillity, Я прекрасно понял,что я делаю.
Я прочитал ,я говорю про то что, топ и вся информация слетит ,если на данный момент менять какие-либо переменные.
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
GrafkO, естественно слетит.Там даже специально в теме красным написали
Данные изменения повлекут смену идентификаторов и как следствие сброс статистики, рангов и всего остального, что завязано на них
26 Июл 2017
Прежде чем что то делать задумались бы над этим.для своего развития хотя бы.
26 Июл 2017
Кстати заметил в Reunion такие строки. Может добавить в первый пост инфу по ним тоже?Как лучше их выставлять
Код:
### AUTH SETTINGS ###
# ServerInfoAnswerType (0/1/2)
# Sets server answer type for query requests
# 0 = New style (Source Engine)
# 1 = Old Style (Fix favorites list for p.47 clients)
# 2 = Hybrid mode - Server is visible anywhere, but there are 3 packets generated for every serverinfo request
ServerInfoAnswerType = 0
# EnableSXEIdGeneration (0 / 1)
# Turns on steamid generation based on info sent by sXeI client
# Enable this ONLY if you have sXeI server installed!
EnableSXEIdGeneration = 0
# SC2009_RevCompatMode (0 / 1)
# Enable fix to make steamids generated for SC2009 compatible with revEmu
SC2009_RevCompatMode = 1
# 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 =
# SteamIdHashDProtoCompat (0 / 1)
# Use less reliable method of SteamID hashing from dproto (deprecated).
SteamIdHashDProtoCompat = 0
# 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 = 0
# FixBuggedQuery (0 / 1)
# Enable fix for clients with bugged serverbrowser. Prevents hanging on connect.
FixBuggedQuery = 1
# HLTVExcept_IP (ip addr)
# HLTV from this IP will be able to join the server even if cid_HLTV is set to 5 (deprecated)
HLTVExcept_IP = 127.0.0.1
# QueryFloodBanTime (1 - 60)
# Ban time in minutes for server query flooding.
QueryFloodBanTime = 10
 
Последнее редактирование модератором:
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Код:
SteamIdHashSalt
HLTVExcept_IP
EnableGenPrefix2

Есть в первом сообщение

Остальные не имеют отношения к генерации id, либо по-умолчанию имеют нужную настройку
Код:
ServerInfoAnswerType // какими "пакетам" сервер будет отвечать на внешние на запросы
EnableSXEIdGeneration // генерация id для старого клиент-сервер античита
SC2009_RevCompatMode // исправляет генерирование id на протоколе SC2009 для совместимости с RevEmu
SteamIdHashDProtoCompat // генерация ид по старому алгоритму, для совместимости с dproto
FixBuggedQuery // исправляет редкие зависания клиента, когда заходишь на сервер через serverbrowser
QueryFloodBanTime // Время бана за флуд обращениями к серверу
 
Сообщения
2,288
Реакции
1,737
Помог
31 раз(а)
Tranquillity, и еще один вопрос после изменений стим id имеет вид steam_99:x:xxxxxx или steam_13:x:xxxxxx при добавление привилегий через банлист выходит ошибка неверный steam id.это теперь в самом банлисте исправлять?или как лучше?
 
Последнее редактирование:
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Pokemoshka, csbans принимает только один символ префикса (0-9), надо будет посмотреть, где это поправить.
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу