٢٥ يونيو ٢٠٢٦
6 min read
ZeroTrust Team

إيقاف استغلال المُشغّلات (Triggers) في FiveM: كيف حللناها باستخدام Trigger Finder

يستغل الغشاشون أحداث الشبكة لمنح أنفسهم المال وإنشاء المركبات والحصول على العناصر. تعرّف على كيفية عمل استغلال المُشغّلات في FiveM، ولماذا يصعب تدقيقها يدويًا، وكيف يرسم Trigger Finder من ZeroTrust ويعلّم كامل سطح هجوم الأحداث لديك.

إذا كنت تدير خادم FiveM منذ فترة، فقد واجهت هذه المشكلة: لاعب يمتلك قائمة غش يمنح نفسه المال، ويُنشئ المركبات، أو يملأ حقيبته بالعناصر، دون أن يلمس الواجهة المقصودة إطلاقًا. هو لا يكسر محرك اللعبة؛ بل يستدعي أحداث الشبكة الخاصة بخادمك مباشرة.

هذه هي الطريقة الأكثر شيوعًا لاستغلال خوادم FiveM، و«أمّن أحداثك» هي النصيحة المعتادة. المشكلة أن هذه النصيحة تفترض أنك تعرف مسبقًا أي الأحداث مكشوفة. وعلى خادم يشغّل عشرات الموارد، لا يكاد أحد يعرف ذلك. يشرح هذا المقال كيف يعمل استغلال المُشغّلات، ولماذا يصعب إصلاحه يدويًا، وكيف حوّلنا المشكلة بأكملها إلى أداة: Trigger Finder.

ما هو استغلال المُشغّل فعليًا

في FiveM، تتواصل السكربتات عبر حدود العميل والخادم باستخدام أحداث الشبكة. يستدعي العميل TriggerServerEvent فيشغّل الخادم المُعالِج المُسجَّل لاسم ذلك الحدث. هكذا تعمل اللعبة الشرعية تمامًا — وهذا بالضبط ما يستغله الغش.

يمكن لقائمة الغش إطلاق أي حدث شبكة يسجّله خادمك، بأي وسائط يريدها. وإذا كان لأحد الموارد حدث خادم يضيف المال أو يمنح عنصرًا أو يُنشئ مركبة ويثق بالقيم التي يرسلها العميل، فإن الغشاش يستدعيه مباشرة ببساطة:

-- قابل للاستغلال: الخادم يثق بكل ما يرسله العميل
RegisterNetEvent("shop:buyItem", function(item, amount)
    local ply = FX.GetPlayerFromSource(source)
    -- لا فحص للسعر ولا تحقق — العميل يتحكم بكل شيء
    ply.addItem(item, amount)
end)

-- الغش ببساطة يستدعي:
-- TriggerServerEvent("shop:buyItem", "gold_bar", 9999)

المشكلة الجوهرية

كل مُعالِج حدث شبكة يضيف مالًا أو عناصر أو أسلحة أو مركبات أو وظائف هو ثغرة محتملة، ما لم يتحقق الخادم من الطلب بشكل مستقل عمّا يدّعيه العميل.

لماذا يصعب إصلاحها يدويًا إلى هذا الحد

إصلاح حدث واحد مفهوم جيدًا: تحقَّق من جهة الخادم، ولا تثق أبدًا بمدخلات العميل. نغطّي الأنماط الدقيقة في دليل أمان أحداث Lua في FiveM. الصعوبة ليست في إصلاح حدث واحد، بل في معرفة أين توجد جميعها.

يشغّل خادم تقمّص الأدوار النموذجي من 50 إلى أكثر من 300 مورد، كثير منها سكربتات من طرف ثالث لم تكتبها أنت. وقد يسجّل كل منها عشرات أحداث الشبكة — أي ربما آلاف الأحداث المبعثرة في ملفات لم تفتحها قط. لا يمكنك تأمين ما لا تراه، ولن يقرأ أحد كل مورد يدويًا بحثًا عن مُعالِج addMoney منسيّ.

الرؤية هي المشكلة الحقيقية

لا يُستغَل أصحاب الخوادم لأن تأمين الحدث صعب، بل يُستغَلون لأنهم لم يعرفوا أصلًا بوجود الحدث الخطير.

كيف حللناها

