Aracılığıyla paylaş


Sızma Testleri (Cihaz Temelleri)

Cihaz Temelleri Sızma testleri, güvenlik testinin kritik bir bileşeni olan çeşitli giriş saldırıları biçimleri gerçekleştirir. Saldırı ve Sızma testi, yazılım arabirimlerindeki güvenlik açıklarını belirlemeye yardımcı olabilir.

Penetrasyon

Sızma testleri iki test kategorisi içerir: Fuzz testleri ve G/Ç Casus ve G/Ç Saldırısı testleri. Fuzz testleri, Cihaz Yolu Egzersiz Aracı test aracının da bir özelliğiydi.

Test Açıklama

G/Ç Casusu Devre Dışı Bırak

1 veya daha fazla cihazda G/Ç Spy'i devre dışı bırakın.

Test ikilisi: Devfund_IOSpy_DisableSupport.wsc

Test yöntemi: DisableIoSpy

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DQ

Giriş/Çıkış Casus Özelliğine Sahip Cihazı Görüntüle

I/O Spy etkinleştirilen cihazları görüntüleyin.

Test ikili dosyası: Devfund_IOSpy_DisplayEnabledDevices.wsc

Test yöntemi: DisplayIoSpyDevices

G/Ç İ̇zleyici Etkinleştirme

Bir veya daha fazla cihazda G/Ç Spy etkinleştirin.

Test ikilisi: Devfund_IOSpy_EnableSupport.wsc

Test yöntemi: EnableIoSpy

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DQ

DFD - IoSpy veri dosyasının yolunu belirtir. Varsayılan konum %SystemDrive%\DriverTest\IoSpy'dır

Fuzz Çeşitli API testi

Fuzz Misc API testleri, sürücünün çekirdek modu sürücülerinden gelen çeşitli yaygın çağrıları işleyip işleyemeyeceğini belirleyen testlerdir.

Testler aşağıdaki testleri içerir:

  • ZwReadFileve ZwWriteFileçağrıları, geçerli veri arabelleği işaretçileri, değişen uzunluklar (sıfır dahil) ve sıfır, -1 ve 64 bit bayt uzaklıkları gibi değişen bayt uzaklıklarını belirtir.

  • I/O'yu iptal etmek ve tamponları temizlemek için çağrılar.

  • Geçerli kullanıcı veri arabellek işaretçileri ve değişken arabellek uzunlukları (sıfır dahil) ile ortak dosya bilgileri sınıflarını kullanan bir dizi dizin sorgusu çağrısı.

  • Dizin sorgusu çağrıları, Sanal DOS Makinesi (VDM) denetimi altında çalışan programlar tarafından verilenlere benzer.

  • Değişken arabellek boyutları ve uzunlukları ile bir dosyanın genişletilmiş özniteliklerini almak için fonksiyon çağrıları.

  • Belirli bölüm sayfası koruması ve bölümsel ayırma öznitelikleri (taahhütlü bölüm, görüntü dosyası bölümü) ile bölüm nesneleri oluşturma ve kapatma çağrıları.

  • Dosyaları kilitlemek ve kilidini açmak için çağrılar.

  • Bir hacmin kota girdilerini almak için çağrılar.

  • Dosya Öznitelikleri Testi, bir ObjectAttributes yapısına yönelik geçerli işaretçileri olan bir dizi dosya özniteliği sorgusu.

    Dosya Öznitelikleri Testi isteğe bağlı bir sıfır uzunluklu teste sahiptir. Bir dosyanın genişletilmiş öznitelikleri alınırken, Fuzz Testi sürücüye boş (sıfır uzunlukta) bir sorgu ve geçersiz bir tampon bellek adresi geçirir.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoMiscAPITest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

ile Sıfır Uzunluklu Sorgu Testi ile Fuzz Misc API'leri

Bu test, Fuzz Misc API testiyle aynı testleri gerçekleştirir ve bu kez bir dosyanın genişletilmiş özniteliklerini almaya çalışırken sürücüye boş (sıfır uzunluklu) bir sorgu ve geçersiz bir arabellek adresi geçirir.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoMiscAPIWithZeroLengthTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz açma kapama testi

