[TUT] Sunucunuzu Koruma

mcsbey

Paylaşım Ekibi
Katılım
2 Ağu 2019
Mesajlar
104
Tepki puanı
1
Yaş
29

İtibar Puanı:

- bir mod bunu 'sunucu derslerine' ya da uygun bir yere taşıyabilir mi? Teşekkürler
: Slight_smile:

Merhaba! Söz verildiği gibi; işte NUI geri aramalarıyla ilgili belirli bir istismardan bahseden önceki yazıya yapılan takip yazısı.
Bu sefer, neredeyse her ESX / VRP / Ekonomi tabanlı rol oynama sunucusunun uğraşması gereken çok daha yaygın hile sorununu ele almak için buradayım. Bu oldukça basit bir kavram ve burada nasıl yapıldığını anlatacağım; umarım kimse bu konuyu seçmez ve kendi kendine yapmaya karar verir - ama eğer yaparlarsa, onu nasıl durduracağını bileceksin
:kızarmak:
.
Exploit Uygulaması
Yararlanma basittir ve en temel haliyle böyle çalışır;
  1. Bir bellek editörü indirin, bu örnekte Cheat Engine'i kullanacağız.
  2. Hafıza editörünü kullanarak oyun işlemini seçin
  3. Bir ESX sunucusunda bir araç dükkanı girin, ucuz bir araç ya da bisiklet alın.
  4. Yeni satın aldığınız aracın Hex değerini tarayın, örneğin - 0xE823FB48
  5. Bu Hex değerinin sonuçlarını - 0x7E8F677F gibi bir şeyle değiştirin
  6. Aracı araba dükkanına geri sat
- Peki bunun sonucu nedir?
Bu örnekte, mavi üç tekerlekli bisiklet yarışı bisikletini aldık ve etkili bir şekilde daha değerli bir araç olan X80 Prototiposuna dönüştürdük ve sunucuya geri sattık. Esasen 100x'imiz paramızı çektik ve sunucu sahibi de akıllıca değil.
- Nasıl düzelteceğiz?
Bu özel bellek değişikliği örneğinin nasıl düzeltileceğine girmeden önce, bu hilenin girdiği varyasyonları ve savunmasız olduğunuzu tüm farklı yollarını anlamak önemlidir. Kafamdan bu sayfaya basitçe atılmış olan listemi okuyarak tüm bilgilere sahip olmayacağınızı açıkça belirtmek isterim. Bu istismarın çeşitliliğine sahip düzinelerce başka kaynak var ve bu kaynakları tanımlamak ve sorunu çözmek veya tamamen kullanmaktan vazgeçmek bir sunucu sahibi olarak sizin işiniz. Bir kaynak geliştiricisiyseniz, birlikte ilerleyin ve bu topluluğu birlikte daha iyi bir yer haline getirelim.
Kenar notu
- Exploit Varyasyonları
Bu şey her şekil ve büyüklükte gelir, ne zaman fiyat, araç modelleri, iş ödemeleri, mağaza fiyatları, silah fiyatları, silah modelleri, oyun içi parasal olarak satın alınabilecek her türlü eşyayı satın alabilirseniz, nakit para çekebilirsiniz. Müşteriyi, sunucunun geniş kullanıcı deneyimini değiştirmek için alıp kullandığı tarafa koyduğunuz değişkenler, bu yöntem kullanılarak kullanılabilir. Örneğin, 'Arturs'un Taşıt Atölyesi' kaynağında, yalnızca sıfır dolara bir araç satın almak ve ardından istediğiniz miktarda satmak için yerel tablodan kolayca yararlanabilirsiniz. Burada altıgen taramak zorunda bile değilsiniz, sadece 4 baytlık bir kesin değer. Kaynak yaratıcısına karşı bir şey yok, bahsedebilir miyim? Bu güzel bir tasarım ve aksi takdirde harika bir kaynak.
- Hassas Kod ve Yama
Kod1

