Sabahın saat 04:12’si. ForgeLabs (kurgusal şirket) ofisindeki masamda, sadece monitörden gelen o mavi ışığın altında oturuyorum. Yanımda buz gibi olmuş bir kahve, karşımda ise kırmızıya dönmeye başlamış bir EDR (Endpoint Detection and Response) paneli. Normalde sessiz sakin akması gereken olay günlükleri (event logs), bir anda çıldırmış gibi akmaya başladı. Bir şeyler ters gidiyordu ama klasik bir 'script kiddie' saldırısı gibi bağıra çağıra gelmiyordu. Çok sessiz, çok derinden ve inanılmaz bir ustalıkla. Bir sürecin (process) önce kullanıcı yetkilerinden fırlayıp saniyeler içinde SYSTEM yetkilerine tırmanışını izlemek, bir korku filminin en gerilimli sahnesini izlemek gibi. Ama bu sefer patlamış mısır yiyemiyorsun çünkü o patlayan şey senin ağ altyapın.
Lazarus grubundan bahsediyoruz. Hani şu her hareketiyle 'ben buradayım ama beni asla bulamayacaksın' diyen, Kuzey Kore bağlantılı o meşhur ekip. Son dönemde Windows'un kalbinde, yani çekirdek (kernel) seviyesinde buldukları o meşhur sıfırıncı gün (zero-day) açığını sömürerek ortalığı birbirine kattılar. (Kaynak: The Hacker News). Bu öyle basit bir 'SQL enjeksiyonu yaptım, veritabanını çektim' olayı değil dostum. Bu direkt olarak işletim sisteminin beynine girmek, nöronları kendi isteğine göre yeniden programlamak demek. Ben bu tür bir saldırıyı ilk gördüğümde, açıkçası bir an durup 'helal olsun' demiştim. Etik hacker olabiliriz ama iyi bir mühendisliğe şapka çıkarmayı da biliriz. Tabii o şapkayı çıkarırken bir yandan da yamayı (patch) nasıl yetiştireceğimizi düşünmekten saçlarımız dökülüyor, orası ayrı.
Olayın teknik detayına indiğimizde, Lazarus'un bu sefer hedef aldığı nokta Windows'un çekirdek modundaki sürücüleri (kernel-mode drivers). Şimdi, junior bir arkadaşımız 'Abi alt tarafı bir sürücü, ne olabilir ki?' diyebilir. Şöyle anlatayım: İşletim sistemini bir krallık olarak düşün. Sen bir halksın (user mode), kralın sarayına (kernel mode) girmek için bin tane iznin olması lazım. Ama bu Lazarusçular, sarayın su tesisatçısı kılığında içeri sızıp (vulnerable driver), kralın yatak odasının kapısını içeriden açıyorlar. Bu saldırıda kullanılan yöntem, sistemin bellek yönetimindeki bir açığı tetikleyerek doğrudan SYSTEM yetkilerine ulaşmalarını sağlıyor. Bunu yaptıklarında, artık senin o çok güvendiğin antivirüs programların, EDR araçların veya izleme sistemlerin körleşiyor. Çünkü onlar da işletim sistemine 'Efendim, bir sorun var mı?' diye sorduğunda, yanıtı veren kişi artık saldırganın ta kendisi oluyor.
Sen olsan, sisteminde her şey kağıt üzerinde 'yeşil' ve 'güvenli' görünürken, arka planda birilerinin çekirdek nesnelerini (kernel objects) manipüle ettiğini nasıl anlardın? Bu soru benim geceleri uykumu kaçırıyor işte.
Saldırının en can alıcı noktası ise FudModule adını verdikleri o meşhur rootkit. Bu meret, bellekteki verileri doğrudan manipüle ederek (Direct Kernel Object Manipulation - DKOM) kendini ve diğer zararlı süreçleri gizliyor. Bir tatbikat ortamında benzer bir senaryoyu simüle etmeye çalıştığımda, kernel seviyesinde hata yapmanın ne kadar kolay olduğunu acı bir şekilde öğrenmiştim. En ufak bir yanlış bellek adresi (memory address) ataması, sistemin anında 'Mavi Ekran' (BSOD) vermesine sebep olur. Ama bu adamlar o kadar hassas çalışıyorlar ki, sistem çökmeden, kullanıcı ruhu bile duymadan yetki yükseltme (privilege escalation) işlemini tamamlıyorlar. ForgeLabs (kurgusal şirket) üzerindeki analizlerimizde, saldırganın 192.168[.]1[.]100 gibi iç ağ IP'lerinden (gerçek hayatta bu tabii ki dışarıdan bir komuta kontrol sunucusuydu) gelen komutlarla nasıl sessizce yayıldığını gördük.
Neyse, asıl mesele bu saldırının DevSecOps tarafındaki yansıması. Biz pipeline'lara SAST (Statik Uygulama Güvenliği Testi) ve DAST (Dinamik Uygulama Güvenliği Testi) araçlarını entegre ederken genellikle uygulama katmanına odaklanıyoruz. 'Kodda açık var mı?', 'Kütüphane güncel mi?' diye bakıyoruz. Ama Lazarus'un bu hamlesi bize şunu hatırlatıyor: Altyapı güvenliği (Infrastructure Security) sadece Terraform dosyalarını taramak değildir. O kodun üzerinde koştuğu işletim sisteminin 'hardening' yani sıkılaştırma süreçleri hayati önem taşıyor. Özellikle Windows ekosisteminde, 'Vulnerable Driver Blocklist' gibi özelliklerin neden aktif edilmesi gerektiğini, bu tür zero-day saldırıları yaşandığında daha iyi anlıyoruz.
Bir keresinde, henüz mesleğe yeni başladığım yıllarda, bir sızma testinde bir sunucuya erişim sağlamıştım ama yetkim çok düşüktü. O zamanlar bu tür kernel exploit'leri 'sihir' gibi gelirdi bana. Bir tane exploit denemiştim ve sunucu anında gümlemişti. Müşteri arayıp 'Sistem neden kapandı?' dediğinde yerin dibine girmiştim. Lazarus gibi gruplar bu hatayı yapmıyorlar işte. Onlar, attacker[.]example[.]com üzerinden indirdikleri o arka kapıyı (backdoor) yerleştirmeden önce, sistemin her bir hücresini tanıyorlar. Kullandıkları zero-day, sistemin uygulama kimlik denetimi (AppLocker gibi) mekanizmalarını bile devre dışı bırakabiliyor. Yani sen 'Sadece imzalı uygulamalar çalışsın' diyorsun, adam senin o kuralı kontrol eden çekirdek kodunu yamalayıp (patching in-memory) geçiyor.
Bu saldırının yayılım aşamasında dikkat çeken bir başka detay da sızma sonrası (post-exploitation) faaliyetleri. SYSTEM yetkisini alan saldırgan, LSASS (Local Security Authority Subsystem Service) sürecinden kimlik bilgilerini (credentials) tereyağından kıl çeker gibi çekip alıyor. Artık elinde domain admin yetkileri var ve ağın geri kalanı onun için açık bir büfeden farksız. ForgeLabs (kurgusal şirket) senaryosunda, bu tür bir sızmanın durdurulabileceği tek an, o ilk 'driver load' olayının anormalliğini fark ettiğimiz andı. Eğer o anı kaçırırsan, sonrasında yapacağın her şey sadece 'hasar tespiti' (damage control) oluyor.
Teknik olarak incelediğimizde, bu sıfırıncı günün Microsoft tarafından yayınlanan yamaları bile nasıl bypass edebileceğine dair tartışmalar dönüyor. Bu da bizi 'Savunma Derinliği' (Defense in Depth) kavramına geri getiriyor. Sadece işletim sistemine güvenemezsin. Ağ seviyesinde mikro-segmentasyonun var mı? Ayrıcalıklı hesap yönetimi (PAM) kullanıyor musun? En önemlisi, bir olay anında müdahale planın (Incident Response Plan) tozlu raflarda mı duruyor yoksa ekip her an tetikte mi? Lazarus gibi gruplar, senin en zayıf anını, en yorgun olduğun sabah saatlerini bekliyor. Bizim işimiz ise o yorgunluğa rağmen o tek bir satırlık anormal log kaydını görebilmek.
O sabah ForgeLabs (kurgusal şirket) ağındaki o kırmızılıkları temizlemek saatlerimi aldı. Ama her bir log satırında, her bir bellek dökümünde (memory dump) yeni bir şey öğrendim. Bu işin en sevdiğim yanı da bu; hiçbir zaman 'tamam, ben her şeyi biliyorum' diyemiyorsun. Tam her şeyi çözdüm dediğin anda Lazarus gibi birileri çıkıp sana 'Aslında hiçbir şey bilmiyorsun' diyor. Ve garip bir şekilde, bu beni daha da heyecanlandırıyor. Çekirdek seviyesindeki o savaşın içine girmek, bir satranç maçının en zorlu hamlelerini yapmak gibi. Son hamleyi kimin yapacağı ise tamamen hazırlık seviyene bağlı.