Bu test binlerce oluştur-aç-kapat dizisi gerçekleştirir.

Bu test hakkında ayrıntılı bilgi için, Fuzz açma ve kapatma testi hakkındabölümüne bakın.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: doOpenCloseTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Sorgusunu ve Dosya Bilgilerini Ayarla testi

Bu test, cihazların nesne, dosya ve birim bilgilerini almak ve değiştirmek için çağrılar verir.

Sorgu ve Dosya Bilgilerini Ayarla Testsırasında, Fuzz test sorunu, Temel Açık İşlemler ve Fuzz Alt Açılış testi tarafından gerçekleştirilen işlemler de dahil olmak üzere diğer açık işlemler tarafından açılan cihazların nesne, dosya ve birim bilgilerini almak ve değiştirmek için çağırır.

Fuzz testi, her sorguyu veya set çağrısını, geçerli bir arabellek ve çeşitli arabellek uzunlukları ile dosya bilgi sınıfları kullanarak en az 1024 kez gerçekleştirir. Her türden bir istek de geçersiz bir arabellek işaretçisi ve sıfır arabellek uzunluğu ile gönderilir.

Koruma seçeneğini ayarlayan ChangeBufferProtectionFlags parametresini kullanırsanız, Fuzz testi her sorgudaki arabellekteki güvenlik ayarını değiştirir ve çağrıyı ayarlar.

Bu test Fuzz Sub-opens testini de gerçekleştirir.

Bu test, ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFileve ZwSetVolumeInformationFile işlevlerini kullanır.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoQueryAndSetFileInformationTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Sorgusunu ve Güvenlik Testini Ayarla

Bu test, güvenlik tanımlayıcısını almak ve cihazların güvenlik durumunu değiştirmek için çağrılar verir.

Sorgusu ve Güvenlik Testini Ayarlasırasında, Fuzz testi, güvenlik tanımlayıcısını almak ve değiştirmek için çağrıları başlatır; bu çağrılar Temel Açık İşlemler ve Fuzz Sub-opens testi tarafından gerçekleştirilen diğer açık işlemler üzerindeki güvenlik durumunu da kapsar.

Fuzz testi, geçerli bir test arabelleği ve çeşitli arabellek uzunlukları ile güvenlik bilgisi türleri (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION ve sırasıyla bilgi türü olmadan) kullanarak her sorgu veya küme çağrısını en az 1024 kez yapar. Her türden bir istek de geçersiz bir arabellek işaretçisi ve sıfır arabellek uzunluğu ile gönderilir.

Koruma seçeneğini ayarlayan ChangeBufferProtectionFlags parametresini kullanırsanız, Fuzz testi her sorgudaki arabellekteki güvenlik ayarını değiştirir ve çağrıyı ayarlar.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoQueryAndSetSecurityTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Random FSCTL-testi / Fuzz Random IOCTL-testi

Bu test, DeviceIoControl işlevine belirli bir değer aralığından rastgele seçilen işlev kodları, cihaz türleri, veri aktarım yöntemleri ve erişim gereksinimleriyle bir dizi çağrı verir. Çağrılar, geçerli ve geçersiz arabellek işaretçileri ve uzunlukları ile beraber giriş ve çıkış arabelleklerini ve rastgele oluşturulan içeriği içerir.

Rastgele testler sırasında Fuzz testi, belirtilen değer aralığından rastgele seçilen işlev kodları, cihaz türleri, veri aktarımı yöntemleri ve erişim gereksinimleriyle DeviceIoControl işlevine bir dizi çağrı verir. Çağrılar, geçerli ve geçersiz arabellek işaretçileri ve uzunlukları ile beraber giriş ve çıkış arabelleklerini ve rastgele oluşturulan içeriği içerir.

