搜尋此網誌

2012年9月18日 星期二

[從電影看資安] 站住、口令、誰 - 龍門飛甲

相信當過兵的朋友們都還記得,部隊中晚上是禁止隨意走動的。但是話說人有三急,有時候晚上起來上個廁所,也是膀胱無力人之常情。在正常的情況下,只要一離開寢室,就會有人 (這個人叫安全士官) 大聲問道:「站住、口令、誰。」唯有正確答出當天的通關密語 (口令),才有可能全身而退,不然被當做匪諜一槍擊斃也只能自認倒楣了。軍隊透過這樣的安全機制來避免有心份子混入部隊當中,只是這樣的安全機制夠安全嗎?在由李連杰所主演電影「龍門飛甲」中,有一段類似的情節,我們先來看看。

話說由李連杰所演出的趙懷安,因為常與政府做對所以受到西廠的追捕。在一次的誤會當中,西廠官兵前往龍門客棧準備捕捉趙懷安。但是西廠所追捕的趙懷安,原來只是一個愛慕他的女生所假冒。而龍門客棧這個地方,也因為傳說埋藏了稀世珍寶,所以除了官兵之外,還有不少亡命之徒投宿在此。而這些亡命之徒當中,有一個人竟然長得跟西廠的頭目 (督主) 相當神似,故事也就因此有了變化...

男主角趙懷安,跟後面要講的劇情無關,純粹是看在李連杰的面子上才放這張照片。
vlcsnap-2012-09-18-05h04m49s176臨時出現的亡命二人組,書生樣的「風裡刀」外貌神似督主。
vlcsnap-2012-09-18-02h59m25s133
西廠的官兵一看,嚇到不知所措。
vlcsnap-2012-09-18-02h58m37s174
亡命之徒果然見過世面,馬上就發現西廠官兵的異常反應。
vlcsnap-2012-09-18-02h50m54s138
「風裡刀」最厲害的就是那張嘴,所以馬上前往官兵的房間套話。
vlcsnap-2012-09-18-02h51m40s59
雙方僵持不下。
vlcsnap-2012-09-18-02h52m12s171
西廠也不是那麼笨 (至少目前還不笨),早偷偷派了人回去確認是不是真貨。
vlcsnap-2012-09-18-03h00m14s113
嘍囉不忘多拍幾下督主的馬屁。
vlcsnap-2012-09-18-03h00m31s44
督主就是督主,馬上想到一個餿主意妙計,那就是他要冒充「風裡刀」混進去搞破壞。
vlcsnap-2012-09-18-03h00m56s38
嘍囉想到一個辨別真假督主的方式,那就是用密語。
vlcsnap-2012-09-18-03h01m08s162
密語是「龍門飛甲」。
vlcsnap-2012-09-18-03h01m35s177
對「便知真假」。
vlcsnap-2012-09-18-03h01m47s30
嘍囉回到龍門客棧,先用密語確認督主的身分。
vlcsnap-2012-09-18-03h02m22s124
果然是假冒的,但是真督主有令不可打草驚蛇。
vlcsnap-2012-09-18-03h03m08s72
這是督主假扮的「風裡刀」,果然很像 (根本就是同一個人演的)。
vlcsnap-2012-09-18-02h55m32s124
督主又出現了,這次是真是假?
vlcsnap-2012-09-18-03h04m16s217
對方搶先一步說出密語的前半部。
vlcsnap-2012-09-18-03h04m35s172 
搶答失敗。
vlcsnap-2012-09-18-06h08m02s129
只好硬著頭皮講出另一半的密語。
vlcsnap-2012-09-18-06h12m06s15
被擺道了。
vlcsnap-2012-09-18-03h07m19s24
剛剛是假的督主。
vlcsnap-2012-09-18-03h07m28s100
這次換督主的手下大將來認證說密語。
vlcsnap-2012-09-18-03h08m30s217
實在被騙太多次了,已經惱羞成怒。
vlcsnap-2012-09-18-03h08m53s189 
不管三七二十一,放就對啦。
vlcsnap-2012-09-18-03h08m59s10

囉嘍在督主提出喬裝臥底的計策時,很聰明的想到了利用密語來辨識真假督主。不過百密終有一疏,他們忘了約定誰要講上半部,誰又要講下半部。所以聰明的「風裡刀」在猜測到「龍門飛甲」可能是密語之後採用先聲奪人的策略,不待西廠官兵開口就搶先說出「龍門飛甲」,迫使西廠官兵只能說出密語的下半部。

回到部隊的例子,又有什麼樣問題呢?當安全士官大聲問道:「站住、口令、誰。」時,任何知道口令的人,都可以假冒成其他人。原因很簡單,因為整個部隊都是使用同一個口令,因此就失去了可稽核性 (Accoutability)。除了可以利用其他人的身分上廁所,這種機制還有一個問題,那就是如何確認安全士官真的是安全士官?因為「站住、口令、誰。」是一個固定的詢問方式,所以知道這句話並不能確保安全士官的身分,這樣情況我們稱之為單向的身分驗證。相對於單向的身分驗證,當然還有所謂的雙向驗證。

