Zephyrnet Logosu

OpenSSL, önceki hata düzeltmesi için bir hata düzeltmesi yayınlar

Tarih:

Bir OpenSSL kullanıcısıysanız, muhtemelen en son sürümlerden haberdarsınızdır. yüksek profilli hata düzeltmesi Mart 2022'de çıkan sürüm.

Bu düzeltme bize OpenSSS'i getirdi 3.0.2 ve 1.1.1n, ürünün tam olarak desteklenen iki çeşidi için güncellemeler.

(1.0.2'nin eski bir sürümü var, ancak bu sürümdeki güncellemeler yalnızca premium destek için ödeme yapan müşteriler tarafından kullanılabilir ve 1.0.2 günlerinden bu yana üründe yapılan değişiklikler ve iyileştirmeler göz önüne alındığında, sizi ileriye atlamaya teşvik ediyoruz. ana sürüm hatta - belki de özellikle - destek için ödemeye devam etmeyi planlıyorsanız.)

Mart 2022 güncellemesi, özellikle de bu kod karmaşık, özel, düşük seviyeli bir işlevin parçasıysa, olağandışı hatalara sahip derinlere gömülü kodun yıllarca gözden kaçabileceğinin hayati bir hatırlatıcısıydı.

Daha sonra düzeltilen hata, bilinenleri hesaplamak için özel amaçlı bir algoritma ile ilgiliydi. modüler karekökler, normal kareköklere göre hesaplanması daha karmaşıktır.

Ne yazık ki, ilk olarak 1890'larda keşfedilen bir algoritmayı kullanan bu hesaplamayı gerçekleştirecek kod beceriksizce kodlanmış, dolambaçlı bir şekilde yazılmış, kötü yorumlanmış ve takip edilmesi zordu.

Ancak, OpenSSL'nin bariz bir "dışarıya dönük" bölümünde olmadığı ve yeniden yazmanın göz korkutucu bir iş olacağı düşünüldüğünde, sunulduğu zaman cevaplarının doğruluğu için dikkatlice test edildiğini varsayıyoruz. iyi biçimlendirilmiş sayılar, ancak olası olmayan girdilerle karşı karşıya kaldığında sağlamlığı araştırılmamıştır.

Çünkü, hatalı biçimlendirilmiş sayılar üretmek için bubi tuzağına düşmüş dijital sertifikalarla karşı karşıya kaldıklarında, OpenSSL'ler BN_mod_sqrt() işlevi, var olmayan bir yanıtı kapatmaya çalışarak sonsuza kadar döngüye girmeye kandırılabilir.

Yalnızca tamsayılarla çalışırken ve hiçbir türden kesre izin vermediğinizde, pek çok tamsayının düzenli karekökleri olmadığı gibi, birçok sayının da modüler karekökleri olmadığını görürsünüz. Böylece 7×7 = 49, yani 49'un bir tam sayı olan bir karekökü vardır, yani 7. Ancak 50 veya 51'i verecek şekilde kendisiyle çarpılabilecek bir tam sayı yoktur, çünkü bir sonraki “tam kare” 8×8'dir. = 64. İstediğiniz kadar deneyebilirsiniz, ancak √51 için asla tamsayılı bir yanıt bulamayacaksınız.

Asla aslında yanlış, sadece eksik

Başka bir deyişle, OpenSSL'nin BigNumber kodu (birçok şifreleme algoritması yüzlerce hatta binlerce basamak uzunluğundaki sayılarla çalışmaya dayanır) hiçbir zaman bir sonuç vermedi. yanlış cevap, bazen bulunacak bir cevap olmadığını fark etmedi ve sonsuz bir döngüde sıkışıp kalacaktı.

olarak bilinen şeyi kışkırtmak için kötüye kullanılabilen bu sonsuz döngü. Reddi-of-Service Saldırı (DoS), kötü niyetli bir web sitesi bubi tuzağına yakalanmış bir dijital sertifika üzerinden gönderilirse tetiklenebilir.

Bu, ironik bir şekilde, dijital sertifikaları doğrulama konusunda titiz davranan yazılımın, dublajlı bu hata yoluyla dizlerinin üstüne çökebileceği anlamına geliyordu. CVE-2022-0778, sertifika doğrulama ile hiç uğraşmayan programlar bundan etkilenmedi.

Bu hatanın ortaya çıkardığı önemli “öğretilebilir anlar” göz önüne alındığında, bunu yalnızca açıkladığımız Çıplak Güvenlik'te değil, ayrıntılı olarak ele aldık. daha iyi bir kod stili nasıl yazılır, aynı zamanda SophosLabs'ın bubi tuzağına yakalanmış bir sertifikanın kusuru nasıl tetikleyebileceğinin kanlı ayrıntılarını gösterdiği Sophos News'de ve hatayı anlamak için kodda nasıl hata ayıklanır.

Bu arada iki güvenlik açığı daha

Bir sonraki OpenSSL güncellemesi 3.0.3ya da 1.1.1o büyük bir kusur olarak kabul edilmeyen bir hatayı yamalayan önceki sürümün kullanıcıları için (en azından, bunu Çıplak Güvenlik'te ele almadık), çünkü esas olarak hata OpenSSL şifreleme kitaplığı kodunun kendisinde değildi.

Kritografik sağlayıcısı olarak OpenSSL'ye dayanan tüm yazılımları etkilemek yerine, CVE-2022-1292 OpenSSL araç takımıyla birlikte gelen, Perl'de yazılmış bir yardımcı program betiğini etkiledi.

Bu komut dosyası olarak bilinen c_rehash (için kısa sertifika dizini yeniden düzenleme), Mozilla tarafından güvenilir sertifika yetkilileri (CA'lar) olarak tutulanlar gibi kriptografik sertifika dosyalarının bir dizinini alan ve yazılımın belirli sertifikaları aramaktan daha hızlı bulmasına yardımcı olabilecek bir dosya karmaları listesi oluşturan, az bilinen bir araçtır. alfabetik isim listesi.

Örneğin, Mozilla'nın CA sertifika dizini şöyle görünür…

$ ls -l /usr/share/ca-certificates/mozilla -rw-r--r-- 1 ördek ördeği 2772 2022-06-23 05:32 ACCVRAIZ1.crt -rw-r--r-- 1 ördek ördeği 1972 2022-06-23 05:32 AC_RAIZ_FNMT-RCM.crt -rw-r--r-- 1 ördek ördeği 904 2022-06-23 05:32 AC_RAIZ_FNMT-RCM_SERVIDORES_SEGUROS.crt [. . .] -rw-r--r-- 1 ördek ördek 1302 2022-06-23 05:32 emSign_Root_CA_-_G1.crt -rw-r--r-- 1 ördek ördek 774 2022-06-23 05:32 vTrus_ECC_Root_CA .crt -rw-r--r-- 1 ördek ördeği 1911 2022-06-23 05:32 vTrus_Root_CA.crt

…OpenSSL'ler iken c_rehash komut dosyası, tek tek sertifikaların dosya adı yerine sertifikanın kendisinde bulunan karmalar aracılığıyla bulunmasına izin veren bir sembolik bağlantı listesi oluşturur:

lrwxrwxrwx 1 ördek ördeği 23 2022-06-24 13:41 002c0b4f.0 -> GlobalSign_Root_R46.crt lrwxrwxrwx 1 ördek ördeği 45 2022-06-24 13:41 02265526.0 -> Entrust_Root_Certification duck_Authority_-_rw2. -1 36:2022 06a24 -> Staat_der_Nederlanden_EV_Root_CA.crt [. . .] lrwxrwxrwx 13 ördek ördeği 41 03179-64.0-1 19:2022 fe06a24cd13 -> SZAFIR_ROOT_CA41.crt lrwxrwxrwx 8 ördek ördeği 2 8.0-2-1 23:2022 feffd06 -> GlobalSign_Root_E24.crt lrwx 13 ördek 41 -413.0-46 1:49 ff2022af06f.24 -> TUBITAK_Kamu_SM_SSL_Kok_Sertifikasi_-_Surum_13.crt

Bazı yazılımlar, belirli sertifikaları indekslemek ve bulmak için bir tür temel veritabanı sistemi olarak hareket etmek için bu "karma bağlantılara" güvenir.

Ayrıca, bazı işletim sistemi dağıtımları otomatik olarak c_rehash Bu özel amaçlı bağlantıları güncel tutmak için arka planda komut dosyası.

Zararlı olarak kabul edilen kabuk meta karakterleri

Ne yazık ki, komut dosyası Perl'e dayanıyordu system() dosya karmalarını hesaplamak için işlev (veya eşdeğer bir komut) ve system() sistem, gerekli alt programları başlatmak için Bash gibi bir komut kabuğunu otomatik olarak başlatır.

Ve muhtemelen bildiğiniz gibi, komut kabukları komut satırı argümanlarını her zaman harfi harfine işlemez, bu nedenle bu argümanlara özel karakterler koyarsanız, kabuk onları potansiyel olarak tehlikeli şekillerde ele alır.

Örneğin, komut echo runthis kelimenin tam anlamıyla metni yazdırır runthis, ancak komut echo $(runthis) karakterleri doğrudan yazdırmaz $(runthis).

Bunun yerine, sözde üst komut $(runthis) anlamına geliyor komut ikamesi, diyor ki, "Komutu çalıştırın runthis ve değiştirin $(...) bittiğinde bu komutun çıktısı ile bölüm ”:

   # argüman tam anlamıyla ele alınır, hiçbir meta karakter bulunamadı $ echo runthis runthis # 'runthis'i çalıştırmaya çalışır, ancak böyle bir komut yoktur $ echo $(runthis) -bash: runthis: command not found # iki komutu çalıştırır, her ikisinin çıktısını toplar $ echo $(whoami; uname -s -r) ördek Linux 5.18.6

oluşturduğu risk ise $(...) tanıdık geliyor, çünkü son zamanlarda istismar edilen üst komut güvenlik açığıydı. Windows'ta "Follina" hatası. Daha fazla bilgi edinmek ve bu hatayı canlı olarak görmek için kayıtlı web seminerimizi izleyebilirsiniz. Aşağıdaki resme tıklamanız yeterli. [Kayıt gereklidir, hemen ardından erişim sağlanır.]

Ne düzeldi?

Başka birinden güvenilmeyen girdiyi kabul eden komut dosyaları - bu bir web formuna yazılan bir dize veya dışarıdan sağlanan uydurulmuş bir dosya adı olsun - komuta güvenirken bu özel meta komutların kabuk argümanları olarak sızmasına izin vermemek için çok dikkatli olmalıdır. harici yardımcı programları çalıştırmak için kabuk.

Aşağıda, değiştirilen kodu görebilirsiniz. 1.1.1n için 1.1.1o:

Formun bir Perl komutu `...` (backticks arasında bir komut, örneğin `runthis`, sadece eski moda bir yazma yöntemidir. $(runthis) komut ikamesi) adı verilen özel bir dahili işlevle değiştirildi. compute_hash bu, oluşturulmuş komut dizesindeki tuhaf meta karakterlerle daha fazla ilgilenir.

Pekala, görünüşe göre bakıcılar, bu yardımcı program betiğinde, harici bir komutun gerekli özen ve dikkat gösterilmeden çalıştırıldığı tüm yerleri tam olarak yakalayamamışlar.

Bu nedenle bu hafta serbest bırakmayı gördüm OpenSSL'nin 3.0.4 ve 1.1.1p, başka bir riskli sistem komutunu düzeltmek için c_rehash Yarar:

Bu sefer, bir çağrıydı. cp (dosyayı kopyala) komutu, kabuk tabanlı system() adı verilen daha güvenli, özel bir dahili işlevle değiştirilen işlev copy_file.

Bu hata düzeltmesinin resmi tanımlayıcısı var CVE-2022-2068.

OpenSSL değişiklik günlüğünün uyardığı gibi:

[ c_rehash] komut dosyası, bazı işletim sistemleri tarafından otomatik olarak yürütülecek şekilde dağıtılır. Bu tür işletim sistemlerinde bir saldırgan, komut dosyasının ayrıcalıklarıyla rasgele komutlar yürütebilir.

Ne yapalım?

  • OpenSSL'yi mümkün olan en kısa sürede güncelleyin. Merkezi olarak kurulmuş bir kopyayı yönetmek için Linux dağıtımınıza güveniyorsanız, ayrıntılar için dağıtım oluşturucunuza danışın. Sistem genelindeki (veya yanı sıra) yerine kendi OpenSSL yapınıza güveniyorsanız, o kopyayı da güncellemeyi unutmayın. Arıyorsun 3.0.4 or 1.1.1p. Koşmak openssl version Hangi sürüme sahip olduğunuzu görmek için.
  • emekli olmayı düşünün c_rehash kullanıyorsanız yardımcı program. Hepsi bir arada yardımcı program opensslİlk etapta sertifikaları oluşturmak ve imzalamak için yaygın olarak kullanılan , şimdi yerleşik bir alt komut içeriyor: rehash aynı işi yapmak için. Denemek openssl rehash -help daha fazla bilgi için.
  • Giriş ve çıkışlarınızı dezenfekte edin. Aldığınız girdinin olduğu gibi kullanılmasının güvenli olduğunu asla varsaymayın ve kodunuzun diğer bölümlerine çıktı olarak ilettiğiniz veriler konusunda dikkatli olun.
  • Belirli hata türleri için kodu gözden geçirirken birden fazla hataya karşı dikkatli olun. Dikkatsiz bir programcı system() kodun bir yerindeki komut başka bir yerde benzer hatalar yapmış olabilir.

Programcılar, genellikle tamamen masum ve anlaşılır nedenlerle, aynı tür hatayı birçok kez üretirler (veya çoğaltırlar).

Ya kod üzerinde çalıştıkları sırada bu hata sınıfının farkında değillerdi ya da prototip çalışmasını hızlandırmak için “geçici bir kısayol” kullandılar, ancak daha sonra geri dönüp toparlamadılar ya da birini kopyalayıp yapıştırdılar. başkasının kusurlu kodu ve onu kendi haline getirdi…


spot_img

En Son İstihbarat

spot_img