Bu bir araç dükkanındaki müşteri taraflı bir masa. Gördüğünüz gibi, aracın adını, maliyetini ve modelini belirttik. Bunların tümü değiştirilebilir ve sunucu, kendisine geçirdiğiniz her şeyi, koşer olarak kabul eder çünkü gerçeklerin başka türlü olduğunu belirten bir kaydı yoktur.
d10f1d7acaeb25e65877b3551e5c1d23

İşte sihir burada, 545 çizgisinde. Müşteri (bu çerçevede) 'otomobil dükkanı: satın al' diye adlandırılan bir sunucu etkinliğini çağırıyor - birkaç bit bilgi boyunca geçiyor, işte bu "araçların fiyatları, fiyat, model" olay adı gösterir. Bu örnekte vehicleProps, satın almaya gittiğinde gördüğünüz arabanın konfigürasyonu ve boya işidir. Bunu yapar, böylece araba doğduğunda, önizlemiş olduğunuzdaki gibi görünür. Fiyat, doğrudan bu tablodan çekilir ve sunucu, kendisine hangi tutarın geçtiğini sizden tahsil eder. Model, sadece otomobilin modelidir ve sunucu, oraya hangi modelden geçerseniz onu üretecektir.
Bu sadece araba dükkanınız için izole edilmemiş olsa da, bu veri işlem yöntemini kullanan herhangi bir kaynak kolayca kullanılabilir.
Peki bunu nasıl önleriz? En iyi uygulama nedir?
Bazı kaynaklar, esx_carshop - veya adı her ne ise, satmadan önce bu plaka sunucusu tarafıyla ilişkilendirilen plakayı ve modeli kontrol etmeye başlamıştır. Sorun şu ki, esx_garages henüz o grupta değil ve esx_carshop'un kullandığı sistem de o kadar da iyi değil. Yeni BMXGatti'nizi bir garaja düşürüp geri çekerek dönüşüm dediğim şeyi kolayca yapabilirsiniz; daha sonra sunucu olarak satmak artık bu araca tamamen sahip olduğunuz izlenimi altında.
Bu sorunun kesin ve kurutulmuş bir çözümü yoktur ve tüm konu hakkındaki felsefem sizce biraz çarpık ve bükülmüş olabilir ve bu sorun değil
: Slight_smile:
.
Kendi kod satıcımı tasarlarken kod parçacıkları ve düşüncelerimi dahil etmeye başlayacağım, bu da sunucumda çalıştırdığım tüm kaynakları kodlarken takip ettiğim düşünce.
Size bu yöntemleri nasıl uygulayabileceğinizi göstermeye başlamadan önce, ilk olarak nasıl tasarlanması gerektiğine bakalım.
kuyruk MS boya akış şeması

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.


Bu, sunucunuzun nasıl çalıştığını gösteren diyagramımdır. Sunucu, tüm müşterinizin verilerinin depolandığı veritabanına doğrudan bağlanır. İstemciler, sunucuya bağlanır ve kalıcı olması için veritabanına bilgi alıp göndermelerini ister.
Mükemmel bir dünyada, ağımız böyle gözüküyor. Bir istemci sunucuya bağlanır ve profil bilgilerini ister. Sunucu bu bilgiyi istemciye gönderir ve istemci onu alır ve gerekli bilgiyi görüntüler. Aklınızda bulundurun, müşteri yine de tüm resme sahip değil - sunucu hala her şeyi takip ediyor. Müşteri bir araç almaya gider ve bir BMX bisikleti istediklerine karar verir. Müşteri sunucuya “Hey! Lanet bir BMX bisikleti istiyorum, gimmie !!! ”- bu noktada müşteri sunucuya oyuncu kimliği ve istenen modelden başka bir bilgi göndermeyecek. Sunucu daha sonra veritabanına erişecek, hem oynatıcı hem de istenen araç hakkındaki bilgileri alacaktır. Oyuncunun aracı satın almak için yeterli parası varsa, sunucu parayı oyuncular hesabından çeker, aracı veritabanındaki profillerine ekler ve ardından yeni bilgileri müşteriye geri gönderir. Tüm bunlar, müşteri kendi kimliği dışındaki önemli bilgilerin tam olarak eline geçmeden veya kontrol altına alınmadan gerçekleştirildi ve sunucuya talep edildi.
Dünyanın yanmasını izlemeyi seviyorum. Aynı kesin düşünce sürecini izliyorum, çünkü bu güzel bilgiyi müşteriye belirli durumlarda bırakıyorum, çünkü oyunlarını 'It's Magic' baslı versiyonuna indirmeden önce insanların birkaç dakika boyunca pop izlemelerini izlemek eğlenceli. Bu, örneğin, bu örnek için gayet iyi.
Bu benim araç satıcımın sunucuya söylediği şey. Önceki örneğimizde, sunucu bu bilgiyle yalnızca kabul etmekten başka bir şey yapmadı. Aracın ücretini sunucuya aktardığımı fark edeceksiniz, bu sadece hasta ve bükülmüş bir piç olduğum için.

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.


