編寫安全的驅動程式之輸入輸出檢查
輸入輸出檢查
輸入輸出檢查是指對不可信的輸入輸出地址及資料長度進行合法性檢查的過程。這種方法在Windows核心API中應用的十分廣泛。
例如,在NtReadFile函式中,如果PreviousMode不是KernelMode,即NtReadFile函式是從使用者態被呼叫的,可以使用ProbeForWrite函式檢測輸入輸出緩衝區是否可寫,參見ReactOS中的程式碼如下:
NTSTATUS NTAPI NtReadFile(IN HANDLE FileHandle,
IN HANDLE Event OPTIONAL,
IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
IN PVOID ApcContext OPTIONAL,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID Buffer,
IN ULONG Length,
IN PLARGE_INTEGER ByteOffset OPTIONAL,
IN PULONG Key OPTIONAL)
{
KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
//省略部分程式碼......
/* Validate User-Mode Buffers */
if (PreviousMode != KernelMode)
{
_SEH2_TRY
{
/* Probe the status block */
ProbeForWriteIoStatusBlock(IoStatusBlock);
/* Probe the read buffer */
ProbeForWrite(Buffer, Length, 1);
//省略部分程式碼......
類似地,在NtWriteFile函式中當發現PreviousMode不是KernelMode時,即從使用者態呼叫過來的,可以使用ProbeForRead函式進行檢測。
此外,在IoControl中如果IoControlCode指定的Mthod為METHOD_NEITHER時,也應當對輸入和輸出地址使用ProbeForRead和ProbeForWrite函式進行檢驗。
本文節選自《0day安全:軟體漏洞分析技術(第2版)》一書。
圖書詳細資訊:http://space.itpub.net/?uid-13164110-action-viewspace-itemid-701890
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-701894/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用指標編寫程式將輸入的字串倒序輸出指標字串
- 編寫一程式,輸入月份號,輸出該月的英文月名。
- 實驗1 C語言輸入輸出和簡單程式編寫C語言
- 實驗1_C語言輸入輸出和簡單程式編寫C語言
- Java安全編碼之使用者輸入Java
- java安全編碼指南之:輸入校驗Java
- java安全編碼指南之:輸入注入injectionJava
- C++中的檔案輸入/輸出(4):檢測輸入/輸出的狀態標誌 (轉)C++
- linux之shell 輸入輸出Linux
- /*編寫一個程式,輸出如下圖案: * *** ***** ******* ***** *** * */
- 使用SPELLCHECK屬性禁用輸入框拼寫檢查
- 編寫一個程式求輸入字串的長度字串
- 接管子程式的標準輸入輸出
- 輸入輸出
- 4-30V 輸入、1.2A 固定輸出同步降壓驅動器
- Linux的input輸入子系統:裝置驅動之按鍵驅動Linux
- PHP 安全輸入輸出方式 「防止 XSS 注入」PHP
- shell程式設計(三)輸入輸出程式設計
- 輸入輸出流
- 資料的輸入輸出
- Python的輸入輸出Python
- linux中的輸入與輸出管理(重定向輸入,輸出,管道符)Linux
- C++中的檔案輸入/輸出(3):掌握輸入/輸出流 (轉)C++
- 重定向子程式標準輸入輸出
- 【C++】輸入輸出C++
- Java 輸入輸出流Java
- 輸入輸出系統
- JAVA輸入輸出流Java
- 【C語言】編寫一個程式從標準輸入讀取字元,並把他們寫到標準輸出。除了大寫字母轉換成小寫字母之外,其他的原樣輸出。C語言字元
- C++ 學習筆記之——輸入和輸出C++筆記
- 新手學python之Python的輸入輸出函式Python函式
- C中的基本輸入輸出函式(Android之JNI)函式Android
- usb驅動程式初步編寫
- 11.程式程式設計基礎5:輸入輸出程式設計
- Java------簡單的輸入/輸出Java
- ACM的Python版輸入輸出ACMPython
- Java中的輸入輸出總結Java
- Java —— 標準輸入輸出Java