- 8 Nis 2020
- 220
- 2
- 73
Windows işletim sisteminde shellcode analizinde, Process Environment Block (PEB) önemli bir rol oynar. PEB, bir süreç hakkında bilgi içeren bir veri yapısıdır. PEB, aşağıdaki bilgileri içerir:
- Process ID: Sürecin kimliğini temsil eder.
- Thread ID: Süreç içinde çalışan ana iş parçacığının kimliğini temsil eder.
- Image Base: Sürecin başlangıç adresidir.
- Module List: Süreç tarafından yüklenmiş modüllerin bir listesini içerir.
- Environment Strings: Süreç için özelleştirilmiş ortam dizeleri içerir.
PEB ile shellcode bulmak için aşağıdaki adımlar izlenir:
- Shellcode'un PEB'ye eriştiğini belirleyin. Shellcode, genellikle PEB'ye erişmek için, FS:[0x30] veya FS:[0x60] adresini kullanır. (x86 ve x64 farklılıkları
- Shellcode'un PEB'de hangi alanı kullandığını belirleyin. Shellcode, genellikle PEB'de aşağıdaki alanları kullanır:
- Ldr
- InLoadOrderModuleList: Yüklendikleri sırayla modüllerin listesi.
- InMemoryOrderModuleList: Belleğe yerleştirildikleri sırayla modüllerin listesi.
- InInitializationOrderModuleList: Başlatıldıkları sırayla modüllerin listesi.
- Ldr
InLoadOrderModuleList, LIST_ENTRY türünde bir yapıdır. LIST_ENTRY yapısının 2-üye içerir - bir sonraki LIST_ENTRY yapısına bir ileri işaretçi (yani Flink) ve bir önceki LIST_ENTRY yapısına bir geri işaretçi (yani Blink). Örnek olarak, Flink'i takip edeceğiz. Flink, bir LDR_DATA_TABLE_ENTRY yapısı içinde bulunan başka bir LIST_ENTRY yapısına işaret eder.
LDR_DATA_TABLE_ENTRY yapısı, yüklü bir DLL hakkında bilgi içerir ve InLoadOrderModuleList tarafından izlenen her DLL'nin kendisiyle ilişkili bir LDR_DATA_TABLE_ENTRY yapısı vardır. Birçok üyesi arasında, modülün bellekteki temel adresini belirten DllBase bulunur. Temel adres, genellikle shellcode tarafından dışa aktarma dizinini bulmak için bir başlangıç noktası olarak kullanılır. Ayrıca, yüklü DLL'nin adını belirten BaseDllName de dikkate değerdir. Bu üye tipik olarak shellcode tarafından bir DLL adı depolayan Buffer'ın adresini elde etmek için kullanılır. DLL adı, genellikle API karma oluşturmak için bir fonksiyon adıyla birleştirilir.
Shellcode'un PEB'de kullandığı alanı inceleyin. Shellcode'un PEB'de kullandığı alanı inceleyerek, shellcode'un hangi bilgileri elde ettiğini belirleyebilirsiniz.
Kod:
; Shellcode'un başlangıcı
mov eax, FS:[0x30]
mov eax, [eax + 0x0C]
; Shellcode'un sonu
Bu shellcode, FS:[0x30] adresinden PEB'nin adresini alır ve ardından PEB'de Ldr yapısının adresini alır. Ldr yapısının adresini elde ederek, shellcode yüklü modüllerin bir listesini elde edebilir.
References