李政達 ,周成勝
(1.華北計算機系統工程研究所,北京100083;2.中國信息通信研究院安全研究所,北京100191)
自 2010 年震網(Stuxnet)病毒被披露以后,工控安全問題開始引起世界范圍的關注。全國人民代表大會常務委員會于 2016 年 11 月 7 日發布《中華人民共和國網絡安全法》,網絡安全上升到國家戰略層面。目前的工業控制系統多以被動防御為主,無法及時應對新型未知的威脅。2019 年正式實施的等保2.0 更加注重全方位主動防御、動態防御、整體防控和精準防護,并明確了工控行業的網絡安全防護要求[1]。
本文介紹了一種針對工業控制系統設計的蜜網。蜜網是在蜜罐技術上發展起來的一個新的概念,又稱為誘捕網絡,是一種變被動為主動的網絡安全技術[2]。蜜網通過在一個更具有欺騙性的網絡架構中部署多個蜜罐以及相應的網絡設備,通過模擬真實系統網絡架構,達到主動防御、數據捕獲的目的。
本系統通過部署蜜網網關、PLC(Programable Logic Controller)蜜罐、工程師站蜜罐等組成蜜網,搭建相應的網絡架構,誘導攻擊者對蜜網進行攻擊,從而對入侵行為進行數據捕獲并進行分析,以做到主動性防御,面對未知威脅及時發現,及早研究應對措施。對收集到的數據進行分析,能夠讓安全運維人員了解所面對的網絡安全威脅,通過蜜網系統與實際生產系統的對比發現系統弱點,以使用適當的技術手段及時彌補缺陷。
從歷史上看,工業自動化控制系統在很大程度上與傳統的數字網絡是隔離的。在需要連通性的地方,采用了分區架構和設備隔離來保護核心控制系統組件。隨著我國信息化和工業化融合進程不斷深入,現代信息技術在工控領域的應用越來越廣泛,數字化控制、軟件技術、網絡技術都應用于大規模工業生產環境[3]。同時為了生產效率進一步提高,工控系統內部網絡開始接入企業廣域網甚至是互聯網,這些新技術與傳統工控網絡的融合在提高了生產效率的同時,也導致了當前工控系統的網絡安全面臨嚴峻威脅,工業控制系統的“孤島”模式被打破。近些年隨著漏洞挖掘技術不斷成熟,在工業控制系統中的漏洞被發現的數量明顯增多,針對工業系統生產控制網攻擊事件層出不窮[4]。
雖然大多數工控行業生產數據網為行業內網或內部局域網,但由于存在運維人員非法外聯、安全分區不明確、網絡邊界控制不嚴格、設備管理不到位等因素,從而都會導致內部網絡受到威脅。大部分企業對外部網絡滲透的安全防御停留在使用防火墻、入侵檢測系統(IDS)、入侵防御系統(IPS)等傳統方式應對攻擊的層面,這些方式需要設備定義已知的攻擊模式,并主要通過模式匹配去阻斷非法訪問或惡意攻擊,依賴于第三方資源庫,這種防御方式的致命缺點在于不能主動地學習攻擊方式。
當前的防御體系對新型的網絡威脅捉襟見肘,存在網絡攻防中信息不對稱、博弈不對等。首先,網絡中新型的威脅不易被發現,第三方資源庫的更新需要一定的周期。當入侵者利用新型漏洞或使用新的隱匿手段入侵系統時,現有的防御體系是無法及時發現的,往往經過一段時間內網傳播,有較多設備出現異常時才被運維人員發現。其次,當運維人員發現系統被入侵時,入侵者可能已刪除相應的日志記錄隱匿蹤跡,即使發現被入侵也只能進行查殺、更新補丁進行加固,恢復正常業務,而很難進行攻擊溯源,分析入侵者攻擊方法、如何利用漏洞以及如何進行傳播。
目前國內外針對工業網絡的蜜網技術的研究仍處于起步階段。由 Digital Bond 維護的 SCADA Honeynet 項目核心是 Honeyd[5],它將創建的虛擬主機的網絡流量從適當的端口路由到這些應用程序和腳本。然而,模擬服務提供的交互很少,無法吸引攻擊者足夠長的時間來分析攻擊行為。江蘇科技大學的丁晨鵬設計了一種船舶網絡工業蜜罐[6],使用虛擬化技術,以Docker 容器為載體,開發了支持 S7協議、SNMP 協議和 HTTP 協議的蜜罐,其定制化程度高,無法廣泛應用。
本文通過構建工控蜜網系統,可做到提前與攻擊者交互的效果,保障系統安全運行的同時也能更進一步對攻擊行為進行捕捉并分析,了解攻擊者入侵系統使用的技術與方法,并通過蜜罐資源盡量拖延入侵者,轉移攻擊目標以便給安全生產人員足夠的反應時間來防御攻擊,及時彌補漏洞,盡最大努力保護真實網絡并降低損失[7]。
蜜網系統需要實現的核心功能為:數據捕獲、數據分析、數據控制。總體而言,工控系統蜜網的整體構架在結合現有的互聯網蜜網技術的情況下,同樣要兼顧典型工業控制系統網絡構架,只有做到兩者相互融合,才能發揮出蜜網系統構架的優勢。本文經過對工控蜜網系統的需求分析設計了如圖1所示的功能模塊圖。

