https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/
https://www.informationsecurity.com.tw/Seminar/2024_PaloAlto/

觀點

透過攻擊進行防禦

2009 / 07 / 02
廖邦彥
透過攻擊進行防禦
用「攻擊進行防禦」,這項說法可行性也許有爭議,但就資安角度來看,筆者投下贊成票,以下看法供讀者參考。

  在考駕駛執照的時候,常常會看到的是非題,例如 「對方蓄意超車或者車速過慢,是否應該用遠光燈報復對方駕駛?」,或者在資訊安全相關的考題中,「為了防止駭客繼續攻擊伺服器,是否應該設法找出對方並啟動阻斷式攻擊來癱瘓對方的設備?」, 除了一些極少數的爭論之外,我想大部分的人都會同意這些問題的答案都是否定的。這些作法非但無法解決真正的問題,引起不必要的爭端就更不用說了。諸位讀者,10個裡面我相信有10個都會這樣想, 騙不到你們。

對誰發動攻擊?

  所以,難道所謂的「用攻擊來防禦」是錯誤的囉?關於這點我想下結論之前要分成幾個層面來看比較公平。以實體的戰爭來講,有時候是說得過去的,正所謂「以戰止戰」的說法其來有自,而如果是我們剛才舉的例子,那麼最好是不要墨守成規。麻煩從椅子上起來,深呼吸一口氣,再來決定下一步怎麼作。好了,講了這麼多,到底應不應該用攻擊來進行防禦?

  當然看法因人而異,但是以我的意見,在資訊安全的領域,用攻擊來進行防禦,是可行的。重點的是要怎麼完成這個句子,以一個資訊人員的角度,你要「攻擊」的目標, 是你自己的資訊架構。這裡當然不是說要把自己的系統攻擊到網路塞爆、CPU負載轉到100%、硬碟的I/O搞到滿載,才鞠躬盡瘁死而後已,這些工作,留給壓力測試人員來做就好,並不需要你來代勞;更不需要帶著保溫杯或者杯麵到資料中心,試試看有沒有人阻止你一杯水往伺服器上潑,以測驗實體安全政策是不是徹底執行。其實,最重要是定義攻擊的目標。並非要發現2、3個沒上的patch,或是測出幾個XSS 、SQL Injection 就趁著資訊部門月會的時候拿出來表現一番。敝人意見是,攻擊的目的是為了主動性的察覺新威脅,進而採取必要的行動。

  我想前面敘述的,很多人會開始疑問,那這跟滲透測試、弱點掃描/弱點管理,或者入侵偵測系統又有什麼不同, 充其量不過是掛羊頭賣狗肉罷了!用攻擊來防禦最大的精神在於「隨時模擬真正的攻擊者,針對你的資訊系統,來進行最終防禦的目標」。滲透測試,多數公司外包來作的時候,1年甚至2年才進行一次,那中間的空窗期怎麼辦?弱點掃描在某部分相當接近這個概念,然而如果你不是個隨便跑跑掃描軟體,再原封不動將自動產生的PDF報告,交給老闆就收書包回家的安全工程師的話,要花多少的時間來分析產生的結果,將誤判去蕪存菁?應該更嚴謹的來挑戰自己,要是剛剛進行完掃描,結果某個系統管理員上了個IIS的patch, 開啟了不該開的匿名FTP,誰來管?簡而言之,這項工作簡而言之就是要去模擬在開放網路以及自家裡面成千上萬的潛在攻擊者,比他們早一步,或至少跟他們差不多的時間發現資訊系統問題,進而先一步防禦。

多久做1次?如何做?

  別開玩笑了!「模擬開放網路及自家內成千上萬的潛在攻擊者!?」「比他們早一步,或至少跟他們差不多的時間發現資訊系統問題, 進而先一步的防禦?」當然,如果我的老闆要求這樣做,我也會覺得他在開玩笑。難道又是一場空談?亦或不切實際?那麼各位一定又知道我的答案, 絕對是否定的。現在先往回退一點, 想一下攻擊者典型的幾個攻擊階段,第一步驟是資料的蒐集,在你的人力、物力、財力有限時,最重要就是要阻斷攻擊,比對方早一步發現, 就可以早一步補救。

  筆者在這裡分享一個親身的經驗,我習慣性會去檢測公司內外部的資訊系統架構。一天,公司所有的AD網域管理員都因為輸入密碼過多次而被鎖住了,日誌上面的來源又全部是本機端,檢測外部結果出來,赫然發現,某分公司的NAT(Network Address Translation,讓多台電腦共用一個IP連上Internet的技術)竟然把網域伺服器給暴露出去,不是網管人員的錯誤,而是這個舊型防火牆當天發神經,本來是要阻斷某些服務的,卻把一些伺服器給映射( m a p p i n g )到外面去。當下立刻將漏洞修補起來,才能趕快的進行後續危機處理以及檢測是否有受到損害。
  試想,如果沒有進行自己的模擬攻擊,要花多久的時間,才能找到真正的來源?日誌給的資料不全,攻擊的時間又是相當隨機,會不會造成更嚴重的傷害, 是誰都不曉得的。當下真是捏了一把冷汗,也慶幸這樣的規劃,起碼在這個案件上來說,是成功的。

  但是,上述的案子並不完美,要是攻擊時間是晚上呢?要是負責檢測的人剛好休假或者偷懶那不是就前功盡棄?所以要把這一塊的缺點補起來,必須要把能自動化檢測的部分自動化,提供自動通知的功能。當然,終究有些部分還是需要手動來進行,比如詳細的分析掃描結果,判斷是否為誤判,以及發現問題之後的補救動作。自動化的底限是,在發生任何危機時,自動化的功能起碼能通知相關人員採取進一步相關措施。否則自動化的掃描發現了問題,但到頭來誰也沒通知,報告就留在一個永遠都沒有人看的地方,這樣的層級是不及格也是沒有用的。不過,感謝人工智慧還沒有那麼進步,不然老闆就可以請顧問公司進來把所有東西設定一次,全部自動化,包括問題判斷以及解決修復也將之自動化, 各位老兄就可以回家吃老本了。

如果觸及商業流程?

  從另一個角度來看,在進行相關的設計規劃以及執行方面,跟其他所有資訊安全相關的案子,甚至跟所有IT相關的案子都很類似,第1步驟要把核心的企業活動界定出來,舉例來說,公司是進行電子商務,那麼從這裡為中心,哪些應用程序、系統、資訊架構、資訊流向等,是與主要商業功能息息相關,針對這些目標,假設你身為一個攻擊者,通常會如何規劃一步步的攻擊,這就是規劃模擬攻擊計畫的藍圖。當有了藍圖後,才能全盤的去檢視哪些部分是你最在乎的資產,並正確合理地分配你的資源,才能有效的以有限人力及時間去保護重要資源。

對你的組織盡責任

  計畫再完美,如果沒有人來執行,那計畫就完全沒用。另外一個情況是,計畫之中只安排了一個人去執行,相關責任領域的人都不需要參與,這樣的規劃也不是太合適。其實,不管任何計劃都一樣,適當安排人員的工作與責任,是完成計畫的最重要關鍵。適合由網路工程師進行的部分就交給他去做,與AD管理相關的就交給AD管理員去進行,整合的部分,讓資訊安全工程師去整合,並且提供暢通的平台讓資訊可以快速清楚的傳遞,才能讓整個全面的規劃發揮有效的功能,提供預期的成果。