Подмена Steam ID

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
Аватара пользователя
rsg16
Лейтенант
Лейтенант
Сообщения: 120
Зарегистрирован: 08.11.2009
Откуда: Укрина
Поблагодарили: 10 раз

#1 Сообщение 16.02.2012, 18:34

Как всем известно многих серверов ломали через подмену Steam ID администраторов.
С разказов KIEVSTAR(а) он сам написал, программу которая меняет Steam ID.
Но на самом дели, несколько людей у которых есть сервера скинулись деньгами программисту чтобы он написал её.
Steam-профили людей которые были за замеченные в зломах:
STEAM_0:1:34703220
STEAM_0:1:25711435
STEAM_0:0:20989585
Методика взлома:
1. Поиск Steam ID администратора
2. Перезаход на сервер с новым Steam ID
3. Если есть доступ до rcon, то смена его
4. Отключение плагинов которые будут мешать
5. Отключение записи логов сервера
Решение:
Новый эмулятор RevEmu за 30.05.2012
linux_win_30.05.2012.7z
Да и таки не ясно закрыта ли уязвимость в эмуляторе или нет...
Последний раз редактировалось rsg16 05.06.2012, 00:21, всего редактировалось 12 раз.

Аватара пользователя
h4uja2
Капитан
Капитан
Сообщения: 465
Зарегистрирован: 16.04.2010
Благодарил (а): 76 раз
Поблагодарили: 40 раз
Контактная информация:

#2 Сообщение 16.02.2012, 18:37

Да он крут. Респект ему.
( )in' with portals
now u're think( )Изображение

metoprolol
Сержант
Сержант
Сообщения: 58
Зарегистрирован: 25.01.2011
Откуда: Улан-Уде
Благодарил (а): 3359 раз
Поблагодарили: 2 раза

#3 Сообщение 16.02.2012, 20:18

rsg16, скинь мне в личку адрес твоего сервера.

Аватара пользователя
rsg16
Лейтенант
Лейтенант
Сообщения: 120
Зарегистрирован: 08.11.2009
Откуда: Укрина
Поблагодарили: 10 раз

#4 Сообщение 17.02.2012, 00:02

кто-небудь подскажите фикс от этого...

Аватара пользователя
Jiffs
Steam Content Support
Steam Content Support
Сообщения: 474
Зарегистрирован: 10.05.2008
Откуда: Красноярск
Поблагодарили: 48 раз
Контактная информация:

#5 Сообщение 17.02.2012, 02:04

Однако, как я вижу, все масштабнее и масштабнее эта проблема начинает расползаться. Объясняю для тех кто не в курсе. Появилась пара ребят, которые в последнее время начали промышлять взломом пиратских серверов. Лицензионные сервера не подвержены данному методу взлома.

Для начала, "контактные данные" этих ребят:

Steam-профили:
STEAM_0:1:34703220
STEAM_0:1:25711435
STEAM_0:0:20989585

IP-адреса:
46.160.99.73
46.162.5.202
178.165.46.58

Методика взлома крайне проста:
1) Они узнают кто на сервере обладает админкой;
2) Узнают их SteamID;
3) На пиратском клиенте c RevEmu (не SteamEmu!*) меняют SteamID на тот что узнали;**
4) Заходят на сервер и, далее, в зависимости от уровня админки, либо просто используют фан-функции (noclip и т. д.), либо узнают rcon через команду: sm_rcon rcon_password
5) Зная rcon-пароль, добавляют свои адреса в логирование, для того чтобы сервер отсылал им логи (logaddress_add);
6) Дальше, думаю, понятно, как происходят разбаны и прочие вещи.

Как видно, взлому подвергнуты любые сервера под RevEmu. Так как я сам лично столкнулся еще неделю назад с этими ребятами, я сразу связался с автором эмулятора. Последняя версия эмулятора, которая была выложена для windows, была как раз направлена на закрытие возможности использования целенаправленной подмены SteamID. Но, как показали внутренние теста автора - фикс не помог. Автор теперь пытается придумать другой вариант фикса на уровне самого эмулятора. Я же, в свою очередь, как вариант, предложил решение на основе плагина.

Суть работы плагина основывается на двух фактах. Первый. При заходе на сервер, клиент передает тикет (Legit Steam (218, 234, 238), Cracked Steam (512), RevEmu (178), Unknown и так далее). Второй. Длина SteamID у лицензионных клиентов меньше, либо равна восьми. Чувствуете решение? Единственное, что несколько мешает, это то, что RevEmu изредка генерирует SteamID длинной восемь символов. Но и этот нюанс учтен в плагине. А теперь, суть плагина, которая будет ясна на образном примере:
'Техническое задание на плагин'
Переменные:

