Verifier'in arkada çalışıp sistem boştayken bir sürücü yakalayacağını bekliyordum aslında ama önyüklemede olması beklenmedik oldu.
Rich (BB code):
DRIVER_VERIFIER_DETECTED_VIOLATION (c4)
A device driver attempting to corrupt the system has been caught. This is
because the driver was specified in the registry as being suspect (by the
administrator) and the kernel has enabled substantial checking of this driver.
If the driver attempts to corrupt the system, BugChecks 0xC4, 0xC1 and 0xA will
be among the most commonly seen crashes.
Arguments:
Arg1: 00000000000000e4, Kernel Zw API called with malformed UNICODE_STRING structure as parameter.
Arg2: fffff80a8deb38d3, Address inside the driver making the incorrect API call.
Arg3: fffff4012e30e8b8, Address of the incorrect UNICODE_STRING structure.
Arg4: 0000000000000000
Hata anlaşılabilecek bir basitlikte, kernelde çalışan bir sürücü, Zw (NT ama daha spesifik bir çekirdek yapısında kullanılıyor diyebiliriz) API çağrısı yaparken hatalı bir UNICODE_STRING yapısı kullandığını gösteriyor. Bunun için çağrı yığınına bakarak sürücüyü bulabiliriz;
Rich (BB code):
4: kd> k
# Child-SP RetAddr Call Site
00 fffff401`2e30e608 fffff807`a746c197 nt!KeBugCheckEx << Mavi ekran
01 fffff401`2e30e610 fffff807`a7469b23 nt!CarInitiateBugcheck+0x47 << Verifier ile beraber KDM mavi ekranı tetikliyor
02 fffff401`2e30e650 fffff807`a79dfa5e nt!CarReportDifPluginRuleViolation+0x233
03 fffff401`2e30e6e0 fffff807`a79e6d4c nt!CarReportRuleViolationFromNt+0x15a << Bu yapıda bir sorun olduğu için kod doğrulama mekanizmas tarafından bir kural ihlali belirleniyor
04 fffff401`2e30e790 fffff807`a79e6a1e nt!ViZwCheckUnicodeString+0x7c << Sistem sürücünün UNICODE STRING yapısını inceliyor
05 fffff401`2e30e7e0 fffff807`a7498ea1 nt!VfZwQuerySymbolicLinkObject_Entry+0x1e
06 fffff401`2e30e810 fffff80a`8deb38d3 nt!DifZwQuerySymbolicLinkObjectWrapper+0xc1
07 fffff401`2e30e890 00000000`00000000 AsIO3+0x38d3 << Suçlu sürücü
Çağrı yığını açık AsIO3, Asus'a ait bir kernel sürücüsü, Ardından gelen Verifier kontrolünde çalışan spesifik çekirdek komutlarından
ViZwCheckUnicodeString anladığım kadarıyla, sürücüdeki hatalı veya bozuk bir UNICODE_STRING yapısını Windows API’sine (ZwQuerySymbolicLinkObject) parametre olarak vermiş. Driver Verifier bunu fark etmiş ve sistem çökmesine neden olmuş... İlgili yapının içeriğine bakınca;
Rich (BB code):
4: kd> dt _UNICODE_STRING fffff4012e30e8b8
nt!_UNICODE_STRING
+0x000 Length : 0
+0x002 MaximumLength : 0xff // 255
+0x008 Buffer : 0xffffc00b`aa42ef00
Sürücünün buffer içeriği dolu ve maksimum veri yapısı da olabildiği gibi. Lakin uzunluğu 0. Microsoft'a göre:
If Length is zero, this field MUST be zero bytes in length. If Length is nonzero, this field MUST be a null-terminated array of 16-bit Unicode characters, followed by zero padding to a multiple of 4 bytes. The string represented by this field SHOULD NOT contain embedded or additional trailing null characters.
Eğer Length alanı sıfırsa, bu demektir ki dizinin uzunluğu yoktur ve
Buffer alanı sıfır uzunluğunda olmalıdır. Yani, Buffer alanında herhangi bir karakter verisi olmamalıdır. Buffer tamamen boş (NULL) olmalıdır.
Bu dosyada ise buffer alanı gayet dolu ve hatanın sebebini gösteriyor....
Rich (BB code):
4: kd> dc 0xffffc00b`aa428f70
ffffc00b`aa428f70 0080007e 00000000 aa428f80 ffffc00b ~.........B.....
ffffc00b`aa428f80 003a0043 0050005c 006f0072 00720067 C.:.\.P.r.o.g.r.
ffffc00b`aa428f90 006d0061 00460020 006c0069 00730065 a.m. .F.i.l.e.s.
ffffc00b`aa428fa0 00280020 00380078 00290036 0041005c .(.x.8.6.).\.A.
ffffc00b`aa428fb0 00550053 005c0053 00730041 00730075 S.U.S.\.A.s.u.s.
ffffc00b`aa428fc0 00650043 00740072 00650053 00760072 C.e.r.t.S.e.r.v.
ffffc00b`aa428fd0 00630069 005c0065 00730041 00730075 i.c.e.\.A.s.u.s.
ffffc00b`aa428fe0 00650043 00740072 00650053 00760072 C.e.r.t.S.e.r.v.
Muhtemelen sorunun sebebi ASUS'a ait ARMOURY CRATE Lite programı ama hatanın nedeni...
Ya gerçekten bir bellek sızıntısı oldu bu yapı böyle gözüküyor, ya Windbg ya da dosya ile alakalı bir eksiklik ya sürücünün yanlış bir kodlaması var ki öyle bir durumda nerdeyse her kullanan kişide olması gerekiyor diye düşünüyorum.
ASUS programlarını kaldırıp sistemini kontrol etmeni öneriyorum.