Advergame Güvenliği Yunus ÇADIRCI
Ajanda Hakkında Advergame Nedir? Neden Advergame Güvenliği? Kullanılan Teknolojiler Manipülasyon Yöntemleri Hardening Peki Bu Bilgi Gerçek Hayatta Ne İşime Yarayacak? Ülkemizden Örnekler Soru Cevap
Hakkında Haberleşme Mühendisi/2004 4 Yıldır Telekomünikasyon Sektöründe Developer Kökenli Series 60, Web Tabanlı, Masaüstü SIP, RTP, HTTP Kötü Kod Nasıl Yazılır Güvenli Yazılım Geliştirme Yaşam Döngüsü www.yunuscadirci.com
Advergame Nedir? Advergame = Advertisement + Game (Advergaming = Advertising + Gaming) Oyunların interaktivite özelliği kullanılarak yapılan reklamlardır. Kullanıcı, ürün veya hizmeti aktif olarak oyunda kullanır. Sonucunda ödül dağıtımı gerçekleşebilir.
Neden Advergame Güvenliği? Maddi ödül nedenli motivasyon Oyunların %90 ı çok kolay kırılabilir Deloitte Hollanda/2008 Çok fazla kişisel bilgi mevcut PII: Personally Identifiable Information Saldırgan kontrolündeki ortam Bilişim Hukuku dışında* Geliştiriciler tasarım kökenli ve eksik S-SDLC
Kullanılan Teknolojiler Hedef olabildiğince çok kullanıcıya ulaşmak Browser tabanlı teknolojiler kullanılıyor Adobe Flash HTML + Javascript Java Applet ios tabanlı Advergame ler yükselişte 5. Sonuç Değerlendirilir 2. Oyun İşlenir 1. Oyun Dosyası Oyuncuya Gönderilir HTTP Oyuncu 3. Oyun Oynanır 4. Oyun Sonucu Sunucuya Gönderilir HTTP
Manipülasyon Yöntemleri Amaç Advergame sunucusuna istenilen veriyi göndermek. Tampering Gönderilen veriyi on-the-fly değiştirmek Decompiling Hash Algoritması, Salt, Secret Key Erişimi Game Engine Erişimi Memory Editing Hafızadaki değerleri değiştirmek Bytecode u değiştirip game engine e mudahele etmek DOM Manipülasyonu HTML tabanlı oyunlara müdahele CSRF Zaman Manipülasyonu
Tampering Açık giden veriyi değiştirmek Basit HTTP Proxy veya Firefox eklentileri yeterli Fiddler HTTPAnalyzer Tamper Data
Decompiling Flash, Silverlight ve Java gibi teknolojiler ile geliştirilen uygulamalar bytecode dan kaynak koda dönüştürülebilir kod içerisinde gizli kalması gereken bilgilere erişmek mümkün private function Init() : void { var _loc_1:string = "I7Qe7XhwXdSCSXk9kSrGtUGEHFY6S2hBTVi/16E2rGQ="; keybytes = new ByteArray(); keybytes.writemultibyte(_loc_1, "utf-8"); hmac = Crypto.getHMAC("sha256"); return; }// end function
Decompiling Flash, Java standartlar açık Opcode bilgileri mevcut Memory editing ile beraber kullanıldığında saldırgana tam kontrol sağlıyor
Memory Editing Memory Editor programları ile hafızadaki değişkenlere direk erişim Cheat Engine sıkça kullanılıyor
Memory Editing Hafızaya yüklenen uygulamanın bytecode ları değiştirilebilir. Oyun yapısına müdahele edilebilir Tespiti oldukça zor //24 0a _as3_pushbyte 10 //68 81 08 _as3_initproperty bonus //60 bf 06 _as3_getlex _apple 24 0a 68 81 01 60 bf 06 _apple.bonus=10 24 64 68 81 01 60 bf 06 _apple.bonus=100 //5d 82 04 _as3_findpropstrict stop //4f 82 04 00 _as3_callpropvoid stop(param count:0) 5d 82 04 4f 82 04 00 stop() 09 09 09 09 09 09 09 nop [hiçbirşey yapma]
DOM Manipülasyonu HTML tabanlı oyunlara uygulanıyor Bilgi yarışması/seçme tarzı oyunlarda kullanılabiliyor Greasemonkey ya da WebBrowser nesnesine sahip uygulamalar ile yapılabilir
DOM Manipülasyonu mysecenek=getrandomint(1,4); clickedelt=mysecenek; mysayfa="http://www.acunn.com/game1of3?res="+myse cenek; var req = new XMLHttpRequest(); req.open('get', mysayfa, false); req.send(); if(req.status == 200) { cevap=req.responsetext.split(">")[7].split("<")[0]; if(cevap=="true") { wgame(); } else { } losegame();
CSRF Cross Site Request Forgery Çeşitli AdverGame lerde Kullanılıyor Oylama esaslı Beğenim esaslı Paylaşım esaslı [img]http://url/oyver?oy=1&id=123456[/img] Forumlara dikkat Kampanya temelli forumlar
Zaman Manipülasyonu Programın hız çarpanı değiştirilebiliyor Böylelikle uygulamanın daha yavaş veya daha hızlı çalıştırılması mümkün Tespiti kolay Cheat Engine kullanılıyor
Hardening - Flash Flash tabanlı oyunlar obfuscate edilmelidir "Bir üvnseritnede ypalaın arşaıtramya gröe, kleimleirn hrfalreiinn hnagi srıdaa yzalıdkılraı ömneli dğeliimş. Öenlmi oaln brincii ve snonucnu hrfain yrenide omlsaımyış. Ardakai hfraliren srısaı krıaışk oslada ouknyuorumş. Çnükü kleimlrei hraf hraf dğeil bri btüün oalark oykuorumuşz.
Hardening - Flash Sunucuya gönderilen tüm veriler şifreli olmalıdır Secret Key iyi saklanmalıdır Mümkün olduğu kadar plaintext veri aktarımından kaçınılmalı, mümkünse AMF vb. Binary formatlar kullanılmalıdır. Plaintext veriler üzerinde yapılan tamperinge karşı koruma sağlar Security by obscurity Çeşitli proxyler işleyebiliyor
Hardening - Flash Oyuncunun her hareketi, önemli nesnelerin durumu timestamp ile loglanmalıdır. 10:38:02 PM 157995 Tick 1417 10:38:02 PM 158316 Tick 1421 10:38:02 PM 158616 Tick 1425 10:38:03 PM 158950 Tick 1429 10:38:03 PM 159283 Evil Shoot 10:38:03 PM 159283 Tick 1433 10:38:03 PM 159617 Tick 1437 10:38:04 PM 159950 Tick 1441 10:38:04 PM 160283 Tick 1445 10:38:04 PM 160376 Couch 10:38:04 PM 160616 Tick 1449 10:38:04 PM 160852 Couch 10:38:04 PM 160896 Couch 10:38:04 PM 160916 Tick 1453 10:38:04 PM 160940 Couch 10:38:05 PM 160975 Couch 10:38:05 PM 161012 Couch 10:38:05 PM 161223 Tick 1457 10:38:05 PM 161523 Tick 1461 10:38:05 PM 161823 Tick 1465 10:38:06 PM 162132 Tick 1469 10:38:06 PM 162454 Tick 1473 10:38:06 PM 162804 Tick 1477
Hardening - Flash Oyun PC leri takip edilmelidir IP Bloğu Cookie Local Shared Objects (Flash cookie) Google Analytics Ripe Proxy IP leri engellenebilir Karaliste Kullanım Şartları Bir oyunda manipülasyon yapan diğer oyunda yapabilir Kara Liste 1 Yunus ÇADIRCI 2
Hardening - Flash Zaman manipülasyonuna karşın çift sayaç kullanılabilir. Bir sayaç programa göre, diğeri sistem saatine göre çalıştırılıp sonuç karşılaştırılır. var PeriyodikKontrolTimer:Timer=new Timer(1000);// 1 second PeriyodikKontrolTimer.addEventListener(TimerEvent.TIMER, PeriyodikKontrol); var _startdate:date; var _time:uint = 0; function starttimer() : void { this.stoptimer(); this._startdate = new Date(); this._time = 0; this._timer = new Timer(1000, 9999); this._timer.addeventlistener(timerevent.timer, this.ontimer, false, 0, true); this._timer.start(); return; }// end function function stoptimer() : void { if (!this._timer) { return; }// end if this._timer.removeeventlistener(timerevent.timer, this.ontimer, false); this._timer.stop(); this._timer = null; return; }// end function function ontimer(param1:timerevent) : void { var _loc_2:* = new Date(); this._time = Math.round((_loc_2.getTime() - this._startdate.gettime()) / 1000); txtsystemtimer.text=string(this._time); return; }// end function function Basla(event:MouseEvent):void { starttimer(); PeriyodikKontrolTimer.start(); return;}
Hardening - Flash Oyun için kritik objeler korunmalıdır Score Time Uygulamanın farklı katmanlarında bütünsellik kontrolü yapılmalıdır Main loop içerisinde skorun farklı bir kopyası tutulabilir
Hardening Bilgi Yarışmaları Soru havuzu geniş olmalıdır Soru şıkları yer değiştirmelidir Günlük oyun limiti getirilmelidir. Bot Kontrolü yapılmalıdır CAPTCHA HTML DOM yapısı bozulabilir Soru ve cevaplar hep aynı DOM Element te gelmemelidir
Hardening CSRF Standart CSRF Önlemleri Ticketing mekanizması HTTP GET Kullanmayın POST Kötü niyetli adminlere karşı koymaz Referer Kontrolü Sayfadan çıkarken Logout tetiklenmeli Banka örnekleri
Peki Bu Bilgi Gerçek Hayatta Ne İşime Yarayacak? Win32 ve Java Tabanlı Uygulamaların Güvenliğinde Hardening PenTest Multimedia Uygulamalarda Web Tabanlı Uygulamalarda Reverse Engineering Çalışmalarında
Ülkemizden Örnekler
Canlı demo Ülkemizden Örnekler
Teşekkürler Yunus ÇADIRCI www.yunuscadirci.com yunuscadirci@yunuscadirci.com