Zephyrnet Logosu

OpenSSL, Yüksek Önem Dereceli veri çalma hatasını düzeltir – şimdi yama yapın!

Tarih:

Dünyanın en yaygın kullanılan şifreleme kütüphanesi olmasa da muhtemelen en iyi bilineni olan OpenSSL, yakın zamanda yeni bir şifreleme kütüphanesi yayınladı. trifecta güvenlik güncellemeleri.

Bu yamalar, kuruluşun herkes için desteklediği mevcut iki açık kaynak sürümünün yanı sıra güncellemelerin yalnızca premium destek için ödeme yapan müşterilere sunulduğu "eski" 1.0.2 sürüm serisini kapsıyor.

(Artık destek için ödeme yapmanıza gerek kalmayacak bir duruma geçmek muhtemelen sizin için daha iyidir, maliyeti umursamıyorsanız bile, çünkü bu, sonunda OpenSSL'in bizzat kullanımdan kaldırmaya çalıştığı bir sürümden vazgeçeceğiniz anlamına gelir) Yıllar önce.)

Güncellemeden sonra görmek istediğiniz sürümler şunlardır:

  • OpenSSL 3.0 serisi: yeni versiyon olacak 3.0.8.
  • OpenSSL 1.1.1 serisi: yeni versiyon olacak 1.1.1t (sondaki T-for-Tango'dur).
  • OpenSSL 1.0.2 serisi: yeni versiyon olacak 1.0.2zg (Zulu-Golf).

Eski sürümlerin neden üç rakam ve sonunda bir harf bulunduğunu merak ediyorsanız, bunun nedeni OpenSSL projesinin dört parçalı sürüm tanımlayıcılara sahip olması ve sondaki harfin 26 alt sürümü destekleyebilen bir sayaç görevi görmesidir.

Sürüm 1.0.2'ye olanlardan da görebileceğiniz gibi, 26 alt sürümün yeterli olmadığı ortaya çıktı ve Z-for-Zulu sürümünden sonra ne yapılacağı konusunda bir ikilem bıraktı: kafa karıştırıcı bir şekilde alfabetik olarak bozulan Alpha-Alpha'ya geri dönün. sipariş verin veya sadece Z-for-Zulu'ya sadık kalın ve A'dan Z'ye bir alt alt sürüm döngüsü başlatın.

Ayrıca, hatırlayabileceğiniz gibi, 1.1.1l sürümü (L-for-Lima) ortaya çıktığında rakamların ve küçük harflerin karışımı özellikle kafa karıştırıcıydı.

Naked Security, pek çok ülkede hala kullanılan Bauhaus dönemi yol tabelası harflerini temel alan bir yazı tipini memnuniyetle kullanıyor; burada küçük L karakterleri, büyük harf Is ve 1 rakamından tamamen kasıtlı olarak farklıdır, ancak birçok yazı tipi küçük L'yi oluşturur. ve üst-I aynı şekilde.

Sürüm 3 ortaya çıktığında, OpenSSL ekibi şu anda popüler olan XYZ üç rakamlı sürüm sistemini benimsemeye karar verdi; bu nedenle mevcut sürüm serisi şu şekildedir: 3.0 ve alt sürüm artık 8. (Şu anda geliştirilmekte olan bir sonraki sürüm 3.1 olacaktır.)

Merak ediyorsanız, normal bir OpenSSL 2.x serisi yoktu, çünkü bu sürüm numarası zaten başka bir şey için kullanılmıştı, tıpkı IPv4'ün ardından IPv6'nın gelmesi gibi, çünkü v5 başka bir bağlamda ortaya çıkmıştı. kısa bir süreliğine oldu ve kafa karışıklığına neden olmuş olabilir.

Ne yanlış gitti?

Toplamda sekiz CVE numaralı hata düzeltmesi var ve bunlardan yedisinin hafızanın yanlış yönetiminden kaynaklandığını duyduğunuzda muhtemelen şaşırmayacaksınız.

Facebok sayfasını beğenin : OpenSSHGeçen haftanın sonunda hakkında yazdığımız OpenSSL, C dilinde yazılmıştır ve C programlarında bellek tahsisi ve serbest bırakma işlemlerinin halledilmesi genellikle çok fazla "kendin yap" gerektirir.

Ne yazık ki deneyimli programcılar bile programlarını eşleştirmeyi unutabiliyor. malloc() çağrılar ve onların free() doğru çağırır veya hangi bellek arabelleklerinin programlarının hangi bölümlerine ait olduğunun izini kaybedebilir.

Bellekle ilgili yedi hata şunlardır:

  • CVE-2023-0286: X.400 GenelAdı'nda X.509 adres türü karışıklığı. Yüksek şiddet; hata tüm sürümleri etkiler (3.0, 1.1.1 ve 1.0.2).
  • CVE-2023-0215: BIO_new_NDEF'i takip ederek ücretsiz kullanın. Orta şiddette; hata tüm sürümleri etkiler (3.0, 1.1.1, 1.0.2).
  • CVE-2022-4450: PEM_read_bio_ex'i çağırdıktan sonra iki kat ücretsiz. Orta şiddette; hata yalnızca 3.0 ve 1.1.1 sürümlerini etkiler.
  • CVE-2022-4203: X.509 Ad Kısıtlamaları arabellek taşmasını okur. Orta şiddette; hata yalnızca 3.0 sürümünü etkiler.
  • CVE-2023-0216: d2i_PKCS7 işlevlerinde geçersiz işaretçi referansı. Orta şiddette; hata yalnızca 3.0 sürümünü etkiler.
  • CVE-2023-0217: DSA ortak anahtarını doğrulayan NULL referans kaldırma. Orta şiddette; hata yalnızca 3.0 sürümünü etkiler.
  • CVE-2023-0401: PKCS7 veri doğrulaması sırasında NULL referansının kaldırılması. Orta şiddette; hata yalnızca 3.0 sürümünü etkiler.

Bellek hataları açıklandı

Açıklamak için.

A BOŞ başvuru 0 sayısını bir hafıza adresi olarak değerlendirmeye çalıştığınızda gerçekleşir.

Bu genellikle yanlış başlatılan bir depolama değişkenine işaret eder, çünkü sıfır hiçbir zaman verileri depolamak için geçerli bir yer olarak kabul edilmez.

Aslında, her modern işletim sistemi kasıtlı olarak belleğin ilk birkaç bin veya daha fazla baytını kullanılamaz olarak etiketler, böylece "sıfır sayfa" olarak adlandırılan sayfayı okumaya veya yazmaya çalışmak donanım düzeyinde bir hataya neden olur ve işletim sisteminin rahatsız edici verileri kapatmasına olanak tanır. programı kapatın.

Bu tür bir hatadan kurtulmanın mantıklı bir yolu yok çünkü gerçekte neyin amaçlandığını tahmin etmek imkansız.

Sonuç olarak, bu tür uzaktan tetiklenebilen hatalara sahip programlar, hizmet reddi (DoS) saldırılarına eğilimlidir; burada bir siber suçlu, programı muhtemelen tekrar tekrar çökmeye zorlamak için güvenlik açığını kasıtlı olarak kışkırtır.

An geçersiz işaretçi referansı benzerdir, ancak bir bellek adresini sanki temsil ediyormuş gibi temsil etmeyen bir sayıyı kullanmaya çalıştığınız anlamına gelir.

Sahte hafıza adresi gerçekte mevcut olmadığından, bu tür bir hata genellikle hiçbir şeyi bozmaz; bu, orada olmayan bir mülke sahte bir celp veya sahte fatura göndererek birini dolandırmaya çalışmak gibidir.

Ancak NULL referansının kaldırılması gibi, yan etki (programın çökmesi) bir DoS saldırısında tersine çevrilebilir.

Arabellek taşmalarını oku Bu onların söylediği anlamına gelir, yani verilere erişmeniz gereken yerden sonra erişebilirsiniz, böylece genellikle çalışan bir programı bozmak veya devralmak için doğrudan yararlanılamazlar.

Ancak kriptografik uygulamalarda her zaman endişe duyarlar çünkü bir saldırganın göz attığı gereksiz veriler, görmemesi gereken şifresi çözülmüş bilgiler veya şifreler veya özel anahtarlar gibi kriptografik materyaller içerebilir.

Tarihteki en ünlü okuma taşmalarından biri, OpenSSL hatası olarak bilinen hataydı. Heartbleed, bir istemcinin sunucudan kısa bir mesajın hala hayatta olduğunu kanıtlamak için kısa bir mesajı "geri döndürmesini" (bilindiği gibi bir kalp atışı) isteyebildiği, ancak alıcıyı, gelen mesajın orijinalinde içerdiğinden 64Kbyte'a kadar daha fazla veriyi geri göndermesi için kandırabildiği . Bir saldırgan, verileri sunucudan tekrar tekrar "boşaltarak", asla açığa çıkmaması gereken her türlü veri parçasını, hatta bazen kriptografik anahtarları bile, yavaş yavaş bir araya getirebilir.

A use-after-özgür hafızayı sisteme geri verdiğiniz anlamına gelir, bu da onu programınızın başka bir bölümüne dağıtabilir, ancak daha sonra siz farkında olmadan ayaklarınızın altında değişmiş olsa bile o hafıza bloğundaki şeye güvenmeye devam edin.

Teorik olarak bu, bir saldırganın programın başka bir bölümünde, kodunuzu yanlış yönlendiren veya kontrolünü ele geçiren bir bellek değişikliğini kasıtlı olarak kışkırtmak amacıyla görünüşte masum görünen davranışları tetiklemesine olanak tanıyabilir; daha uzun kontrol.

A çift ​​ücretsiz benzerdir, ancak bu, daha önce geri vermiş olduğunuz ve dolayısıyla programın başka bir yerinde zaten tahsis edilmiş olabilecek bir bellek bloğunu sisteme geri göndereceğiniz anlamına gelir.

Ücretsiz kullanımda olduğu gibi, bu, programın iki bölümünün aynı bellek bloğuna güvenmesine neden olabilir; her bir bölüm, mevcut olmasını beklediği verinin farkında değildir (ve zaten doğrulanmış olabilir ve bu nedenle istekli olabilir). hemen güvenmek için) diğer kısım tarafından kötü niyetli olarak kapatılmış olabilir.

Son olarak, tür karışıklığı hata buradaki en ciddi sorundur.

Basitçe söylemek gerekirse, tür karışıklığı, programa bir tür veri içeriyormuş gibi görünen bir parametre sağladığınız, ancak daha sonra programı onu farklı bir parametre türü olarak kabul etmesi için kandırdığınız anlamına gelir.

Çok basit bir örnek olarak, “akıllı” ev tipi bir fırına saatin şu şekilde ayarlanması gerektiğini söyleyebildiğinizi hayal edin: 13:37 1337 tamsayı değerini göndererek.

Alıcı kod muhtemelen saatin geçersiz bir zamana ayarlanmasını önlemek için sayının 0 ile 2359 arasında olduğunu ve 100'e bölündüğünde kalanın 0 ile 59 arasında olduğunu dikkatlice test edecektir.

Ancak şimdi fırını daha sonra sıcaklık yerine zamanı kullanmaya ikna edebileceğinizi hayal edin.

Bir sıcaklık değeri verdiğinizi önceden kabul etseydiniz gerçekleşecek olan kontrolü sinsice atlamış olurdunuz (1337, şu anda kullanımda olan yaygın ölçeklerden herhangi birine göre bir pişirme fırını için çok sıcak; K, °C olsun) veya °F).

