Bu İnternet oyunları ve yarışmalar ile klasik bir sorundur. Flash kod bir oyun için bir puan karar kullanıcılar ile çalışır. Ancak kullanıcılar güvenilir ve Flaş kod, kullanıcının bilgisayarında çalışır değildir. Sen SOL sensin. Eğer yüksek puanlar dövme bir saldırganın önlemek için yapabileceğiniz bir şey yok:
Flaş baytkodlarına iyi belgelenmiş olduğundan, ne olduğunu düşündüğünüzden daha tersine mühendislik ve yüksek seviyeli dil (Actionscript) tanımlamak daha kolaydır --- sen, bir Flash oyun yayınlamak kaynak kodunu basıyorlar, siz ister zaman Bunu bilmek ya da değil.
Programlanabilir bir hata ayıklayıcı kullanmayı bilen herkesin herhangi bir zamanda (geçerli puanı dahil) herhangi bir değişkeni değiştirmek, ya da programın kendisi değiştirebilir böylece Saldırganlar, Flaş tercüman zamanı belleğini kontrol.
Lütfen sisteme karşı basit olası bir saldırı, bir proxy üzerinden oyun için HTTP trafiği çalıştırmak yüksek skor kaydetmek yakalamak ve yüksek bir skor ile tekrar etmektir.
Sen gibi görünebilir, hangi oyunu başlangıçta istemci şifreli bir belirteç göndererek örneğin, oyunun tek bir örneği kaydetmek her yüksek puanı bağlanarak bu saldırıyı engellemek için deneyebilirsiniz:
hex-encoding( AES(secret-key-stored-only-on-server, timestamp, user-id, random-number))
(Ayrıca, aynı etki için bir oturum çerezi kullanabilirsiniz).
Oyun kodu kaydetmek yüksek skor ile geri sunucuya bu belirteci yankıları. Ama saldırganın hala, oyunu yeniden başlatmak bir simge olsun, ve sonra hemen bir kurtarış çalınır yüksek puanı içine belirteci yapıştırabilirsiniz.
Yani bir sonraki değil, sadece bir simge ya da oturum çerezi beslemek değil, aynı zamanda bir yüksek skor şifreleyerek oturum anahtarı. Bu Flash oyun içine kodlanmış bir anahtar ile şifrelenmiş bir 128 bit AES anahtarı, kendisi olacaktır:
hex-encoding( AES(key-hardcoded-in-flash-game, random-128-bit-key))
Flash ikili içine yüksek puan-şifreleme-session-anahtar şifresini tuşunu kodlanmış çünkü artık oyun mesajların önce yüksek bir puan, o yapabileceği yüksek puan-şifreleme-oturum anahtarını, çözer. Sen yüksek puan SHA1 karma ile birlikte, bu Dekripte tuşu ile yüksek puanı şifrelemek:
hex-encoding( AES(random-128-bit-key-from-above, high-score, SHA1(high-score)))
Sunucu üzerinde PHP kodu emin isteği geçerli oyun örneği geldi yapmak için belirteci denetler, o zaman bu adımı atlayın (yüksek puanı yüksek puan SHA1 uyduğundan emin olmak için kontrol, şifreli yüksek puanı çözer , şifre çözme sadece) rastgele, büyük olasılıkla çok yüksek, yüksek puanlar üretecek.
Yani şimdi saldırganın Flash kodunuzu decompiles ve hızla vermedi bile, bir bellek arama ve izleyici ile 15 dakika içinde aşağı izlenen olurdu ancak ben biliyorum "(bir boğaz başparmak gibi yapışır AES kodunu bulur Bu oyun için benim puan 666, yani oh, yüksek skor şifreleme kodunu bakmak --- o değeri dokunan herhangi bir işlem yakalamak, hafızasında 666 bulsun! "). Oturum anahtarı ile, saldırgan, hatta Flaş kodu çalıştırmak zorunda değildir; o bir oyun başlatmak belirteç ve bir oturum anahtarı kapmak ve bir keyfi yüksek bir puan geri gönderebilirsiniz.
Sen en geliştiriciler tarafından sadece saldırganlar ile karıştırmasını bir kaç ay --- vazgeçmek vermek veya almak noktada artık konum:
XOR işlemleri ile AES tuşları çabalıyorlar
Anahtarı hesaplamak fonksiyonları ile önemli bayt dizileri değiştirilmesi
Ikili boyunca sahte anahtar şifreleme ve yüksek bir puan ilanları Saçılma.
Bu, tüm çoğunlukla zaman kaybıdır. Bu SSL da sana yardım edecek değildir, söylemeye gerek yok; Iki SSL noktalardan birini kötü olduğunda SSL sizi koruyamam.
Burada aslında yüksek puan dolandırıcılık azaltabilir bazı şeyler şunlardır:
Oyunu oynamak için giriş gerektiren, giriş bir oturum tanımlama üretmek var, ve birden çok üstün bir oyun aynı oturumda başlattı, ya da aynı kullanıcı için birden eşzamanlı oturumlar izin vermez.
(Daha karmaşık bir yaklaşım için, ortalama oyun süresi aşağıda az 2 standart sapmaları son oyun oturumları için yüksek puanlar "karantinaya" denemek) daha az şimdiye kadar oynanan en kısa gerçek oyunlarda daha son oyun oturumları yüksek puanlar reddet. Eğer oyun süreler serverside izliyoruz emin olun.
Saldırganların oluşturmak her oturum için makul görünümlü oyun bir "kağıt izi" üretmek zorunda, böylece sadece bir veya iki kez oyun oynamış oturumların yüksek puanlar reddetmek veya karantina.
Oyun sırasında "Heartbeat" puanları, sunucu bir oyun ömrü boyunca skor büyümeyi görür böylece. (0-999999 atlama, örneğin) makul puan eğrilerini takip etmiyorum yüksek puanlar Reddet.
Daha sonra kaydedilen geçici puanları karşı bağdaştırmak (örneğin, mühimmat miktarı, düzeyi pozisyon, vb) oyun sırasında "Snapshot" oyun devlet. Hatta ile başlamak için bu veri anormallikleri tespit etmek için bir yol olması gerekmez; sadece onu toplamak zorunda, ve sonra geri dönüp şeyler balık bakarsanız bunu analiz edebilirsiniz.
(Örneğin, hiç doğrulama başarısız şifreli bir yüksek puanı göndererek) güvenlik kontrolleri birini başarısız herhangi bir kullanıcı hesabını devre dışı.
Eğer sadece burada yüksek bir puan dolandırıcılık caydırmak konum olsa da unutmayın. Orada nothing Eğer önlemek için ne yapabilirim. Para senin oyununda çizgi üzerinde varsa, birisi size gelip herhangi bir sistem yenmek için gidiyor. Amaç stop bu saldırı değildir; sadece oyunu gerçekten iyi oluyor ve onu yenerek daha atak daha pahalı yapmak bulunuyor.