Bu, her tür yazılımın başına bela olan çok özel bir istismar türüdür.

Use-After-Free (UAF), işletim sistemlerinden uygulama yazılımlarına kadar her tür yazılım için önemli bir tehdit oluşturmaya devam eden ilkel bir bellek bozulması güvenlik açığıdır. Bu kritik güvenlik açığı, bir uygulama bileşeni zaten serbest bırakılmış bir bellek adresindeki verilere erişmeye çalıştığında ortaya çıkar;

UAF güvenlik açıkları, yazılımın kötüye kullanılmasına ve hatta sistemin tehlikeye girmesine neden olabilir. İşte UAF güvenlik açığının ne olduğu, neden olduğu ve yazılımınızı bir UAF güvenlik açığından nasıl koruyabileceğiniz.

Use-After-Free (UAF) Güvenlik Açığı Nedir?

Use-Aft-Free güvenlik açığına dalmadan önce, bir adım geriye gidelim ve bellek yönetiminin bazı temellerini anlayalım. Bir program yürütüldüğünde, verileri ve kodu belleğe yüklenir.

Bellek yönetimi, bellekteki verilerin ve kodun en uygun şekilde nasıl depolanacağını (bellek tahsisi olarak adlandırılır) ve kaldırılacağını (belleğin serbest bırakılması olarak adlandırılır) yönetme sürecidir. Program verilerinin depolandığı iki birincil bellek bölümü,

instagram viewer
yığın ve yığın.

Programlara yığın üzerinde statik olarak ve yığın üzerinde dinamik olarak bellek alanı tahsis edilebilir. Programcılar, programlarında dinamik bellek ayırmayı ve ayırmayı düzgün bir şekilde yönetmediğinde, boşta kullanımdan sonra bir güvenlik açığı oluşur. Bu, UAF güvenlik açıkları sınıfının bir tür yığın istismarı olduğu anlamına gelir. Bu güvenlik açığını daha iyi anlamak için, İşaretçiler programlamada nasıl çalışır?.

Use-After-Free (UAF), adından da anlaşılacağı gibi, zaten bir nesne zaten kullanılmışsa ortaya çıkan bir tür ilkel bellek bozulması güvenlik açığıdır. yeniden erişilirse, çökmelere veya bellek sızıntıları, Ayrıcalığın Yükseltilmesi (EOP) veya isteğe bağlı kod gibi istenmeyen sonuçlara yol açar uygulamak. Bu durumun ilk etapta nasıl oluştuğunu ve nasıl istismar edildiğini öğrenelim.

Use-Aft-Free (UAF) Nasıl Kullanılır?

Use-After-Free (UAF), adından da anlaşılacağı gibi, bir program serbest bıraktığı bellek konumlarına erişmeye devam ettiğinde ortaya çıkan ilkel bir bellek bozulması güvenlik açığıdır. Örnek bir koda bakalım:

#katmak <stüdyo.H>
#katmak <stdlib.H>

intana(){
int *MUO = malloc (sizeof(int));
*MUO = 69420;
printf("Değer: %d\n", *MUO);
ücretsiz (MUO);
printf("Değer?: %d\n", *MUO);
geri dönmek0;
}

Güvenlik açığını tespit edebilir mi? Gördüğünüz gibi bu kodda MUO işaretçi kullanılarak bellekten serbest bırakılır özgür() işlev, yine de bir sonraki satırda kullanılarak tekrar çağrılır. printf() işlev. Bu, beklenmeyen program davranışına neden olur ve güvenlik açığının yazılımda nerede bulunduğuna bağlı olarak ayrıcalık yükseltme ve bellek sızıntıları elde etmek için kullanılabilir.

Ücretsiz Kullanım Sonrası Nasıl Azaltılır?

UAF, bir uygulamanın programlanmasındaki hatalar nedeniyle oluşur. Yazılımınızdaki Use-After-Free güvenlik açıklarından kaçınmak için alabileceğiniz birkaç önlem vardır.