圖1 蜜網系統功能模塊圖
數據捕獲模塊:數據捕獲的目的是記錄入侵事件和惡意行為,以便日后進行處理與分析。它是一個強制性的功能,任何類型的蜜罐都必須有這個功能。該模塊確定了對于要捕獲的數據類型可以分為設備日志、網絡流量和設備活動信息,這些數據都反映了入侵者在系統內的活動。本文蜜網系統由于是模擬工控系統,那么其中必然需要模擬工控設備,同時需要對其數據流進行捕獲。數據捕獲的能力是評價一個蜜網的重要標準,蜜網能夠收集的數據越全面,蜜網系統就越成功。
數據控制模塊:由于工業控制系統對可用性的要求,在部署蜜網進行安全防護時不能對工控系統的可用性產生影響,所以蜜網系統必須控制從蜜網發出對其外部其他系統的訪問。為了保護蜜網以外的其他系統,必須對出站的連接行為進行管控,但同時也要考慮仿真性,盡量不能被攻擊者察覺。對內的流量控制功能用于控制入侵者從外部對蜜網內部的訪問,蜜網內不是所有蜜罐都是高交互的[8],這樣就需要使用重定向技術,當低交互蜜罐無法處理入侵者的請求時,將請求轉發到其他可以響應該請求的蜜罐中去,提高系統的仿真性。
數據分析模塊:數據分析的目的是對收集到的數據進行分析來獲取攻擊的信息,以揭示攻擊技術和對手的動機。因此,如果不能對數據進行分析,蜜罐系統的價值就會降低。經蜜網捕獲到的數據需要經過處理,消除噪聲,然后使用有效的數據進行分析展示,并持久化存儲。
系統管理模塊:系統管理需要提供設備管理功能和設備監控功能。設備管理功能要提供易于部署、配置的管理機制,并涵蓋蜜罐生命周期的所有方面,從蜜罐節點建立到安全遠程管理、安裝服務配置最后到下線、刪除。
工控蜜網系統是針對典型的工業控制系統,將目前的蜜罐技術、虛擬化技術與工業系統進行融合,在具備典型工控系統架構的同時,又兼顧蜜網技術結構的一種新型技術架構。要想最大限度地獲取新的漏洞信息以及攻擊方法等數據,吸引入侵者,則需要將蜜網系統部署在一個有足夠吸引力的工作網絡里。
為了保證企業內部網絡的安全,需要與蜜網系統劃分在不同的網段,同時蜜網系統中蜜罐和數據分析主機也在不同的網段以保證安全。通過分析工控系統典型網絡結構,最大程度保證蜜網系統的高仿真性,本文設計的蜜網系統中的蜜網網關是部署在工業控制網絡的企業資源層和生產管理層中間的設備,蜜網系統的蜜罐網絡向下模擬生產管理層、過程監控層和現場控制層的PLC 設備。
如圖2 所示,工控蜜網系統的整體架構分為蜜罐網絡與監控管理平臺兩個模塊,外部訪問經接入路由器進入內部網絡,路由器連接網關的eth0 接口,網關的 eth1 接口與數據分析網連接,eth2 接口與蜜網網絡連接。其中 eth0 與 eth2 這兩個接口使用橋接模式,且這兩個接口使用同一網段,當數據包通過網關時TTL 的值不會發生遞減,并且也不需要提供網關自己的 MAC 地址。因此,蜜網網關對外部的攻擊者是透明的,也就是在網絡層面無法識別其攻擊的網絡是蜜網系統[9]。

