Дисклеймер. Сказанное ниже является личным мнением автора. Сам по себе автор является мастером спорта международного класса по продавливанию дивана и ничего полезного в своей жизни он, разумеется, не сделал. Урок не претендует на звание истины в последней инстанции, а автор готов признавать свои ошибки и публично приносить извинения, если заденет чьи-то чувства прекрасного своей графоманией с шизофреническими наклонностями.
Изучив некоторые моды, создаётся ощущение, что авторы кода не понимают реальной опасности кода, который доверяет клиенту. Рассмотрю пример, взятый из мода самая последняя сборка RedAge (от Golem) от 19.08.21 и объясню возможные последствия подобной уязвимости.
Отсутствие валидации ивентов, которые присылает клиент. Я более чем уверен, что данная проблема существует не только в данном моде. Вполне вероятно, что подобное есть и в модах "топовых" проектов. С целью защиты последних, я не буду подробно расписывать алгоритм эксплуатации этих уязвимостей, а лишь поверхностно расскажу принцип работы. Хотя кому я лгу: создатели читов уже проверили нижеописанное и ничего не нашли. Или нет...
Опасность: высокая. Разработчики RAGEMP добавили мнимую безопасность ресурсов, которые загружаются на клиент: сделали шифрование контента (dlcpacks и скриптов в том числе), захэшировали имена файлов и, вероятнее всего, применили другие извращения, но все эти потуги способны остановить только ленивых или слабеньких в реверсе. При должном умении и желании ваши ресурсы будут преобразованы в тот вид, в котором они хранятся на сервере. Никакие JS-обфускаторы [будь то бесплатный javascript-obfuscator или супер-дорогой jsscrambler], ваши исхищрения с eval (когда-то на Radmir RP видел такое) на клиенте не уберегут от возможности анализировать код. А это значит, что абсолютно любой человек может получить имена ивентов, посмотреть примеры аргументов и подделывать вызовы со стороны клиента. Держите это в голове при написании какой-либо системы, которая требует взаимодействия клиент -> сервер.
В моде RedAge беглым взглядом по серверному коду я нашёл одну подобную уязвимость. Она не способна сломать серверную экономику, но подпортить настроение игрокам, которым незаслуженно выдали розыск - легко.
Исходный код с уязвимостью:
Вариант исправления уязвимости: сервер полностью валидирует требования клиента. В данном случае необходимо проверить, действительно ли sender имеет право устанавливать уровень розыска любому игроку.
Другие статьи:
Как не стоит делать: база данных и работа с ней на примере RedAge
[JS] Как подключить отладчик (Debugger) в PhpStorm для server-side
Изучив некоторые моды, создаётся ощущение, что авторы кода не понимают реальной опасности кода, который доверяет клиенту. Рассмотрю пример, взятый из мода самая последняя сборка RedAge (от Golem) от 19.08.21 и объясню возможные последствия подобной уязвимости.
Отсутствие валидации ивентов, которые присылает клиент. Я более чем уверен, что данная проблема существует не только в данном моде. Вполне вероятно, что подобное есть и в модах "топовых" проектов. С целью защиты последних, я не буду подробно расписывать алгоритм эксплуатации этих уязвимостей, а лишь поверхностно расскажу принцип работы. Хотя кому я лгу: создатели читов уже проверили нижеописанное и ничего не нашли. Или нет...
Опасность: высокая. Разработчики RAGEMP добавили мнимую безопасность ресурсов, которые загружаются на клиент: сделали шифрование контента (dlcpacks и скриптов в том числе), захэшировали имена файлов и, вероятнее всего, применили другие извращения, но все эти потуги способны остановить только ленивых или слабеньких в реверсе. При должном умении и желании ваши ресурсы будут преобразованы в тот вид, в котором они хранятся на сервере. Никакие JS-обфускаторы [будь то бесплатный javascript-obfuscator или супер-дорогой jsscrambler], ваши исхищрения с eval (когда-то на Radmir RP видел такое) на клиенте не уберегут от возможности анализировать код. А это значит, что абсолютно любой человек может получить имена ивентов, посмотреть примеры аргументов и подделывать вызовы со стороны клиента. Держите это в голове при написании какой-либо системы, которая требует взаимодействия клиент -> сервер.
В моде RedAge беглым взглядом по серверному коду я нашёл одну подобную уязвимость. Она не способна сломать серверную экономику, но подпортить настроение игрокам, которым незаслуженно выдали розыск - легко.
Исходный код с уязвимостью:
C#:
[RemoteEvent("clearWantedLvl")]
public static void clearWantedLvl(Player sender, params object[] arguments)
{
try
{
var target = (string)arguments[0];
Player player = null;
try
{
var pasport = Convert.ToInt32(target);
if (!Main.PlayerNames.ContainsKey(pasport))
{
Notify.Send(sender, NotifyType.Error, NotifyPosition.BottomRight, $"Паспорта с таким номером не существует", 3000);
return;
}
player = NAPI.Player.GetPlayerFromName(Main.PlayerNames[pasport]);
target = Main.PlayerNames[pasport];
}
catch
{
target.Replace(' ', '_');
if (!Main.PlayerNames.ContainsValue(target))
{
Notify.Send(sender, NotifyType.Error, NotifyPosition.BottomRight, $"Игрок не найден", 3000);
return;
}
player = NAPI.Player.GetPlayerFromName(target);
}
var split = target.Split('_');
MySQL.Query($"UPDATE characters SET wanted=null WHERE firstname='{split[0]}' AND lastname='{split[1]}'");
try
{
setPlayerWantedLevel(player, null);
}
catch { }
Notify.Send(sender, NotifyType.Success, NotifyPosition.BottomRight, $"Вы сняли розыск с владельца паспорта {target}", 3000);
} catch (Exception e) { Log.Write("ClearWantedLvl: " + e.Message, nLog.Type.Error); }
}
Другие статьи:
Как не стоит делать: база данных и работа с ней на примере RedAge
[JS] Как подключить отладчик (Debugger) в PhpStorm для server-side
Последнее редактирование: