SigFlip - Authenticode İmzalı PE Dosyalarına (Exe, Dll, Sys ..Etc) Mevcut İmzayı Geçersiz Kılmadan veya Kırmadan Yama Yapan Bir Araç

 SigFlip - Authenticode İmzalı PE Dosyalarına (Exe, Dll, Sys ..Etc) Mevcut İmzayı Geçersiz Kılmadan veya Kırmadan Yama Yapan Bir Araç



SigFlip, kimlik doğrulama imzalı PE dosyalarına (exe, dll, sys ..vb) mevcut kimlik doğrulama imzasını etkilemeyecek veya bozmayacak şekilde yama yapmak için bir araçtır, başka bir deyişle, verileri gömerek PE dosyası sağlama toplamını/karmasını değiştirebilirsiniz ( yani kabuk kodu) dosya imzasını, bütünlük kontrollerini veya PE dosya işlevselliğini bozmadan.SigInject, kabuk kodunu bir PE dosyasının [WIN_CERTIFICATE] sertifika tablosuna şifreler ve enjekte eder; şifreleme anahtarı, temel bir BOF/C/C# yükleyici (SigLoader) ile kullanım için yazdırılır, SigInject, değişiklikleri değiştirilmiş bir PE dosyasına kaydeder ve imzasını ve sertifikasını korur geçerlilik bozulmamış.

SigLoader, SigInject tarafından oluşturulan değiştirilmiş bir PE dosya yolunu ve parametre olarak şifre çözme anahtarını alan, ardından tercih edilen bir kabuk kodu enjeksiyonuyla kullanım için gömülü kabuk kodunu çıkaran ve şifresini çözen temel bir yükleyicidir.

SigFlip, PE karma değerinin başarıyla değiştirilip değiştirilmediğini kontrol edecek ve ayrıca uç noktaların bu tür yaygın yanlış yapılandırmaya karşı sertleştirilmesi durumunda incelikle kontrol edip çıkacaktır. ("Ayrıntılar" bölümüne bakın).

Hızlı Not: SigFlip, SigInject ve SigLoader, BOF komut dosyaları ve .NET derlemeleri olarak mevcuttur, tek fark, BOF'ler yerine .NET yapılarını kullanmayı seçmeniz durumunda SigInject işlevinin SigFlip'in (-i) bir parçası olarak uygulanmasıdır.


Niye ya ?

Esas olarak kalıcılık, yanal hareket veya kod/komut yürütme için kullanılabilir ve şu konularda yardımcı olabilir:


Uygulamanın beyaz listeye alınması , imzayı bozmadan PE dosyası karmasını (örn. msbuild.exe) değiştirerek atlanır.

Kötü amaçlı kod/komut yürütme algılaması için belirli LOLBIN'lerin karmalarına dayanan EDR'leri atlama.

İmzalı sürücüleri farklı bir karma kullanarak yükleyin, önceden tanımlanmış bir karma listesi kullanarak ortak güvenlik açığı bulunan imzalı sürücüleri izleyen herhangi bir EDR'yi atlatmaya yardımcı olabilir.

Şifreli kabuk kodunu imzalı bir PE dosyasına gömün ve ayrıştırmak, şifresini çözmek, yüklemek ve yürütmek için tercih ettiğiniz bir aşamalayıcı (sigloader) kullanın.

Uç nokta güvenlik sağlayıcıları, çoğu zaman imzalı PE dosyalarını iyi huylu olarak sınıflandırma eğilimindedir, imzasız kodunuzu (kabuk kodu ..vb.) imzalı bir PE dosyasına gömmek, onu algılamayı/işaretlemeyi biraz zorlaştırır.

İmza doğrulaması için esas olarak varsayılan WinVerifyTrust'a güvenen uç nokta güvenlik sağlayıcılarını atlamak.

PE dosyalarının kimlik doğrulama imzasını doğrulamak için yalnızca signtool, sigcheck, Get-AuthenticodeSignature ..etc gibi tipik imza doğrulama yardımcı programlarına dayanan OPSEC ve zorlu savunucuları geliştirmek.


Kullanım ve Örnekler:


Derleme/Derleme:

Bu projede önceden derlenmiş BOF'lar sağlanmaz, Mingw-w64 kullanılarak derlenebilir, .NET için VS veya csc.exe kullanarak .NET projelerini (SigFlip, SigLoader) derleyin, BOF kontrol adımları için aşağıdaki;

  •  ➜i686-w64-mingw32-gcc -c sigflip.c -o sigflip.x86.
  • ➜ x86_64-w64-mingw32-gcc -c sigflip.c -o sigflip.x64.o
  • ➜ x86_64-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x64.o
  • ➜ i686-w64-mingw32-gcc -c SigLoader/sigloader.c -o sigloader.x86.o

Tüm nesne dosyalarının sigflip.cna ile aynı dizinde bulunduğundan emin olun, ardından sigflip.cna betiğini kobalt grevine yükleyin.

Kısa Not: önceden derlenmiş BOF'ler test edilmiştir ve mingw-64 v8.0.0_3 ile uyumludur, mingw-64 >= v9 kullanılarak çalışabilir ancak aktif işaretçileri çökebilir , https://github.com/med0x2e/SigFlip/issues/ adresini kontrol edin. Daha fazla ayrıntı için 2 .