圖2 蜜網網絡拓撲圖
eht1 接口用來負責將蜜網中傳輸來的數據發送到蜜網管理平臺中,同時eth1 切斷與eth0 的數據轉發。本系統不允許入侵者從路由器經網關直接進入數據分析網,因為這會使蜜網系統變得毫無價值。數據分析網的數據也不需要傳輸至外部網絡,這樣就避免了一旦入侵者通過蜜罐網絡入侵數據分析網,將數據分析網作為跳板繞過蜜網的數據控制機制對外部網絡進行攻擊。
由于蜜網系統沒有強制訪問措施,無法強行要求他人訪問或入侵,也就是無論蜜網系統多逼真,只要網絡中還有真實企業網絡,它就存在被攻擊的可能性[10]。為了盡可能避免這種情況的發生,在接入路由器的配置中,采用白名單方式對允許訪問的IP地址和MAC 地址進行綁定,對于不在白名單中的IP地址發起的訪問全部重定向到蜜網系統。這樣提高了生產數據網的安全性,并且增加了入侵者掉入蜜網系統的可能性。
在傳統的蜜罐結構基礎上,本文系統中蜜罐根據企業所在行業進行設計,包含 PLC 蜜罐、工程師站蜜罐等。在整個平臺中以真實主機與虛擬化技術結合的方式,一方面讓工控蜜罐系統的逼真度盡可能地高,另一方面使用虛擬化技術,模擬一些不必要使用真實物理機的部分,進而節省成本。采用了靈活的構建方式,通過將實體機與虛擬機共同接入網絡,實現了高交互與低交互并存的動態混合虛擬蜜網。蜜網系統包括真實的PLC 設備、PLC 蜜罐、工程師站蜜罐和虛擬蜜罐等。虛擬 PLC 蜜罐和真實PLC 設備同時與工程師站進行通信,這樣就不僅僅是應對簡單的掃描攻擊,在入侵者看來,系統更加真實,取得的效果更好。
本文設計的工控蜜網系統是彈性可伸縮的,部署的企業可以根據實際情況,使用虛擬蜜罐替代真實物理機,在兼顧高仿真性的同時,達到節約成本的目的。
在設計蜜網系統時需要考慮蜜網的仿真性、功能性、安全性的結合。更真實地模仿真實的系統能夠提高蜜罐的誘騙能力,從而吸引入侵者的注意力。蜜網系統的功能性,體現在蜜網的數據捕獲能力,通過捕獲有價值的數據以達到部署蜜網的目的。在工控系統中部署其他設備的安全性至關重要,需要通過數據控制技術實現入侵者無法在蜜網中對外發起攻擊。
要想使蜜網具有高仿真性,則需要使用多種欺騙方法使蜜網系統更像一個真實的生產環境,從而引誘攻擊者對其進行網絡入侵。本系統主要使用以下方法。
4.1.1 網絡流量仿真
產生仿真流量能夠彌補虛擬蜜網中沒有實時流量的缺陷,使入侵者不能使用分析網絡流量的方法發現蜜網的仿真誘捕活動。在蜜罐主機中通過鏡像的方式重現生產數據網的網絡流量,這使得蜜網系統與真實的生產系統具有較高的相似性。為了進一步確保真實性,系統中部署了真實的西門子PLC設備,在蜜罐主機與PLC 設備中運行真實的工藝流程和數據采集過程,完全真實地重現生產數據網中某些生產活動。同時,本系統使用管道技術將蜜罐網絡模塊中捕獲的數據發送到監控管理平臺。
4.1.2 重定向技術
地址轉換技術能夠將蜜網網絡和真實網絡分離開來,這樣就可以使用真實的操作系統替換低可信度的誘騙方法,增加了隱蔽性的同時增強了仿真性。重定向技術使用重定向代理服務,由代理服務進行地址轉換,本文網關選擇使用Ubuntu18.10 作為主機系統,防火墻Netfilter 提供的目標網絡地址轉換功能實現靜態重定向。
本文還使用了一種動態重定向的選擇性機制,允許從蜜罐到互聯網的連接自動和動態重定向。其目的是讓攻擊者產生一種錯覺,即其可以從蜜罐連接到外部網絡,而實際上,這些連接只是被重定向到另一個蜜罐。
如圖3 所示,本文使用兩個 hook 函數,并將它們置于 Netfilter 組件 PREROUTING 鏈中的 conntrack函數和nat 函數之間。第一個 hook 函數負責提取數據包并將它們發送到用戶空間中的dialog_tracker,以便決定是否需要重定向它們。第二個 hook 函數負責為決定需要重新定向數據包添加標簽。

圖3 數據動態重定向實現方法
當一個數據包從外部進入網關設備的網卡的緩存區,首先進入 PREROUTING 鏈,當 conntrack 函數對數據包進行處理后,由redirection 模塊進行處理,將數據讀取到用戶空間,進入libnetfilter_queue 隊列,由重定向模塊處理。對于每個連接,第一個 hook 函數只提取第一個包并將其發送到 dialog_tracker。然后,dialog_tracker 將數據包轉發給 dialog_handler,由它決定這個數據包是否需要重定向或阻塞。做出決定時,dialog_tracker 通知內核模塊進行重定向,然后第二個hook 函數為需要重定向的數據包添加標簽,并將數據包重新發送給鏈表的下一個函數,數據包被重新注入到相應鏈表中。鏈表中下一個函數是nat 函數,它需要通過將數據包的目標地址更改為系統內的一個蜜罐的地址,來實現動態重定向。
由于Netfilter 的動態追蹤機制,一個連接的重定向只需要重定向此連接的第一個數據包,其他數據包與第一個數據包一樣自動處理。
數據捕獲是蜜網的核心功能模塊,其目標是獲取攻擊者從探測掃描到實施攻擊再到最后離開蜜網過程中,入侵者使用的攻擊方法、利用的漏洞及其目的。低交互度蜜罐大多使用靜態數據,其中沒有真實的流量,數據的捕獲經常是通過日志記錄,捕獲能力有限[11]。與低交互蜜罐相比,高交互程度的蜜網系統的數據捕捉功能優勢明顯。如圖4 所示,本系統引入分層捕獲的機制,做到攻擊流量進入蜜網經過的每臺設備都進行數據捕獲,使用網絡數據捕獲和操作系統數據捕獲兩種方法。其中,使用Iptables 和Snort 進行網絡數據捕獲,由操作系統日志和Sebek 模塊組成操作系統層面的數據捕獲機制。

圖4 數據捕獲處理流程
4.2.1 網絡數據捕獲
網關中的Iptables 是分層捕獲機制的第一層,在研究階段,Iptables 的訪問控制規則可以適當放寬,以此來吸引更多的入侵者對蜜網系統進行入侵。在實際部署階段,Iptables 的訪問策略應該與網絡接入層的企業防火墻訪問控制規則寬松程度持平或適當放寬,以起到保護真實系統的效果,并發現企業部署的防火墻的規則不合理之處,起到主動防御的效果。Snort 安裝在網關中,起到捕獲數據包并過濾的作用,當攻擊流量信息與已有規則匹配時,Snort會對其進行記錄并丟棄。
蜜罐操作系統內部在網絡層和應用層設置捕獲點實現數據捕獲。
網絡層:對于每個協議,相關端口上的輸入和輸出流量,防火墻Iptables 條目都會自動添加,以便使用Netfilter 隊列將原始流量重定向到駐留在應用程序級別的蜜罐軟件。這里接收到的每個數據包都由回調函數處理,如果其他方法仍然需要該數據包,回調函數會將其存儲在臨時緩沖區中,或者直接將其發送到數據庫組件中的關聯緩沖區。在前者的情況下,在所有方法使用完捕獲的包之后,最后一個方法將數據發送到數據庫組件中的緩沖區,這種方法能夠使用整個包的原始狀態進行捕獲和檢查。
應用層:如果有通過協議實現的服務,每個模擬服務可以集成通過上述Netfilter 隊列重定向接收的原始數據并在內部使用。這種數據捕獲機制的一個優點是,可以通過使用標準技術將諸如處理TCP連接之類的任務從蜜罐軟件層面下放到操作系統上,從而提高性能。
4.2.2 Sebek 基于內核的數據捕獲
雖然網絡數據的捕獲一般不會被入侵者察覺,但是隨著入侵技術的發展,入侵者越來越多地使用加密工具來保護傳輸通道,如果目標機器沒有安裝加密服務,那么入侵者可能會自己安裝如SSH、加密的客戶端程序等服務。如果沒有密鑰,基于網絡的數據捕獲工具就極難破譯出被加密的數據的具體內容,為了解決這種情況,本文使用在內核中收集用戶行為的工具Sebek。
如圖5 所示,Sebek 客戶端通過調用自己創建的系統調用函數new_read 替換正常的系統調用函數,記錄入侵者調用系統默認read 函數的所有數據,并把記錄的數據包載入緩存,之后對數據包進行封裝。封裝后的數據包包含了調用的內容信息、調用的進程描述、調用的時間和數據的大小。數據包封裝之后直接發送給驅動設備,繞過套接字代碼和包過濾器,再把數據發送到 Sebek 服務器[12]。由于嗅探器一般是基于使用原始套接字接口的libpcap函數庫的,因此嗅探器也就無法過濾到Sebek 產生的數據包。數據在使用時一般是在解密情況下操作的,在進行操作時都會產生系統調用,在內核空間收集數據,這樣就能截獲這個系統調用的訪問進程解密后還未處理的數據。

