https://newera17031.activehosted.com/index.php?action=social&chash=ba1b3eba322eab5d895aa3023fe78b9c.2767&nosocial=1
https://newera17031.activehosted.com/index.php?action=social&chash=ba1b3eba322eab5d895aa3023fe78b9c.2767&nosocial=1

觀點

非請勿入—RPC 帶來的網路危機

2006 / 02 / 28
ERIC COLE
非請勿入—RPC 帶來的網路危機

遠端程序呼叫(Remote Procedure Calls, RPC)可說是主從式運算核心技術,不管是Windows還是Unix,都能夠讓電腦去呼叫另一台電腦上的服務與元件。但它充滿了無數的漏洞,並可能造成嚴重的損害及入侵事件。 RPC最尷尬地方就在於它無所不在:你根本無法關掉它。不管是在Windows底下列印文件,還是透過NFS共享Unix上磁碟機,你都得用到RPC。當然,Microsoft SQL以及Exchange等大量使用RPC服務的伺服器就更不用說了。 但你還是有保全的方案。RPC在本質上並非不安全:開發人員可以利用RPC寫出安全的程式碼,或利用其他的安全手段。只要多一點用心與巧思,你的網路一樣可以避開已知的RPC缺陷。
RPC非用不可嗎?
雖然每個人都害怕「零時差攻擊(zero-day exploit)」,但多數攻擊者還是會盡可能以最少的工作來攻擊最多的系統。由於大多數系統都會執行RPC服務,而且RPC在實作上有太多的已知漏洞,因此很容易成為顯著的目標。RPC處理了UDP上的通訊,簡化了網路程式設計的複雜性。程式人員可以利用相同的參數撰寫主從式程式,並將網路連線交給通訊協定,讓通訊協定可以在多種作業系統以及網路(Ethernet、Token Ring、AppleTalk等)上運行。 大多數RPC漏洞都在於再平常不過的草率程式碼。一般而言,錯誤檢查做的不夠確實,便會讓應用程式遭受到暫存器滿溢(buffer-overflow)的攻擊。即使RPC的基底程式已存在好一段時間了,但總還是有新的漏洞被發現。 相信你還記得吧。在2003年時,微軟在Windows 2000/XP/2003上的RPC被發現了一個漏洞。DCOM的RPC介面無法進行錯誤檢查,讓Windows面臨暫存器滿溢漏洞,進而造成後來LoveSan以及Blaster等蠕蟲。駭客只要覆寫掉堆積(heap),便可在受感染系統中植入後門程式。 RPC程式碼缺陷並非Windows的專利。Linux在其rpc.statd以及glibc程式庫中也存在類似的漏洞,因而造成2000年的Ramen蠕蟲以及2001年的Lion與Adore等蠕蟲。 有解決之道嗎?你可以為系統部署一層安全性來對抗已知的漏洞與攻擊,或是採用簡單RPC的替代方案。

防禦之道
雖然缺陷程式可謂是萬惡之源,但要去除它幾乎是不可能的任務(請參閱「從程式碼保護做起」)。廠商的目標是成為市場的領先上市者,而不是比誰的程式寫的最安全。另外,對於企業自製的軟體而言,營運需求總是比安全性來得重要。考慮這些現實面,我們歸納出RPC安全保護的幾項最佳作法。 修正,修正,修正。若不想成為顯著的攻擊目標,請記得隨時更新你的系統。雖然前面提到的Windows與Linux RPC缺陷都可以很快地拿到修正程式,但漏洞還是不斷地被發現,沒更新修正程式的系統必然成為攻擊的對象。 部署應用程式防火牆。由於RPC沒有使用固定的通訊埠,因此傳統Layer 3與Layer 4的防火牆無法有效對抗RPC的攻擊。RPC使用通訊埠對應的方法(通常Windows是使用port 135,而Unix則是使用port 111)告知用戶程式RPC所使用的通訊埠。封掉135與111埠會阻擋所有的RPC通訊,而封掉所有的UDP通訊則會關閉DNS以及其他UDP相關的功能。然而,Layer 7的過濾可以根據應用程式來偵測攻擊,例如RPC攻擊。 偵測與預防。你或許會希望阻擋防火牆的所有通訊,但這通常不太可能做到。在這情況下,你可以利用自製的IDS特徵來抓出這些異常的封包;手段則是對封包進行分析,並找出他們的獨特性。在語法上務必求精準。許多情況下,安全管理人員建立的特徵不但會認出可疑的程式,對於一些正常的封包,例如自動更新程式掃瞄或是漏洞管理工具等,也會觸發假警報。多數IDS都具有已知RPC攻擊的特徵資料,但若要避免誤判的狀況,則可能需要進一步的調校。另外,新的RPC攻擊不斷出現,你的特徵資料庫也必須定期更新。一個程式或許可以執行數個月甚至數年而不發生任何意外,但這並不表示它沒有任何缺陷。新的漏洞隨時都會出現。 RPC漏洞並沒有標準的解決方案,策略得視組織的需求與資源而定。但至少要採用安全保護層,包括勤於安裝更新程式、Layer 7防火牆以及IDS/IPS功能等。如果Internet上的應用程式剛好是貴公司的命脈,請多花些時間與成本好好檢查程式碼,並考量是否採用安全的替代方案。

RPC替代方案
一些替代方案可以直接將通訊協定包含在另一個通訊協定通道中,但這具有一定的複雜性,並需要可觀的時間與資源成本。可用的替代方案有: RPC over HTTPS 提供了額外的安全性,達成其他方法所無法做到的強制驗證,並能夠將RPC「隱藏」在安全通道機制中。 Object Request Broker(ORB)是一種中介軟體(middleware)技術,它可以管理不同的分散式物件間的通訊及資料交換。ORB的實作細節對分散式系統開發人員來說通常並不重要,他們只需關心物件的介面。由於開發人員與攻擊者並不了解ORB的通訊細節,因此會比RPC來得安全。ORB複雜費時,卻能為擁有資源的組織帶來更多的安全。 Message-Oriented Middleware(MOM)能夠增進應用程式互通性、可攜性和彈性的主從式架構,它可讓應用程式能夠在異質平台上分散運作。它將應用程式開發人員與各種OS及網路介面隔離,簡化了程式的開發過程。MOM也提供了各種平台及網路上的應用程式介面(API)。

ERIC COLE是The Sytex Group的首席科學家,具有COLE、CISSP、GIAC等認證。他是Hackers Beware一書的作者,也是Network Security Bible的共同作者之一。