Bellek karşılaştırmalarının kötüye kullanılması

C programlarında tür karışıklığı genellikle özellikle tehlikelidir, çünkü düz eski sayıları bellek işaretçileriyle değiştirebilirsiniz, böylece gizli olması gereken bellek adreslerini gizlice keşfedebilir veya daha da kötüsü, bellek bloklarından okuyabilir veya bunlara yazabilirsiniz. sınırların dışında olması gerekiyordu.

OpenSSL ekibinin de kabul ettiği gibi, yukarıdaki Yüksek önem derecesi tipi karışıklık hatasıyla ilgili olarak, “Sertifika iptal listesi kontrolü etkinleştirildiğinde, bu güvenlik açığı bir saldırganın bir sertifikaya rastgele işaretçiler iletmesine olanak verebilir. memcmp() [bellek karşılaştırma] çağrısı, bellek içeriğini okumalarını sağlıyor”.

Bir karşılaştırmada iki bellek bloğundan birini yanlış yönlendirebilirseniz memcmp(), daha sonra gizli bir bellek arabelleğini seçtiğiniz bir bellek bloğuyla tekrar tekrar karşılaştırarak, gizli arabellekte ne olduğunu yavaş yavaş anlayabilirsiniz. Örneğin, “Bu dize şununla başlıyor mu? A?” Değilse, peki ya B? Evet? Sıradaki ne? Peki ya BA? BB? Ve benzeri.

