Crowdstrike Bilgisayarları Nasıl Çökertti?

Dün yani 19 Temmuz tarihinde Windows tabanlı bilgisayarlar (kurumsal olanları) için Crowdstrike tarafından yayınlanan bir güncelleme ile birlikte Blue Screen of Death yani daha amiyane tabir ile mavi ekran verdi. Peki bu mavi ekranın sebebi neydi? Bu yazıda teknik bir bakış açısı ile onu inceleyeceğiz.

Herkesin bu yazıyı anlaması açısından öncelikle bazı anahtar kelimelerimiz var ve öncelikle bunların ne işe yaradığını açıklamamız lazım öncelikle.

Terimler

Kernel (Çekirdek)

Bilgisayarda donanım ve yazılım arasındaki bağlantıyı sağlayan arabirimdir. İşletim sistemi çalıştığında sistem üzerindeki temel işlemler arasında bir iletişim kurması gerekir. Bu iletişim işlemci yönetimi, bellek yönetimi ve I/O yani giriş çıkış işlemleri gibi bir çok işlemin yürütülmesi ve paylaşılması şeklindedir.

Driver (Sürücü)

Bilgisayarın işlevlerini yerine getirmesi için gerekli olan bir yazılım türüdür. Anakartın, işlemcinin ve diğer yazılımların efektif ve doğru bir şekilde çalışması ve işlevini yerine getirmesi için gereklidir.

Pointer (İşaretçi)

Bilgisayarın belleğindeki belirli bir adresin ki bu genellikle bir değişkene aittir kaydedildiği ve kaydedilen bu bellek adresine de doğrudan erişimi sağlayan değişken türüdür. Konumuz olan problemin asıl kaynağı burada ortaya çıkıyor zaten.

Bu terimi biraz açmamız gerekecek yazılımsal olarak 😊

#include <stdio.h>

int main(void)
{
  int *myPointer, myVariable; // int bir işaretçi ve değişken bildirimi
  myVariable = 61;
  myPointer = &myVariable;    // myVariable değişken adresini myPointer işaretçisine atar.

  // İşaretçi kullanarak id değişken değerini ekrana yazar.
  printf("myVariable değişken değeri: %d\n", *myPointer);
  printf( "myVariable değişken bellek adresi: %p", myPointer);

  return 0;
}

Yukarıdaki kod bir pointer oluşturup, bir değişkene atanan değeri ilgili bellek adresine yazacak ve sonrasında bellek adresinden de bu değeri okuyup hem değeri hem de bellek adresini ekrana yazdıracak. Bu düzgün bir şekilde atama olduğundan dolayı bir hata ile karşılaşmayacak ve biz aşağıdaki bir çıktı ile karşılaşacağız.

id değişken değeri: 61
id değişken bellek adresi: 0x7ffe704aaadc

…Program finished with exit code 0
Press ENTER to exit console.

Bu doğru bir yazım olduğundan dolayı herhangi bir hata almadan çalıştı. Şimdi kodu biraz basite indirgeyelim ve şöyle yapalım. Biz myPointer isimli işaretçiyi tekrar oluşturalım ama hiç bir değer atamayalım. ve sonrasında da bu işaretçi adresine ulaşmaya çalışalım.

#include <stdio.h>

int main(void)
{
  int *myPointer = NULL;
 
  printf( "myPointer bellek adresi: %p", myPointer);

  return 0;
}

Ekrana işaretçinin adresini yazdırmak istedik ama ne yazık ki yazmayacak ve bize aşağıdaki gibi bir çıktı verecek.

id değişken bellek adresi: (nil)

...Program finished with exit code 0
Press ENTER to exit console.

Burası biraz teknik oldu farkındayım. O yüzden şöyle örneklendirelim; İlk kodda bir mektup yolladınız ve mektubun üzerinde kime gideceği ve adresi belli. İkinci kısımda ise mektubu zarfa koydunuz ama zarfa hiç bir bilgi yazmadınız. Bu mektup nereye gidecek? İşte şu son cümledeki soru bilgisayarın sorduğu soru diyebiliriz. Şimdi diğer anahtar kelimemize geçelim.

Blue Screen of Death (Ölümün Mavi Ekranı ya da Mavi Ekran)

Microsoft Windows üstesinden gelemediği bir sorun ile karşılaşıp kilitlendiğinde ekrana bu hata sebebini yazar. Bu ekran mavi şekildedir ve teknoloji dünyasında da bir çok espriye meze olmuştur. Hatta şöyle söyleyelim; Windows 98 tanıtılırken canlı olarak tarayıcı kilitlenmiş ve mavi ekran vermiştir. Böylece; daha piyasaya sürülmeden herkesin önünde çöken ilk işletim sistemi ünvanını da almıştır.

blue-screen--of-death
Credit: Microsoft

Bu ekran sadece Windows’da mı var? Hayır. Bu arkadaşın Unix, Linux ve MacOS’de ki adı da kernel panic‘dir.

CrowdStrike

Amerika merkezli bir siber güvenlik hizmetleri sağlayıcısı. Zaten sorunda bu firmanın bir ürünü olan Crowdstrike Falcon Sensor ürününden kaynaklandı. Ürün adını yanlış biliyor olabilirim.

Şimdi olay nasıl oldu buna bir bakalım artık.

Olay Nasıl Gerçekleşti?

Tam olarak şöyle; CrowdStrike kendi ürünü için bir güncelleme yayınlıyor. Bu güncelleme de bir tane de sürücü var. Bu sürücü ise doğası gereği kernel yani çekirdek seviyesinde işlem yapıyor. Ancak sürücünün içerisi null byte’lar ile dolu. Bu işaretçi ile kernel’de işlem yapmaya çalışınca Windows takılı kalıyor ve mavi ekran gösteriyor. Aslında işin kötü tarafı şu ki; bilgisayar yeniden başlatılırken bu sürücü tekrar çalışmaya başladığından sonsuz bir döngüye giriliyor. Hatta şurada çok güzel bir teknik anlatım da mevcut, orayı da inceleyebilirsiniz.

Çözüm

Çözüm olarak hemen güvenli modda açılıp ilgili sürücü silindiğinde ya da adı değiştirildiğinde işletim sistemi güvenli bir şekilde açılıyor. Peki neden güvenli mod’da açmak lazım? Çünkü işletim sistemi dışında bir ekstra içerik çalışmıyor olacak.

Ben bu yazıyı hazırlarken CrowdStrike’da kendi bloglarında bir içerik yayınladı. Onu da bu adresten inceleyebilirsiniz.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir