İşlevinin bir parçası olarak popüler yönetilmeyen bir DLL dosyası kullanan bir C# .NET uygulaması yazdım. DLL, System.Runtime.InteropServices standart DllImport kullanılarak alınır. Ne yazık ki, uygulama (DllImport kullanarak çoğu .NET uygulamasıyla birlikte) DLL Hijacking'e karşı savunmasızdır. I.e. Bir saldırgan, ithal DLL dosyasının malicous kopyasını, uygulamam tarafından açılmış herhangi bir dosyayla aynı dizine yerleştirebilir. Bu, saldırganın kullanıcının makinesine tam denetimini verebilir..NET'te bir DLL Dijital İmzası Nasıl Doğrulanır?
Bu güvenlik açığını gidermek için, bu dosyayı almadan önce DLL dosyasının düzgün şekilde (varsayılan Authenticode ile) imzalandığından emin olmak istiyorum. İmzaların sigcheck.exe gibi araçlarla doğrulanabileceğini biliyorum, ancak bu benim C# kodumun içinden yapmam gerektiğinden benim için geçerli bir çözüm değil.
Bu yüzden sorum şu: DLL yüklenmeden önce bir DLL dosyasının yönetilen C# kodunun içinden geçerli bir Authenticode imzasına sahip olduğunu nasıl doğrulayabilirim?
Sınırlamalar:
- ithal DLL, bana göre geliştirilmemiştir bir dış firmadan bu.
- DLL, uygulamam ile birlikte dağıtılmıyor, uygulamanızı çalıştırmadan önce zaten yüklü olması bekleniyor.
- İçe aktarılan DLL, birçok farklı sürümde (ve hatta daha fazlası) ortaya çıkmaktadır, bu yüzden onu almadan önce sadece verify an MD5 checksum of the DLL kullanamıyorum.
Başarısız yaklaşımlar:
- Microsoft ancak bu bilgi .NET'in Dllımport için geçerli değildir, preventing "DLL preloading attacks" güzel bir writeup var.
- Wintrust.dll dosyasından yönetilmeyen işlev WinVerifyTrust kullanımını öneren bazı insanlar gördüm. Bu tabii ki aptalca bir çözümdür, çünkü bunun yerine Wintrust.dll aracılığıyla DLL sıkıştırmaya karşı uygulamamı savunmasız kılabilir. Authenticode verifier'ini kullanmanız gerekir.
Bu, büyük olasılıkla http://stackoverflow.com/questions/3281057/get-timestamp-from-authenticode-signed-files-in-net dosyasının dup dosyasıdır, ancak nasıl yönetilmeyen DLL dosyasının nasıl imzalandığını belirtmiyorsunuz Gerçekten emin olun. –
Neden bir saldırgan sadece * programınızı değiştirmez? Yapması çok daha kolay. –
Hala sigcheck.exe'yi kullanabileceğinizi düşünüyorum.İşlemi C# 'den çalıştırabilir ve çıktıyı yakalayabilirsiniz: http://stackoverflow.com/a/10380353/1415732 – Alden