Kobalt Grevi:

  1. Yürütme-Montaj

    • execute-assembly SigFlip.exe -h
    • execute-assembly SigLoader -h
  2. BOF

    • >Kobalt vuruşuyla kullanım için, SigFlip.cna betiğini yüklediğinizde, iki yeni komut kaydedilecektir; SigFlip ve SigInject, ardından aşağıdaki gibi kullanın;
      • >SigFlip: İmzayı veya sertifikanın geçerliliğini bozmadan bir PE dosyasını (DLL, EXE, SYS, OCX ..etc) değiştirin:

        • SigFlip "<PE\_FILE\_PATH>" "<OUTPUT\_PE\_FILE\_PATH (with extension)>"
        • >SigInject: Kabuk kodunu bir PE dosyasının [WIN_CERTIFICATE] sertifika tablosuna şifreler ve enjekte eder, şifreleme anahtarı temel bir C/C# yükleyici ile kullanım için yazdırılır, ayrıca imza ve sertifika geçerliliğini olduğu gibi tutar:

          • SigInject "<PE\_FILE\_PATH> <OUTPUT\_PE\_FILE\_PATH (with extension)>" "<SHELLCODE\_FILE>"
        • >SigLoader: SigInject tarafından oluşturulan PE dosyalarından şifrelenmiş kabuk kodunu yükler, ardından bir kurban işlemine sc spawn/enjekte etmek için Early Bird tailuserapc kullanın, kabuk kodu enjeksiyon mantığı özelleştirilebilir veya tercih edilen herhangi bir başka kod enjeksiyon tekniği ile değiştirilebilir:

          • SigLoader <PE_FILE_PATH_WITH_SH> <DECRYPTION_KEY> <SPAWNTO_PROCESS_PATH> <PARENT_PROCESS_ID>
    • Örnekler

      • BOF:

        • >Rastgele verileri msbuild.exe'ye enjekte edin (diğer adıyla bit çevirme msbuild.exe):
          • SigFlip "C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" "C:\lolbins\modified-msbuild.exe"
        • >Kabuk kodunu kernel32.dll'ye enjekte edin (Argümanların sırası farklıdır ve şifre çözme anahtarını not ettiğinizden emin olun):
          • SigInject "C:\Windows\System32\kernel32.dll" "C:\random\modified-kernel32.dll" "C:\shellcode\cobaltstrike_or_msf_shellcode.bin"
          • Sigloader "C:\random\modified-kernel32.dll" "DECRYPTION_KEY" "C:\Windows\System32\werfault.exe" 6300
      • Yürütme-Montaj:

        • >Rastgele verileri msbuild.exe'ye enjekte edin:
          • execute-assembly SigFlip.exe -b C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe -o C:\Temp\MSBuild.exe
        • >Kabuk kodunu kernel32.dll'ye enjekte edin (Argümanların sırası farklıdır ve şifre çözme anahtarını not ettiğinizden emin olun):
          • execute-assembly SigFlip.exe -i C:\Windows\System32\kernel32.dll -s C:\Temp\x86shellcode.bin -o C:\Temp\kernel32.dll -e TestSecretKey
          • execute-assembly SigLoader.exe -f C:\Temp\modified-kernel32.dll -e TestSecretKey -pid 2354



Detaylar:
Bu, APT#10 tarafından çoklu kampanyalarda veya izinsiz giriş setlerinde kullanılan bilinen bir tekniktir.


Authenticode Dijital İmzalar?
Authenticode, Authenticode imzalı yazılımın yayıncısını tanımlayan bir Microsoft kod imzalama teknolojisidir. Authenticode ayrıca, imzalanıp yayınlandığından beri yazılımın kurcalanmadığını da doğrular.


Nasıl çalışır ?
Microsoft, Authenticode Taşınabilir Yürütülebilir biçim belirtimine göre, PE ikili dosyalarının bütünlüğünü ve kaynağını doğrulamak için esas olarak Authenticode imzalama biçimine güvenir; İsteğe Bağlı Başlık Veri Dizinleri. Bir Windows PE dosyasını imzalamak için Authenticode kullanıldığında, dosyanın Authenticode karma değerini hesaplayan algoritma belirli PE alanlarını hariç tutar. İmzayı dosyaya gömerken, imzalama işlemi dosyanın karma değerini etkilemeden bu alanları değiştirebilir . Bu alanlar aşağıdaki gibidir: **sağlama toplamı, sertifika tablosu RVA, sertifika tablosu boyutu ve nitelik sertifikası tablosu. Öznitelik sertifikası tablosu, PE dosyasının karma değerini içeren bir PKCS #7 SignedData yapısını , yazılım tarafından oluşturulan bir imzayı onun özel anahtarını ve yazılım yayıncısının imza anahtarını bir tüzel kişiliğe bağlayan X.509 v3 sertifikalarını içerir.

Layman'ın terimleriyle, kimlik doğrulama imzasını ve dosya bütünlüğü kontrollerini bozma konusunda endişelenmeden, kimlik doğrulama karma hesaplamasından yürütülen alanlara verileri değiştirebilir veya gömebiliriz .

