Google’ın Flare ekibi, Garble Derleyicisi tarafından korunan Go ikili dosyalarında yayını sökmek için tasarlanmış açık kaynaklı bir araç olan Gostringungarbler’i piyasaya sürdü.
Bu inovasyon, Garble’ın geleneksel statik analizi etkisiz hale getiren gelişmiş gerçek dönüşümlerini sömüren kötü amaçlı yazılım yazarları konusundaki artan endişeleri ele almaktadır.
Araç, emülasyon odaklı dize ekstraksiyonunu, bozulmuş yürütülebilir ürünler üretmek için ikili yama ile birleştirerek güvenlik analistleri için ters mühendislik iş akışlarını temel olarak değiştirir.
Garble’ın Gizli Mimarisi
Garble derleyicisi, statik analizi karmaşıklaştırırken program semantiğini koruyan AST seviyesi dönüşümleri yoluyla Go ikili korumasını geliştirir.


Onun -literaller bayrağı, her biri özel şifre çözme yaklaşımları gerektiren dört farklı dize şifreleme metodolojisini etkinleştirir.
Yığın Tabanlı Dönüşümler
Garble, çalışma zamanı dizesi şifre çözme için üç yığın manipülasyon tekniği uygular:
Basit dönüşüm Rastgele oluşturulan bir anahtar ve operatör (XOR/ADD/SUB) kullanarak bayt bazda aritmetik işlemler kullanır. Derleyici, aşağıda gösterildiği gibi bir şifreleme işlevi şablonu oluşturur:
key := make([]byte, len(data))
obfRand.Read(key)
op := randOperator(obfRand)
for i, b := range key {
data[i] = evalOperator(op, data[i], b)
}
Bu, RunTime_sliceByTetostring’i çağırmadan önce RBX/RCX kayıtlarının şifre çözülmüş dize işaretçileri ve uzunluklarını tuttuğu montaj modelleri üretir.


Dönüşüm takas Bayt çifti değiştirme ve dinamik yerel tuşlardan pozisyona bağlı şifreleme sunar:
for i := len(positions) - 2; i >= 0; i -= 2 {
localKey := byte(i) + byte(positions[i]^positions[i+1]) + shiftKey
data[positions[i]], data[i+1] = evalOperator(op, data[i+1], localKey),
evalOperator(op, data[i], localKey)
}
Ortaya çıkan kontrol akışı, basamaklı XOR operasyonları uygulanırken bayt sırasını karıştıran iç içe döngüler içerir1.
Karışık dönüşüm Permütasyon matrisleri ve dizin karıştırma yoluyla çok katmanlı gizlemeyi uygular:
shuffledIdxs := obfRand.Perm(len(fullData))
for i, b := range fullData {
shuffledFullData[shuffledIdxs[i]] = b
}
Analistler, randomize bellek bölgelerinde şifre çözme anahtarları ile serpiştirilmiş şifreli veri parçalarıyla karşı karşıya.
Tohum dönüşüm mekaniği
Bu zincir tabanlı yaklaşım, gelişen tohum değerlerini kullanarak baytlar arasında şifreleme bağımlılıkları yaratır:
seed := byte(obfRand.Uint32())
for i, b := range data {
encB := evalOperator(op, b, seed)
seed += encB
}
Ayrıştırılmış kod, tohumu aritmetik operasyonlar yoluyla sırayla güncelleyen ardışık çağrı talimatlarını ortaya çıkarır.
Bölünmüş dönüşüm altyapısı
Devlet makineleri aracılığıyla yönetilen parçalanmış şifreleme metinlerine dizileri parçalayan parçaları sarmallar:
switchCases := []ast.Stmt{&ast.CaseClause{
List: []ast.Expr{ah.IntLit(decryptIndex)},
Body: shuffleStmts(obfRand,
&ast.AssignStmt{
Lhs: []ast.Expr{ast.NewIdent("i")},
Tok: token.ASSIGN,
Rhs: []ast.Expr{ah.IntLit(exitIndex)},
},
decryptLogic)}}
Şifreli yükleri yeniden monte etmek için randomize anahtar durumları arasında kontrol akışı atlar.
Gostringungarbler’in Deobfuscation Boru Hattı
Araç, patern tanıma, emülasyon ve ikili modifikasyonu birleştiren üç aşamalı bir işlem uygular:
1. Alt rutin tanımlama
Düzenli ifadeler, Runtime_sliceByTeTOSTRING çağrılarından önceki Garble Montaj Parmak İzlerini Hedefleyin:
48 8D 5C ?? ?? lea rbx, [rsp+]
B9 ?? ?? ?? ?? mov ecx,
E8 ?? ?? ?? ?? call runtime_slicebytetostring
Yara kuralları, dönüşüm türlerini kayıt başlatma modellerine göre sınıflandırır.
2. Emülasyon Motoru
Tek boynuzlu at tabanlı emülasyon, tanımlanmış prologlardan şifreden çözücüler yürütür:
49 3B ?? ?? cmp rsp, [+]
76 ?? jbe short
Bellek anlık görüntüleri, kötü amaçlı yazılım yükleri yürütmeden emülasyon sonrası şifre çözülmüş dizeleri yakalar.
3. İkili yama
Orijinal şifreleme, statik dize yükleri ile cerrahi replasmana tabi tutulur:
xor eax, eax
lea rbx, 0x5FFD00 ; Decrypted string address
mov ecx, 0x1A ; String length
call runtime_slicebytetostring
ret
Kalan fonksiyon alanı, yürütme artefaktlarını önlemek için INT3 kesme noktalarıyla doldurulur.
Kötü amaçlı yazılım analizi için çıkarımlar
Gostringungarbler üç kilit alanda paradigma değişimleri getirir:
- Otomatik TTP ekstraksiyonu: Test edilen numunelerdeki garble gözlemlenmiş dizelerin% 92’sinden fazlası başarıyla geri kazanıldı ve daha hızlı IOC üretimi sağladı.
- Platformlar arası analiz: Python uygulaması, satıcı kilitlenmeden ghidra ve ikili ninja gibi sökücülerle entegrasyona izin verir.
- Proaktif savunma: Açık kaynaklı kullanılabilirlik (Mantiant Github) EDR satıcılarının DEOBFUSCATION’u tarama boru hatlarına dahil etmelerini sağlar.
Google’ın atılımı, Garble’ın korumalarının – sofistike olsa da – aşılmaz olmadığını gösteriyor.
Öğretim deseni analizini emülasyon ve cerrahi ikili düzenleme ile birleştirerek Gostringungarbler, gelişen Go kötü amaçlı yazılım tehditlerine karşı pratik önlemler sunar.
Güvenlik ekipleri, şu anda rakipler tarafından kullanılan gizleme avantajlarını etkisiz hale getirmek için bu aracı ters mühendislik iş akışlarına entegre etmelidir.
Collect Threat Intelligence on the Latest Malware and Phishing Attacks with ANY.RUN TI Lookup -> Try for free