Sunucudan çekilen para bu, büyünün olduğu yer burası.

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.


Eksi, kendi izleme zevkinize dahil etmemeyi seçtiğim döngü arayan bazı iğrenç şeyleri yaptık; bilgiyi istemciden alıyoruz, sunucunun bilgisine göre kontrol ediyoruz ve ardından sunucunun inkar edilemez gerçek olarak bildiklerine ve müşterinin isteğine dayanarak karar veriyoruz. Bu kod öncelikle diyor - model var mı? Eğer öyleyse, devam et. İstemciden talep edilen model, sunucuda istenen ile aynı mı? Oyuncunun istediği maliyet, sunucuda depolanan maliyetle aynı mı? Ve - oyuncu bu alışverişi yapmak için yeterli paraya sahip mi?
Bunların hepsi kontrol ederse, parayı oyuncudan alırız ve o araç için yeni bir rasgele plaka oluştururuz. Bilgileri veri tabanına yerleştiririz ve ardından yeni rastgele oluşturulmuş plaka ve yumurtlama modeli ile müşteriye geri göndeririz.
Ya bir şey balıksa? Geleneksel olarak “üzgünüm, daha sonra tekrar deneyin” diyen bir hata mesajı veriyoruz. Bu durumda, şunu yapıyoruz -

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.


Bir şey doğru değilse, müşteri sunucuya yalan söylemeye çalışıyorsa, bunu yaparız. Tüm zamanların en sevdiğim kaynağını oluşturduğum için , InteractSounds'ın yaratıcısına teşekkür ederim . Ekranın kararmaya başladığı anda 'Magic' şarkısının bas artırılmış bir versiyonunu çalıyor ve ardından oyun kazasını sonlandırmak için can sıkıcı bir durum ortaya çıkıyor.
Bu işlevselliği uygulamak gerçekten oldukça basittir ve yapmaya istekli iseniz, atmanız gereken sadece bir adım daha var.
İstemci tarafındaki bilgileri (araç verileri içeren tablolar gibi) sunucuya taşıyın. Ardından, istemci tarafından sunucu tarafı bilgisine karşı iletilen bilgileri denetlemek için sunucu olaylarınızı değiştirin. Bu bulmacanın bir parçası bile kontrol edilmezse, işlemi anında iptal edin. Bunun nasıl yapıldığını öğrenmek hızlı ve acısızdır, ancak net olayların nasıl çalıştığını anlamak önemlidir. Burada wikide çok iyi belgelenmiştir;
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.

- Bunların hiçbirini anlamadım, yardım et.
Bunların hiçbirini anlamıyorsan, sorun değil. FiveM sunucusunu çalıştıran herkesin bir ağ sihirbazı olmadığı gerçeğini kabul ediyorum. Bu istismarların hedefi sizseniz, güvenlik açığının kaynak olduğunu düşündüğünüz kaynağın geliştiricisine başvurun.
Be kind, be clear about the issue, and provide as much useful information as you can.
Umarım bunu okumaktan zevk aldınız ve eğer hayatta kalan her şey sizin için kudos; Her şeyi ispat okumam, bu yüzden bir şey net değilse bir cevap gönderin ve mümkün olan en kısa sürede size geri döneceğim ve diğer kişilerin daha iyi anlamalarına yardımcı olmak için gönderiyi değiştirmeye çalışacağım.
- Düzenlemeler
Sorularınızı gönderin, burada küçük bir soru-cevap bölümü oluşturabilirim.
: Slight_smile:

