解決兩個難懂的安全性問題

2021-03-31 08:57:00 字數 2195 閱讀 7188

michael howard

secure windows initiative

2023年8月14日

經常討論一些您發現的少量錯誤並讓人們知道它們是很有益的。在本月的專欄中,我想討論兩個主題:

互動式服務

呼叫 _alloca()

與 unix 守護程式類似,服務是 microsoft windows nt® 的中樞,可以向作業系統和使用者提供重要功能而無需使用者的參與。建立服務時,有一些問題需要注意。

microsoft windows® 中的服務通常是控制台應用程式,它們的執行無需使用者參與,也沒有使用者介面。但在某些例項中,服務可能需要與使用者進行互動。執行在較高安全環境中的服務(如 system)不應作為互動式服務執行。在 windows 使用者介面中,桌面是安全邊界,在互動式桌面上執行的任何應用程式可以與互動式桌面上的任何窗**互,即使視窗並不可見。無論建立視窗的應用程式的安全環境和應用程式的安全環境如何,都是這樣。

由於這些設計特點,任何在互動式桌面上開啟視窗的服務都會向登入使用者所執行的應用程式公開。如果服務試圖使用視窗訊息控制其功能,則登入使用者可以通過使用惡意訊息來干擾該功能。

將服務作為 system 執行的做法(即,服務通過呼叫openwindowstationgetthreaddesktop來支援互動式桌面)十分不可取。請注意,windows 將來的版本可能會完全取消對互動式服務的支援。

我們建議服務編寫人員使用客戶端/伺服器技術(例如 rpc、套接字、命名管道或 ***)實現與來自某個服務的登入使用者的互動,使用帶 mb_service_notification 的 messagebox 顯示簡單的狀態。如果您的服務**具有以下任何屬性,請提高警惕:

_alloca函式可以在堆疊中分配動態記憶體。分配的空間將在呼叫函式退出時自動釋放,而不只是在分配超出範圍時釋放。下面是使用_alloca的示例**:

void function(char *szdata) 
如果攻擊者提供乙個比堆疊大小還要長的szdata_alloca會引發乙個異常並導致應用程式停止。如果該**位於伺服器中,則情況會更糟。處理這種錯誤情況的正確方法是將對_alloca的呼叫打包在異常處理程式中,並在出現錯誤時重置堆疊。

void function(char *szdata)  __except ((exception_stack_overflow == getexceptioncode()) ?

exception_execute_handler :

exception_continue_search)

}

您還應當小心某些呼叫_alloca的 atl 字串轉換巨集。這些巨集包括a2ww2acw2ct等。如果您的**是伺服器**,則呼叫其中任何轉換函式時都必須考慮資料的長度。這是不要輕易相信輸入的又乙個示例。如果攻擊者向您的**提供乙個 10 mb 的字串,便會摧毀堆疊並引發異常;或者如果未引發異常,則導致失敗。所以千萬不要這樣做!

沒有人看出上星期的**中的錯誤,但很多人已接近目標。其中的問題是為明文和密文使用了相同的緩衝區。您永遠都不能這樣做。

乍看起來,使用相同的緩衝區儲存明文,然後加密明文產生的密文似乎很好。在大多數情況下也是這樣。但在多執行緒環境中就不是這樣了。設想一下,您的**中出現了乙個「競爭狀態」,而您卻並不知道。(競爭狀態是由對軟體中的事件的相對時間產生意外的嚴格依賴而引起的。它們通常與同步錯誤一起出現。)坦白地說,您永遠不會知道存在著嚴重的競爭狀態,等知道時已經太晚了。請再考慮一下,您的應用程式的正常流程如下所示:

使用明文載入緩衝區。

加密緩衝區。

將緩衝區內容傳送給接收者。

這看起來很正常。但是,設想您有乙個多執行緒應用程式,由於某種原因,最後兩個步驟由於競爭狀態而被交換:

使用明文載入緩衝區。

將緩衝區環境傳送給接收者。

加密緩衝區。

修復的方法是使用兩個緩衝區。乙個緩衝區用於明文,另乙個用於密文,並確保密文在執行不同呼叫時已被清空。

您能指出此**中的錯誤嗎?

void shuffleandupdate(char *szname, char *szpwd, 

dword index,

dword d)

dwarray[index]= d;

if (fallowaccess)

}

session的安全性問題

我們都知道http是一種無狀態性的協議,這種協議不要求瀏覽器在每次請求中標明他自己的身份,每次發個請求回個相應就完事了,那怎麼校驗發請求的人的身份呢,這就催生了cookies.本質上cookies就是http的乙個擴充套件,有兩個http頭部是專門負責設定和傳送cookies的 set cookie...

Cookies的安全性問題

response.cookies cookiename key cookievalue 賦值時,會自動生成cookiename key value 安全字串組,即使修改也不會對安全造成太大威脅 除非儲存敏感資料 cookie.secure屬性 如果要求使用的是 https secure hypert...

前端安全性問題和解決防範

示例 解決方案 使用正則匹配去除某些字串 過濾網域名稱 function filterxss str,regexp return filtervalue 方案總結1 輸入過濾 在js中對使用者輸入的資料進行過濾 2 將輸出的字串中的反斜槓進行轉義 3 從url中獲取的資訊,在前端進行轉義後再輸出 4...