sm_emu_guard_version - версия
sm_emu_guard - варианты функционирования плагина. 0 - выключить, 1 - первый вариант работы, 2 - второй вариант работы (по умолчанию - 2)
sm_emu_guard_logs - запись логов в файл emuguard.log (содержит время коннекта, ник, IP и SteamID). 0 - выключить, 1 - включить (по умолчанию - 1)
sm_emu_guard_limit - число, задающее верхнюю границу возможного SteamID (по умолчанию - 60000000)
sm_emu_guard_type - определяет наказание для нарушителя. 1 - кик, 2 - бан. (по умолчанию - 2)


Первый вариант работы плагина (sm_emu_guard "1"):

Код: Выделить всё

if (Ticket == RevEmu & SteamID_Length == 8 & SteamID <= %sm_emu_guard_limit%)
{
	Client Reject;
}
Второй вариант работы плагина (sm_emu_guard "2"):

Задается массив из SteamID в файле emuguard.cfg. Это те SteamID, которые используют коадмины и администраторы.

Код: Выделить всё

if (Ticket == RevEmu)
{
	for (i = 1; i <= %количество_SteamID_в_файле_emuguard.cfg%; i++)
	{
		if (SteamID == %SteamID_из_emuguard.cfg%)
		{
			Client Reject;
		}
	}
}
Суть ввода "sm_emu_guard_limit" заключается в том, что как я уже писал ранее, RevEmu, изредка, генерирует SteamID длинной 8 символов, что совпадает с лицензионным. Но, как показывает практика, лицензионные SteamID пока не бывают выше STEAM_0:X:50000000, а пиратские, наоборот, обычно выше этого значения. Поэтому, вводя эту переменную, мы избавляем пиратов с короткими SteamID от необоснованного кика с сервера. А администраторы пусть уже сами решают, какое значение ей задавать.
В данный момент, вся сложность создании плагина заключается в том, чтобы реализовать получение значения тикета через язык SourcePawn. Тут возможны два варианта.

Первый вариант.
Можно воспользоваться функциями самого RevEmu, которые еще в 2010 году добавил бывший его автор - shmelle:
Функции для получения данных игрока

Код: Выделить всё

enum EPlayerType
{
k_eSteamLegitUser = 0,
k_eSteamCrackedUser,
k_eRevEmuUser,
k_eRevEmuUserOld,
k_eSettiSRCScanBot,
k_eRevEmuUserV74,
k_eRevEmuUserVeryOld,
k_eUnknownUser,
k_eSteam2Legit,
k_eSteam2Cracked
};

struct PlayerInfo_t
{
 unsigned int unUserID;
 CSteamID steamIDPlayer;
 EPlayerType ePlayerType;
 unsigned int unIP;
};

// Call one of these to obtain connected user's info
// Return value determines if the user requested is connected to this server at all
// If the value is true, the user is connected and pPlayerInfo argument is filled with that player's info
// If the value is false, the user is not connected to this server and pPlayerInfo is filled with nulls 

bool Rev_BGetPlayerInfoBySteamID ( CSteamID steamID, PlayerInfo_t* pPlayerInfo ); possible only for Steam3
bool Rev_BGetPlayerInfoByUserID ( unsigned int unUserID, PlayerInfo_t* pPlayerInfo );possible only for Steam2
Но, не совсем понятно, как применить это. Я уже написал bir3yk'у с просьбой пояснить этот код, и вот пока жду ответа.

Второй вариант.
Можно попробовать воспользоваться для получения тикета расширением SteamTools. Ибо, если посмотреть исходники, можно увидеть, что код для получения тикета имеется.

Временные решения:
1) Админка по "белому" IP;
2) Админка по логину и паролю;
3) Перевести сервер на лицензию;
4) Забанить IP-адреса и SteamID этих ребят.

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

*Не надо это путать со взломом серверов на движке GoldSrc (CS1.6). Хоть там для взлома используется такая же простая схема, но, в отличии от нынешней ситуации, там используется дырявый SteamEmu.
**Точно не известно, каким образом они ставят нужные SteamID. Подменять они умеют не только пиратские, но и лицензионные SteamID. Возможно, они просто нашли уязвимость с помощью которой напрямую ставят нужный SteamID, а возможно, они просто "раскусили" метод генерации SteamID и теперь просто подстраивают нужные данные в системе для генерации нужного SteamID. На всякий случай: не надо мне объяснять, из чего генерируется SteamID, я это знаю.
Последний раз редактировалось Jiffs 17.02.2012, 02:38, всего редактировалось 1 раз.
Изображение Изображение Изображение Изображение Изображение Изображение Изображение

