RPC (回呼)
程式設計模型通常需要透過遠端程序呼叫對用戶端進行伺服器回呼, (RPC) ,或對不受信任的伺服器進行用戶端呼叫。 這會產生許多潛在的陷阱。
首先,必須以足夠低的模擬層級來回呼用戶端。 如果伺服器是高度特殊許可權的系統服務,請呼叫具有模擬層級或更高層級的本機用戶端,可提供足以接管系統的許可權給用戶端。 呼叫具有高於必要模擬層級的遠端用戶端,也可能會導致不想要的結果。
其次,如果攻擊者引發您的服務執行回呼,它可以啟動所謂的 黑孔-拒絕服務攻擊。 這類攻擊不是 RPC 特有的攻擊;在這些攻擊中,電腦會引發您傳送流量至該攻擊,但不會回應您的要求。 您會將更多資源接收到呼叫黑孔,但永遠不會回來。 這類攻擊的一個一般範例是稱為 TCP/IP SYN 攻擊的 TCP 層級攻擊。
在 RPC 層級上,當攻擊者呼叫介面,並要求伺服器回呼介面時,就會發生簡單的黑孔攻擊。 介面符合,但攻擊者永遠不會傳回呼叫:伺服器上的一個執行緒已系結。 攻擊者會執行此動作 100 次,並將伺服器上 100 個執行緒放在一起。 最後,伺服器會用盡記憶體。 對伺服器進行偵錯可能會顯示黑孔呼叫者的身分識別,但伺服器通常會重新開機,而不需要可疑的惡意播放,或可能沒有足夠的專業知識可判斷攻擊者。
第三個陷阱位於用戶端上。 用戶端通常會呼叫伺服器,告知伺服器如何將其呼叫回 (通常是字串系結) ,然後等候來自伺服器的呼叫,並盲目接受該端點上宣告來自伺服器的任何呼叫。 從伺服器到用戶端的回呼通訊協定應該包含一些驗證機制,以確保當回呼傳入用戶端時,它實際上源自于伺服器。