Oszuści nadużywają zdarzeń sieciowych, aby dawać sobie pieniądze, spawnować pojazdy i zdobywać przedmioty. Oto jak działają exploity triggerów w FiveM, dlaczego tak trudno je audytować ręcznie i jak Trigger Finder od ZeroTrust mapuje i oznacza całą Twoją powierzchnię ataku zdarzeń.
Jeśli prowadzisz serwer FiveM od dłuższego czasu, znasz ten problem: gracz z menu cheatów daje sobie pieniądze, spawnuje pojazdy albo zapełnia ekwipunek przedmiotami, nie dotykając przewidzianego interfejsu. Nie łamie silnika gry; bezpośrednio wywołuje zdarzenia sieciowe Twojego serwera.
To najczęstszy sposób wykorzystywania serwerów FiveM, a „zabezpiecz swoje zdarzenia” to standardowa rada. Problem w tym, że ta rada zakłada, że już wiesz, które zdarzenia są wystawione. Na serwerze z dziesiątkami zasobów prawie nikt tego nie wie. Ten wpis wyjaśnia, jak działają exploity triggerów, dlaczego tak trudno je naprawić ręcznie i jak zamieniliśmy cały ten problem w narzędzie: Trigger Finder.
W FiveM skrypty komunikują się przez granicę klient–serwer za pomocą zdarzeń sieciowych. Klient wywołuje TriggerServerEvent, a serwer uruchamia handler zarejestrowany dla danej nazwy zdarzenia. Dokładnie tak działa legalna rozgrywka — i dokładnie to wykorzystuje cheat.
Menu cheatów może wywołać dowolne zdarzenie sieciowe zarejestrowane przez Twój serwer, z dowolnymi argumentami. Jeśli zasób ma zdarzenie serwerowe, które dodaje pieniądze, daje przedmiot lub spawnuje pojazd i ufa wartościom przysłanym przez klienta, oszust po prostu wywołuje je bezpośrednio:
-- Podatne: serwer ufa wszystkiemu, co przysyła klient
RegisterNetEvent("shop:buyItem", function(item, amount)
local ply = FX.GetPlayerFromSource(source)
-- Brak sprawdzenia ceny, brak walidacji — klient kontroluje wszystko
ply.addItem(item, amount)
end)
-- Cheat po prostu wywołuje:
-- TriggerServerEvent("shop:buyItem", "gold_bar", 9999)Naprawa pojedynczego zdarzenia jest dobrze znana: waliduj po stronie serwera, nigdy nie ufaj danym klienta. Dokładne wzorce opisujemy w naszym Przewodnik bezpieczeństwa zdarzeń Lua w FiveM. Trudność nie leży w naprawie jednego zdarzenia; leży w tym, by wiedzieć, gdzie są one wszystkie.
Typowy serwer roleplay uruchamia od 50 do ponad 300 zasobów, wiele z nich to skrypty zewnętrzne, których nie pisałeś. Każdy może rejestrować dziesiątki zdarzeń sieciowych — potencjalnie tysiące zdarzeń rozsianych po plikach, których nigdy nie otwierałeś. Nie da się zabezpieczyć tego, czego nie widać, i nikt nie będzie ręcznie czytał każdego zasobu w poszukiwaniu zapomnianego handlera addMoney.
Zamiast publikować kolejną dokumentację, wbudowaliśmy audyt bezpośrednio w panel ZeroTrust. Pomysł był prosty: jeśli niebezpieczną częścią serwera jest jego powierzchnia zdarzeń, to każdy właściciel powinien móc zobaczyć całą tę powierzchnię na pierwszy rzut oka, uszeregowaną według ryzyka, z bezpośrednią drogą do każdego elementu.
Trigger Finder to skaner wbudowany w panel ZeroTrust. Uruchamiasz skan inicjowany przez serwer, a on przechodzi przez Twoje zasoby i wyciąga każde znalezione zdarzenie i trigger — oznaczając każdy zasobem, plikiem, numerem wiersza, stroną (klient lub serwer) i nazwą zdarzenia.
Zamiast zgadywać, otrzymujesz kompletny, przeszukiwalny spis każdego zdarzenia sieciowego, które wystawia Twój serwer. Każdy trigger jest zapisany z miejscem, w którym żyje, i kierunkiem przepływu — Klient → Serwer, Serwer → Klient, Klient → Klient lub Serwer → Serwer — abyś od razu widział, które są osiągalne dla złośliwego klienta.
Wynikiem jest rozkład ryzyka dla całego serwera: ile triggerów jest bezpiecznych, a ile krytycznych, które zasoby zawierają najwięcej niebezpiecznych zdarzeń i jak wszystko dzieli się między klienta a serwer.
Każde znalezisko prowadzi z powrotem do swojego zasobu → pliku → wiersza, z podglądem kontekstu kodu, aby odczytać trigger na miejscu. Gdy Trigger Finder oznaczy niebezpieczny handler addItem, wiesz dokładnie, który skrypt i wiersz wzmocnić — bez szukania.
Każdy serwer jest inny, zwłaszcza z niestandardowymi frameworkami. Możesz skonfigurować własne słowa kluczowe i listę niebezpiecznych zdarzeń, aby Trigger Finder oznaczał nazwy funkcji ważne dla Twoich skryptów, a nie tylko domyślne.
Trigger Finder mówi, co zabezpieczyć. Zamknięcie luki to kolejny krok: waliduj każde oznaczone zdarzenie po stronie serwera, pobieraj wartości metodami serwerowymi zamiast ufać klientowi i sprawdzaj stan, pozycję oraz uprawnienia gracza przed działaniem. Wszystkie wzorce — wraz z convarami bezpieczeństwa FXServer, które warto włączyć — znajdziesz w naszym Przewodnik bezpieczeństwa zdarzeń Lua w FiveM.
Nie da się bronić powierzchni ataku, której nigdy nie widziałeś. Trigger Finder zamienia mglistą radę „zabezpiecz swoje zdarzenia” w konkretną listę kontrolną wygenerowaną z Twojego prawdziwego serwera — abyś dokładnie wiedział, co jest wystawione i gdzie to naprawić.