Аватара пользователя
PhO3n1X
Сержант
Сержант
Сообщения: 96
Зарегистрирован: 01.01.2006
Откуда: Latvia
Поблагодарили: 1 раз
Контактная информация:

#6 Сообщение 17.02.2012, 02:27

Уже давно написал и использую Extension для SM, который использует функции RevEmu для получения тикета игрока (правда пока что только для Винды). Возможно на выходных набросаю и выложу тут вышеупомянутый плагин.
GunGame.LV - Pro Gamers Portal | CS:S GG & DM Servers
Изображение

Изображение Изображение

Аватара пользователя
Overseer618
Overseer
Overseer
Сообщения: 272
Зарегистрирован: 06.05.2010
Откуда: Екатеринбург
Контактная информация:

#7 Сообщение 17.02.2012, 08:11

Ваши плагины ничего не дадут, т.к. подмену можно осуществить не заходя на сервер - это раз. Если о способе подмены(который уж очень прост) узнают люди - решением будет админка по паролю, по IP адресу или аутентификация(админ при входе пишет !login <пароль> и сервер разрешает ему пользоваться админскими функциями до следующего перезахода.)
Изображение
Изображение

Аватара пользователя
Jiffs
Steam Content Support
Steam Content Support
Сообщения: 474
Зарегистрирован: 10.05.2008
Откуда: Красноярск
Поблагодарили: 48 раз
Контактная информация:

#8 Сообщение 17.02.2012, 09:27

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

P.S.: просто всем и так очевидно, что SteamID изменяется на стороне клиента до захода на сервер. Но, потом, клиент все равно должен зайти на сервер, чтобы воспользоваться админкой.
Изображение Изображение Изображение Изображение Изображение Изображение Изображение

metoprolol
Сержант
Сержант
Сообщения: 58
Зарегистрирован: 25.01.2011
Откуда: Улан-Уде
Благодарил (а): 3359 раз
Поблагодарили: 2 раза

#9 Сообщение 17.02.2012, 09:31

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

Аватара пользователя
Jiffs
Steam Content Support
Steam Content Support
Сообщения: 474
Зарегистрирован: 10.05.2008
Откуда: Красноярск
Поблагодарили: 48 раз
Контактная информация:

#10 Сообщение 17.02.2012, 09:39

Лицензию они взломать не смогут. Ибо все завязано на пиратском клиенте. Для любителей фантазировать, объясняю уже на примере логов:

Вот он выставил себе мой лицензионный SteamID и заходит на сервер. Обращаем внимание на тикет.

Код: Выделить всё

2012/02/08 06:20:06    Ticket: Rev Emu.
2012/02/08 06:20:06    UserConnect IP = 19.162.120.1 | SteamID = STEAM_0:1:мой_лицензионный_стимайди (178)
Вот он узнает rcon-пароль (ник мой, SteamID мой, но это не я).

Код: Выделить всё

02/08/12 06:21:47: Мой_ник<3596><STEAM_0:1:мой_лицензионный_стимайди><> executes: sm_rcon rcon_password
Вот он проверяет как работает админка (ник мой, SteamID мой, но это не я).

Код: Выделить всё

02/08/12 06:22:23: Мой_ник<3596><STEAM_0:1:мой_лицензионный_стимайди><> executes: sm_admin
02/08/12 06:22:28: Мой_ник<3596><STEAM_0:1:мой_лицензионный_стимайди><> executes: menuselect 1
Спустя пару часов, он уже заходит с нормального своего аккаунта и развлекается (используется HLSW):

Код: Выделить всё

02/08/2012 - 21:33:01: [funcommands.smx] "Console<0><Console><Console>" toggled noclip on "S_Team Admin<4094><STEAM_0:1:34703220><>"
Потом снимал с себя наказания (используется HLSW):

Код: Выделить всё

02/08/2012 - 21:47:55: [basebans.smx] "Console<0><Console><Console>" removed ban (filter "STEAM_0 : 1 : 34703220")
02/08/2012 - 21:02:30: [basebans.smx] "Console<0><Console><Console>" removed ban (filter "46.162.5.202")
Изображение Изображение Изображение Изображение Изображение Изображение Изображение