Fuzz testi, Temel Açık İşlemler ve ek açık testler sırasında açılan tüm cihazlarda rastgele testler gerçekleştirir. Aşağıdaki parametreleri kullanarak bu testi özelleştirebilirsiniz:

  • Çağrılarda kullanılan IOCTL veya FSCTL işlev kodları aralığını belirtmek için MinFunctionCode ve MaxFunctionCode kullanın

  • Çağrılarda kullanılan cihaz türleri aralığını belirtmek için MinDeviceType ve MaxDeviceType kullanın

  • Rastgele sayı oluşturma yordamı için bir tohum numarası belirtmek üzere SeedNumber kullanın.

Fuzz testinin, test için rastgele sayılar oluşturmakta kullandığı işlev, rastgele sayı üreten algoritma için tohum numarası olarakbaşlangıç numarasını kullanır. Test koşullarını yeniden oluşturmak için tohum numarası parametresini kullanarak özgün test denemesinde kullanılan tohum numarasını belirtin.

Rastgele testin bir parçası olarak Özel Rastgele Test dahildir. Uyarlanmış rastgele test, IOCTL veya FSCTL isteklerine yönelik sürücülerin yanıtını daha ayrıntılı incelemek için rastgele testin sonuçlarını kullanır. Özelleştirilmiş rastgele test yoklamaları, rastgele testin kaçırdığı alanları ve rastgele test çağrılarının döndürdiği duruma göre sürücünün beklendiği gibi yanıt vermediği alanları gösterir.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemleri: DoRandomIOCTLTest, DoRandomFSCTLTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

MinInBuffer

MaxInBuffer

MinOutBuffer

MaxOutBuffer

MaxRandomCalls

MaxTailoredCalls

SeedNumber

MinDeviceType

MaxDeviceType

MinFunctionCode

MaxFunctionCode

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Alt-açılış testi

Test, cihazın ad alanında nesneleri açmak için hızlı bir dizi çağrı gerçekleştirir. Bu çağrılarda, cihazla başlayan ve farklı uzunluk ve içeriğe sahip rastgele adlar ve saçma dizeler içeren bir yolu iletir.

Göreli Açık Testsırasında (Alt Açık Testolarak da bilinir) Fuzz testi, cihazınad alanında nesneleri açmaya çalışır.

Bu test sırasında Fuzz testi, Temel Açık İşlemler ve diğer açık işlemleri kullanarak açılan cihazların ad alanında nesneleri açmak için hızlı bir dizi çağrı gerçekleştirir. Bu çağrılarda Fuzz testi, cihazla başlayan ve rastgele adlar ile farklı uzunlukta ve içerikte saçma dizeler içeren bir yolu izler.

Bu test, sürücü veya dosya sisteminin ad alanında açık istekleri nasıl yöneteceğini belirler. Özellikle, sürücü kendi ad alanında açık istekleri desteklemiyorsa, yetkisiz erişimi engellemesi gerekir; bunu, ya istekleri başarısız kılarak ya da cihaz nesnesini oluşturmak için IoCreateDevice veya IoCreateDeviceSecure kullandığında FILE_DEVICE_SECURE_OPEN cihaz özelliğini ayarlayarak gerçekleştirebilir.

Bir cihazın ad alanı hakkında daha fazla bilgi için bkz. Cihaz Ad Alanı Erişimini Denetleme.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoSubOpensTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Alt-Açılır Menüleri Akışlarla Test Etme

Bu test, cihazda çeşitli adlandırılmış veri akışları açmaya çalışır. Test, bazı cihazlardaki diğer kullanımlar için geçerli olabilecek içeriğe ve karakterlere sahip bir dizi rastgele akış adı kullanır.

Streams Testsırasında Fuzz testi cihazda çeşitli adlandırılmış veri akışları açmaya çalışır. Testler, bazı cihazlardaki diğer kullanımlar için geçerli olabilecek içeriğe ve karakterlere sahip bir dizi rastgele akış adı kullanır. Bu test, özellikle sürücü veri akışlarını desteklemeyen veya tahminde bulunmayan bir cihazı dışarı aktarıyorsa, sürücünün veri akışı isteklerini düzgün işleyip işleyemeyeceğini belirler.