以我們經常使用的電子商務網站來看,通常使用各式各樣的網站憑證來做為 SSL 加密之用,這就是一種單向身分驗證的應用 (註一)。網站憑證可以確保 (至少在理論上是如此) 使用者連結的網站是他所預期的,而不是連到一個假冒的釣魚網站。對於一般的電子商務網站,單向驗證或許已經足夠,但是對其他更重要的服務而言,雙向驗證就是不可或缺的了。這些服務包含網路銀行、政府機關各項服務 (如報稅) 等。雙向驗證除了網站憑證之外,使用者也必須擁有個人的憑證 (如自然人憑證、工商憑證等) 才可以進行訊息的溝通。透過雙向驗證,不但使用者可以確認網站的真實性,網站也可以確認使用者的身分。在保護資料安全性的同時,也提供了高度可靠的可稽核性與不可否認性。

註一:一般的電子商務網路會透過帳號/密碼進行使用者的身分驗證,也可以算是一種雙向驗證。然而這是兩種機制的混合使用,與我後面提到使用憑證做到雙向驗證是不一樣的作法,在安全強度上也有所不同。

2012年9月11日 星期二

[工具介紹] 利用 ossec + ossim 管理端點的安全

之前我介紹過 Splunk ,用來作為日誌集中管理與分析的工具相當好用 (除了免費版本有討厭的 500MB 限制)。但是 Splunk 是一個一般型的分析工具,如果我們只想處理有關資安相關的資訊,不但需要自己設定各項所需的資料來源,更必須自己利用查詢指令找出感興趣的資訊,甚至轉換成所需的報表。事實上,市面上針對資安相關資訊的彙整與處理已經有一類專門的產品,統稱為 SIEM。今天我要跟各位分享兩個工具的整合利用,其中的 ossim,正是 opensource 形式的 SIEM。
在我使用 ossim 之前,原本只是使用 ossec 來做為主機 (端點) 的 IDS 機制 (HIDS)。ossec 同樣是 opensource 形式的軟體,支援多種作業系統,主要提供主機的完整性檢查、日誌檔監測與惡意程式 (Rootkit) 掃描的功能。如果發現有疑似攻擊的行為發生,ossec 還可以做出回應,例如封鎖攻擊來源的 IP 位址。ossec 採用主從式 (Client-Server) 的架構,主要透過命令列方式加以設定。而事件的判斷結果統一集中在 ossec 伺服器 (Server) 上,同樣必須透過指令的方式加以查看。
作為一個專業的管理人員,當然不能接受這麼不方便的事情。好險,有 ossim 的存在。嚴格來說,  ossim 並不是單是  ossec 的圖型化操作介面,更不是日誌管理系統。ossim 整合了許多 opensource 的資安/管理工具,並以 ISO 檔 (或專屬設備) 的形式發佈,讓管理者可以很快建立起一個完整的 SIEM 系統。ossim 整合的工具包含了
  • 流量管理: ntop, netflow
  • 入侵偵測: snort, ossec
  • 弱點掃描: openvas, nessus
  • 可用性: nagios3
  • 變更管理: arpwatch, P0f, Pads
  • 無線網路管理: kismet
