
13 Ağustos 2024 tarihinde MSTC (Microsoft Güvenlik Yanıt Merkezi), Windows TCP/IP yığınında bulunan ve işletim sistemindeki hayati ağ işlevlerini tehlikeye atmak için kullanılabilecek kritik bir güvenlik açığı olan CVE-2024-38063'ü açıkladı. Burada, OPSWAT Lisansüstü Burs Programı katılımcıları, bu açığın teknik detayları ve potansiyel etkisinin yanı sıra bu güvenlik açığı için önerilen hafifletme stratejilerinin kapsamlı bir incelemesini sunmaktadır.
OPSWAT Burs Programı Katılımcıları: Pham Ngoc Thien - Ho Chi Minh Bilgi Teknolojileri Üniversitesi
Genel Bakış
CVE-2024-38063, IPv6 paketlerinin işlenmesini etkileyen, 9.8 CVSS puanına sahip kritik bir Windows TCP/IP yığını güvenlik açığıdır. Uzaktan saldırganlar, kötü amaçlı kod çalıştırmak veya DoS'a (Hizmet Reddi) neden olmak için IPv6 uzantı başlıklarını işlerken bir tamsayı düşük akışı kullanarak bu güvenlik açığından yararlanabilir.
IPv6 çoğu modern sistemde varsayılan olarak etkin olduğundan, bu sıfır tıklama açığı önemli bir risk oluşturmaktadır. Sonuç olarak, IPv6'nın etkin olduğu tüm yamalanmamış Windows 10, Windows 11 ve Windows Server 2008, 2012, 2016, 2019 ve 2022 sürümleri bu CVE'ye karşı savunmasızdır.
Anahtar Kavramlar
Windows TCP/IP Yığını
Windows TCP/IP yığını, İletim Kontrol Protokolü/İnternet Protokolü (TCP/IP) paketi aracılığıyla ağ iletişiminden sorumlu temel bir işletim sistemi bileşenidir. Yerel ve küresel ağlardaki cihazlar arasındaki iletişimi kolaylaştırarak tüm ağ etkileşimlerini yönetir.
IPv6 ve Uzantı Başlıkları
IPv6, IPv4'ün sınırlamalarını ele almak için geliştirilmiştir. Uzantı başlıkları aracılığıyla modülerlik ve esneklik gibi çeşitli geliştirmeler getirmiştir. IPv6 başlığı ve yükü arasına yerleştirilen başlıklar, isteğe bağlı verileri ve gelişmiş özellikleri destekler.
Anahtar IPv6 uzantı başlıkları şunları içerir:
- Hop-by-Hop Seçenekleri (Sonraki Başlık = 0)
- Yönlendirme Başlığı (Sonraki Başlık = 43)
- Parça Başlığı (Sonraki Başlık = 44)
- Hedef Seçenekleri Üstbilgisi (Sonraki Üstbilgi = 60)
- Kimlik Doğrulama Başlığı (AH) (Sonraki Başlık = 51)
- Kapsülleyen Güvenlik Yükü (ESP) (Sonraki Başlık = 50)
Her uzantı başlığı, Sonraki Başlık alanı aracılığıyla bir sonrakine işaret ederek sıralı bir zincir oluşturur. Bu modülerlik, paket işleme sürecine karmaşıklık ve potansiyel istismar vektörleri getirir.
Tamsayı Düşük Taşması
Bir hesaplama, bir veri türü için temsil edilebilir minimum değerden daha küçük bir değer ürettiğinde bir tamsayı düşük akışı meydana gelir. Örneğin, işaretsiz bir tamsayıda daha büyük bir değerin daha küçük bir değerden çıkarılması, sonucun çok büyük bir pozitif değer olmasına neden olabilir.
Bir tamsayı taşması, değer veri türünün maksimum sınırını aştığında ve temsil edilebilir minimum değere (örneğin, 0-10 aralığında 0) geri "taştığında" meydana gelir. Her iki senaryo da aritmetik işlemlerde sınır koşullarının yanlış ele alınması nedeniyle meydana gelir ve yazılım sistemlerinde ciddi güvenlik açıklarına yol açar.
Güvenlik Açığı Analizi
IPv6 İşleme İş Akışı
Bir IPv6 paketi aldıktan sonra, Windows ilk olarak IPv6 başlığını ayrıştırır. Ardından, IppReceiveHeaderBatch işlevi sonraki başlıklar için uygun işleyiciyi seçmek üzere Sonraki Başlık alanının değerini kontrol eder. Zincirdeki her uzantı başlığı için, IppReceiveHeaderBatch ilgili başlığı işlemek üzere ilgili rutini çağırır.
Bu mekanizmanın esnek ve modüler tasarımına rağmen, potansiyel bir saldırı vektörü ortaya çıkarmaktadır. IPv6'da, parçalanmış paketler genellikle hedeflerinde yeniden birleştirilir ve burada parça yeniden birleştirme işleminde ve başlık işlemede bir güvenlik açığı vardır.
Bir saldırgan, manipüle edilmiş uzantı başlıklarına sahip çok sayıda hatalı biçimlendirilmiş paket göndererek belleğin yanlış yönetilmesine neden olabilir ve bir arabellek taşmasını tetikleyebilir. Bu, fazla verilerin istenmeyen bellek bölgelerinin üzerine yazılmasına olanak tanır ve bu da potansiyel olarak rastgele kodun yürütülmesine izin verir. Bu güvenlik açığı CVE-2024-38063 olarak tanımlanmıştır.
Windows TCP/IP Yığınında Kritik Açık
Microsoft'un CVE-2024-38063 güvenlik açığını gidermek için hazırladığı yama, güvenlik araştırmacısı Marcus Hutchins tarafından derinlemesine incelendi. Hutchins'in teknik blogu, bu güvenlik açığının temel nedenine ilişkin ayrıntılı bilgiler sunmaktadır. Hutchins'in bulgularından yola çıkan arkadaşımız, açığı daha iyi anlayabilmek için konuyu daha detaylı bir şekilde araştırdı.
Yama Analizi
Yama, tcpip.sys dosyasında Ipv6pProcessOptions işlevinde bir değişiklik içeren bir güncelleme içeriyordu. Tek satırlık bir değişiklik, IppSendErrorList() işlevindeki bir çağrıyı IppSendError() işlevine yapılan bir çağrı ile değiştirerek IppSendErrorList() işlevinin CVE'ye katkıda bulunmuş olabileceğini göstermiştir.
Sıfır paket boyutu
IppSendErrorList() işlevi daha yakından incelendiğinde, her biri için IppSendError() işlevini çağırarak bağlantılı bir paket listesini işlediği ortaya çıkmıştır. IppSendError() işlevi kusurlu paketlere STATUS_DATA_NOT_ACCEPTED durumunu atar. Ardından, sorunlu paket hakkında bilgi içeren bir ICMP hata mesajı oluşturur ve geri gönderir. Ancak, IppSendErrorList() birden fazla pakette always_send_icmp = true ile çağrıldığında, her paket için packet_size alanını sıfıra ayarlar.
Ipv6pProcessOptions işlevi, hem Hop-by-Hop Seçenekleri hem de Hedef Seçenekleri başlıkları dahil olmak üzere seçenek değeri alanları içeren uzantı başlıklarını işlemek için tasarlanmıştır. Bir saldırgan, Seçenek Türünü 0x80'den büyük herhangi bir değere ayarlayarak, seçenekler başlığının işlenmesinde belirli bir hatayı tetikleyebilir, always_send_icmp'nin true olarak ayarlanmasına zorlayabilir ve sonuç olarak paket boyutunun sıfıra ayarlanmasına neden olabilir.
Sıfır boyutlu bir paket genellikle atılsa da, bir saldırgan orijinal IPv6 paketindeki Sonraki Başlık alanını manipüle edebilir. Bu manipülasyon, saldırganların paketin sonraki işlem aşamalarında nasıl yorumlanacağı üzerinde kontrol sahibi olmalarını sağlayarak paketin hemen reddedilmesini önler ve istismar için bir fırsat yaratır.
Parça İşlemede Tamsayı Düşük Akışı
Sonraki Başlık alanını 44 olarak ayarlayarak, bir Parça Başlığı belirten bir paket, IPv6 parçalama veya yeniden birleştirme rutinleri tarafından işlenir. Paket parça ayrıştırıcıya ulaştığında, Ipv6pReceiveFragment(), şunu belirtir:
- Paket boyutu sıfırdır.
- Parça başlığı, işlenecek ek verilerin kaldığını gösterir.
Ipv6pReceiveFragment() fonksiyonunda, fragment_size için tahsis boyutu, herhangi bir doğrulama yapılmaksızın paket boyutundan 0x30 (paket başlığı uzunluğu) çıkarılarak hesaplanır. Paket boyutu sıfırsa, bu çıkarma işlemi alttan taşarak 16 bitlik büyük bir değerle (0xFFD0 veya 65488 civarında) sonuçlanır ve ayrıştırıcının paketin geçerli sınırları dışında aşırı bir bellek işlemesine ve bellek bozulmasına neden olur.
Tahsiste Düşük Taşmadan Taşmaya ve Uyumsuzluğa
Ipv6pReassemblyTimeout() işlevi, tampon boyutlarını ve kopyalama işlemlerini belirlemek için 16 bit aritmetik kullanarak belirli bir süre sonra tamamlanmamış IPv6 parçalarını temizlemekten sorumludur. Packet_length veya fragment_size değerinin 0xFFD0 olduğu önceki adımdaki düşük taşma nedeniyle, tahsis sırasında bir taşma meydana gelir.
Ortaya çıkan hesaplama, kaydın sıfırlanmasına neden olarak yalnızca 48 bayt bellek ayrılmasına yol açar. Ancak kopyalanan veri miktarı (reassembly->payload'dan 65.488 bayt) tahsis edilen belleğe karşılık gelmediği için çekirdek havuzunda kontrol edilebilir bir arabellek taşması meydana gelir.
Bu tutarsızlık, saldırganların IPv6 işlemedeki güvenlik açığından yararlanan özel olarak hazırlanmış bir paket aracılığıyla kötü amaçlı kod çalıştırmasına kapı açmaktadır.
CVE-2024-38963 Kavram Kanıtı
CVE-2024-38963 güvenlik açığını yeniden üretme girişiminde, arkadaşlarımız kusurdan yararlanmak için tasarlanmış bir dizi hatalı biçimlendirilmiş paket hazırladılar. İzledikleri süreç şöyleydi:
1. Kötü Biçimlendirilmiş IPv6 Paketleri Oluşturma
Temel IPv6 başlığının ardından bir IPv6 Hedef Seçenekleri uzatma başlığı (tip 60) ekleyin, ardından geçersiz bir seçeneği (örneğin, seçenek tipi 0x81) gömün.
Bu manipülasyon Windows çekirdeğini (tcpip.sys) always_send_icmp = true olarak ayarlamaya zorlayarak IppSendErrorList() rutini aracılığıyla ICMPv6 hata üretimini tetikler.
2. Net Tampon Listesi (NBL) İşlemeye Zorlama
Hedefin bu hatalı biçimlendirilmiş paketlerin hızlı patlamalarıyla doldurulması, çekirdeğin birden fazla paketi tek bir Net-Buffer List (NBL) içinde gruplama şansını artırdı. İki veya daha fazla paket gruplandığında, savunmasız IppSendErrorList() döngüsü etkinleştirilir ve sonraki parçalardaki DataLength ve Offset meta verilerini yanlış bir şekilde sıfırlar (paket boyutu artık sıfırdır).
3. Parçalanmış IPv6 Paketlerinin Enjekte Edilmesi
Hatalı biçimlendirilmiş paketlerin iletilmesinin ardından, Fragment uzantısı başlıklarını içeren parçalanmış IPv6 paketleri gönderilir. Bu parçalar, zaten bozuk olan DataLength değerleri kullanılarak işlenir.
4. Yeniden Birleştirme Zaman Aşımından Yararlanma
Çekirdek, paketin yeniden birleştirilmesine izin vermek için parçaları 60 saniye boyunca tutar (Ipv6pReassemblyTimeout tarafından yönetilir). Bu zaman aşımı sırasında, bozuk DataLength değerleri Ipv6pReceiveFragment'ta bir tamsayı düşük akışını tetikleyerek yanlış hesaplanmış (aşırı büyük) bir parça boyutuna neden olur.
5. Yığın Arabellek Taşmasını Tetikleme
Çekirdek, taşan değerleri temel alarak bir yığın tamponu tahsis eder. Yeniden birleştirme işlemi sırasında iki farklı hesaplama gerçekleşir: biri bellek ayırma boyutunu belirler (16 bitlik taşma nedeniyle çok küçük olur), diğeri ise büyük, alttan taşan değeri kullanarak kopyalama uzunluğunu hesaplar.
Bu uyumsuzluk, sınırların dışında bir yazmaya yol açarak Hizmet Reddi (DoS) veya Uzaktan Kod Çalıştırmayı tetiklemek için kullanılabilecek yığın tabanlı bir arabellek taşmasına neden olur.
Bu CVE'yi bir Hizmet Reddi saldırısı için yeniden üretmek için kullanılan kaynak kodu:
Bu güvenlik açığı bir saldırgan tarafından istismar edildiğinde, kurbanın sistemi derhal çökebilir ve mavi bir ölüm ekranıyla sonuçlanabilir:
İyileştirme
İşletim sisteminizi düzenli olarak güncellemeyi ihmal etmek, cihazınızı CVE'lere (Ortak Güvenlik Açıkları ve Maruziyetler) bağlı olanlar da dahil olmak üzere güvenlik tehditlerine maruz bırakır. Bu riskleri azaltmak için MetaDefender Endpoint™, işletim sisteminizin sürümünü algılayarak ve CVE-2024-38063 gibi bilinen CVE'ler de dahil olmak üzere güvenlik açıklarını kontrol ederek güçlü koruma sağlar.
MetaDefender Endpoint , kritik BT/OT ağlarındaki cihazları çevresel ve çıkarılabilir medya tehditlerine karşı korumak için tasarlanmıştır. İşletim sisteminizin ve yüklü uygulamaların güncel olmasını sağlar, eski veya savunmasız sürümleri işaretler ve önerilen düzeltmelerle birlikte bilinen güvenlik açıkları ve CVE'leri olan uygulamaları listeler. Ayrıca, 180'den fazla dosya türünde Deep CDR™ gerçekleştirirken birden fazla kötü amaçlı yazılımdan koruma motoru kullanılarak taranıp temiz bulunana kadar USB sürücülere erişimi engelleyerek cihazların çıkarılabilir medya risklerinden korunmasına yardımcı olur.
MetaDefender Endpoint 'in sektör lideri zeka ile güvenlik duruşunuzu nasıl dönüştürebileceğini görmek için bugün uzmanlarımızdan biriyle konuşun.