adlı veri akışı bir dosya nesnesinin özniteliğidir. Dosyanın adını, iki nokta üst üste ve veri akışının adını yazarak adlandırılmış bir veri akışı belirtirsiniz; örneğin, "File01.txt:AccessDate" burada AccessDate adlandırılmış bir veri akışı, yani File01.txt dosyasının özniteliğidir.

Fuzz testi, testte kullanılan akış adlarını kaydeder.

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemi: DoSubOpensWithStreamsTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DoPoolCheck

DQ

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

Fuzz Zero-Length Arabellek FSCTL testi / Fuzz Zero-Length Arabellek IOCTL testi

Bu test, giriş ve/veya çıkış arabellek uzunlukları 0 olan DeviceIoControl işlevine bir dizi çağrı yapar. Test, farklı işlev kodları, cihaz türleri, veri aktarım yöntemleri ve erişim gereksinimlerini kullanarak farklı dosya sistemi denetim kodları oluşturur.

Zero-Length Arabellek Testi sırasında Fuzz testi, giriş ve/veya çıkış arabelleği uzunlukları 0 olanDeviceIoControl işlevine bir dizi çağrı döndürür. Test, farklı işlev kodları, cihaz türleri, veri aktarım yöntemleri ve erişim gereksinimlerini kullanarak değişen G/Ç denetim kodları oluşturur. G/Ç denetim kodlarının içeriği hakkında bilgi için bkz. G/Ç Denetim Kodlarını Tanımlama .

Sürücünün geçersiz arabellek işaretçilerini işlemesini test etmek için, bu kullanıcı modu çağrılarındaki arabellek işaretçileri çekirdek sanal adres alanında yüksek olan adresleri (örneğin, 0xFFFFFC00) belirtir).

Fuzz testi, temel ve ek açık testler sırasında açılan tüm cihazlarda Zero-Length Buffer testini gerçekleştirir. Çağrılarda kullanılan IOCTL veya FSCTL işlev kodları aralığını belirtmek için MinFunctionCode ve MaxFunctionCode komut parametrelerini kullanarak bu testi özelleştirebilir ve çağrılarda kullanılan cihaz türü aralığını belirtmek için MinDeviceType ve MaxDeviceType .

Test ikilisi: Devfund_DevicePathExerciser.dll

Test yöntemleri: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

MinDeviceType

MaxDeviceType

MinFunctionCode

MaxFunctionCode

DoPoolCheck

TestDöngüleri

ChangeBufferProtectionFlags

Kimliğine Bürün

FillZeroPageWithNull

G/Ç Saldırısını Çalıştırma

Belirtilen cihaz veya cihazlarda G/Ç Saldırısı gerçekleştirir.

Test ikili dosyası: Devfund_IOAttack_DeleteDataFile.wsc

Test yöntemi: RunIoAttack

Parametreleri: - bkz. Cihaz TemelLeri Test Parametreleri

DQ

Fuzz açma ve kapatma testi hakkında

Fuzz açma ve kapatma testi, belirtilen cihaz veya cihazların örneklerini açma ve kapatmanın birkaç farklı yolunu kullanır: Temel Açık İşlemler, Doğrudan Cihaz Açma İşlemlerive Açma ve Kapatma test.

Temel Açık İşlemler

Temel Açık İşlemlersırasında Fuzz testi, farklı yöntemler ve seçenekler kullanarak belirtilen cihazların veya belirtilen sürücü tarafından dışarı aktarılan cihazların örneklerini tekrar tekrar açar (oluşturur).

Fuzz testi her zaman Temel Açık İşlemleri gerçekleştirir. Bunları seçmeniz gerekmez ve bunları bir test oturumundan dışlayamazsınız.

Fuzz testi, cihaza uygun sistem hizmetlerini (ZwXxx Rutinleri) çağırarak tüm açık işlemleri kullanıcı modunda gerçekleştirir. Açık bir çağrı cihaza bir tanıtıcı döndürürse Fuzz testi, test oturumu için seçilen diğer cihaz testlerini gerçekleştirmek için tutamacı kullanır.

