Geçtiğimiz Temmuz ayında, devletlere casus yazılımlar sağlayan ve son yıllarda popülaritesi giderek artan İtalya merkezli Hacking Team firması, bir başka ekip tarafından hack edildi ve geliştirdikleri yazılımların kaynak kodları da dahil olmak üzere, pek çok doküman ve eposta arşivi internette yayınlandı [1]. Konu basında geniş yer buldu ancak teknik yönlerine pek değinilmedi. Bunun üzerine merakımı gidermek için yazılım kaynak kodlarını inceleyerek sistemi çalışır hale getirdim. Bu yazıda konuyla ilgili teknik ya da değil herkese faydalı olabileceğini umduğum izlenimlerimi paylaşacağım.
Başlarken...
Günümüzde güvenlik ve özel hayatın gizliliği konuları arasında yoğun bir geçişkenlik bulunuyor. Bireyin özel hayatının gizliliği kavramı dijital dünyada suç işlemenin önünde bir kamuflaj olarak yoğun biçimde kullanılıyor. Fakat konuya devletler tarafından baktığımızda, bu defa da güvenlik kavramının, özel hayatın gizliliğine saldırmak için bir araç olarak kullanıldığını görüyoruz.
İşin bir noktadan sonrası ancak hukuk ile düzenlenebilir ve hukukun uygulamada ne şekilde kullanıldığına bağlı olarak, sonuçları ve bireyler üzerindeki etkileri farklılıklar gösterebilir. Bu nedenle sadece bu yazılımları kullanıyor olması sebebiyle bir devleti veya yazılımı üreten firmayı tümden eleştirmenin doğru olduğunu düşünmüyorum. Bununla birlikte, uygulamanın hukuk dışı kullanımlarının bulunmadığını ve tüm müşterilerinin pür-i pak olduğu fikrinde de değilim. İyi işleyen bir hukuk düzeni elbette hepimize lazım fakat hem bunun için teknolojiden en doğru şekilde faydalanmanın yollarını aramalı hem de art niyetli kullanımlara karşı, teknolojiyle nasıl korunabileceğimize dair gereken donanımımız da bulunmalı...
Yazılım güvenliği
Her yazılımcı için güvenlik konusu ilgi çekici özellikler barındırır. Yazılım güvenliği üst başlığını, popüler dil üzerinden ifade edecek olursak hack etmek kavramıyla sınırlı bir kümeye hapsetmek doğru olmadığı gibi, birinin hotmail hesabını kırma ile de uzaktan yakından ilişkisi bulunmamaktadır. Bu hatırlatmayı, yazıdan sonra saçma isteklerden oluşan eposta'lar almamak umuduyla yapıyorum.
Bir yazılımcı için yazılım güvenliğinin ilgi çekici motivasyonu, başkasına ait bir veriye izinsiz ulaşma olasılığı değildir. Asıl motivasyon, işin güvenlik boyutuyla ilgilenebilmek ve daha güvenli yazılımlar geliştirebilmek için gereken, sınırlı sayıda kişinin sahip olduğu ve sistem programlamanın zirve noktalarından birine giden yolda üst düzey bilgi birikimine ulaşmaktır.
Bu konuda çalışmaya başlamak dahi öncelikle bir kaç yıllık tecrübe, sonrasında da sürekli bir öğrenme isteği ve heyecanı gerektirir. Konuyla ilgilenmek isteyen gençlere şöyle bir tavsiyede bulunabilirim; eğer sürekli "sql injection nedir? wordpress nasıl hack edilir" tarzında araştırmalar yapıyorsanız, olayı tamamen yanlış anlamışsınız demektir. Bunlar popüler konular olmakla birlikte, "lamer" olarak tabir edilen kişilerin yaptığı, genellikle çocukça işlerdir. Başka birisinin tespit ettiği, bulunması ve atak edilmesi görece daha kolay konularla ilgili olan, hatta üzerine bir de kullanımınızı kolaylaştırıcı yardımcı araçlar geliştirilmiş bir uygulamayı kullanmayı becerebiliyor olmanız sizi "hacker" değil, ancak iyi bir son kullanıcı ve "lamer" yapar.
Yapmanız gereken, öncelikle C başta olmak üzere bir kaç programlama dili üzerinde tecrübe kazanmak, daha sonra işletim sistemi çekirdeği, mimari farklılıkları, bir miktar makine dili, binary formatları vb. konularını derinlemesine incelemektir. Sözgelimi günün birinde kendinizi Ingo Molnar'ın "Exec Shield and Address Space Randomizations" [2] çalışmalarını veya Ulrich Drepper'in "How to write shared libraries" [3] yada "What Every Programmer Should Know About Memory" [4] yazılarını okurken bulursanız, doğru yolda ilerliyorsunuz demektir.
Bu iki ismi ustalara saygı kontenjanından özellikle zikrettim. Medyada "hacker" olarak arz-ı endam eyleyen tiplemelere özenmek yerine, Molnar ve Drepper gibi "guru"ların çalışmalarının takip edilmesini ve rol model alınmasını öneririm.
Hacking Team Hakkında
Wikipedia'ya göre Hacking Team firması 2000 yılında İtalya'nın Milano şehrinde Alberto Ornaghi ve Marco Valleri tarafından kurulmuş [5]. Bu ikili 2001 yılında Ettercap [6] adlı network analiz ve Man-in-the-Middle Attack yazılımını geliştirmeye başladı. Aynı yıl,ALoR ve NaGA takma adlarıyla bildiğim Alberto ve Marco ile ettercap uygulamasının Debian paketlerini hazırlarken tanıştım; o zamanlar henüz herkes öğrenciydi ve bolca boş zamanımız vardı. Ettercap paketinin Debian tarihçesine şuradan bakabilirsiniz: http://archive.debian.net/changelogs/ettercap/changelog
Yukarıdaki linkte görüleceği üzere proje özellikle 2002-2006 yılları arasında aktif olarak geliştiriliyordu, sonrasında ALoR ve NaGA'ya pek rastlamadım.
Wikipedia'da yazanlar doğru ise şimdi öğreniyorum ki o yıllarda İtalyan polisi Ettercap yazılımından haberdar olmuş ve geliştiricileri ile temasa geçerek, Skype çağrılarını dinleyebilecekleri bir yazılım geliştirmelerini talep etmişler.
Hacking Team de böylelikle yavaş yavaş büyümeye başlamış. Belirli bir birikim oluştuktan sonra ise müşteri segmenti doğrudan devlet, emniyet güçleri vb. olan DaVinci kod adlı RCS (Remote Control System) yazılımını geliştirmeye başlamışlar. Aşağıda firmanın vizyonu ve ne yaptıklarına dair çok güzel bir özet içeren tanıtım filmini izlemenizi öneririm. Yazının ilerleyen bölümlerinde RCS yazılımının mimarisine ve bileşenlerine değineceğiz.
Hacking Team - Firma Vizyon Sunumu
Sızdırılan bilgiler gerçek mi?
Bu yazıyı hazırlamaya başlamadan önce, çıkan haber ve yorumları hızlıca taradığımda, hatırı sayılır oranda bir kesimin, Hacking Team sızdırma vakasının gerçek olmayıp reklam amaçlı yapıldığını ya da internete konan kaynak kodlarının asıl yazılıma ait olmadığını düşündüğünü gördüm.
Benzer endişelere sahip grupta yer alıyorsanız, hemen işin doğrusunu söyleyelim. Sızdırılan kaynak kodları tümüyle gerçek ve çalışıyor. Yazılım bir çok alt proje grubundan oluştuğundan bazılarının yayınlanan versiyonları biraz geçmişte kalmış (5-8 ay kadar) olmakla beraber, belirli bir andaki halini tam olarak yansıtıyor.
Kaynak kodların dışında şirket içi yazışmalar, üretilen dokümanlar, faturalar, müşteri listeleri vb. kısmını çok detaylı incelemedim ancak incelediklerim ışığında deneyimli biri olarak onların da birbiriyle tutarlı ve tümüyle gerçek belgeler olduğunu rahatlıkla söyleyebilirim.
Olay belli ki, firmanın tüm dijital verilerinin derli toplu olarak yedek amaçlı saklandığı bir sisteme ulaşılmasıyla vuku bulmuş. Böylesi bir güvenlik işiyle uğraşan bir firma iseniz, tüm çalışanlarınızın eposta arşivlerini de mutlaka saklarsınız. Sonuç olarak istisnasız tüm çalışanların, içlerinde bir çok ipucu da barındıran eposta arşivleri de sızdırılan belgeler arasında yer alıyor. Tümünün incelenmesi aylar sürer belki ama hızlıca bakıldığında bile bir çok önemli noktayı yakalamak mümkün.
RCS Mimarisi
Örnek olayımızda kaynak kodların yanısıra, tüm sistemi kurabileceğiniz Installer.exe dosyaları da sızdırılmış durumda. İnternette gördüğüm incelemelerde Installer dosyaları kullanılarak normal kurulumlar yapılmış ve sistem bir son kullanıcı olarak çalıştırılmış. Bu yöntem izlendiğinde sadece lisans kontrollerini bypass edebilmek için çok da zor olmayan bir kaç işlem yapmanız yeterli oluyor. O yoldan gitmek yerine, kaynak kodları düzenleyerek sistemi çalışır hale getirmeyi ve yazılım mimarisi açısından incelemeyi tercih ettim.
Yazılım büyük ölçüde Ruby diliyle geliştirilmiş. Öyle görünüyor ki uygulamanın müşterileri Linux sistemlerden pek anlamadıklarından, Ruby için iyi bir performans sunamayacak olmasına rağmen, Anonymizer (Proxy) hariç tüm modüller Windows üzerinde çalışacak şekilde tasarlanmış. Ruby derlenen bir dil olmadığı için yazılım kodlarının müşteriler tarafından incelenmesinin önlenmesi amacıyla RubyEncoder kullanılmış. RubyEncoder, size özel lisans anahtarı ile birlikte kaynak kodları Blowfish algoritmasıyla encrypt edip, herhangi bir mimaride kendi ücretsiz Loader kütüphanelerini kullanmak suretiyle Ruby yazılımlarını kaynak kodlarını kapatarak dağıtabilmenizi sağlayan ticari bir üründür.
Kaynak kodları incelemeye başlarken, uygulamalar Windows üzerinde çalışacak şekilde geliştirildiğinden, daha az sorun çıkması için öncelikle Windows üzerinde çalışmayı denedim fakat Windows'un yazılımcıya sunduğu sıfır konforlu geliştirme ortamı nedeniyle kısa sürede bundan vazgeçip tüm çalışmaları Linux üzerinde yapmaya karar verdim.
RCS-DB
Sistemin en büyük bileşenini RCS-DB adlı repository içerisinden çıkan ve yukarıdaki şekilde Master Node olarak adlandırılan sistem üzerinde koşan yazılım oluşturuyor.
Lisans kontrolleri, RCS Console adlı AdobeAir ile yazılmış grafik arabirimli uygulamanın ihtiyaç duyduğu tüm backend fonksiyonları, tanımlamalar ve yetki kontrolleri, RCS-Collector servisinden gelen logların toplanması, konfigürasyonlar, arşivleme vb. hemen her işlem burada yapılıyor.
Öncelikle yazılımın kaynak kodunun "kitap gibi" diye tabir ettiğimiz türden, oldukça temiz ve iyi dizayn edilmiş olduğunu belirtmeliyim. Ruby'nin getirdiği avantajlar da sonuna kadar kullanılmış, ekibin bu noktada tecrübeli olduğu açıkça görülüyor.
Uygulama doğrudan bir web arayüzü sunmuyor, sadece json endpoint'ler veriyor. Bu nedenle Ruby uygulaması olmasına rağmen bir Rails uygulaması değil. Veritabanı olarak MongoDB ve mongoid Object Document Mapping gem'i yoğun biçimde kullanılmış. Kullandıkları mongoid gem'inin versiyonu bayağı eski idi, başka sebeplerden kullandığım version 4+ olduğundan, mevcut kodların çalışması için Mongoid::Matchers modülü altındaki HaveIndexForMatcher sınıfına bir miktar patch yapmak zorunda kaldım.
Gemfile dosyasında yer alan projenin ihtiyaç duyduğu tüm gem'leri kurmak istediğinizde ruby-bdb ve tuple gem'leri ile ilgili Linux tarafında sorunlarla karşılaşılıyor. BDB gem'i yıllardır güncellenmemiş, BerkeledDB kütüphanesindeki değişikliklere göre gereken düzenlemeleri yapmanız gerekiyor. Tuple gem'i için de Ruby 2+ ile değişen bazı internal yapılara göre gereken güncellemeler yapılmalı (meraklısı için bdb gem değişikliklerini github'a koydum, tuple tarafındaki değişikliği de biraz araştırmayla halledebilirsiniz).
Gelen RESTful istekleri karşılamak için event-driven çalışan ve yüksek performans sunan EventMachine gem'i kullanılmış. Bu gem'in Windows'da nasıl çalıştığını bilemiyorum ancak Linux üzerinde çeşitli projelerde oldukça iyi performans almış olduğumuzu söyleyebilirim.
Kaynak kodlar yazılımın "kararlı" bir halini içermiyor ve her bir repository bir diğerinden daha eski veya yeni olabildiğinden, sistemi çalışır hale getirebilmek için karşılaştığım irili ufaklı problemleri düzeltmeye başladım. Ek olarak geçerli bir lisansımız olmadığı için bu kontrolleri devre dışı bırakmak ve RubyEncoder ile çalışmaya yönelik bazı scriptleri yeniden düzenlemek de gerekti. Nihayetinde çalışan bir versiyona eriştiğimizde çoğunluğu ruby dosyaları olmak üzere 50 kadar dosyada değişiklik yapmış olduğumu gördüm:
RCS-DB modülünü çalıştırabilmek için bir SSL sertifikasının ayarlanmış olması gerekiyor (diğer modüller için de benzer durum geçerli). Bunun için kendi SSL CA sertifika otoritenizi oluşturmalısınız. Öncelikle kök CA sertifikası, sonra bundan üretilmiş bir intermediate sertifika oluşturmalı ve RCS-DB instance'ı için de intermediate sertifikası ile imzaladığınız bir başka sertifika üretmelisiniz. Benzer işlemler diğer modüller için de yapıldığında, sadece sertifikaya sahip node'lar encrypted olarak merkezle konuşabiliyor durumda oluyorlar. Ara node'lardan birinin ele geçirildiğini düşündüğünüzde, hazırladığınız kendi sertifika otoriteniz üzerinden ilgili sertifikayı seri numarası üzerinden iptal edebiliyorsunuz. OpenSSL sertifika otoritesi oluşturmaya yönelik izlemeniz gereken adımlar için https://jamielinux.com/docs/openssl-certificate-authority/ adresindeki dokümanları inceleyebilirsiniz.
RCS-COLLECTOR
Sahaya yayılmış olan ajan yazılımlardan (agent) gelen veriler, RCS-COLLECTOR modülü tarafından karşılanıyor. Yazılım Ruby diliyle yazılmış ve RCS-DB'ye kıyasla oldukça küçük boyutlarda. Sistemde birden fazla collector rolünde node tanımlamak mümkün. Collector node'ları, sahadaki ajan yazılımlarının trafiğinin takip edilerek merkezin ve dolayısıyla Hacking Team açısından müşterisinin bulunamaması amacıyla doğrudan ajan yazılımlarla konuşmak yerine, anonymizer node'ları ile konuşacak şekilde tasarlanmış. Sistemdeki her bir collector ve anonymizer node'u öncelikle RCS-DB üzerinde tanımlanmakta ve tanımlama sürecinde hangi anonymizer node'unun hangi collector node'u ile iletişim kuracağı belirlenmektedir.
RCS-ANONYMIZER
Sahadaki ajan yazılımlardan gelen veriler anonymizer node'ları tarafından karşılanıyor. Anonymizer modülü kendisine gelen verileri teslim edebileceği bir sonraki node'un ip adreslerini bilecek şekilde ayarlanmaktadır. Anonymizer, verileri doğrudan collector birimine iletebileceği gibi, geriye doğru takip edilebilmeyi zorlaştırmak için collector yerine başka bir anonymizer node'u ile de konuşabilmektedir. Bu süreç istendiği kadar tekrar edilebilecek yapıda tasarlandığından ajan yazılımlardan çıkan verilerin örneğin 5 anonymizer'dan geçtikten sonra collector'e ulaşması ve oradan merkezi veritabanına yazılması mümkündür.
Anonymizer node'u için bbproxy http proxy yazılımı kullanılmış. İletişim json mesajlarının encrypt edilerek gönderilmesi şeklinde gerçekleştiriliyor.
RCS-CONSOLE
Sistemin son kullanıcı açısından bakıldığındaki kullanım arayüzüdür. Uygulamanın arayüzleri bu tür bir yazılımdan beklenmeyecek ölçüde iyi tasarlanmış. Web arabirimi vermekle de yetinebilecek olmalarına rağmen oldukça kapsamlı bir AdobeAir uygulaması olarak RCS-Console'u hazırlamışlar. Uygulama encrypted olarak RCS-DB modülü ile RESTful servisler üzerinden iletişim kurmaktadır. AdobeAir konusunda bilgim olmadığı için Console uygulamasını kaynak koddan üretmek biraz vakit aldı, bu vesileyle Apache Flex projesini ve Air uygulamalarının genel yapısını da öğrenmiş oldum.
NETWORK INJECTOR
RCS mimarisi kurulduktan sonra veri toplamaya başlayabilmesi için öncelikle hedef uç sistemlere ajan yazılımlarının yerleştirilmesi gereklidir. Bu süreç ise zaman gerektirir ve bazı durumlarda ciddi zorluklar içerir.
Mimari içerisindeki Network Injector biriminin varlığı ve Console uygulaması üzerinden yapılabilen konfigürasyon zenginliğini gördükten sonra durumun ciddiyeti bir miktar daha arttı!
Injector modülü operator seviyesinde (büyük kurum veya kampüsler için de olabilir) kullanılacak şekilde tasarlanmış. Sistem, operatördeki RADIUS sunucuları ile entegre olabiliyor. Normalde hedef bir kişinin önce IP adresini bulmak daha sonra da çeşitli ataklarla ajan yazılımının hedef sisteme yüklenmesinin denenmesi gerekir. Ancak eğer ana omurgaya buradaki gibi bir Network Injector birimini entegre etmiş üstüne bir de RADIUS accounting mesajlarının bir kopyasını alabilecek şekilde ayarlamışsanız o zaman işler çok kolaylaşır.
Yukarıdaki RCS-Console ekranında görebileceğiniz gibi, operatör seviyesinde çalışıldığı takdirde, ilgili hedef kullanıcıların Radius kullanıcı adına (pek çok ek Radius alanı üzerinden kontrol de destekleniyor) yönelik olarak injector filtresi tanımlanabilmektedir.
Filtreye takılan kullanıcıya ne şekilde atak edileceği de gene Action tanımında belirtilmektedir. Örnek olarak INJECT-EXE seçildiğinde, hedef kullacını internete bağlandıktan sonra herhangi bir yazılım indirmesi yaptığında, indirdiği exe dosyalarına Windows ajan yazılımları eklenerek gönderilmektedir. Yani kullanıcı Winzip gibi bir yazılımı güvenilir bir siteden indirmeye çalışsa dahi, RCS ajanı otomatik olarak sadece bu kullanıcının download etmeye çalıştığı dosyaya eklenmekte ve ajan yazılımın hedef sisteme bu yolla bulaşması sağlanmaktadır. RCS ajan yazılımları henüz antivirüs yazılımları tarafından yeterince iyi tanınmadığından çoğu durumda bu süreç amacına ulaşmaktadır.
Bir diğer yöntem olarak, Flash Player'da bulunan zayıflıkların kullanıldığını görmekteyiz. Hacking Team firması, Adobe Flash Player ürününde resmen bir define bulmuş! Adobe Flash Player'ın güvenlik açısından kronik sorunları olduğu az çok bilinmekte, bu sebeple Google Chrome uzun zamandır kendi iyileştirilmiş Flash plugin entegrasyonunu kullanıyor. Eğer sisteminizde standart Adobe Flash Player yüklü ve kullanımda ise, işletim sisteminden bağımsız olarak (Windows, MacOS ve Linux'u etkiliyor) bir web sitesindeki basit bir flash uygulamasını kullanırken dahi ajan yazılımının sisteminize bulaşması mümkün olabilmektedir.
Hacking Team kaynak kodları ilk sızdırıldığında Flash Player ile ilgili kısa süre içerisinde 2 adet Zero Day Exploit bulunmuştu. Sonrasında bunlara bir üçüncüsü de eklendi. Kaynak kodlar üzerinde daha çok çalışıldıkça yenilerinin de bulunmaya devam edeceği öngörülmektedir.
Zero Day Exploit kavramı, kritik bir yazılım zaafiyetinin yazılımın üreticisi ve genel kullanıcı kitlesi tarafından bilinmiyor olmasına rağmen, birilerince keşfedilip atak için uygun zararlı bileşenlerin (exploit) hazırlanmış ve aktif olarak kullanımda olduğu senaryolar için kullanılmaktadır.
Kural tanımlama ekranındaki Probability değeriyle oynayarak, hedef kümeye giren kullanıcıya her defasında zararlı yazılımları göndermek yerine belirli bir olasılıkla gönderilmesine de imkan tanınmış. Bu da sistemin sahada farkedilmesini biraz daha güçleştirmektedir.
RCS AJANLARI
Bu bölüme kadar genel sistem mimarisindeki bileşenlerden bahsettik. Tüm bu sistemin işe yaraması için uç noktadaki hedef bilgisayarlara ajan yazılımların yüklenmesi gereklidir. Ajan yazılımları hedeflenen kişinin bilgisayarına veya akıllı telefonuna çeşitli şekillerde yüklenebilir. Yukarıda Network Injector yardımıyla sistematik bir şekilde nasıl yüklenebileceğine değindik. Yükleme işlemi hedef sistemdeki mevcut yazılım zaafiyetleri nedeniyle uzaktan yapılabileceği gibi fiziksel olarak erişip manuel de yapılabilir.
RCS mimarisinde Windows, MacOS, Linux, Android, iOS, Windows Phone sistemlerinin her biri için ajan yazılımların hazırlanmış olduğunu görüyoruz. Her bir platformun versiyon farklarına da bağlı olarak sahip olduğu zaafiyetler kullanılarak ajan yazılımın yetenekleri artırılmaya çalışılmış.
Örnek olarak Android için hazırlanan ajan yazılımını incelediğimizde, JNI arayüzü üzerinden bir çok exploit'in entegre edildiğini görüyoruz. Bunlardan biri olan Samsung Exynos chipsetini kullanan Android 4.0 cihazlarına yönelik olarak 2013 yılından beri bilinen güvenlik zaafiyetine dair şu yazıyı inceleyebilirisiniz: http://blog.azimuthsecurity.com/2013/02/re-visiting-exynos-memory-mapping-bug.html
Windows ajan yazılımını incelediğimizde ise ilk olarak aşağıdaki fonksiyonlar dikkat çekiyor:
Fikir vermesi açısından AntiVMWare() ve AntiVBox() fonksiyonlarının implementasyonunu inceleyerek nasıl tespit edildiğini görebilirsiniz. Bu ek korumaları, ajan yazılımın yüklü olduğu bir sistemi sanal makineye aktarıp kontrollü bir ortamda kendi yazılımlarıyla ilgili tersine mühendislik işlemlerini zorlaştırmak için koymuşlar. Elimin altında gerçek bir Windows sistem olmadığı için mecburen sanal makine ile incelemeye devam edecektim. Benzer şekilde inceleme yapacaklar için öncelikle kaynak koddan bu kontrolleri devre dışı bırakmaları gerektiğini hatırlatalım, aksi takdirde ajan yazılımı çalıştırsanız dahi devreye girmiyor.
Windows agent yazılımı neler yapabiliyor derseniz, inceleyebildiğim kadarıyla sistemle ilgili genel bilgileri toplayabiliyor, dosya sistemleri içerisindeki dosya ve dizin listesini alabiliyor, istenen bir dosyayı encrypted olarak RCS sistemine gönderebiliyor, keylogger olarak çalışıp basılan tuşları yakalayabiliyor, ekran görüntüsü alabiliyor, webcam olması durumunda kamerayı açıp frame bazında görüntü de yollayabiliyor...
Ayrıca ajan yazılımın versiyonunun güncellemesi ve belirli bir komut veya zaman geldiğinde, iz bırakmayacak şekilde kendi kendisini silmesi de düşünülmüş.
Ajan yazılımın bulaştığı bir sistemi bazı durumlarda format atmak suretiyle temizlemek de mümkün olamayabilir. Günümüzdeki bilgisayarların pek çoğunda gelişmiş UEFI BIOS sistemleri bulunuyor. Hacking Team, UEFI BIOS için de bir rootkit üretmiş. Belirli BIOS üreticilerindeki zaafiyetleri kullanıp ajan yazılımlarının yüklenmesini sağlayacak kodları BIOS'a bulaşarak da saklayabiliyorlar. Böyle bir sistemde format atsanız dahi yeni kuracağınız sisteme de ajan yazılım kolayca bulaşacaktır.
Android ve iOS ajanları ise çok daha yetenekli olmasına rağmen (telefon görüşmelerine, kameraya, mikrofona erişim vb.) ajan yazılımın bulaştırılması Windows'a göre biraz daha zor. Kaynak kodların bir miktar eski versiyonlarını incelemek durumunda kaldığımızdan aradan geçen süre zarfında önemli değişiklikler olmuş olabileceğini de değerlendirmemiz gerekir.
SONUÇ
Tüm detayları burada yazmak mümkün olmadığından genel izlenimlerimi maddeler halinde şu şekilde özetleyebilirim:
RCS yazılımı A'dan Z'ye oldukça profesyonel biçimde yazılmış, bu da ancak iyi mühendislerle ve bol müşteri ile olabilir
Bir güvenlik yazılımından hiç beklenmeyecek şekilde olağanüstü güzel arayüzlere sahip olması başlangıçta tahmin ettiğimden çok daha fazla satış rakamına ulaşmış olabileceklerini düşündürdüğü gibi, bir çok adımdan oluşan böylesine kompleks bir sistemin, neredeyse hiç bilgisi olmayan kişilerin dahi kolaylıkla kullanabileceği şekilde tasarlanmış olması, hukukun dışına çıkılarak kullanılması durumunda ürkütücü sonuçlara yol açabileceğini de düşündürmektedir!
Özellikle Windows kullanıcılarının kendilerini savunmak için antivirüs yazılımlarının yeteneklerine güvenmekten başka pek çaresi yok gibi görünüyor.
RCS sisteminin operatör seviyesinde kullanıldığı durumlarda bu ataklardan tümüyle korunmak, bilişim uzmanları için dahi oldukça zor iken, son kullanıcılar için neredeyse imkansızdır.
Bu vaka derinlemesine incelenip olası senaryolar üzerinde fikir yürüttüğümüzde, bilişim güvenliğinin ve hukuk düzeninin ne kadar önemli olduğu ve gün geçtikçe nasıl hayati bir rol kazanacağı bir kez daha anlaşılmaktadır. Maalesef bu alanda da uzman sayımız ve birikimimiz yeterli olmadığı gibi, her geçen gün dünyanın teknolojiyi üreten kesimiyle aramızdaki fark daha da açılmaktadır.
Yazımızı "gizleyecek bir şeyim yok ki, olanlar düşünsün" diyenler için Edward Snowden'in güzel bir sözü ile bitirelim: "Arguing that you don't care about the right to privacy because you have nothing to hide, is no different than saying you don't care about free speech because you have nothing to say"
Hacking Team Vakası - Durum Tespiti
Geçtiğimiz Temmuz ayında, devletlere casus yazılımlar sağlayan ve son yıllarda popülaritesi giderek artan İtalya merkezli Hacking Team firması, bir başka ekip tarafından hack edildi ve geliştirdikleri yazılımların kaynak kodları da dahil olmak üzere, pek çok doküman ve eposta arşivi internette yayınlandı [1]. Konu basında geniş yer buldu ancak teknik yönlerine pek değinilmedi. Bunun üzerine merakımı gidermek için yazılım kaynak kodlarını inceleyerek sistemi çalışır hale getirdim. Bu yazıda konuyla ilgili teknik ya da değil herkese faydalı olabileceğini umduğum izlenimlerimi paylaşacağım.
Başlarken...
Günümüzde güvenlik ve özel hayatın gizliliği konuları arasında yoğun bir geçişkenlik bulunuyor. Bireyin özel hayatının gizliliği kavramı dijital dünyada suç işlemenin önünde bir kamuflaj olarak yoğun biçimde kullanılıyor. Fakat konuya devletler tarafından baktığımızda, bu defa da güvenlik kavramının, özel hayatın gizliliğine saldırmak için bir araç olarak kullanıldığını görüyoruz.
İşin bir noktadan sonrası ancak hukuk ile düzenlenebilir ve hukukun uygulamada ne şekilde kullanıldığına bağlı olarak, sonuçları ve bireyler üzerindeki etkileri farklılıklar gösterebilir. Bu nedenle sadece bu yazılımları kullanıyor olması sebebiyle bir devleti veya yazılımı üreten firmayı tümden eleştirmenin doğru olduğunu düşünmüyorum. Bununla birlikte, uygulamanın hukuk dışı kullanımlarının bulunmadığını ve tüm müşterilerinin pür-i pak olduğu fikrinde de değilim. İyi işleyen bir hukuk düzeni elbette hepimize lazım fakat hem bunun için teknolojiden en doğru şekilde faydalanmanın yollarını aramalı hem de art niyetli kullanımlara karşı, teknolojiyle nasıl korunabileceğimize dair gereken donanımımız da bulunmalı...
Yazılım güvenliği
Her yazılımcı için güvenlik konusu ilgi çekici özellikler barındırır. Yazılım güvenliği üst başlığını, popüler dil üzerinden ifade edecek olursak hack etmek kavramıyla sınırlı bir kümeye hapsetmek doğru olmadığı gibi, birinin hotmail hesabını kırma ile de uzaktan yakından ilişkisi bulunmamaktadır. Bu hatırlatmayı, yazıdan sonra saçma isteklerden oluşan eposta'lar almamak umuduyla yapıyorum.
Bir yazılımcı için yazılım güvenliğinin ilgi çekici motivasyonu, başkasına ait bir veriye izinsiz ulaşma olasılığı değildir. Asıl motivasyon, işin güvenlik boyutuyla ilgilenebilmek ve daha güvenli yazılımlar geliştirebilmek için gereken, sınırlı sayıda kişinin sahip olduğu ve sistem programlamanın zirve noktalarından birine giden yolda üst düzey bilgi birikimine ulaşmaktır.
Bu konuda çalışmaya başlamak dahi öncelikle bir kaç yıllık tecrübe, sonrasında da sürekli bir öğrenme isteği ve heyecanı gerektirir. Konuyla ilgilenmek isteyen gençlere şöyle bir tavsiyede bulunabilirim; eğer sürekli "sql injection nedir? wordpress nasıl hack edilir" tarzında araştırmalar yapıyorsanız, olayı tamamen yanlış anlamışsınız demektir. Bunlar popüler konular olmakla birlikte, "lamer" olarak tabir edilen kişilerin yaptığı, genellikle çocukça işlerdir. Başka birisinin tespit ettiği, bulunması ve atak edilmesi görece daha kolay konularla ilgili olan, hatta üzerine bir de kullanımınızı kolaylaştırıcı yardımcı araçlar geliştirilmiş bir uygulamayı kullanmayı becerebiliyor olmanız sizi "hacker" değil, ancak iyi bir son kullanıcı ve "lamer" yapar.
Yapmanız gereken, öncelikle C başta olmak üzere bir kaç programlama dili üzerinde tecrübe kazanmak, daha sonra işletim sistemi çekirdeği, mimari farklılıkları, bir miktar makine dili, binary formatları vb. konularını derinlemesine incelemektir. Sözgelimi günün birinde kendinizi Ingo Molnar'ın "Exec Shield and Address Space Randomizations" [2] çalışmalarını veya Ulrich Drepper'in "How to write shared libraries" [3] yada "What Every Programmer Should Know About Memory" [4] yazılarını okurken bulursanız, doğru yolda ilerliyorsunuz demektir.
Hacking Team Hakkında
Wikipedia'ya göre Hacking Team firması 2000 yılında İtalya'nın Milano şehrinde Alberto Ornaghi ve Marco Valleri tarafından kurulmuş [5]. Bu ikili 2001 yılında Ettercap [6] adlı network analiz ve Man-in-the-Middle Attack yazılımını geliştirmeye başladı. Aynı yıl,ALoR ve NaGA takma adlarıyla bildiğim Alberto ve Marco ile ettercap uygulamasının Debian paketlerini hazırlarken tanıştım; o zamanlar henüz herkes öğrenciydi ve bolca boş zamanımız vardı. Ettercap paketinin Debian tarihçesine şuradan bakabilirsiniz: http://archive.debian.net/changelogs/ettercap/changelog
Yukarıdaki linkte görüleceği üzere proje özellikle 2002-2006 yılları arasında aktif olarak geliştiriliyordu, sonrasında ALoR ve NaGA'ya pek rastlamadım.
Wikipedia'da yazanlar doğru ise şimdi öğreniyorum ki o yıllarda İtalyan polisi Ettercap yazılımından haberdar olmuş ve geliştiricileri ile temasa geçerek, Skype çağrılarını dinleyebilecekleri bir yazılım geliştirmelerini talep etmişler.
Hacking Team de böylelikle yavaş yavaş büyümeye başlamış. Belirli bir birikim oluştuktan sonra ise müşteri segmenti doğrudan devlet, emniyet güçleri vb. olan DaVinci kod adlı RCS (Remote Control System) yazılımını geliştirmeye başlamışlar. Aşağıda firmanın vizyonu ve ne yaptıklarına dair çok güzel bir özet içeren tanıtım filmini izlemenizi öneririm. Yazının ilerleyen bölümlerinde RCS yazılımının mimarisine ve bileşenlerine değineceğiz.
Hacking Team - Firma Vizyon Sunumu
Sızdırılan bilgiler gerçek mi?
Bu yazıyı hazırlamaya başlamadan önce, çıkan haber ve yorumları hızlıca taradığımda, hatırı sayılır oranda bir kesimin, Hacking Team sızdırma vakasının gerçek olmayıp reklam amaçlı yapıldığını ya da internete konan kaynak kodlarının asıl yazılıma ait olmadığını düşündüğünü gördüm.
Benzer endişelere sahip grupta yer alıyorsanız, hemen işin doğrusunu söyleyelim. Sızdırılan kaynak kodları tümüyle gerçek ve çalışıyor. Yazılım bir çok alt proje grubundan oluştuğundan bazılarının yayınlanan versiyonları biraz geçmişte kalmış (5-8 ay kadar) olmakla beraber, belirli bir andaki halini tam olarak yansıtıyor.
Kaynak kodların dışında şirket içi yazışmalar, üretilen dokümanlar, faturalar, müşteri listeleri vb. kısmını çok detaylı incelemedim ancak incelediklerim ışığında deneyimli biri olarak onların da birbiriyle tutarlı ve tümüyle gerçek belgeler olduğunu rahatlıkla söyleyebilirim.
Olay belli ki, firmanın tüm dijital verilerinin derli toplu olarak yedek amaçlı saklandığı bir sisteme ulaşılmasıyla vuku bulmuş. Böylesi bir güvenlik işiyle uğraşan bir firma iseniz, tüm çalışanlarınızın eposta arşivlerini de mutlaka saklarsınız. Sonuç olarak istisnasız tüm çalışanların, içlerinde bir çok ipucu da barındıran eposta arşivleri de sızdırılan belgeler arasında yer alıyor. Tümünün incelenmesi aylar sürer belki ama hızlıca bakıldığında bile bir çok önemli noktayı yakalamak mümkün.
RCS Mimarisi
Örnek olayımızda kaynak kodların yanısıra, tüm sistemi kurabileceğiniz Installer.exe dosyaları da sızdırılmış durumda. İnternette gördüğüm incelemelerde Installer dosyaları kullanılarak normal kurulumlar yapılmış ve sistem bir son kullanıcı olarak çalıştırılmış. Bu yöntem izlendiğinde sadece lisans kontrollerini bypass edebilmek için çok da zor olmayan bir kaç işlem yapmanız yeterli oluyor. O yoldan gitmek yerine, kaynak kodları düzenleyerek sistemi çalışır hale getirmeyi ve yazılım mimarisi açısından incelemeyi tercih ettim.
Yazılım büyük ölçüde Ruby diliyle geliştirilmiş. Öyle görünüyor ki uygulamanın müşterileri Linux sistemlerden pek anlamadıklarından, Ruby için iyi bir performans sunamayacak olmasına rağmen, Anonymizer (Proxy) hariç tüm modüller Windows üzerinde çalışacak şekilde tasarlanmış. Ruby derlenen bir dil olmadığı için yazılım kodlarının müşteriler tarafından incelenmesinin önlenmesi amacıyla RubyEncoder kullanılmış. RubyEncoder, size özel lisans anahtarı ile birlikte kaynak kodları Blowfish algoritmasıyla encrypt edip, herhangi bir mimaride kendi ücretsiz Loader kütüphanelerini kullanmak suretiyle Ruby yazılımlarını kaynak kodlarını kapatarak dağıtabilmenizi sağlayan ticari bir üründür.
Kaynak kodları incelemeye başlarken, uygulamalar Windows üzerinde çalışacak şekilde geliştirildiğinden, daha az sorun çıkması için öncelikle Windows üzerinde çalışmayı denedim fakat Windows'un yazılımcıya sunduğu sıfır konforlu geliştirme ortamı nedeniyle kısa sürede bundan vazgeçip tüm çalışmaları Linux üzerinde yapmaya karar verdim.
RCS-DB
Sistemin en büyük bileşenini RCS-DB adlı repository içerisinden çıkan ve yukarıdaki şekilde Master Node olarak adlandırılan sistem üzerinde koşan yazılım oluşturuyor.
Lisans kontrolleri, RCS Console adlı AdobeAir ile yazılmış grafik arabirimli uygulamanın ihtiyaç duyduğu tüm backend fonksiyonları, tanımlamalar ve yetki kontrolleri, RCS-Collector servisinden gelen logların toplanması, konfigürasyonlar, arşivleme vb. hemen her işlem burada yapılıyor.
Öncelikle yazılımın kaynak kodunun "kitap gibi" diye tabir ettiğimiz türden, oldukça temiz ve iyi dizayn edilmiş olduğunu belirtmeliyim. Ruby'nin getirdiği avantajlar da sonuna kadar kullanılmış, ekibin bu noktada tecrübeli olduğu açıkça görülüyor.
Uygulama doğrudan bir web arayüzü sunmuyor, sadece json endpoint'ler veriyor. Bu nedenle Ruby uygulaması olmasına rağmen bir Rails uygulaması değil. Veritabanı olarak MongoDB ve mongoid Object Document Mapping gem'i yoğun biçimde kullanılmış. Kullandıkları mongoid gem'inin versiyonu bayağı eski idi, başka sebeplerden kullandığım version 4+ olduğundan, mevcut kodların çalışması için Mongoid::Matchers modülü altındaki HaveIndexForMatcher sınıfına bir miktar patch yapmak zorunda kaldım.
Gemfile dosyasında yer alan projenin ihtiyaç duyduğu tüm gem'leri kurmak istediğinizde ruby-bdb ve tuple gem'leri ile ilgili Linux tarafında sorunlarla karşılaşılıyor. BDB gem'i yıllardır güncellenmemiş, BerkeledDB kütüphanesindeki değişikliklere göre gereken düzenlemeleri yapmanız gerekiyor. Tuple gem'i için de Ruby 2+ ile değişen bazı internal yapılara göre gereken güncellemeler yapılmalı (meraklısı için bdb gem değişikliklerini github'a koydum, tuple tarafındaki değişikliği de biraz araştırmayla halledebilirsiniz).
Gelen RESTful istekleri karşılamak için event-driven çalışan ve yüksek performans sunan EventMachine gem'i kullanılmış. Bu gem'in Windows'da nasıl çalıştığını bilemiyorum ancak Linux üzerinde çeşitli projelerde oldukça iyi performans almış olduğumuzu söyleyebilirim.
Kaynak kodlar yazılımın "kararlı" bir halini içermiyor ve her bir repository bir diğerinden daha eski veya yeni olabildiğinden, sistemi çalışır hale getirebilmek için karşılaştığım irili ufaklı problemleri düzeltmeye başladım. Ek olarak geçerli bir lisansımız olmadığı için bu kontrolleri devre dışı bırakmak ve RubyEncoder ile çalışmaya yönelik bazı scriptleri yeniden düzenlemek de gerekti. Nihayetinde çalışan bir versiyona eriştiğimizde çoğunluğu ruby dosyaları olmak üzere 50 kadar dosyada değişiklik yapmış olduğumu gördüm:
RCS-DB modülünü çalıştırabilmek için bir SSL sertifikasının ayarlanmış olması gerekiyor (diğer modüller için de benzer durum geçerli). Bunun için kendi SSL CA sertifika otoritenizi oluşturmalısınız. Öncelikle kök CA sertifikası, sonra bundan üretilmiş bir intermediate sertifika oluşturmalı ve RCS-DB instance'ı için de intermediate sertifikası ile imzaladığınız bir başka sertifika üretmelisiniz. Benzer işlemler diğer modüller için de yapıldığında, sadece sertifikaya sahip node'lar encrypted olarak merkezle konuşabiliyor durumda oluyorlar. Ara node'lardan birinin ele geçirildiğini düşündüğünüzde, hazırladığınız kendi sertifika otoriteniz üzerinden ilgili sertifikayı seri numarası üzerinden iptal edebiliyorsunuz. OpenSSL sertifika otoritesi oluşturmaya yönelik izlemeniz gereken adımlar için https://jamielinux.com/docs/openssl-certificate-authority/ adresindeki dokümanları inceleyebilirsiniz.
RCS-COLLECTOR
Sahaya yayılmış olan ajan yazılımlardan (agent) gelen veriler, RCS-COLLECTOR modülü tarafından karşılanıyor. Yazılım Ruby diliyle yazılmış ve RCS-DB'ye kıyasla oldukça küçük boyutlarda. Sistemde birden fazla collector rolünde node tanımlamak mümkün. Collector node'ları, sahadaki ajan yazılımlarının trafiğinin takip edilerek merkezin ve dolayısıyla Hacking Team açısından müşterisinin bulunamaması amacıyla doğrudan ajan yazılımlarla konuşmak yerine, anonymizer node'ları ile konuşacak şekilde tasarlanmış. Sistemdeki her bir collector ve anonymizer node'u öncelikle RCS-DB üzerinde tanımlanmakta ve tanımlama sürecinde hangi anonymizer node'unun hangi collector node'u ile iletişim kuracağı belirlenmektedir.
RCS-ANONYMIZER
Sahadaki ajan yazılımlardan gelen veriler anonymizer node'ları tarafından karşılanıyor. Anonymizer modülü kendisine gelen verileri teslim edebileceği bir sonraki node'un ip adreslerini bilecek şekilde ayarlanmaktadır. Anonymizer, verileri doğrudan collector birimine iletebileceği gibi, geriye doğru takip edilebilmeyi zorlaştırmak için collector yerine başka bir anonymizer node'u ile de konuşabilmektedir. Bu süreç istendiği kadar tekrar edilebilecek yapıda tasarlandığından ajan yazılımlardan çıkan verilerin örneğin 5 anonymizer'dan geçtikten sonra collector'e ulaşması ve oradan merkezi veritabanına yazılması mümkündür.
Anonymizer node'u için bbproxy http proxy yazılımı kullanılmış. İletişim json mesajlarının encrypt edilerek gönderilmesi şeklinde gerçekleştiriliyor.
RCS-CONSOLE
Sistemin son kullanıcı açısından bakıldığındaki kullanım arayüzüdür. Uygulamanın arayüzleri bu tür bir yazılımdan beklenmeyecek ölçüde iyi tasarlanmış. Web arabirimi vermekle de yetinebilecek olmalarına rağmen oldukça kapsamlı bir AdobeAir uygulaması olarak RCS-Console'u hazırlamışlar. Uygulama encrypted olarak RCS-DB modülü ile RESTful servisler üzerinden iletişim kurmaktadır. AdobeAir konusunda bilgim olmadığı için Console uygulamasını kaynak koddan üretmek biraz vakit aldı, bu vesileyle Apache Flex projesini ve Air uygulamalarının genel yapısını da öğrenmiş oldum.
NETWORK INJECTOR
RCS mimarisi kurulduktan sonra veri toplamaya başlayabilmesi için öncelikle hedef uç sistemlere ajan yazılımlarının yerleştirilmesi gereklidir. Bu süreç ise zaman gerektirir ve bazı durumlarda ciddi zorluklar içerir.
Mimari içerisindeki Network Injector biriminin varlığı ve Console uygulaması üzerinden yapılabilen konfigürasyon zenginliğini gördükten sonra durumun ciddiyeti bir miktar daha arttı!
Injector modülü operator seviyesinde (büyük kurum veya kampüsler için de olabilir) kullanılacak şekilde tasarlanmış. Sistem, operatördeki RADIUS sunucuları ile entegre olabiliyor. Normalde hedef bir kişinin önce IP adresini bulmak daha sonra da çeşitli ataklarla ajan yazılımının hedef sisteme yüklenmesinin denenmesi gerekir. Ancak eğer ana omurgaya buradaki gibi bir Network Injector birimini entegre etmiş üstüne bir de RADIUS accounting mesajlarının bir kopyasını alabilecek şekilde ayarlamışsanız o zaman işler çok kolaylaşır.
Yukarıdaki RCS-Console ekranında görebileceğiniz gibi, operatör seviyesinde çalışıldığı takdirde, ilgili hedef kullanıcıların Radius kullanıcı adına (pek çok ek Radius alanı üzerinden kontrol de destekleniyor) yönelik olarak injector filtresi tanımlanabilmektedir.
Filtreye takılan kullanıcıya ne şekilde atak edileceği de gene Action tanımında belirtilmektedir. Örnek olarak INJECT-EXE seçildiğinde, hedef kullacını internete bağlandıktan sonra herhangi bir yazılım indirmesi yaptığında, indirdiği exe dosyalarına Windows ajan yazılımları eklenerek gönderilmektedir. Yani kullanıcı Winzip gibi bir yazılımı güvenilir bir siteden indirmeye çalışsa dahi, RCS ajanı otomatik olarak sadece bu kullanıcının download etmeye çalıştığı dosyaya eklenmekte ve ajan yazılımın hedef sisteme bu yolla bulaşması sağlanmaktadır. RCS ajan yazılımları henüz antivirüs yazılımları tarafından yeterince iyi tanınmadığından çoğu durumda bu süreç amacına ulaşmaktadır.
Bir diğer yöntem olarak, Flash Player'da bulunan zayıflıkların kullanıldığını görmekteyiz. Hacking Team firması, Adobe Flash Player ürününde resmen bir define bulmuş! Adobe Flash Player'ın güvenlik açısından kronik sorunları olduğu az çok bilinmekte, bu sebeple Google Chrome uzun zamandır kendi iyileştirilmiş Flash plugin entegrasyonunu kullanıyor. Eğer sisteminizde standart Adobe Flash Player yüklü ve kullanımda ise, işletim sisteminden bağımsız olarak (Windows, MacOS ve Linux'u etkiliyor) bir web sitesindeki basit bir flash uygulamasını kullanırken dahi ajan yazılımının sisteminize bulaşması mümkün olabilmektedir.
Hacking Team kaynak kodları ilk sızdırıldığında Flash Player ile ilgili kısa süre içerisinde 2 adet Zero Day Exploit bulunmuştu. Sonrasında bunlara bir üçüncüsü de eklendi. Kaynak kodlar üzerinde daha çok çalışıldıkça yenilerinin de bulunmaya devam edeceği öngörülmektedir.
Kural tanımlama ekranındaki Probability değeriyle oynayarak, hedef kümeye giren kullanıcıya her defasında zararlı yazılımları göndermek yerine belirli bir olasılıkla gönderilmesine de imkan tanınmış. Bu da sistemin sahada farkedilmesini biraz daha güçleştirmektedir.
RCS AJANLARI
Bu bölüme kadar genel sistem mimarisindeki bileşenlerden bahsettik. Tüm bu sistemin işe yaraması için uç noktadaki hedef bilgisayarlara ajan yazılımların yüklenmesi gereklidir. Ajan yazılımları hedeflenen kişinin bilgisayarına veya akıllı telefonuna çeşitli şekillerde yüklenebilir. Yukarıda Network Injector yardımıyla sistematik bir şekilde nasıl yüklenebileceğine değindik. Yükleme işlemi hedef sistemdeki mevcut yazılım zaafiyetleri nedeniyle uzaktan yapılabileceği gibi fiziksel olarak erişip manuel de yapılabilir.
RCS mimarisinde Windows, MacOS, Linux, Android, iOS, Windows Phone sistemlerinin her biri için ajan yazılımların hazırlanmış olduğunu görüyoruz. Her bir platformun versiyon farklarına da bağlı olarak sahip olduğu zaafiyetler kullanılarak ajan yazılımın yetenekleri artırılmaya çalışılmış.
Örnek olarak Android için hazırlanan ajan yazılımını incelediğimizde, JNI arayüzü üzerinden bir çok exploit'in entegre edildiğini görüyoruz. Bunlardan biri olan Samsung Exynos chipsetini kullanan Android 4.0 cihazlarına yönelik olarak 2013 yılından beri bilinen güvenlik zaafiyetine dair şu yazıyı inceleyebilirisiniz: http://blog.azimuthsecurity.com/2013/02/re-visiting-exynos-memory-mapping-bug.html
Windows ajan yazılımını incelediğimizde ise ilk olarak aşağıdaki fonksiyonlar dikkat çekiyor:
Fikir vermesi açısından AntiVMWare() ve AntiVBox() fonksiyonlarının implementasyonunu inceleyerek nasıl tespit edildiğini görebilirsiniz. Bu ek korumaları, ajan yazılımın yüklü olduğu bir sistemi sanal makineye aktarıp kontrollü bir ortamda kendi yazılımlarıyla ilgili tersine mühendislik işlemlerini zorlaştırmak için koymuşlar. Elimin altında gerçek bir Windows sistem olmadığı için mecburen sanal makine ile incelemeye devam edecektim. Benzer şekilde inceleme yapacaklar için öncelikle kaynak koddan bu kontrolleri devre dışı bırakmaları gerektiğini hatırlatalım, aksi takdirde ajan yazılımı çalıştırsanız dahi devreye girmiyor.
Windows agent yazılımı neler yapabiliyor derseniz, inceleyebildiğim kadarıyla sistemle ilgili genel bilgileri toplayabiliyor, dosya sistemleri içerisindeki dosya ve dizin listesini alabiliyor, istenen bir dosyayı encrypted olarak RCS sistemine gönderebiliyor, keylogger olarak çalışıp basılan tuşları yakalayabiliyor, ekran görüntüsü alabiliyor, webcam olması durumunda kamerayı açıp frame bazında görüntü de yollayabiliyor...
Ayrıca ajan yazılımın versiyonunun güncellemesi ve belirli bir komut veya zaman geldiğinde, iz bırakmayacak şekilde kendi kendisini silmesi de düşünülmüş.
Ajan yazılımın bulaştığı bir sistemi bazı durumlarda format atmak suretiyle temizlemek de mümkün olamayabilir. Günümüzdeki bilgisayarların pek çoğunda gelişmiş UEFI BIOS sistemleri bulunuyor. Hacking Team, UEFI BIOS için de bir rootkit üretmiş. Belirli BIOS üreticilerindeki zaafiyetleri kullanıp ajan yazılımlarının yüklenmesini sağlayacak kodları BIOS'a bulaşarak da saklayabiliyorlar. Böyle bir sistemde format atsanız dahi yeni kuracağınız sisteme de ajan yazılım kolayca bulaşacaktır.
Android ve iOS ajanları ise çok daha yetenekli olmasına rağmen (telefon görüşmelerine, kameraya, mikrofona erişim vb.) ajan yazılımın bulaştırılması Windows'a göre biraz daha zor. Kaynak kodların bir miktar eski versiyonlarını incelemek durumunda kaldığımızdan aradan geçen süre zarfında önemli değişiklikler olmuş olabileceğini de değerlendirmemiz gerekir.
SONUÇ
Tüm detayları burada yazmak mümkün olmadığından genel izlenimlerimi maddeler halinde şu şekilde özetleyebilirim:
Bu vaka derinlemesine incelenip olası senaryolar üzerinde fikir yürüttüğümüzde, bilişim güvenliğinin ve hukuk düzeninin ne kadar önemli olduğu ve gün geçtikçe nasıl hayati bir rol kazanacağı bir kez daha anlaşılmaktadır. Maalesef bu alanda da uzman sayımız ve birikimimiz yeterli olmadığı gibi, her geçen gün dünyanın teknolojiyi üreten kesimiyle aramızdaki fark daha da açılmaktadır.
Yazımızı "gizleyecek bir şeyim yok ki, olanlar düşünsün" diyenler için Edward Snowden'in güzel bir sözü ile bitirelim: "Arguing that you don't care about the right to privacy because you have nothing to hide, is no different than saying you don't care about free speech because you have nothing to say"
Kaynaklar
[1] : Hacking Team Hacked - International Business Times
[2] : https://en.wikipedia.org/wiki/Exec_Shield, http://lwn.net/Articles/190139/
[3] : https://software.intel.com/sites/default/files/m/a/1/e/dsohowto.pdf
[4] : https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
[5] : https://en.wikipedia.org/wiki/Hacking_Team
[6] : https://en.wikipedia.org/wiki/Ettercap_(software)