NUI istismarları hakkındaki şu anki kapalı konuya cevap vermek için - hayır, net olaylarınız 'şifreleyen' veya 'şaşırtan' bir kaynak kullanmak, maalesef buradaki sorunu çözmez; NUI yöntemini kullanırken sadece bir JS $ .post gönderiyoruz ve verileri değiştirirken tüm yaptığımız şey aslında istemcinin sunucuya gönderdiği değişkeni değiştirmek, alışılmadık bir şekilde değil.
Eski Konu

Dans çerçevelerinin bir dost sahibi gand goruyorum!
Bu tür yayınları görmeyi gerçekten çok seviyorum, umarım daha fazla insanın, ağ yazılımının nasıl tasarlanacağı ve FiveM'de daha iyi gamemodes uygulanması gerektiği konusundaki bu çok temel şeyi anlaması için.
Sadece bir şeyler eklemek istiyorum, boya akış şemalarını seviyorum, onlar sevimli, sevimli resimler, onları gördüğümde okuduğum her tasarım dökümanında beni gülümsetiyorlar. ALIN! Eski bir CADilizasyon harabesi üzerine inşa edilmiş bu büyülü aracı sizlere sunuyoruz.
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.
!!

Şakalar yapar, başkalarının halkın cehaletini umursamadığınızı anlıyorum… ama doğru ifadeleri kullanmak ve çok az dokunuşla (ağ kurma olayını açıklamak için bir CAD aracını kullanmak gibi) insanların daha fazla söylemek zorunda olduğunuz şeyi ciddiye almasına neden olabilir , Sunucu sahiplerinin çok önemli konuları atlayabileceği üzücü.
1 Yanıtla




I appreciate the proper flowchart
:gülümseme:





random side note
This isn’t just a guide for cheat engine; read this for what it is, a guide on how to network between client and server events.




Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.


Can something like this resolve the problem?
Just newbie asking…

Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.

salty_tokenizer Add security tokens to FiveM server events that are accessible from the client in order to prevent against Lua injections (and similar cheats). Features A unique security token is generated for each resource each time the server is started. If the token is figured out by a cheater somehow, a restart will nullify their findings. Tokens can only be requested by the client once. This prevents a cheater from attempting to retrieve the token through a command. Players that trigger…


If the exploit is in the alley of lua injection, no; that’s not going to stop them. If it’s CEF/CE then that isn’t even relevant.
I believe the creator of that resource severely misinterpreted a few things.



Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.

Not exactly understanding what point or solution you’re getting at; however…
The fact still stands, that despite all attempts at bandaging the issue with whatever obfuscation methods, key generators, etc you wish to use, people still refuse to address the actual issue. Why not just fix the problem? ;L



Can’t really speak as to what other solutions you’re referring to but I’ve not found anything like what I describe in games. Publically at least.
As for why not, well, that is a good quesiton. There is no single spot one can hook that will magically apply across all data serialization.
salty_tokenizer is close but not secure. The actual token generation is simply calling random.



This entire scenario is nullified by modifying vehicleshop to save the sale price on purchase and use that against the resale. They can change the hash to anything they’d like but the serverscript will give them the amount of money that plate has a value for.




Uh… in this scenario, it is that simple.
Read the thread, read my responses. If the server knows that the value is 500, and the client tells it 400, it’s not going to listen.




– edit to above;
I understand what you mean as far as the latency issues - it’s a common problem when the server handles ALL of the networking, but here we’re simply talking about exploit blocking. FiveM will never have the networking capacity to run fully server-sided control over all player variables such as movement etc…