Аватара пользователя
Jonny
Полковник
Полковник
Сообщения: 1371
Зарегистрирован: 30.05.2008
Благодарил (а): 23 раза
Поблагодарили: 54 раза

#11 Сообщение 17.02.2012, 09:48

setinfo _pw "dsfjsdf"
пускай узнает ;)
Никакого отношения к нацистским группам и направлениям не имею.

oblomkrs
Майор
Майор
Сообщения: 775
Зарегистрирован: 02.07.2011
Благодарил (а): 4 раза
Поблагодарили: 32 раза

#12 Сообщение 17.02.2012, 09:55

Jonny
Полностью согласен с тобой.Столько паники и всё из за лени.Админки по нику и паролю выдал и все проблемы ушли.Сам так раньше подменял стим id на админские и ничего ты с этим несделаеш
Качественный хостинг OPTIBIT в Красноярске
NOVOSIBIRSK-CSS.RU|Only DUST2[NSK] ip:46.38.63.119:27015
NOVOSIBIRSK-CSS.RU|Only $2000$+AWP LEGO[NSK] ip:46.38.63.119:27016

Аватара пользователя
mihaput
Майор
Майор
Сообщения: 509
Зарегистрирован: 11.11.2009
Откуда: http://stat.kristal-lab.ru
Благодарил (а): 5 раз
Поблагодарили: 40 раз

#13 Сообщение 17.02.2012, 11:28

Jiffs писал(а): Потом снимал с себя наказания (используется HLSW):

Код: Выделить всё

02/08/2012 - 21:47:55: [basebans.smx] "Console<0><Console><Console>" removed ban (filter "STEAM_0 : 1 : 34703220")
02/08/2012 - 21:02:30: [basebans.smx] "Console<0><Console><Console>" removed ban (filter "46.162.5.202")
А разве консольно с веб части возможно снять с себя бан ?
У меня например древняя система банов GlobalBan, там только с веб можно снять бан
ИзображениеИзображение
Изображение

-----------
Gigabyte Z77P-D3/i7-3770 3.4MHz (4.1MHz)/Geforce GTX 760 2Gb 256Bit/6Gb Ram/OS Windows 8.1

Аватара пользователя
Overseer618
Overseer
Overseer
Сообщения: 272
Зарегистрирован: 06.05.2010
Откуда: Екатеринбург
Контактная информация:

#14 Сообщение 17.02.2012, 11:37

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

P.S.: просто всем и так очевидно, что SteamID изменяется на стороне клиента до захода на сервер. Но, потом, клиент все равно должен зайти на сервер, чтобы воспользоваться админкой.
Перефразирую: Как будут заходить админы с пиратки, если их будет кикать? Они даже на сервер не смогут зайти, как и люди, с подменой SteamID. Так что проверку нужно проводить внутри сервера, чтобы админ смог себя идентифицировать.
И еще: с чего вы взяли что нельзя подменить тикет?

Добавлено спустя 4 минуты 39 секунд:
К слову о паролях: если пароль указывать в _pw - можно будет любым сервером вытащить у вас этот пароль.
Изображение
Изображение

Аватара пользователя
Jiffs
Steam Content Support
Steam Content Support
Сообщения: 474
Зарегистрирован: 10.05.2008
Откуда: Красноярск
Поблагодарили: 48 раз
Контактная информация:

#15 Сообщение 17.02.2012, 12:00

Overseer618 писал(а):Перефразирую: Как будут заходить админы с пиратки, если их будет кикать? Они даже на сервер не смогут зайти, как и люди, с подменой SteamID.
Выдавать админки коадминам пиратам - решение крайне странное и равносильное выкладыванию rcon-пароля в паблик. А если, все же, администратор сервера так жаждит выдавать админки пиратам, то ему и плагин не нужен, ибо такой сервер уже изначально дырявый.
Overseer618 писал(а):И еще: с чего вы взяли что нельзя подменить тикет?
Разве я это где-то писал? В нашем мире, при желании, можно сделать что угодно. Но, надо понимать, что есть понятие сложности. Так вот, подмена тикета, уже более сложная задача, нежели подмена SteamID. Плюс, случаев подмены тикета пока не было, а подмену SteamID мы уже фиксируем. Появятся случаи подмены тикета - будем тогда думать как и это исправить.
Изображение Изображение Изображение Изображение Изображение Изображение Изображение

Ответить Вложения 2