9 KiB
Kriptografik/Sıkıştırma Algoritmaları
Kriptografik/Sıkıştırma Algoritmaları
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!
- Resmi PEASS & HackTricks ürünlerini edinin
- The PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı paylaşarak HackTricks ve HackTricks Cloud github depolarına PR göndererek.
Algoritmaları Tanımlama
Eğer bir kod kaydırma işlemleri, XOR'lar ve çeşitli aritmetik işlemler içeriyorsa, büyük ihtimalle bir kriptografik algoritmanın uygulanmasıdır. Burada, her adımı tersine çevirmeye gerek kalmadan kullanılan algoritmayı tanımlamanın bazı yolları gösterilecektir.
API fonksiyonları
CryptDeriveKey
Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi algoritmanın kullanıldığını bulabilirsiniz:
Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Veri akışını sıkıştırır ve açar.
CryptAcquireContext
Belgelerden: CryptAcquireContext fonksiyonu, belirli bir kriptografik hizmet sağlayıcısı (CSP) içinde belirli bir anahtar konteynerine bir tutamaç almak için kullanılır. Bu döndürülen tutamaç, seçilen CSP'yi kullanan CryptoAPI fonksiyonlarına yapılan çağrılarda kullanılır.
CryptCreateHash
Veri akışının karma işlemini başlatır. Bu fonksiyon kullanılıyorsa, ikinci parametrenin değerini kontrol ederek hangi algoritmanın kullanıldığını bulabilirsiniz:
Mümkün algoritmaların ve atanan değerlerin tablosu için buraya bakabilirsiniz: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Kod sabitleri
Bazen, bir algoritmayı tanımlamak gerçekten kolay olabilir çünkü özel ve benzersiz bir değeri kullanması gerekir.
Google'da ilk sabit için arama yaparsanız, aşağıdakileri elde edersiniz:
Bu nedenle, dekompilasyon işlevinin bir sha256 hesaplayıcısı olduğunu varsayabilirsiniz.
Diğer sabitlerden herhangi birini arayabilir ve (muhtemelen) aynı sonucu elde edersiniz.
Veri bilgisi
Kodda anlamlı bir sabit yoksa, muhtemelen .data bölümünden bilgi yükleniyor demektir.
Bu veriye erişebilir, ilk dört kelimeyi gruplayabilir ve yukarıda yaptığımız gibi Google'da arayabilirsiniz:
Bu durumda, 0xA56363C6 için arama yaparsanız, bunun AES algoritmasının tablolarıyla ilişkili olduğunu bulabilirsiniz.
RC4 (Simetrik Şifreleme)
Özellikler
Üç ana bölümden oluşur:
- Başlatma aşaması/: 0x00 ila 0xFF arasındaki değerlerin bir tablosunu oluşturur (toplamda 256 bayt, 0x100). Bu tablo genellikle Yerine Koyma Kutusu (veya SBox) olarak adlandırılır.
- Karıştırma aşaması: Önce oluşturulan tabloyu döngü ile (tekrar 0x100 iterasyon, tekrar) her değeri yarı rastgele baytlarla değiştirerek oluşturur. Bu yarı rastgele baytları oluşturmak için RC4 anahtarı kullanılır. RC4 anahtarları genellikle 1 ila 256 bayt arasında olabilir, ancak genellikle 5 baytın üzerinde olması önerilir. Genellikle, RC4 anahtarları 16 bayt uzunluğundadır.
- XOR aşaması: Son olarak, düz metin veya şifre metni, önce oluşturulan değerlerle XOR edilir. Şifrelemek ve şifre çözmek için aynı işlev kullanılır. Bunun için, oluşturulan 256 bayt üzerinde bir döngü gerekli olduğu kadar yapılır. Bu genellikle bir dekompilasyon kodunda %256 (mod 256) ile tanınır.
{% hint style="info" %} RC4'ü bir dekompilasyon/derlenmiş kodda tanımlamak için 0x100 boyutunda 2 döngüye (bir anahtar kullanarak) ve ardından giriş verilerinin 2 döngüde oluşturulan 256 değerle muhtemelen %256 (mod 256) kullanılarak XOR edildiğini kontrol edebilirsiniz. {% endhint %}
Başlatma aşaması/Yerine Koyma Kutusu: (256 sayısı kullanılan sayacı ve 256 karakterin her yerine 0 yazıldığına dikkat edin)
Karıştırma Aşaması:
XOR Aşaması:
AES (Simetrik Şifreleme)
Özellikler
- Yerine koyma kutuları ve arama tabloları kullanımı
- Belirli arama tablosu değerlerinin (sabitlerin) kullanımı sayesinde AES'i ayırt etmek mümkündür. Sabitin binary'de saklanabileceğine veya dinamik olarak oluşturulabileceğine dikkat edin.
- Şifreleme anahtarı, 16'ya bölünebilmelidir (genellikle 32B) ve genellikle 16B'lik bir IV kullanılır.
SBox sabitleri
Yılan (Simetrik Şifreleme)
Özellikler
- Kullanan bazı kötü amaçlı yazılımların nadir olduğu ancak örneklerin bulunduğu (Ursnif gibi)
- Bir algoritmanın Serpent olup olmadığını belirlemek oldukça basittir, uzun bir işlev olmasına dayanarak (son derece uzun işlev)
Tanımlama
Aşağıdaki resimde 0x9E3779B9 sabitinin kullanıldığına dikkat edin (bu sabitin TEA -Tiny Encryption Algorithm gibi diğer kripto algoritmalarında da kullanıldığını unutmayın).
Ayrıca döngünün boyutunu (132) ve XOR işlemlerinin sayısını derleme talimatlarında ve örnek kodda fark edin:
Daha önce belirtildiği gibi, bu kod, içinde atlamalar olmadığı için herhangi bir dekompilatörde çok uzun bir işlev olarak görülebilir. Dekompilasyon kodu aşağıdaki gibi görünebilir:
Bu nedenle, bu algoritmayı tanımlamak için sihirli sayıyı ve başlangıç XOR'larını kontrol ederek, çok uzun bir işlevi görerek ve uzun işlevin bazı talimatlarını (örneğin, 7 ile sola kaydırma ve 22 ile sola döndürme) bir uygulama ile karşılaştırarak mümkündür.
RSA (Asimetrik Şifreleme)
Özellikler
- Simetrik algoritmalardan daha karmaşıktır
- Sabitler yoktur! (özel uygulamaları belirlemek zordur)
- KANAL (bir şifre analizörü) RSA hakkında ipuçları veremez çünkü sabitlere dayanır.
Karşılaştırmalarla Tanımlama
- Sol tarafta 11. satırda
+7) >> 3
sağ tarafta 35. satırda aynıdır:+7) / 8
- Sol tarafta 12. satırda
modulus_len < 0x040
kontrol edilirken sağ tarafta 36. satırdainputLen+11 > modulusLen
kontrol edilmektedir.
MD5 & SHA (hash)
Özellikler
- 3 fonksiyon: Init, Update, Final
- Benzer başlatma fonksiyonları
Tanımlama
Init
Her ikisini de sabitlere bakarak tanımlayabilirsiniz. SHA_init'in MD5'te olmayan 1 sabiti olduğunu unutmayın:
MD5 Dönüşümü
Daha fazla sabit kullanımına dikkat edin
CRC (hash)
- Verideki kazara değişiklikleri bulma işlevi nedeniyle daha küçük ve daha verimlidir
- Sabitleri tanımlamak için arama tabloları kullanır
Tanımlama
Arama tablosu sabitlerini kontrol edin:
Bir CRC hash algoritması şuna benzer:
APLib (Sıkıştırma)
Özellikler
- Tanınabilir sabitler yoktur
- Algoritmayı python'da yazmayı deneyebilir ve benzer şeyleri çevrimiçi arayabilirsiniz
Tanımlama
Grafik oldukça büyüktür:
Tanımak için 3 karşılaştırmayı kontrol edin: