Ah o Netsec etkinliğinde bende olsaydım deyipte katılamayanlar için yapmış olduğum sunumu kısaca yazıya dökmeye karar verdim.
Ön bilgi olarak Flash kısaca web sayfalarına animasyon, video ve etkileşim eklemek amacıyla kullanılan ve Actionscript adında nesne yönelimli (object oriented) programlama dili içeren bir multimedya platformudur. Flash uygulamalarına çoğunlukla reklamlarda ve oyunlarda rastlarız. Flash dosyaları çoğunlukla SWF (ShockWave Flash) formatında olur ve aslında bir sanal makine olan Flash oynatıcısı tarafından çalıştırılır. Flash oynatıcısının bir sanal makine olması sayesinde SWF formatındaki bu dosyalar her platformda çalıştırılabilir. Durum böyle olunca Java’da da olduğu gibi SWF formatındaki bir dosya kolaylıkla baytkoddan (bytecode) kaynak koduna çevrilebilir (decompile). Actionscript, ilk olarak animasyonları kontrol etmek için tasarlanmıştır fakat geliştirilen yeni sürümleri ile web tabanlı oyunlardan görüntü ve ses yayını yapmaya imkan tanıyan zengin internet uygulamaları geliştirilebilmesine imkan tanımaktadır ve Javascript ile aynı kodlama imlasına (syntax) sahiptir. Actionscript’in 2. sürümü, Flash oynatıcı 8 ve öncesi sürümlerde, 3. sürümü ise 9 ve sonrası sürümlerde çalışmaktadır.
Aralık 2010 yılında Millward Brown tarafından gerçekleştirilen ankete göre Adobe Flash oynatıcısı, internet erişimi olan bilgisayarların %99’unda yüklüymüş. Anket bir yana zaten gün içinde gezdiğimiz sitelerin içeriğine biraz daha dikkat edecek olursak çoğunda Flash ile geliştirilmiş bir kısım olduğunu görebiliriz. Web uygulama güvenliğinde çoğunlukla Flash uygulama güvenliği göz ardı edilmekte ve art niyetli kişilerin hedefi haline gelebilmektedir.
Örnek olarak Flash ile geliştirilmiş oyunları ele alarak art niyetli kişilerin çoğunlukla yoğunlaştığı noktalara kısa göz atalım;
- Flash oynatıcı ile sunucu arasında gerçekleşen trafiğin manipüle edilmesi: Özellikle Flash ile geliştirilmiş olan oyunlarda istemci tarafına güvenilerek kontrollerin istemci tarafında gerçekleştirilmesi sağlanmakta ve istemci tarafında işlenen veri sorgusuz sualsiz sunucu tarafında işleme alınmaktadır. Durum böyle oluncada ödüllü oyunlarda ve yarışmalarda bu durumu istismar eden hileciler ortaya çıkmakta ve haksız kazanç sağlamaktadırlar. Örnek olarak aşağıdaki ekran görüntüsünde yer alan oyunu inceleyecek olursanız sunucudan istemci tarafına sorulara ilave olarak yanıtların da gönderildiğini görebilirsiniz. Bu trafiği görebilmek ve gerekirse manipüle edebilmek için yapmanız gereken Burp, Paros ve benzer proxy araçları ile internet tarayıcısı ile sunucusu arasına girmektir.
- Kaynak koduna çevirme: Az öncede bahsettiğim gibi baytkod olmasından ötürü Flash uygulamalarını kaynak koduna 3. parti bir araç ile çevirmek oldukça kolaydır bu nedenle uygulama içine statik kullanıcı adı ve şifre koymak doğru bir yaklaşım olmaz. Aşağıdaki ekran görüntüsü bu hatayı gözler önüne seren güzel bir örnek olabilir.
- Hafızaya müdahale etme: Diğer tüm uygulamalarda olduğu gibi Flash uygulamaları tarafından kullanılan verilerin bir kısmıda hafızada saklanmaktadır. Hafızaya müdahale ederek uygulamanın akışını değiştirmek, sahip olmadığınız bir yetkiye sahip olabilmek mümkün olabilir. Özellikle oyunlarda hafızaya müdahale ederek gücünüzü yükseltmek veya sanal paranızı arttırmak haksız kazanca yol açabilir. Aşağıdaki ekran görüntüsünde bu amaçla kullanılan Cheat Engine aracı ile bir Poker oyununda sahip olunan paranın nasıl yükseltilebildiğini görebilirsiniz. Bunun için yapmanız gereken o an sahip olduğunuz paranın karşılığını hafızada bulmak ve istediğiniz değer ile değiştirmektir.
- Tersine çevirme(disassembling): Flash uygulamasına ait SWF dosyasını analiz etmek için kaynak koduna çeviremediğimiz durumlarda baytkodu okunabilir hale çevirebilir ve analizimizi gerçekleştirebiliriz. Analizle yetinmeyerek baytkoda müdahale edebilir ve SWF dosyasını yamayabiliriz. Kaynak koduna çevirdiğimiz ancak tekrar derleyemediğimiz durumlarda da bu yola başvurabiliriz. Bu iki durumda da hem tersine çevirme hem de yamama için RABCDasm aracından faydalanabilirsiniz. Örnek olarak bir oyun düşünün, kaynak koduna çevirmek mümkün ve analiz neticesinde yönetim paneli SWF dosyasının içinde yer alıyor ancak uygulamayı derleyenler tarafından bu yönetim paneline ulaşmak mümkün değil çünkü bu actionscriptte yer alan ve bu panel ile ilgili olan fonksiyon oyunun yüklenmesi esnasında görünür değil. Ancak bu dosyayı tersine çevirerek (disassembling) müdahale edebilirseniz (patching) bu panelin yüklenme esnasında görünür hale gelmesini sağlayabilir ve yönetici paneline erişebilirsiniz. İşte tam olarak bu durumu konu alan bir zafiyeti geçtiğimiz aylarda kaşfederek oyunu geliştiren firma ile paylaştım ve düzeltilmesini sağladım. (Firma çalışanlarının samimi ve profesyönelce yaklaşımından dolayı kendilerini tebrik etmeden geçmeyeceğim. Farkındalığın arttırılması adına firma adını gizleyerek videoyu yayınlamamı sağladıkları içinde kendilerine ayrıca teşekkür etmek isterim.
- Zafiyet tarama araçları: Actionscript programlama dilide güvenli bir şekilde kullanılmadığı taktirde XSS, XSRF gibi zafiyetlere yol açabilmektedir. Özellikle URL kabul eden, işleyen fonksiyonlarda ve HTML kullanılan parametrelerde bu zafiyetlere sıkça rastlayabiliriz. Örnek olarak Flash ile hazırlanmış olan reklamlarda kullanılan clickTAG değişkeni güvenli kullanılmadığı taktirde XSS zafiyetine yol açabilmektedir. Bu ve benzer sorunları tespit etmek için Actionscript kodunu detaylı olarak analiz etmek gerekir ancak bu zaman alıcı bir iş ve çoğu kimse için uzmanlık gerektirebildiği için bunu gerçekleştiren programlardan faydalanabiliriz. HP SWFScan bu amaçla geliştirilmiş, hedef SWF dosyasını tersine çevirerek analiz eden ve 60’dan fazla güvenlik zafiyetini tespit edebilen ve raporlayabilen faydalı bir araçtır. Aşağıdaki ekran görüntüsüne bakacak olursanız rastgele olarak seçilmiş örnek bir sitedeki SWF dosyasında yer alan XSS (cross-site scripting) güvenlik zafiyetini başarıyla tespit edebildiğini görebilirsiniz. (SWFScan Actionscript 2 ve 3 sürümlerini desteklemektedir. 2 sürümü için ayrıca SWFIntruder aracınıda kullanabilirsiniz.) Bu tür araçlar kimi zaman güvenlik zafiyetlerini tespit edemeyebilirler bu nedenle her ihtimale karşı actionscripti analiz etmekte yarar olduğunu söyleyebilirim.
Art niyetli kişilerin Flash uygulamalarınızı istismar etmesini zorlaştırmak için mutlaka action scriptinizi gizlemeli (obfuscation), Adobe tarafından güvenli uygulama geliştirme önerilerini dikkate almalı, hafızaya müdahale için saklanan değerleri kullanım sonrasında hemen değiştirmeli ve trafiğe müdahaleyi zorlaştırma adına sunucu ile uygulama arasındaki değerleri hashlemenizi tavsiye ederim.
Bir sonraki yazıda görüşmek dileğiyle…
Sunum dosyası: Powerpoint sürümü
21 comments
Merhabalar, Mert bey.
Bir dosyada yardımınıza çok ihtiyacım var. Açıklayıcı yazınızdan ötürü size danışmak ve teknik yardım almak isterim. Ücret dâhi isteseniz karşılıksız bırakmam.
.swf dosyasında bulunan actionscriptleri çözemiyorum çözsemde istediğim bazı kodlara ulaşamıyorum. Server kısmı python ile yazılmış bir client.
Client üzerinde değişiklikler yapmam gerekiyor fakat Flash Decompiler gibi pprogramlarda grafiklere veya metinlerin hepsine ulaşamıyorum. Bunlar nerede barınıyor anlam veremedim.
Mail adresime dönüş yaparsanız sevinirim.
[email protected]
Sevgiler
Maalesef yardımcı olamayacağım.
hocam avataria oyununda bi yardımcı olur musunuz hile yapmak için.
Maalesef.
5
Teşekkürler ayrıca actionscript 3.0 da oturum yönetimi varmı session gibi ?
Bunun için Türkçe Flash uygulama geliştirme kitabı bulmanızı ve okumanızı öneririm.
Yukarıda link vermişsiniz teşekkür ederim ancak, ingilizce yetersiz.
Temel uygulama güvenliği için bu kılavuza bakabilirsiniz.
Merhaba flash programlamaya yeni merak sardım ve araştırıyorum avantajları dezavantajları nedir diye, sizin **net okeyi hacklediğinizi gördüm ve kafamda soru işaretleri oluştu flash bi oyun yazmış olsak nasıl güvenlik önlemi alabiliriz, sonuç olarak oyun kodları istemci tarafında çalışmakta server tarafında nasıl bi doğrulama yapmak gerekir.
https://www.owasp.org/index.php/Category:OWASP_Flash_Security_Project adresinde yer alan videos ve articles kısımlarına göz atabilirsiniz.
o bu değilda sen bi Darkorbite bakarmısın buna nasıl bir müdahalede bulunuruz bu oyuna cheat engine ilede müdahele edilmiyor sadece oyun hızlandırılıyordu ama sadece kendi ekranında ama gerçekte sen eski yerindesin :D bu aralar çalıştırınca c.e. oyunda çöküyor hangi programla müdahele edilinir. ?
Slm Emre,
Oynadığım bir oyun var ban yedim ve sanırım banı kaldırmak imkansız gibi bişey. Banlanan hesaplara bi çözüm önerebilirmisin acaba.
Tşkler.
guzel anlatmıssın da keske daha detaylı anlatsaymıssın :(
peki sizden bir ricam olacak mail atar msıınız bana? Bir konu hakkında yardım almak istiyorum
Iletişim sayfasından bana ulaşabilirsin.
Php gibi düşünelim, örnek verdiğiniz poker uygulamasından bahsedecek olursak sayfa kaynağındaki 3000 para değerini değiştirdiğimiz zaman ve sayfayı yenilediğimiz zaman hafıza değerine tekrar döner sizin yani sonuç olarak ekrana değil hafızayı yönetmek gerekiyor net birşey söylememişsiniz fakat değiştirdiğiniz para birimi uygulamada başka değişikliğe sebep oldumu?
PHP gibi düşünürsek doğru olmaz çünkü flash uygulamaları istemci tarafında (client-side) çalıştığı için çoğu zaman tüm hesaplamalar (kart oyunu veya bir bulmacayı düşünün) burada yapılmakta ve sunucuya gönderildiğinde doğrulanmamaktadır bu durum da hafızaya müdahale ederek oyunlarda veya uygulamalarda hile yapmaya/yetkisiz erişime imkan tanımaktadır. Para birimini değiştirdikten sonra etik olmayacağı için devamını getirmedim ancak Youtube’da cheat engine diye aratacak olursanız çok sayıda flash ile hazırlanmış oyunda (poker oyunları da dahil) nasıl puan yükseltilebildiğini görebilirsiniz.
darkorbit’e bakmanı tavsiye ederim. gördüğüm en güvenli flash oyunlarından birisi.
O halde Flash uygulaması geliştirenlerin/geliştireceklerin incelemesini tavsiye edelim, Flash maceram bu yazı ile şimdilik son bulur :)
Acaba benzer teknikler Silverlight uygulamları için de geçerli midir? Zira ben Sillverlight uygulamalarında swf gibi derlenmiş bir kod hiç göremedim.Onun yerine safi JavaScript kodu bulunmakta.
Silverlight’ı bu gözle inceleme fırsatım olmadığı için ne desem yalan olur.