Not sure why you’re going all offensive now… I’m saying that the issue that most server owners are facing right now is related to unsecured events, whether it be a simple cheat engine exploit or someone literally clearing an entire database.
You’re talking about high level networking that we might see in a MMO style game where movement calculations and other fine details are indeed done by the server, however that is not the case in FiveM and never will be.
Also; maybe I’m wrong, maybe you are making some sort or valid point but your speech is too jumbled for me to comprehend.




I hope we can get back on topic instead of I know you are but what am I shitposts that end in a topic being locked. These types of topics are very interesting and helpful and I hate to see them disappear.




Agreeing with
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.
here.
Değerli ziyaretçimiz lütfen, içeriği görüntüleyebilmek için Giriş yap veya Kayıt ol anlayışınız için teşekkürler.

Once again; you’re way off the topic of discussion. Let me try to turn this into something useful.
The short and simple of my response was ‘it won’t stop people from screwing with your server’ because it won’t. And, I’m still not sure what you’re getting at. I said the creator of that resource misinterpreted the way lua injectors work, it’s a resource to ‘stop lua injectors.’ It will NOT stop someone with a lua injector. Why? Generally speaking, if you’re using a real injector these days, you coded it yourself. If you coded it yourself, you’re probably smart enough to bypass the tokenizing system.
And it will not stop NUI based exploits for the following two reasons -
  1. NUI exploits are non identifiable. By this I mean, when you use CEF to exploit a vulnerable NUI based resource, you are sending a legitimate post command with modified data.
  2. Because it is a legitimate $.post function to the NuiCallback, it won’t matter how hard you obfuscate your resources or whether you have l33t 1337 super token encryption, because like I said - it’s a ‘legitimate’ request made by the client.
The simple solution, as I said in the main post, and in multiple replies is to handle the sensitive data on the server-side. Define the possibilities, and if the request from the client is outside of the norm, do not allow it.
Sorry, but rambling about high level networking requests that would be of consideration in a competitive e sports game, or a browser based MMO application does not assist anyone in actually resolving the vulnerabilities that stem from a lack of basic security measures.




Uh; just going to ignore the whole first half of that because again - doesn’t make any sense. I want to believe that you’re trying to say something useful, and that you do indeed know what you’re talking about, but the way it’s coming out just isn’t comprehensible.
For crying out loud, how hard is it to get this through your head? If the server knows A = A, and the client comes along and says A = B, then it tells the client to f off. Are you trying to argue that to not be the case? Seriously?
“Not only does it not scale very well but the client is still free to lie about whatever it wants.”
How is that even close to a logical statement? The server-side variables don’t just suddenly go ‘oh hey wow yeah that random dude said 30000 so now I equal 30000’ - unless you specifically implement the function to make that happen.
Brain exercise time.
Clientside -
– Trigger a server event named lowiq, pass the string ‘admin’ to it.
TriggerServerEvent(‘lowiq’, “admin”)
Serverside -
RegisterServerEvent(‘lowiq’)
AddEventHandler(‘lowiq’, function(role)
– a function that pulls identifiers off the source client, returns true if admin
local hasPower = getAdmin(source)
if hasPower then
< – insert sql query to do something and whatever other means needed to add this role to user —>
end
end)
Commented to hopefully aid your understanding.
In this example, are you telling me that the server is just all of the sudden going to go ‘hur dur, we got told to make this dood admin so lets just skip the first function and the if statement and make dat happen’ ???
Second half;
I didn’t ask for feedback.
"bok boku atma, hoşça kal.




Ve şimdi forum moderatörleri mesajlarımı siliyor? Neden şaşırmadım?




Belki de birbirinizle konuştuğunuz tondur. Bir nezaket düzeyi bekliyoruz. Örneğin kişisel saldırı yok. Birbirinize küfür etmeden bir tartışma yapın ve hiçbir şey silinmeyecek




İnsanların sunucuları wtf atak yaptığında kişisel hiçbir şeyi umursamaz mısın?!?!?! 0 beyin
O zaman bu salak ioerror onun bir parçası olmadığını açıkça söylüyor.