Zamanlama hatası sekizi tamamlıyor

Sekizinci hata:

  • CVE-2022-4304: RSA Şifre Çözmede Oracle'ı Zamanlama. Orta şiddette; hata tüm sürümleri etkiler (3.0, 1.0.1 ve 1.0.2).

Kriptografik kodun, çeşitli hesaplamaların ne kadar süreceği konusunda özellikle hassas olması gerekir; böylece bir saldırgan, yanıt hızının bir tür "kolay" durumun geçerli olup olmadığını gösterip göstermediğini araştırarak hangi metin dizelerinin veya sayıların dahil olduğunu tahmin edemez.

Basit bir örnek olarak, belirli bir sayıyı kafanızdan 13 ile çarpmanızın istendiğini hayal edin.

Bunu yapmak neredeyse kesinlikle sayıyı 0 (anlık cevap: sıfır!) veya 1 (anlık cevap: aynı sayı, değişmeden) ile çarpmaktan çok daha uzun zaman alacaktır ve 10 (anlık cevap: sıfır) ile çarpmaktan biraz daha uzun sürecektir ( sonuna bir sıfır yapıştırın ve yeni sayıyı okuyun).

Kriptografide, bellekteki verileri aramak, metin dizelerini karşılaştırmak, aritmetik işlem yapmak vb. gibi ilgili tüm görevlerin aynı miktarda zaman aldığından emin olmalısınız; bu, bunun yerine "kolay" durumları yavaşlatmak anlamına gelse bile Her şeyi olabildiğince çabuk yaparak zamandan tasarruf etmeye çalışmak.

Ne yapalım?

Kolay.

Bugün yama yapın: bunlardan herhangi birine veya tümüne ihtiyacınız var 1.0.2zg (Zulu-Golf), 1.1.1t (Tango için T) ve 3.0.8.

Unutmayın ki birçok Linux dağıtımı için, birçok farklı uygulamanın kullandığı paylaşımlı kütüphaneler için geçerli olan bir işletim sistemi güncellemesi yüklemeniz gerekecektir, ancak OpenSSL'in kendi sürümlerini beraberinde getiren ve güncellenmesi gereken uygulamalarınız da olabilir. .

Bazı uygulamalar OpenSSL'in iki farklı sürümünü bile içerebilir ve her ikisinin de yamalanması gerekir.

Gecikmeyin, bugün yapın!


spot_img

En Son İstihbarat

spot_img