Beş tür Temel Açık İşlem vardır:

  • Standart olarak açık. Fuzz testi cihazı zaman uyumsuz olarak açar ve yalnızca yerel cihaz adını belirtir.

  • Eklenmiş bir ters eğik çizgi ile açın. Fuzz testi, cihaz adı için, örneğin \device\cdrom\ gibi, bir ters eğik çizgi ile birlikte bir açık çağrı yapar; bu çağrı, cihazın kök dizini açılıyor gibi kabul edilir.

    Bu işlem, sürücü veya dosya sisteminin ad alanında açık istekleri nasıl yöneteceğini belirler. Özellikle, cihaz ad alanında açık istekleri desteklemiyorsa, sürücü istekleri başarısız yaparak veya cihaz nesnesini oluşturmak için IoCreateDeviceveya IoCreateDeviceSecure çağırdığındaFILE_DEVICE_SECURE_OPEN cihaz özelliğini ayarlayarak yetkisiz erişimi engellemelidir.

  • Adlandırılmış kanal olarak açın. Fuzz testi, cihazı açar ve cihaza yönelik adlandırılmış bir boru hattı kurar. Access parametresi (ShareAccess) başlangıçta okuma ve yazma olarak ayarlanır, ancak istek başarısız olursa bu parametre ayarlanır. Cihaz adlandırılmış kanalları desteklemiyorsa isteğin başarısız olması gerekir.

  • Mailslot olarak açın. Fuzz testi, cihazı bir posta yuvası olarak açar. Cihaz bu tür bir bağlantıyı desteklemiyorsa istek başarısız olmalıdır.

  • Ağaç bağlantısı olarak açın. Fuzz testi, cihazı uzak ağ erişiminde kullanılmak üzere ağaç bağlantısı olarak açar. Access parametresi (ShareAccess) başlangıçta okuma ve yazma olarak ayarlanır, ancak istek başarısız olursa bu parametre ayarlanır. Cihaz bu tür bir bağlantıyı desteklemiyorsa istek başarısız olmalıdır.

Açık çağrılarda kullanılan parametreler, cihazın özelliklerini barındırmak ve çağrıların başarılı olma olasılığını sağlamak için farklılık gösterir. Örneğin, çağrı cihazın güvenlik gereksinimlerini karşılamadığı için temel bir açma işlemi başarısız olursa, Fuzz testi daha az erişim isteğiyle açma işlemini yineler. Örneğin, yazma erişimi isteyen bir açık işlem bir güvenlik ihlali hatası döndürürse, açma işlemi okuma erişimi isteğiyle yinelenir.

Doğrudan Cihaz Açma İşlemleri

Doğrudan Cihaz Açma İşlemlerisırasında, Fuzz testi kapsamında cihaz, bir dosya sisteminde dosya şeklinde değil, doğrudan bir cihaz olarak açılır. Doğrudan Cihaz Açma İşlemleri her zaman eşzamanlı olur. Çağrı başarılı olursa, Fuzz testi, sağlanan işaretçiyi kullanarak seçilen diğer testleri gerçekleştirir.

Testi Açma ve Kapatma

Açma ve Kapatma Testisırasında Fuzz testi, her biri binlerce oluşturma-açma-kapatma dizisi gerçekleştiren birkaç iş parçacığı oluşturur. Bu, sürücünün normalde basit ve beklenen çağrıların olağanüstü bir hacmini işleyebilme yeteneğini test ediyor.

Açma ve Kapatma Testi, Temel Açık İşlemler ve Eklenen Ters Eğik Çizgi ile Aç testlerinde kullanılan seçeneklerin aynısını kullanır ve bu testlerden hemen önce gerçekleştirilir.

Visual Studio kullanarak bir sürücüyü çalışma zamanında nasıl test edersiniz?

Cihaz TemelLeri testlerini seçme ve yapılandırma

Cihaz Temelleri Testleri

Sağlanan WDTF Basit G/Ç eklentileri

Komut İstemi'nde çalışma zamanı esnasında bir sürücüyü test etme