Yazılımınızdaki bellek bozulması güvenlik açıklarını en aza indirmek için benimseyebileceğiniz birkaç en iyi uygulama şunlardır:

  • UAF, Arabellek Taşmaları vb. gibi ilkel bellek bozulması güvenlik açıklarını önlemek için Rust gibi bellek açısından güvenli programlama dillerini yerleşik mekanizmalarla kullanmak. C/C++ gibi programlama dilleri kullanıyorsanız, kodunuzda bellek hataları oluşturma olasılığınız daha yüksektir. Aynı nedenle, Windows ve Linux gibi işletim sistemleri bile yavaş yavaş Rust'a geçiyor. Ayrıca düşünmelisiniz Rust'ı öğrenmek düşük seviyeli programlar oluşturursanız.
  • Bellek açısından güvenli bir dil kullanmanın yanı sıra, Use-Aft-Free güvenlik açığının ortaya çıkmasını önlemek için serbest bırakıldıktan sonra bir işaretçiyi NULL değerine ayarlamak gibi en iyi uygulamaları izlemeniz önerilir.
  • Saldırganların serbest bırakılan belleğe erişmesini engelleyen Tek Seferlik Tahsis (OTA) gibi teknikleri de uygulayabilirsiniz. ayrılan ve ayrılan her bir bellek nesnesinin izlenmesine yardımcı olan bir Katı Nesne Yaşam Döngüsü Politikası. yeniden tahsis edildi. Ancak bu uygulamaların bellek ve performans ek yükünü artırabileceğini unutmayın.

Ücretsiz Kullanım (UAF) Güvenlik Açığına İlişkin Gerçek Dünyadan Örnekler

Use-After-Free (UAF) güvenlik açığı, web tarayıcılarından Android çekirdeğine ve günlük uygulamalara kadar çeşitli gerçek dünya senaryolarında keşfedildi ve istismar edildi. Bu, proaktif güvenlik önlemlerine duyulan ihtiyacı göstermektedir. Bazı gerçek dünya UAF örnekleri şunları içerir:

  • İnternet Tarayıcıları: Web tarayıcılarındaki UAF güvenlik açıkları, rastgele kod yürütmek, kullanıcı gizliliğini tehlikeye atmak ve uzaktan kod yürütme saldırıları gerçekleştirmek için kullanıldı. Yakın tarihli bir örnek, Google Chrome'daki bir UAF güvenlik açığından yararlanarak tehdit aktörlerinin kurban makinede uzaktan rasgele kod yürütmesine izin veren CVE-2021-38008 olabilir.
  • İşletim Sistemleri: Windows/Linux/Android çekirdeklerinde bulunan UAF güvenlik açıkları, saldırganların yükseltilmiş ayrıcalıklar elde etmesine, güvenlik mekanizmalarını atlamasına ve kalıcılık kazanmasına olanak sağlamıştır. Bu tarihe kadar işletim sistemi çekirdeklerinde bulunmuş ve bulunmaya devam eden çok sayıda UAF güvenlik açığı vardır. Bu yazının yazıldığı sırada, Linux çekirdeğinde ayrıcalık yükseltmeye yol açan başka bir UAF güvenlik açığı olan CVE-2023-3269, genel olarak yayınlandı. CVE-2022-23270, Windows çekirdeğindeki UAF güvenlik açığına bir örnektir.
  • Yazılım Uygulamaları: Yazılım uygulamalarındaki UAF güvenlik açıkları, programı manipüle etmek için kullanıldı davranış, bilgilerin açığa çıkmasına, rastgele kod yürütülmesine, programın çökmesine ve en kötü durumda ayrıcalığa yol açar tartışma. Birden fazla yazılım uygulaması, UAF saldırılarına karşı hassastır ve hala hassastır. Bu yazılımlar çoğunlukla verimsiz ve güvenli olmayan bellek yönetimi yaklaşımlarıyla geliştirilmiş C/C++ programlarıdır.

Gerçek dünya uygulamalarındaki Use-Aft-Free güvenlik açıkları hakkında daha fazla bilgi edinmek için şuraya göz atabilirsiniz: resmi MITRE CVE liste sayfası ve Ücretsiz Sonra Kullan anahtar sözcüğüne göre sıralayın.

Verimli Bellek Tahsisi, Yazılımın Güvenli Olmasına Yardımcı Olur

Optimum ve iyi düşünülmüş bellek tahsisi, uygulamalarınızı yaygın ilkel bellek bozulması güvenlik açıklarının tuzağına düşmekten korumak için uzun bir yol kat eder.

Kontrol Süresi Kullanım Süresi (TOCTOU), yarış koşulları ve Arabellek Taşmaları (BOF) ile birlikte UAF, en sık kullanılan bellek güvenlik açıklarından bazılarıdır. Programınızın belleğinin üzerinde çalıştığı platform tarafından nasıl yönetildiğini öğrenerek tüm bunlardan kaçınılabilir. Bu, işletim sisteminin programınızı bellekte nasıl tahsis ettiğini netleştirmenizi sağlar ve optimum performans ve güvenlik için yazılım tasarlama araçlarıyla sizi donatır.

Henüz yapmadıysanız, dünyanın en çok kullanılan sunucu işletim sistemi olan Linux'ta bellek yönetiminin nasıl yapıldığını anlayarak başlayabilirsiniz.