Google, Gostringungarbler’i GO tabanlı kötü amaçlı yazılım şifrelemesini kırmak için açıklıyor


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.

Gostringungarbler: Yavaklı ikili dosyalarda bozulma dizeleriGostringungarbler: Yavaklı ikili dosyalarda bozulma dizeleri
Gostringungarbler: Yavaklı ikili dosyalarda bozulma dizeleri

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.

Gostring HunterblesGostring Hunterbles
Gostring Hunterbles

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:

  1. 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ı.
  2. Platformlar arası analiz: Python uygulaması, satıcı kilitlenmeden ghidra ve ikili ninja gibi sökücülerle entegrasyona izin verir.
  3. 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



Source link