Bu tür hariç tutulan alanlar hakkında daha fazla ayrıntı:

  • Sertifika tablosu RVA ve Boyut: İmzalı bir PE dosyası isteğe bağlı başlık yapısı , RVA ve Size olmak üzere iki alana sahip IMAGE_DIRECTORY_ENTRY_SECURITY girişini içeren bir dizi veri dizini içerir .
    • RVA: öznitelik sertifikası tablosuna göre bir dosya ofseti (bir bellek ofseti değil).
    • Boyut: nitelik sertifikası tablosu boyutu.
  • Nitelik Sertifika Tablosu: imza ve sertifikaları kapsayan ve aşağıdaki alanlara sahip olan bir WIN_CERTIFICATE veri yapısı :
    • dwLength: sertifika tablo boyutu.
    • wRevision: "revizyonu" WIN_CERTIFICATE.
    • wCertificateType: kapsüllenmiş sertifika verilerinin türü.
    • bCertificate: gerçek sertifika verileri. için WIN_CERT_TYPE_PKCS_SIGNED_DATA, bu SignedDatayukarıda bahsedilen PKCS#7 yapısıdır (PE hash değerini, imzayı ve x.509 sertifikasını içerir), bu tam olarak SigFlip'in rastgele rastgele veri veya kabuk kodunu gömdüğü yerdir.

Tüm bunları göz önünde bulundurarak, şimdi SifFlip aşağıdakileri yapıyor:

  1. Sistem yapılandırmasını kontrol edin
  2. PE Dosyası Yükleniyor ve PE dosyası imzasının doğrulanması ve Sha1 karmasını hesaplayın
  3. "e_lfanew" ofsetini alın (PE DOSYA BAŞLIĞI -> IMAGE_NT_HEADERS'ı işaret ederek)
  4. IMAGE_NT_HEADERS'tan IMAGE_OPTIONAL_HEADER alın
  5. IMAGE_OPTIONAL_HEADER'den IMAGE_DATA_DIRECTORY alın
  6. IMAGE_DIRECTORY_ENTRY_SECURITY alanını alın ve Nitelik Sertifikası Tablosunun (WIN_CERTIFICATE) RVA ve SIZE değerini alın.
  7. Sertifika Tablosunu isteğe bağlı ekstra bayt (rastgele/kabuk kodu) ile doldurarak PE Dosya blobunu yamalayın.
  8. İsteğe bağlı başlığı güncelleyin -> IMAGE_DIRECTORY_ENTRY_SECURITY veri dizini Boyut
  9. WIN_CERTIFICATE (Sertifika Tablosu) dwLength güncellemesi
  10. Yeni PE cheksum'u oluşturun ve güncelleyin. (OPT Başlık Sağlama Toplamı)
  11. Son PE'yi yeni boyutla kaydedin.
  12. Değiştirilmiş PE dosya imzasını doğrulayın

İlk adım, sistemin kimlik doğrulama imzalı PE dosyalarına kabuk kodu eklemeye ve enjekte etmeye izin verecek şekilde yanlış yapılandırılıp yapılandırılmadığını doğrulamak için gereklidir, bu nedenle aşağıdaki akıl sağlığı kontrolleri gerçekleştirilir:

  1. MS13-098 düzeltmesinin kurulu olup olmadığını kontrol edin (KB2893294), YÜKLENEBİLİR AMA KAYIT ANAHTARLARININ DOĞRU AYARLANMADIĞINI, YAMANIN KULLANILAMAZ OLDUĞUNU UNUTMAYIN
  2. Kayıt defteri anahtarlarını kontrol edin
    1. X86:
      • Olmadığını kontrol edin kayıt defteri anahtarı ": \ Software \ Microsoft \ Kriptografi \ WinTrust \ Yapılandırma HKLM" kullanılamaz
        • -> varsa "EnableCertPaddingCheck" kayıt defteri değerinin mevcut olup olmadığını kontrol edin
    2. X64:
      • "HKLM:\Software\Wow6432Node\Microsoft\Cryptography\Wintrust\Config" kayıt defteri anahtarının mevcut olup olmadığını kontrol edin
        • -> varsa "EnableCertPaddingCheck" kayıt defteri değerinin mevcut olup olmadığını kontrol edin.


Değiştirilen PE bir modül olarak kendi adres alanına veya diğer süreçlerin adres alanına yüklendiğinde neden enjekte edilen verileri okuyamıyor?

Windows yükleyici, sertifika verilerini işlem adres alanına yüklemez, bu nedenle, kabuk kodu gibi verileri çıkarmak ve kullanmak için özel bir yükleyiciye ihtiyaç duyarsınız (örn: SigLoader). bu ayrıca IMAGE_DIRECTORY_ENTRY_SECURITY veri dizini girişi RVA'nın neden tipik bir bellek kayması yerine bir dosya kayması olduğunu da açıklamalıdır .


Algıla/Önle:

 

Referanslar



SigFlip'i indiri

Daha yeni Daha eski

POST ADS1

POST ADS 2