除了工具的整合,  ossim 還可以透過 syslog 的機制,分析來自其他設備或軟體的資訊。而付費版本的 ossim,更提供了日誌加密封存的功能,可作為日後訴訟用的佐證。
今天,我要跟各位分享如何利用 ossec + ossim 做出一個完整的主機入侵偵測系統 (HIDS)。前面提到 ossec 採用主從式的架構,所以 ossim 就是 ossec 的伺服器 (Server),而其他我們想要管理的主機就是 ossec 的客戶端 (Client)。我以 CentOS 作為客戶端的範例,至於其他作業系統的客戶端,設定的過程也沒有太大的差異。
  1. 下載 ISO 檔
    下載網址是 http://communities.alienvault.com/community/#downloads 。目前的版本是 4.0,僅提供 64 位元的版本。
  2. 安裝 OSSIM
    OSSIM 以 Debian 為基礎,提供完整的圖型化安裝介面,在此就不一一截圖了。
  3. 連結 OSSIM 的網頁
    連結網址是 https://ossim.ip/ossim ,其中 ossim.ip 請替換成安裝 OSSIM 時所指定的 IP 位址。
  4. 新增管理的網路區段
    點選 "Assets" –> "Assets" –> "Networks" –> "New"。 
    0002
  5. 輸入管理網路區段的資訊
    有兩個主要欄位需要填寫,分別是 Name 與 CIDRs,填寫完畢後按下 "Update" 即完成新增的動作。如果你有多個管理的網路區段,請記得重複此一新增動作。
    請注意到畫面上有一個 "Asset value" 的選項,在 ossim 中,每一個資產 (Asset) 都有其價值,這個價值是用於事件風險的計算公式之中。
    0003-2
  6. 掃描主機
    雖然我們也可以用手動的方式將主機資訊一一加入,但是第一次設定時我還是建議用掃描的方式新增主機,以簡化輸入的過程。
    點選 "Assets" –> "Assets Discovery"。利用右邊的樹狀圖選取想要掃描的網路區段,如有需要可同時選取多個網路區段。
    0003
  7. 開始掃描
    選取完畢並設定好相關參數後,按下 "Start Scan" 開始進行掃描。
    0004
  8. 等待掃描結果
    掃描完畢後, ossim 會列出所有搜尋到的主機及其相關資訊。在想要新增的主機後進行勾選的動作,勾選完畢後按下 "Update database values"。
    0005
  9. 儲存掃描結果
    儲存前可以指定是否要為這些主機建立一個新的群組,或者也可以指定主機的價值 (Asset value)。設定完畢後按下 "Update" 即完成新增的動作。
    0006
  10. 登入 ossim 的系統主控端,進行 ossec 客戶端的管理
    其實管理客戶端的動作大多也可以在 ossim 的管理介面上完成,但是為了展現我們打指令的功力,還是介紹原本 ossec 所使用的方式。
    啟動用戶端管理程式,指令是
    /var/ossec/bin/manage_agents      
    使用選項 A 來新增主機。0007
  11. 輸入客戶端電腦的名稱 (Name) 與 IP 位址 (IP Address)
    名稱主要作為識別之用,並不會影響新增的結果。而 IP 位址必須填入伺服器所 "看到" 的客戶端 IP 位址。除非客戶端會透過轉址 (NAT) 來對伺服器進行連結,否則一般直接填上客戶端的 IP 位址即可。
    設定完畢後進行確認 (y) 即完成新增的動作。 0008
  12. 取得客戶端的 "鑰匙"
    ossec 作為一個安全軟體,當然不可能隨意接收其他電腦傳送過來的訊息。所以每個想要傳送訊息的客戶端,都必須擁有一個獨一無二的鑰匙。在前一個動作完成時,ossec 就幫我們建立好該客戶端的鑰匙了。我們可以透過指令 E 取得客戶端的鑰匙,而客戶代號 009 則為前一個動作進行時系統所自動產生的。第三個紅色框框內的文字就是這個客戶端的鑰匙,請完整複製下來並備用。
    0009
  13. 安裝 ossec (客戶端)
    CentOS 可以從 AtomiCorp 的 repository 中取得 ossec 套件。指令是
    wget -q -O - https://www.atomicorp.com/installers/atomic |sh
    yum install ossec-hids-client ossec-hids
    chkconfig ossec-hids on
  14. 修改設定檔,指定伺服器的 IP 位址 (客戶端)
    指令是
    vi /var/ossec/etc/ossec.conf
    修改檔案開頭的 <server-ip> 參數。
  15. 匯入鑰匙 (客戶端)
    輸入指令
    /var/ossec/bin/maange_client
    使用選項 I 匯入鑰匙,並將剛剛複製的鑰匙文字完整貼上。 確認資料無誤後,輸入 y 完成匯入鑰匙的動作。
    0010
  16. 關閉匯入工具 (客戶端)
    使用選項 Q 。
    0011
  17. 啟動服務 (客戶端)
    指令是
    service ossec-hids start
  18. 確認客戶端已經正常連結
    我們回到 ossim 的管理介面,點選 "Analysis" –> "Detection" –> "HIDS"。如果客戶端狀態出現 "Active",表示客戶端已經正常連結至 ossec 的伺服器。如果無法正常連結,可以檢查 ossec 的紀錄檔,位置是 /var/ossec/logs/ossec.log。
    0012
  19. 其他操作
    一開始我提到原本 ossec 僅提供指令的方式來管理客戶端,而 ossim 則將此功能整合至管理介面當中。例如點選畫面右上方的 "Agents" 連結,就可以看到目前所有的客戶端列表,而且還可以對其進行操作 (如執行完整性檢查) 或是查看之前所產生的相關訊息。透過 ossim ,不但可以簡化 ossec 的管理作業,所有 ossec 所產生的訊息也將被 ossim 統一處理,更加提供我們對於資訊安全的防護能力。
    0013
透過幾個簡單的動作,我們就建立起一個可運作的 HIDS 機制。但是不管採用 opensource 還是付費的軟體,這些動作都只是第一步而已。真正的挑戰在於如何調整出一個濃纖合度的設定,在減少假警報 (False positive) 的同時,也不會漏失真正需要注意的資安事件 (False negative)。如此一來,才能真正發揮 SIEM 的功效,而不是成了一個中看不中用的花瓶。

About