Bir önceki makalemizde temel manada Windows API’lerinin kullanım amacından bahsetmiş ve zararlı kod (malware) geliştiricileri tarafından da bu API’lerin sıklıkla kullanıldığına değinmiştik. Bu makale dizisinin ilk yazısına  adresinden ulaşabilirsiniz. Biz zararlı kod analistleri (malware analyst) de Windows’un API’leri hakkında yeterli bilgiye sahip olduğumuz durumda gerçekleştireceğimiz zararlı kod analizlerinde ilgili kodun temel yeteneklerinin neler olabileceği sonucuna daha hızlı varabiliriz. Bu bağlamda her bir API’nın ne amaçla kullanıldığını ve parametre olarak neleri kabul ettiğini bilmek analiz sürecimizi oldukça hızlandıracaktır. Serinin ilk makalesinde Dosya Sistemi, Registry ve Network seviyesinde kullanılan API’lerden sıkça kullanılanlarına değinmiştik. Şimdi diğer işlemleri için kullanılan API’lerin detayları ile devam edelim.

WinINet Fonksiyonları

Winsock haricinde daha üst düzey protokollere ilişkin örneğin HTTP, FTP vb gibi protokollere ilişkin oturum açma, dosya transfer etme vb gibi fonksiyonlara ihtiyaç duyulduğuna WinINet içindeki fonksiyonlar çağırılır.Bu fonksiyonların yer aldığı kütüphane dosyası Wininet.dll’dir. Bu kütüphane içinde en çok karşımıza çıkan fonksiyonlar ise şunlardır;

Fonksiyon Adı Açıklama
InternetOpen Bir İnternet bağlantısı gerçekleştirilmek istendiğinde ilk olarak çağrılan fonksiyondur.
InternetOpenUrl HTTP üzerinden bir URI çağrılmak istendiğinde ya da bir FTP kaynağına erişim gerçekleştirilmek istendiğinde kullanılan fonksiyondur.
InternetReadFile Internet üzerinden indirilen dosyayı okumak için kullanılan fonksiyondur.
InternetWriteFile Bir önceki istekte açılan URL’e veri yazmak için kullanılan fonksiyondur.

Bu API’lerden InternetOpenUrl API’sinin kullanımına ilişkin bir örnek aşağıda yer almaktadır. Görülebileceği üzere öncelikle stack yapısı hazırlanmış ve API’nin parametreleri stack’e gönderilmiş ve sonrasında InternetOpenUrl çağrılarak lpszUrl değişkenine atanmış URL’e istekten bulunulacak çağrı (call) gerçekleştirilmiştir. InternetOpenUrl API’si ile ilgili detaylı bilgiye  adresinden ulaşabilirsiniz.

 

 

 

Proses Komutları

Zararlı kod bulaştığı sistem üzerinde eğer bir uygulama çalıştıracaksa bu durumda genellikle CreateProcessA fonksiyonu kullanılır. Bu fonksiyon kullanılarak zararlı kod tarafından yeni bir uygulama başlatılabilir veya Internet Explorer gibi bir prosesin instance’ı oluşturulabilir. Thread ise, bir uygulama içinde CPU tarafından birbirinden bağımsız şekilde çalıştırılan kod parçacıklarına verilen isimdir. Bir uygulama içindeki threadler aynı hafıza alanını kullanırlar. CreateThread fonksiyonu kullanılarak yeni bir thread oluşturulur. İnceleyeceğiniz zararlı kodlarda bu iki yöntemi de görmeniz mümkündür.

Aşağıdaki örnek kodda CreateProcessA fonksiyonunun nasıl kullanıldığını görebilirsiniz. İlgili fonksiyon çağırılmadan önce yine stack yapısı hazırlanmış (Function prologue –  ve ardından CreateProcessfonksiyonu çağırılmıştır. Bu API hakkındaki detaylı bilgiye ise  adresinden ulaşabilirsiniz.

CreateThread fonksiyonun örnek kullanımına ilişkin kod kısmı ise aşağıda gösterilmiştir. Yine görülebileceği üzere öncelikle fonksiyonun prolog kısmı ve ardından CreateThread çağrısı yer almaktadır. Bu fonksiyondaki dwCreationFlags’e atanacak değerler ile threadin hemen mi başlayacağı yoksa askıya alınmış şekilde (CREATE_SUSPENDED) mi başlayacağaı gibi tanımlar yapılmaktadır. Bu API’nin detaylarına da  adresinden ulaşabilirsiniz.

Servis Komutları

Zararlı kodlar bulaştıkları sisteme kendilerini servis olarak ekleyip, bilgisayar her açıldığında otomatik olarak çalışmayı garanti altına almak isterler. Bu durumda genellikle kullandıkları fonksiyonlar şunlardır;

  • OpenSCManager: Bu fonksiyon servislerle ilgili daha sonradan yapılacak işlemler için kullanılacak servis kontrol yöneticisi (service control manager)’ın handle’ını döner.
  • CreateService: Servis kontrol yöneticisine yeni servis eklemek için kullanılan fonksiyondur. Bunun yanında oluşturulan yeni servisin sistem başlangıcında otomatik olarak mı yoksa manuel olarak mı başlatılacağını belirler.
  • StartService: Manuel şekilde başlatılacak modda ayarlanmış servisleri başlatmak için kullanılan fonksiyondur.

Bu API’lerin kullanımına ilişkin örnek bir kod kısmı aşağıda gösterilmiştir. Görülebileceği üzere ilgili kod parçacığı sistemde  Malservice isimli bir servis oluşturmaya yarıyor. Windows’daki servis API’leri  hakkında detaylı bilgiye  adresinden ulaşabilirsiniz.

 

 

Bir sonraki yazımızda ise zararlı kodlar tarafından kullanılan diğer Windows API’lerine göz atıp ardından örnek zararlı kodlar üzerinde yapacağımız analizler ile yazı dizimize devam edeceğiz.