圖5 Sebek 捕獲消息機制
Sebek 客戶端模塊通過調用自己創建的new_read函數替換原來的函數本質就是改變系統調用表的函數指針。由于Sebek 客戶端模塊掛載于內核中的一個單向鏈表,入侵者在對鏈表進行掃描時,能夠發現Sebek 客戶端模塊,這樣攻擊者可能會發現該主機是一臺蜜罐主機[13]。為了防止這種情況發生,本文通過安裝cleaner 模塊替代這個Sebek 客戶端模塊,再通過 clearner 模塊調用 Sebek 模塊。這種方法有兩方面效果:首先,入侵者通過遍歷無法找到Sebek 客戶端模塊起到了隱藏模塊的效果;其次,入侵者無法從內核中刪除客戶端模塊,進而保護了蜜罐主機的安全性。
由于蜜網中的蜜罐是用來吸引攻擊者,其本身會有一些故意預留的漏洞。如果蜜網系統中某些宿主機本身被黑客攻陷,那么某個蜜罐網系統可能已經被識破,蜜網系統可能被黑客利用,作為攻擊其他系統的跳板。因此,既要防止蜜網內部的網絡風暴,又要防止蜜罐主機被當成跳板機影響企業自身辦公數據網乃至生產數據網。數據控制的挑戰在于如何設置出站活動的閾值,攻擊者在蜜網系統中的自由度越大,用戶能捕獲的數據就越全面。但是,攻擊者被允許的行為越多,可能造成的威脅就越大,這需要控制允許出站活動的閾值。
蜜網系統會對外部連接蜜罐的訪問控制做到適度寬松,但對從蜜網系統向外部網絡的連接要進行嚴格管控,當蜜網系統中的真實物理機發起向外的連接時,很可能是黑客利用蜜網系統對外嘗試發起的攻擊。然而,數據控制不能輕松地阻斷對外的全部連接,這樣無疑是在告訴入侵者他可能處在蜜網之內。同時,單純地阻斷也無法獲取入侵者對外連接的目的,而入侵者進入蜜網后的行為和目的是需要收集的。
本文蜜網系統數據控制的方法主要包括攻擊包抑制和對外連接數限制兩種手段,網關主機通過Snort 實現該功能。入侵檢測系統 Snort,經由 libipq接收來自 Iptables 的數據包,并根據 Snort 的規則集對數據包進行檢查,一旦發現惡意代碼就對該數據包采取預先定義的策略,然后再將數據包傳回給Iptables 進行阻斷[14]。對流出蜜網的數據包進行嚴格控制,以防黑客使用蜜網作為跳板向外部發起攻擊,而對外連接數限制是用來控制黑客對其他網絡系統發起的連接數量。開啟 Snort 網絡入侵檢測模式,使用Filters 過濾器,如果檢測到含有惡意代碼的數據包,則對其加以攔截并記錄到日志文件中,使其不能對第三方網絡構成危害。
本文論述了為工控系統設計的蜜網系統,對傳統蜜網無法對工業控制系統進行高仿真的問題提出了解決方法。系統使用半實物半仿真的方法,采用真實設備PLC 與蜜罐主機交互的方式,實現了蜜網系統的網絡流量高仿真,保證有效性的同時兼顧靈活性與部署成本。通過隱藏 Sebek 模塊、模擬服務等方法做到操作系統高仿真。通過有效的捕獲機制保證數據捕獲的全面性,使用網關控制達到蜜網系統安全可控。后續研究需要更進一步探索其他蜜網高仿真方法,并豐富數據分析、數據展示功能,也可將有價值的威脅信息上報到漏洞發布平臺。