بدلًا من نشر مزيد من التوثيق، بنينا التدقيق مباشرة داخل لوحة ZeroTrust. كانت الفكرة بسيطة: إذا كان الجزء الخطير من الخادم هو سطح أحداثه، فينبغي أن يتمكن كل مالك من رؤية هذا السطح بأكمله بنظرة واحدة، مرتبًا حسب الخطورة، مع مسار مباشر إلى كل عنصر.

  • اعثر على كل شيء — ارسم تلقائيًا كل حدث ومُشغّل عبر جميع مواردك، لا تلك التي تتذكرها فقط.
  • رتّب حسب الخطورة — أبرِز المُعالِجات التي يستهدفها الغشاشون فعلًا (المال، العناصر، الأسلحة، المركبات، الوظائف، HTTP الصادر) لتبدأ من حيث يهم.
  • اذهب مباشرة إلى المصدر — حدّد المورد والملف والسطر بدقة كي يستغرق الإصلاح ثوانٍ.

تعرّف على Trigger Finder

Trigger Finder ماسح مدمج في لوحة ZeroTrust. تشغّل فحصًا يبدأ من الخادم، فيمرّ عبر مواردك ويستخرج كل حدث ومُشغّل يجده — ويعلّم كلًا منها بمورده وملفه ورقم سطره وجهته (عميل أو خادم) واسم حدثه.

يرسم كامل سطح المُشغّلات لديك

بدلًا من التخمين، تحصل على جرد كامل وقابل للبحث لكل حدث شبكة يكشفه خادمك. يُسجَّل كل مُشغّل مع مكان وجوده واتجاه تدفقه — عميل ← خادم، خادم ← عميل، عميل ← عميل، أو خادم ← خادم — لترى فورًا أيّها يمكن لعميل خبيث الوصول إليه.

يعلّم الخطيرة تلقائيًا

  • تحرّك المال: addMoney، giveMoney، addAccountMoney، addBank، giveBank.
  • تمنح العناصر: giveItem، addItem، addInventoryItem.
  • توزّع الأسلحة: giveWeapon، addWeapon.
  • تُنشئ المركبات: addVehicle، spawnVehicle.
  • تغيّر الوظائف: setJob، setPlayerJob.
  • تُنشئ pickups أو ترسل طلبات صادرة: createPickup، PerformHttpRequest، SendWebhook.

النتيجة هي توزيع للمخاطر لخادمك بأكمله: كم عدد المُشغّلات الآمنة مقابل الحرجة، وأي الموارد تحتوي أكثر الأحداث خطورة، وكيف ينقسم كل شيء بين العميل والخادم.

يصنّف كل شيء إلى فئات

  • المال وأحداث منح/إضافة العناصر وأحداث الحقيبة للاقتصاد.
  • إنشاء المركبات وتغيير الوظيفة لاستغلالات تقمّص الأدوار الشائعة.
  • RegisterNetEvent وAddEventHandler لرصد الأحداث المسجَّلة في السياق الخاطئ.
  • الأحداث الديناميكية لكل ما لا يطابق نمطًا معروفًا.

يأخذك إلى السطر بالضبط

كل نتيجة تعود إلى موردها ← ملفها ← سطرها، مع عرض لسياق الكود لقراءة المُشغّل في مكانه. وعندما يعلّم Trigger Finder مُعالِج addItem خطيرًا، تعرف بالضبط أي سكربت وأي سطر يجب تحصينه — دون بحث.

قابل للضبط حسب خادمك

كل خادم مختلف، خاصة مع أطر العمل المخصّصة. يمكنك ضبط كلماتك المفتاحية وقائمة الأحداث الخطيرة الخاصة بك، كي يعلّم Trigger Finder أسماء الدوال المهمة لسكربتاتك أنت، لا الافتراضية فقط.

من الاكتشاف إلى الإصلاح

يخبرك Trigger Finder بما يجب تأمينه. وسدّ الفجوة هو الخطوة التالية: تحقّق من كل حدث مُعلَّم من جهة الخادم، واسترجع القيم بطرق من جهة الخادم بدلًا من الثقة بالعميل، وافحص حالة اللاعب وموقعه وصلاحياته قبل التصرّف. كل الأنماط — إضافة إلى متغيّرات convar الأمنية في FXServer التي يجدر تفعيلها — موجودة في دليل أمان أحداث Lua في FiveM.

دفاع متعدد الطبقات

يرسم Trigger Finder السطح، والتحقق من جهة الخادم يسدّ الثغرات، وكشوفات ZeroTrust تمسك الغشاشين الذين يواصلون المحاولة. لا تكفي أي طبقة وحدها.

كفّ عن تخمين سطح هجومك

لا يمكنك الدفاع عن سطح هجوم لم ترَه قط. يحوّل Trigger Finder النصيحة الغامضة «أمّن أحداثك» إلى قائمة تحقّق ملموسة مولَّدة من خادمك الفعلي — لتعرف بدقة ما هو مكشوف وأين تصلحه.

هل أنت مستعد لرؤية سطح المُشغّلات في خادمك؟

يأتي Trigger Finder ضمن لوحة ZeroTrust. احصل على ZeroTrust أو انضم إلى Discord الخاص بنا للبدء.