程序設計模型通常需要透過遠端過程調用 (RPC) 或用戶端呼叫至不受信任的伺服器,向用戶端回呼。 這帶來了許多潛在的陷阱。
首先,用戶端的回呼必須具有足夠低的模擬層級。 如果伺服器是高度特殊許可權的系統服務,則呼叫具有模擬層級或更高層級的本機用戶端,可以提供用戶端足以接管系統的許可權。 呼叫具有高於必要模擬層級的遠端用戶端,也可能導致不想要的結果。
其次,如果攻擊者誘使服務執行回呼,它可以啟動所謂的 黑洞—阻斷服務攻擊。 這類攻擊不是 RPC 特有的;在這些攻擊中,計算機會誘使您將流量傳送至該攻擊,但不會回應您的要求。 你沉入越來越多的資源來呼叫黑洞,但他們永遠不會回來。 這類攻擊的一個一般範例是稱為 TCP/IP SYN 泛濫攻擊的 TCP 層級攻擊。
在 RPC 層級上,攻擊者呼叫介面時會發生簡單的黑洞攻擊,並要求伺服器回呼介面。 介面符合,但攻擊者永遠不會傳回呼叫:伺服器上的一個線程已系結。 攻擊者會執行此作業 100 次,將伺服器上的 100 個線程綁在一起。 伺服器最終用盡記憶體。 偵錯伺服器可能會顯示黑洞呼叫者的身分識別,但伺服器通常會重新啟動,而不會懷疑犯規,或可能沒有足夠的專業知識可判斷攻擊者。
第三個陷阱是在用戶端上。 用戶端通常會呼叫伺服器,告知伺服器如何回呼它(通常是字串系結),然後等候伺服器呼叫到達,盲目接受該端點上宣告來自伺服器的任何呼叫。 從伺服器到用戶端的回呼通訊協議應該包含一些驗證機制,以確保回呼到用戶端時,它實際上源自於伺服器。