- 15 Mar 2018
- 765
- 211
Merhabalar, Bu gün sizlerle "Windows Internals" konusunu inceleyeceğiz.
Peki nedir bu ?
Kısaca kernel diyelim hiç kafanıza karıştırmaya gerek yok.
Peki neler öğreneceğiz ?
virtual memory, kernel mode ve user mode, win32 api ve dahası.
Tabii bunları anlatırken size üstünkörü bir şekilde kötü amaçlı yazılımı analiz edebilmeyi anlatacağım. Aksi halde bunun için bir kitap yazmamız gerekir.
Ilk başlığımız "Virtual Memory"
Virtual memory (Sanal bellek) dediğimiz arkadaşımız kısaca direkt olarak fiziksel belleğe direkt göndermek yerine CPU ve işletim sistemi arasında görünmez bir alan oluşturur. Yani kısaca işletim sistemi tarafından hayali bir ortam oluşturulur.
işletim sistemimiz, cpu tarafından çağrılan işlem için bir tablo oluşturur buna "page table" olarak adlandırılır.
Sanal bellek işleyişi bu şekildedir.
Sırada "Kernel ve User Mode"
Kısaca kafanızı karıştırmadan anlatmak gerekirse kernel modunda çalışan uygulamalar sistemde tam yetkiye sahiptir herhangi bir sınırlama olmadan erişim sağlayabilir (rootkit dediğimiz virüs türü kernel mode üzerinde çalışmaktadır). User mode ise doğrudan donanımlara erişemezler. İşletim sistemlerinin api'leri aracılığyla cpu, ram gibi kaynaklara erişim sağlayabilirler. yani sadece kendi kaynaklarında çalışabilirler.
Basit olarak kernel32.dll'i inceleyelim. Böyle bir durumda neler karşımıza çıkabilir neler görebiliriz.
İhtiyaç listemiz: cff explorer ve C:\Windows\System32\Kernel32.dll
Cff explorer uygulamamızı açıp system32 klasöründen kernel32.dll dosyasını seçip açalım. Ardından “Export directory” bölümüne ufak bir tık yapalım ve karşımıza çıkan bölüm -
Üzerinden bu kernel32.dll arkadaşımızın ne tür yetkileri olduğunu, nelere eriştiğini, neleri değiştirebileceğini rahatlıkla görebiliriz. Bunu herhangi bir virüs üzerinde tekrar olarak gözlemleyebilirsiniz.
Evet şimdi sırada Win32 API’yi anlatalım.
Windows işletim sisteminde çok fazla API bulunmaktadır. Lakin en popüleri Win32 Api olarak söyleyebiliriz. Bu api hem 32 bit hem 64 bit üzerinde sorunsuz çalışmaktadır. Bir program/yazılım yaparken aktif olarak winapi kullanırız ve tahmin edeceğiniz üzere bu API’yi kötü amaçlı yazılımlarda kullanır.
Zararlı analizi yaparken karşınıza bol bol API çıkar. Lakin bu yazılımın zararlı olduğu anlamına gelmez günlük yaşantımızda kullandığımız bir çok program bunu kullanıyor. Bunun kötü amaçlı bir yazılım olduğunu anlamak için API’nin kullanım şeklini incelememiz daha doğru olacaktır.
Peki bunun nasıl kötü amaçlı bir yazılım olduğunu anlayacağız ?
API Logları (Obtaining API Logs) ile bu sorunu çözeceğiz;
Exe üzerinde PE dosyası ile analizi yaparken API adlarıyla karşılaşabiliriz. Ancak API’lere statik olarak bakmak yukarda belirttiğimiz gibi işimize pek yaramaz. Bu noktada bizim ihtiyacımız olan şey dinamik analizdir veya debug yaparak tersine mühendislik ile uğraşmamız gerekecektir.
API Loglarına bakarken imdadımıza APIMiner koşuyor. APIMiner sayesinde dinamik analiz yaparken API’lerin loglarına ulaşabiliyoruz. APIMiner Github: GitHub - poona/APIMiner: API Logger for Windows Executables
Eh sene olmuş 2022 Windows işletim sistemi ve SDK’ları tarafından gelen yüzlerce WIN32 Api mevcut. Şimdi bu API’lere nerede nasıl ulaşabiliriz ve bu arkadaşlarımızın kullanımlarını inceleyelim.
Win32 DLLleri
Win32 API’lerini “C:\Windows\System32” klasöründe bulabiliriz. Yani kısaca system32. Yukarda gösterdiğimiz gibi tekrardan CFF explorer ile kernel32.dll dosyasını inceleyebilirsiniz.
Aşağıda belirttiğim .DLL dosyaları hem Windows’un çalışması için gereken hemde virüslerimizin sıkça kullandığı dll dosyalarıdır bknz:
NTDLL.DLL
KERNEL32.DLL
KERNELBASE.DLL
USER32.DLL
NETAPI32.DLL
Ve uzar gider...
Bunlarda SDK’lar tarafından (visual studio ile gelen dll dosyalarını örnek göstereceğim) gelen dll dosyaları. Sonlarında bulunan 60, 120, 20... Gibi bulunan sayılar SDK’ların sürümlerini belirtmektedir.
MSVCRT.DLL
MSVCP100.dll
MSVBVM60.DLL
VCRUNTIME140.DLL
C# VB.NET gibi dillerde yazılmış programlar .NET framework’ünün kendi dll’lerini kullanır. An Yukarıda bahsettiğimiz dll’ler genel olarak sürekli karşımıza çıkacaktır. Şimdi ise Win32 API’leri hakkında bilgi toplamak için MSDN kullanarak DLL’lerin ne gibi özellikleri olduğunu neler yapabilecekleri gibi bilgileri toplayacağız.
MSDN Kullanarak Win32 API hakkında bilgi toplamak
Bir API hakkında bir şey öğrenmek için en ama en yararlı yer MSDN’dir. (Microsoft software developer network) Zaten google (veyahut diğer arama motorları) üzerinde arattığımız zaman en başta çıkmaktadır.
CreateFile() Win32 API için MSDN belgesi
Bu günlük bu kadar yeter okuduğunuz için teşekkürler hepinize iyi günler dilerim.
Peki nedir bu ?
Kısaca kernel diyelim hiç kafanıza karıştırmaya gerek yok.
Peki neler öğreneceğiz ?
virtual memory, kernel mode ve user mode, win32 api ve dahası.
Tabii bunları anlatırken size üstünkörü bir şekilde kötü amaçlı yazılımı analiz edebilmeyi anlatacağım. Aksi halde bunun için bir kitap yazmamız gerekir.
Ilk başlığımız "Virtual Memory"
Virtual memory (Sanal bellek) dediğimiz arkadaşımız kısaca direkt olarak fiziksel belleğe direkt göndermek yerine CPU ve işletim sistemi arasında görünmez bir alan oluşturur. Yani kısaca işletim sistemi tarafından hayali bir ortam oluşturulur.
işletim sistemimiz, cpu tarafından çağrılan işlem için bir tablo oluşturur buna "page table" olarak adlandırılır.
Sanal bellek işleyişi bu şekildedir.
Sırada "Kernel ve User Mode"
Kısaca kafanızı karıştırmadan anlatmak gerekirse kernel modunda çalışan uygulamalar sistemde tam yetkiye sahiptir herhangi bir sınırlama olmadan erişim sağlayabilir (rootkit dediğimiz virüs türü kernel mode üzerinde çalışmaktadır). User mode ise doğrudan donanımlara erişemezler. İşletim sistemlerinin api'leri aracılığyla cpu, ram gibi kaynaklara erişim sağlayabilirler. yani sadece kendi kaynaklarında çalışabilirler.
Basit olarak kernel32.dll'i inceleyelim. Böyle bir durumda neler karşımıza çıkabilir neler görebiliriz.
İhtiyaç listemiz: cff explorer ve C:\Windows\System32\Kernel32.dll
Cff explorer uygulamamızı açıp system32 klasöründen kernel32.dll dosyasını seçip açalım. Ardından “Export directory” bölümüne ufak bir tık yapalım ve karşımıza çıkan bölüm -
Üzerinden bu kernel32.dll arkadaşımızın ne tür yetkileri olduğunu, nelere eriştiğini, neleri değiştirebileceğini rahatlıkla görebiliriz. Bunu herhangi bir virüs üzerinde tekrar olarak gözlemleyebilirsiniz.
Evet şimdi sırada Win32 API’yi anlatalım.
Windows işletim sisteminde çok fazla API bulunmaktadır. Lakin en popüleri Win32 Api olarak söyleyebiliriz. Bu api hem 32 bit hem 64 bit üzerinde sorunsuz çalışmaktadır. Bir program/yazılım yaparken aktif olarak winapi kullanırız ve tahmin edeceğiniz üzere bu API’yi kötü amaçlı yazılımlarda kullanır.
Zararlı analizi yaparken karşınıza bol bol API çıkar. Lakin bu yazılımın zararlı olduğu anlamına gelmez günlük yaşantımızda kullandığımız bir çok program bunu kullanıyor. Bunun kötü amaçlı bir yazılım olduğunu anlamak için API’nin kullanım şeklini incelememiz daha doğru olacaktır.
Peki bunun nasıl kötü amaçlı bir yazılım olduğunu anlayacağız ?
API Logları (Obtaining API Logs) ile bu sorunu çözeceğiz;
Exe üzerinde PE dosyası ile analizi yaparken API adlarıyla karşılaşabiliriz. Ancak API’lere statik olarak bakmak yukarda belirttiğimiz gibi işimize pek yaramaz. Bu noktada bizim ihtiyacımız olan şey dinamik analizdir veya debug yaparak tersine mühendislik ile uğraşmamız gerekecektir.
API Loglarına bakarken imdadımıza APIMiner koşuyor. APIMiner sayesinde dinamik analiz yaparken API’lerin loglarına ulaşabiliyoruz. APIMiner Github: GitHub - poona/APIMiner: API Logger for Windows Executables
Eh sene olmuş 2022 Windows işletim sistemi ve SDK’ları tarafından gelen yüzlerce WIN32 Api mevcut. Şimdi bu API’lere nerede nasıl ulaşabiliriz ve bu arkadaşlarımızın kullanımlarını inceleyelim.
Win32 DLLleri
Win32 API’lerini “C:\Windows\System32” klasöründe bulabiliriz. Yani kısaca system32. Yukarda gösterdiğimiz gibi tekrardan CFF explorer ile kernel32.dll dosyasını inceleyebilirsiniz.
Aşağıda belirttiğim .DLL dosyaları hem Windows’un çalışması için gereken hemde virüslerimizin sıkça kullandığı dll dosyalarıdır bknz:
NTDLL.DLL
KERNEL32.DLL
KERNELBASE.DLL
USER32.DLL
NETAPI32.DLL
Ve uzar gider...
Bunlarda SDK’lar tarafından (visual studio ile gelen dll dosyalarını örnek göstereceğim) gelen dll dosyaları. Sonlarında bulunan 60, 120, 20... Gibi bulunan sayılar SDK’ların sürümlerini belirtmektedir.
MSVCRT.DLL
MSVCP100.dll
MSVBVM60.DLL
VCRUNTIME140.DLL
C# VB.NET gibi dillerde yazılmış programlar .NET framework’ünün kendi dll’lerini kullanır. An Yukarıda bahsettiğimiz dll’ler genel olarak sürekli karşımıza çıkacaktır. Şimdi ise Win32 API’leri hakkında bilgi toplamak için MSDN kullanarak DLL’lerin ne gibi özellikleri olduğunu neler yapabilecekleri gibi bilgileri toplayacağız.
MSDN Kullanarak Win32 API hakkında bilgi toplamak
Bir API hakkında bir şey öğrenmek için en ama en yararlı yer MSDN’dir. (Microsoft software developer network) Zaten google (veyahut diğer arama motorları) üzerinde arattığımız zaman en başta çıkmaktadır.
CreateFile() Win32 API için MSDN belgesi
Bu günlük bu kadar yeter okuduğunuz için teşekkürler hepinize iyi günler dilerim.