Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Çekirdek Adresi Dezenfektanı (KASAN), arabellek taşması ve kullanımdan sonra gerçekleşen olaylar gibi çeşitli geçersiz bellek erişimi sınıflarını algılamanıza olanak tanıyan, Windows çekirdek sürücülerinde desteklenen bir hata algılama teknolojisidir. Sisteminizde KASAN'ı etkinleştirmenizi ve çekirdek sürücünüzü belirli bir MSVC derleyici bayrağıyla yeniden derlemenizi gerektirir.
Pre-requisites
KASAN'ı kullanmak için şunları yapmanız gerekir:
- Çekirdek sürücünüzün yüklendiği hedef sistemin işletim sistemi sürümü:
- İstemci: Windows 11 24H2 veya üzeri.
- Sunucu: Windows Server 2025 veya üzeri.
- VisualStudio: sürüm 17.11 veya üzeri.
- WDK: sürüm 10.0.26100.2161 veya üzeri.
KASAN yalnızca x64'te desteklenir.
Çekirdek sürücünüzde KASAN'ı etkinleştirme
Hedef sistemdeki yönetici Komut İstemi penceresine aşağıdaki komut satırını girin:
reg add "HKLM\System\CurrentControlSet\Control\Session Manager\Kernel" /v KasanEnabled /t REG_DWORD /d 1Bu kayıt defteri anahtarının ayarlanması, Windows çekirdeğine KASAN izlemeli sürücüleri yüklemeye hazırlanmasını ve bunları kabul etmesine talimat verir. Bu kayıt defteri anahtarının ayarlanmaması, Windows çekirdeğinin KASAN izlemeli sürücüleri yüklemeyi reddetmesine neden olur.
Değişikliğin etkili olması için hedef sisteminizi yeniden başlatın.
MSVC derleyicisine yeni bir bayrak geçirerek çekirdek sürücünüzü KASAN izlemesinin etkinleştirildiği şekilde yeniden derle. Aşağıdaki yöntemlerden birini kullanın:
- GUI: VisualStudio'da Çözüm Gezgini'ne gidin, çekirdek sürücü projenize sağ tıklayın ve Özellikler'i seçin. Özellik sayfasında , Yapılandırma Özellikleri>>C/C++>>Genel'e gidin ve Çekirdek Adresi Temizlemeyi Etkinleştir'iEvet olarak ayarlayın. Ardından çözümünüzü yeniden oluşturun.
- Komut istemi: Derleyici komut satırınıza /fsanitize=kernel-address parametresini ekleyin. Ardından çözümünüzü yeniden oluşturun.
Yeniden derlenmiş çekirdek sürücünüzü hedef sisteminize yükleyin ve her zaman yaptığınız gibi stres testi yapın. KASAN çalışma zamanında çalışır ve Hata Denetimi 0x1F2: KASAN_ILLEGAL_ACCESS aracılığıyla geçersiz bellek erişim olayları bildirir.
VisualStudio 17.12'de Regresyon
VisualStudio 17.12 kullanıyorsanız aşağıdaki derleme hatasıyla karşılaşabilirsiniz:
error LNK2019: unresolved external symbol __asan_wrap_wcscat referenced in function
Bağlayıcı komut satırınıza aşağıdaki bayrağı ekleyerek bu hataya geçici bir çözüm bulabilirsiniz:
/alternatename:__asan_wrap_wcscat=wcscat
Bu regresyon VisualStudio 17.14.15'te düzeltildi.
VisualStudio 17.14 ile 17.14.14 arasındaki regresyon
VisualStudio 17.14 kullanıyorsanız aşağıdaki derleme hatasıyla karşılaşabilirsiniz:
error LNK2001: unresolved external symbol __LINK_WITH_asan_compat.lib_TO_USE_NEW_COMPILER_WITH_OLDER_ASAN_RUNTIME
Derleyici komut satırınıza aşağıdaki bayrağı ekleyerek bu hataya geçici bir çözüm bulabilirsiniz:
/fno-sanitize-address-asan-compat-lib
Bağlayıcı komut satırınıza aşağıdaki bayrakları da ekleyin:
/alternatename:__asan_wrap_wcscat=wcscat
/alternatename:__asan_wrap_wcscpy=wcscpy
/alternatename:__asan_wrap_wcsncpy=wcsncpy
Bu regresyon VisualStudio 17.14.15'te düzeltildi.
Çekirdek sürücünüzde KASAN'ın etkinleştirildiğini doğrulama
KASAN ile derlenen çekirdek sürücülerinin "KASAN" adlı bir PE bölümü vardır.
Geliştirici Komut İsteminde aşağıdaki komutu çalıştırarak kasan'ın sürücünüzde etkinleştirildiğini doğrulayın:
dumpbin /ALL YourDriver.sys
Çıkışta "KASAN" adlı bir bölüm varsa, sürücünüzde KASAN etkinleştirilir.
KASAN raporlarını analiz etme
Sürücünüzde KASAN tarafından bir geçersiz bellek erişimi algılandığında Hata Denetimi 0x1F2: KASAN_ILLEGAL_ACCESS bildirir. Sürücünüzün tam olarak nerede geçersiz bellek erişimi gerçekleştirdiğini belirlemek için oluşturulan çekirdek bellek dökümünü inceleyin.
KASAN'ı, hedef sisteme bağlı bir çekirdek hata ayıklayıcısı ile birlikte kullanın, böylece hata denetimi yapılır yapılmaz bellek dökümü yerine bellek dinamik olarak incelenebilir.
Hata denetimi parametreleri
Hata Denetimi 0x1F2: KASAN_ILLEGAL_ACCESS parametreleri şunlardır:
- Parametre 1: Adrese geçersiz şekilde erişiliyor.
- Parametre 2: Bellek erişiminin boyutu.
- Parametre 3: Geçersiz bellek erişimini gerçekleştiren çağıranın adresi.
- Parametre 4: Bellek erişimi hakkında ek bilgiler:
- Bit [0:7]: KASAN gölge kodu. Aşağıdaki tabloya bakın.
- Bit 8:
1erişim yazma ise,0okuma ise.
KASAN gölge kodları
KASAN'da, çekirdek belleğinin tamamının sekiz bayt hizalı, sekiz baytlık hücrelerin bitişik öbeklerine ayrıldığını düşünüyoruz. KASAN ile, çekirdek belleğindeki her sekiz baytlık hücrenin kendisiyle ilişkilendirilmiş bir gölge kodu vardır ve bu, hücrenin geçerliliğini gösteren tek baytlık bir tamsayıdır. Gölge kodların kodlaması aşağıdaki gibidir:
| Value | Meaning |
|---|---|
0x00 |
Hücre tamamen geçerliliğini korur: hücrenin sekiz baytının tamamına erişim yasaldır. |
0x01 ->0x07 |
Hücre kısmen geçerli: hücredeki ilk değer baytları geçerli, ancak geri kalanı geçersiz. |
0x08 ->0x7F |
Hücre koşullu olarak geçerlidir: Hücrenin sekiz baytının tümüne erişim, belirli koşullara bağlı olarak yasal veya geçersiz olabilir. |
>= 0x80 |
Hücre tamamen geçersiz: hücrenin sekiz baytının tümüne erişim geçersiz. |
Hücrenin hangi bellek türüyle ilişkili olduğunu ve buna erişimin neden geçersiz olabileceğini daha fazla belirtmek üzere koşullu olarak geçerli ve tamamen geçersiz hücreler için çeşitli alt kodlar kullanılır.
Koşullu olarak geçerli hücreler tarafından kullanılan alt kodlar:
-
0x09: Sayfalanabilir bellek, DISPATCH_LEVEL ve üstü bir seviyede erişim için geçersizdir ancak başka seviyelerde erişim için yasaldır.
Tamamen geçersiz hücreler tarafından kullanılan alt kodlar:
-
0x81: alloca'nın sol kırmızı alanı. -
0x82: alloca'nın orta kırmızı bölgesi. -
0x83: alloca'nın sağ "redzone" bölgesi... -
0x84: genel değişkenin sağ kırmızı bölgesi. -
0x85: genel kırmızı alan. -
0x86: havuz belleğinin sağ kırmızı bölgesi. -
0x87: serbest havuz belleği. -
0x8A: bitişik belleğin sol redzone bölgesi. -
0x8B: bitişik belleğin sağındaki redzone. -
0x8C: lookasidelist belleği serbest bırakıldı. -
0x8D: havuz belleğinin sol "redzone" bölgesi. -
0xF1: yığın değişkeninin sol redzone'i. -
0xF2: yığın değişkeninin orta kırmızı bölgesi. -
0xF3: stack değişkeninin sağ "redzone" bölgesi. -
0xF5: used-after-ret stack değişkeni. -
0xF8: kapsam dışı yığın değişkeni.
KASAN hata denetimlerini anlama: örnek
KASAN'ın sürücünüz yürütülürken şu parametrelerle bir hata denetimi gerçekleştirdiğini varsayalım:
- Parametre 1:
0xFFFFFFFFFFFFABCD - Parametre 2:
0x0000000000000004 - Parametre 3:
0xFFFFFFFF12345678 - Parametre 4:
0x0000000000000184
Parametre 1 , sürücünüzün adrese 0xFFFFFFFFFFFFABCD erişmeye çalıştığını ve bu erişimin geçersiz olduğunu bildirir.
Parametre 2 bunun dört baytlık bir erişim olduğunu bildirir.
Parametre 3 , sürücünüzün geçersiz erişimi gerçekleştirdiği yönerge işaretçisinin adresini verir.
Parametre 4 bunun bir yazma erişimi olduğunu ve dokunulan belleğin genel değişkenin doğru kırmızı bölgesi olduğunu bildirir.
Başka bir deyişle, sürücünüz büyük olasılıkla genel değişken üzerinde bellek taşması gerçekleştirmeye çalıştı. Sürücünüzde bu hatayı nerede ve nasıl düzeltebileceğinizi araştırmak ve belirlemek için bu bilgileri kullanın.
KASAN'ın performans etkisi
KASAN, çekirdek bellek tüketimini artırır ve KASAN etkin olarak derlenen sürücülerde yaklaşık iki kez yavaşlama sağlar.
Sürücü Doğrulayıcı ile Karşılaştırma
KASAN ve Sürücü Doğrulayıcı tamamen ayrı özelliklerdir, ancak karşılıklı olarak uyumludur.
KASAN, yasadışı bellek erişimlerini algılamaya odaklanmıştır ve daha ayrıntılı bir yaklaşım kullandığı ve daha fazla bellek bölgesini kapsadığı için bu etki alanındaki Sürücü Doğrulayıcı'dan daha verimlidir. Sürücü Doğrulayıcı, KASAN'ın algılamadığı diğer hata türlerini bulmayı hedefleyen sürücüye özgü kurallara sahiptir. Daha fazla bilgi için bkz . Microsoft: Microsoft platformlarında çekirdek dezenfektanlarına giriş.
Sürücünüzdeki hataları algılamayı en üst düzeye çıkarmak için KASAN'ı Sürücü Doğrulayıcı ile birlikte kullanın.