En Çok Başımıza Gelenler
Oyun Geliştiricileri için Hileyi Önlemenin 7 Yolu [Güvenli Oyun]
The New York Times tarafından yapılan araştırmaya göre, gamer’ların neredeyse yarısı hile yapıyor…
Video oyunları dünyanın en sevdiği eğlence türü haline geldi, üstelik Newzoo’nun 2023 itibariyle küresel alanda üç milyardan fazla ‘gamer’ hayatta olacağını belirtmesi bunun altını çiziyor. Öte yandan, çok oyunculu (multiplayer) oyunların artmasıyla, hilekarların sayısında da sıra dışı bir artış yaşanıyor.
The New York Times tarafından yapılan araştırmaya göre, video oyunu bağımlılarının neredeyse yarısı, hayatlarında en az bir kez hileye başvurduklarını kabul ediyor. Bu kadar yüksek oranda hileye başvurulması haliyle video oyunu sanayisinin elde ettiği 300 milyar doların üzerindeki gelir ile oyun tecrübesi arasında belirgin bir soru işaretine neden oluyor.
Eğer oyun oynamak size göre değilse, sadece şunu düşünün; neredeyse izlediğiniz her rekabet ortamında muhtemelen bir veya iki oyuncu hile yapıyor. Bu durumda video oyun müsabakalarını izlemekten keyif alır mıydınız? Bu başka bir tartışma konusunun sorusu olabilir ama şimdilik notlarımız arasında bulunsun…
İhlali gerektiren hile türleri arasında farklılık bulunuyor mu?
Video oyun dünyasında çok çeşitli hile türleri bulunuyor: Basit bir bot ile zorlayıcı komutların üstesinden gelmek, birçok önemli oyun içi eşyayı çoğaltmak veya sınırsız mühimmat elde etmek bunlardan sadece birkaçı.
Bir oyuncunun hedef üzerine otomatik olarak kilitlenmesini sağlayan “aimbot” hilesinden oyuncuların önceden belirlenmiş bir dizi hareket gerçekleştirmesini sağlayan hileleri tespit etmek, söz konusu hileler oyuncunun bilgisayarından çalıştırıldığı için (client) tespit etmesi de son derece zor. Bu sebeple sonu gelmeyen güvenlik bütçeleri sunabilecek AAA video oyunlarında bile devasa hile sorunları yaşanıyor.
Güvenlik bütçeleri sunmak doğrudan bir çözüm olarak belirmese de, kod yazarak ve daha iyi tasarımla hangi tür hilelerin önüne geçmek mümkün mü?
Çoklu oyunlarda hilenin üç temel yöntemi
Manfred isimli bir oyuncu, Defcon 2019 etkinliğinde en popüler çok oyunculu oyunlarda hile yapmanın ne kadar kolay olduğunu gözler önüne sermişti. Her türlü şifreleme ve engelleme yöntemlerini bypass etmek için Manfred code injection (güvenlik açıklarını kullanarak hatalı komut ve veri girmek) kullanarak farklı tabakalara müdahale etti, böylece oyuncunun client’ı üzerinde kod uyguladı.
1- Ultimate Online adlı popüler oyunda, her oyuncu evini silebiliyor olsa da, ev kimliği (ID) açıkça talep paketi tarafından iletiliyor. Ancak house ID’sinin talep eden oyuncu tarafından sahiplenildiğini doğrulayan bir sunucu doğrulaması bulunmuyor. Tüm kötü aktörlerin yapması gereken, sunucuya gönderilmeden önce house ID’yi değiştirmek, böylece diğer oyuncuların evlerini silmek mümkün oluyor.
2- Manfred’in bir diğer sunumunda, dev çok oyunculu Rift’te nasıl hile yapıldığı gözler önüne serildi. Manfred integer overflow kullanarak bankadan -1 coin (para) çekti ve en yüksek miktarı toplamayı başardı.
Bilgisayar programlama terminolojisinde, integer overflow bir aritmetik işlem belirli aralığın dışında çıkan bir rakamsal değer oluşturmaya çalıştığı zaman beliriyor. Seçilen rakam, verilen en yüksek rakamın üzerinde veya en düşük değerin altında olabiliyor.
3- Daha kolay ve hiçbir kod manipülasyonu gerektirmeyen bir yöntem, GTA 5 Online üzerinde client belleğine müdahale ederek sınırsız mühimmat elde etmeyi mümkün kılıyor. Tek yapılması gereken mühimmat değerini içeren bellek adresini tespit etmek. Bu işlem, “Cheat Engine” gibi bir yazılım ile kolayca gerçekleştirilebilirken, ardından mevcut mühimmatı temsil eden değeri araştırmak (240 diyelim) ve sonra bir kez mermi harcamak yeterli oluyor. Ardından bulunan adresler içerisinde yeni değeri (239) arayın. Geride kalan adresler mühimmat değerini temsil ederken, hilecilerin tek yapması gereken adres değerini yenilemek.
Çevrimiçi oyunlarda hile nasıl engellenebilir?
Bir video oyunu daha güvenli kılabilmek için iki temel konsept uygulanabilir:
1- Kodların açık kaynaklı olması:
Şifreleme, gizleme, üçüncü parti uygulamalar ve diğer yöntemler client koduna müdahale etmeyi zorlaştıran iyi güvenlik uygulamaları olsa da, bu yöntemler kolayca bypass edilebildiği için tamamen güvenilir değiller.
2- Bir client’a ve ondan gelen herhangi bir şeye güvenmeyin:
Yukarıdaki örneklerde gördüğümüz gibi hilekârlar client belleğini, diski, ağ trafiğini, çalışma zamanı (runtime) kodunu ve client tarafındaki her türlü içeriğe müdahale edebiliyor.
Çevrimiçi oyunlarda hileyi önleyen en iyi 7 yöntem
Yukarıdaki iki konsepti akıllarda tutarak, client tarafında önleyici bir strateji uygulamanın bir anlamı olmadığını görmemiz gerekiyor. Bu sebeple sunucu tarafına odaklanmamız gerekli. Aşağıdaki yöntemler, çok oyunculu oyunlarda hileleri önlemenin en iyi yöntemleri olarak beliriyor.
1- Özelleştirilmiş sunucuları tek geçerli otorite olarak kullanın. Listen server (oyuncu bilgisayarında host oluşturma) veya P2P gibi çoklu oyun mimarileri gelişim için iyi olsa da üretim için aynısı geçerli değildir. Oyun kararları sadece güvenilir ve güvenliği sağlanmış sunucular üzerinde gerçekleştirilmelidir.
2- Ağ bağlantılı bir kod yazılırken, client ve sunucu ayrımını yapmak gerekiyor. Client tarafından tasarlanmak için aranacak sunucu fonksiyonlarını etiketlemek, ilgilenmeniz gereken fonksiyonları temsil ettiği için hileleri engellemek için ilk adım olacaktır.
3- Her ne kadar düşük işlem gücü olsa da, sunucuyu hiçbir zaman sonuç ile değil, ancak sonuca giden eylemler ile güncelleyin. Örnek olarak, oyuncunun X eşyalarını aldığı sunucuyu güncellemek yerine, tam olarak oyuncu ne yaptı ise o eylemi güncelleyin. Böylece sunucu gerekli değerlendirmeleri yapacaktır ve gereken sonuçları yerine getirecektir.
4- Takip eden işlemleri geçersiz kılacak olsa da, client’tan sunucuya değişkenler göndermeyi sonlandırın. Tersine, oyuncunun X tip mermi kullandığı sunucuyu güncellemek ile sunucunun silah türünü yeniden belirlemesini sağlayın.
5- Client’tan gelen her içeriği doğrulayın ve client tarafından yapılan her türlü doğrulamayı reddedin. Mermiyi ateşlemeden önce oyuncu uzun menzilli bir silah mı kullanıyordu? Halen hayattalar mı? Alınan değişkenler geçerli mi ve beklenen değer aralığı içinde mi? Sakın hiçbir önemsiz kontrolü bile atlamayın!
6- Client-sunucu çağrıları arasında minimum erteleme yapılmasını sağlayın. Böylece bir sunucu fonksiyonunun olması gerekenden daha kısa bir aralıkta gerçekleşmesini engellemiş olursunuz. Örneğin, böylece bir hilekarın şarjörünü olması gerektiğinden daha hızlı harcamasını (hızlı ateş modifikasyonu) engellemiş olursunuz.
7- Çevresel kontroller: Bazı doğrulamaları gerçekleştirmesi kolay olmayacaktır. Örneğin, eğer bir oyuncu bir nesne ile etkileşim kurmaya çalışırsa, nesne ile oyuncu arasındaki mesafeyi kontrol edebilirsiniz.
Peki ya nesne bloke edilmişse ve oyuncu aslında onunla etkileşim kuramazsa? Bu tür kontroller çevresel işlemler ile gerçekleştirilebilir ve bazı durumlarda sunucu yükünü etkileyebilir.
Özet
Diğer alanlara kıyasla, çok oyunculu yapımlarda sunucu ile iletişim düzeyi devasa boyutlarda. Her bir bağımsız eylem sunucu tarafından senkronize edilmeli ve doğrulanmalı. Bu da, takibi kaybetmeyi kolaylaştırıyor.
Bir hilekarın tek ihtiyacı ‘gözden kaçırılan’ tek bir doğrulama. Bu sebeple bu bakış açısını bir oyunun geliştirilmeye başlandığı ilk andan itibaren bulundurmak önem taşıyor: Bir oyunda her türlü hile olasılığını gözden geçirerek nasıl önlenebileceklerini anlamak.
Önceden belirtildiği gibi tüm hileler daha iyi kodlarla veya tasarımlar önlenemez. En çok rastlanan hile türü oyun botları iken, yazılım uygulamaları oyuncu tarafında çalıştırılarak onlara belirgin bir avantaj sağlar.