看板 AntiVirus 關於我們 聯絡資訊
在巴哈看一篇關於各家防毒軟體的技術分析文章就轉過來 如果有轉載需求請記得附上以下原始網址 ※本文發佈於巴哈姆特電應板以及部落格 IT Works,轉貼請附上原文連結 https://forum.gamer.com.tw/C.php?bsn=60030&snA=463208&s_author=ts00937488 -- 近年來勒索肆虐猖狂,網路上反而出現不少不學無術、對防毒原理一知半解、毫無專業知 識,卻在論壇上妖言惑眾、散佈錯誤觀念和謠言、肆意販賣恐懼、誤導他人的可惡之徒。 可悲的是,這等神棍的妖言還有不少人信以為真,於是一傳十、十傳百,指鹿為馬居然莫 名成為了真理 為了破除謠言、以正視聽。本篇以實事求是,回歸技術面科普的心態,從最基礎的防毒原 理開始說起。 什麼是0day攻擊? 0day一般指還沒有修補的安全漏洞,但以防毒的觀點來看,0day泛指任何無法被防毒資料 庫識別的惡意軟體、掛馬網頁。很多人對防毒的認識還停留在十年前單純靠病毒庫比對惡 意軟體的階段;時代在進步,防毒廠商也不是吃素的,現今的防毒透過各種技術,例如: 啟發法、行為攔截(Behavior Blocker)、主動防禦、雲分析、沙盒(SandBox),當然 還有傳統的 HIPS,來預防尚未入庫的未知威脅 以下針對這些預防0day的技術做介紹 啟發式:現代防毒幾乎都有用到啟發式技術,然而多數人並不知道這是什麼意思。在牛津 詞典中對於“啟發式”的解釋是“使一個人能自主發現並學習某個東西”,然而這段描述 實在過於籠統。所以下面我用一張圖來舉例 https://i.imgur.com/NMhYDjy.jpg
假設您被要求從上圖找出一種從來沒聽過的犬類(加泰霍拉豹犬 Catahoula),以下是可 能的推理過程: 因為要找的是哺乳動物,首先會把魚類排除掉。排除魚類下方的杜賓犬則類似,因為不少 人都熟悉杜賓犬這個品種。排除熊的照片則有意思得多:試想如果一個人從未見過熊,怎 樣才能不把熊認成犬類?對電腦來說更是這樣,因為電腦的程式語言需要精確的描述,這 種情況下啟發識別就相當困難。可能有些人會被貓迷惑,因為加泰霍拉豹犬 Catahoula 包含了 cat 這個英文單字 最後剩下右邊的兩隻狗,右上角是許多人熟悉的米格魯,加上目標的犬種名”豹犬”讓人 聯想到豹紋,通過排除法得出了右下角的照片 在偵測病毒的過程中,面對未知的威脅傳統特徵碼將完全失效;而啟發式通過一系列的規 則試圖推理出可能的目標。其中又分成 "靜態啟發”以及 "動態啟發” 靜態啟發:與傳統將文件的 MD5 與病毒庫中的數據比對不同,啟發式試圖通過一系列手 段還原出可執行檔案的實際行為,並將其與記錄病毒行為的啟發特徵庫相比對。而靜態啟 發就是在可疑文件讀入到記憶體執行前,先行一步反編譯,根據得到的代碼分析出程式可 執行的命令種類和順序,再與啟發特徵庫中的行為比較,近似者報毒。因為只是讀取程式 指令來“預測”是否有惡意行為,所以過程中程式不需要執行。實際上這是模擬了工程師 分析病毒的過程,典型的就是 ESET 的啟發引擎 理想情況下,一個啟發特徵就可以殺一整類病毒,大大節省病毒庫的體機和防毒性能 動態啟發:防毒建立一個隔離的虛擬環境預先執行要掃描的程式幾十毫秒。通過監控程式 最初的幾條或幾十條指令來判斷程式是否可疑(正常程式一般會先調用圖形 API 繪製界 面等,但病毒通常直接開始讀寫硬碟,注入其他程序);這項技術有嚴重缺陷,不僅資源 佔用高、誤報嚴重、檢測率還低(只要在病毒中加一個延時等100~200ms之後再執行惡意 指令就可以完美避過),一般作為預判斷手段(先通過動態啟發確認可疑程度來調整進行 靜態啟發時引擎的敏感度)。雖然各大防毒引擎都俱備這個功能,但平時沒有存在感。這 種技術可以看作主動防禦的前身 HIPS:主機入侵防禦的英文縮寫,分為 AD 應用程式防護、RD 註冊表防護、FD 文件防護 三塊。在程式執行時攔截所有行為並詢問用戶是否放行,一般通過預先設定好的規則來減 少彈窗,規則的嚴密程度也決定了防護能力。是一種把系統控制權交給用戶的安全工具, 會用的高手可以裸奔毒網,小白用這個只是徒增煩惱。 另外所謂的智能 HIPS 就是根據雲端白名單識別程式並建立相應的規則以減少彈窗,可說 是自動預設規則的 HIPS 主動防禦:可以當作是有啟發能力的 HIPS,與啟發式的不同在於,擁有主動防禦的防毒 可以在程式正常執行(不隔離)的情況下不間斷地監視程式的行為,發現與啟發特徵庫匹 配的動作便終止該程序(BD ATC 有些特殊,稍後再說明);有不少防毒的主防(Sonar、 IDP、SW)還會在程式執行時記錄下執行過的指令,發現惡意行為並終止後便按照記錄逐 一撤銷程式的操作,這就是回滾能力。主防既有像靜態啟發一樣檢測未知病毒的能力,又 很難被花指令所矇騙(畢竟靜態啟發只能進行簡單的反編譯不能讀出程式中所有指令); 但主防既要求防毒能在程式執行過程中攔截指令,又要在確認為惡意程式後有足夠權限將 其終止,實現難度相比啟發式困難,也來得不穩定。對於未知威脅,主動防禦是目前最有 效的手段。 要注意的是,主防和 HIPS 都屬於執行後保護,在其運作時,可疑程式已經在記憶體中執 行,可以說是防毒軟體的最後一道關卡 行為攔截:BB 在技術上並沒有被嚴格定義,只要有惡意行為,不管程式是正常不正常, 有簽名或無簽名,只要防毒判定為惡意就終止程序。譬如開著 IDM 下載病毒,數次後防 毒會提示 IDM 似乎是個未知威脅,對於這種正常程式下載惡意文件會提示操作,並記錄 程式行為是打開網絡連接和多次下載惡意文件。它可以是基於本地主防或者是雲端甚至是 智能 HIPS,例如紅傘雖然沒有主防但它的雲 APC 對於未知威脅可以有效阻斷攔截 人工智慧(AI):包含雲啟發或本地 AI,詳見 BD ATC 和 360 QVM。另外像 BD 或者是 AVG 雖然是本地 AI,但是其規則是分析雲端的大量資料,機器學習後再下放到本地( BD 是主防帶 AI,AVG 是掃毒帶 AI,這也是 AVG 2016年檢測率飆升的原因。AI 的一大 好處是提高檢測的同時節省人工成本,防毒廠商的病毒分析師只需進行簡單的後期除錯, 其餘工作都能仰賴 AI 進行分析) 廣譜/基因:通過衡量某個未知的文件和已知惡意文件的相似度來進行判別。如果一個未 知文件在關鍵的地方和已知惡意威脅高度相似則判為有害 https://i.imgur.com/UT3BdcL.jpg
例如上圖中,假設你已經熟悉了左邊的黑褐色長毛獵犬,那麼即使沒見過右圖的犬種,也 能通過相似度推斷出是某個品種的長毛獵犬 有些人把基因當成啟發的一種手段(但啟發不等於基因)更詳細的介紹見紅傘、ESET 兩 欄的解說 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.165.185.3 ※ 文章網址: https://www.ptt.cc/bbs/AntiVirus/M.1495823940.A.EA7.html
sismiku: 好文 05/27 03:41
bajiqa: 我很討厭他第一段的說詞。 05/27 09:16
Klauhal: 有看過巴哈防毒分類的文就知道第一段只是講述事實 05/27 09:57
Klauhal: 巴哈很多不裝防毒派的,以為行為良好就沒事 05/27 09:57
Klauhal: 有人肯在那種地方發科普該鼓勵,我早就逃來ptt防毒版了.. 05/27 09:59
hn9480412: 巴哈那種一堆只會玩遊戲的小朋友就算了吧 顆顆 05/27 11:39
miamodo: HEURISTIC,https://goo.gl/QfKsj2 05/27 13:11
kipi91718: 推整理 05/27 15:43
sakasiaga: 好喜歡第一段的說詞 05/27 17:32
APM99: 第一段的說法很正確阿 跟風的本來就一堆 05/27 17:34
sate5232: 第一段是個連結 請看原文 05/27 19:48
sate5232: 他就是在指那篇文章 05/27 19:49
atrix: 沒辦法,第一段是事實, 05/28 11:34
atrix: 看看FB有多少人在喊「只有不去上XX網站,保持良好行為,不 05/28 11:34
atrix: 裝防毒也沒關係」 05/28 11:34
atrix: 就是不知道什麼是良好行為才問人啊! 05/28 11:34
atrix: 良好行為也包括了裝防毒啊 05/28 11:34
waterblue85: 正常網站都可能不小心上架了藏有惡意軟體的廣告了? 05/28 17:22
HGJman: 自己中一次就知道行為良不良好,自己的資料自己備份~ 05/28 21:39
HGJman: 自己的電腦自己維護,不會備份不會維護,自食惡果剛好~ 05/28 21:40
hms5232: 我自己也是不額外裝防毒的阿 內建的Defender+真正好習慣( 05/29 00:21
hms5232: 定期更新系統、備份檔案等)八成都能避掉 05/29 00:21
hms5232: 不過有資源的話裝一下不會吃虧 05/29 00:22
tinlans: 這文應該不是巴哈那邊原創的 05/31 18:34
tinlans: 滿口大陸用語,應該是對岸哪裡複製來簡轉繁的 05/31 18:35
sate5232: 阿就是作者原創的呀 他在噗浪說的 06/04 18:20
H264: 現在大家很常用對岸用語 回滾這詞 台灣有嗎?我還真不知 06/05 16:52
louis925: 原作應該是大陸人吧 06/15 16:12
tinlans: 默認、數字簽名、模塊、數據庫、哈希 << 這些說不過去 06/20 03:03
tinlans: 重點是他大陸、台灣、英文用語交叉用,很像術語自動轉換 06/20 03:06
tinlans: 沒有轉好或判斷失誤等等的,process 也各有程序跟進程。 06/20 03:07
tinlans: 要不就是分不同網站複製貼上整理出來的吧。 06/20 03:08
Fizban: 我是原作者,樓上少在那亂猜 06/20 22:44
Fizban: 最近才辦PTT帳號,原本懶得回的 06/20 22:44
Fizban: 我的確常逛對岸論壇,用語可能多少受到影響 06/20 22:44
Fizban: 但默認、數據庫、模塊←這些詞我不覺得有什麼問題 06/20 22:44
Fizban: 台灣人就不會講默認、數據庫? 06/20 22:45
Fizban: 還是一定要改成預設、資料庫才可以? 06/20 22:45
Fizban: 說真的我寫文章根本沒考慮太多,又不是政治文章 06/20 22:45
Fizban: 在文字上搞政治正確沒意義 06/20 22:45
Fizban: 寫這篇文章花了我一年時間,酸民毀一篇文章也不用一分鐘 06/20 22:46
Fizban: 有意見請到巴哈留言,PTT基本上我是不用的 06/20 22:46
tinlans: 不是政治正確的問題,只是有違常理,而且你術語雙邊交雜 06/21 20:33
tinlans: 因此提出合理的懷疑。對,台灣人不會講,所以才合理猜。 06/21 20:38
tinlans: 你找十個資工系助教來讀這文章,十個都會這樣懷疑。 06/21 20:46
tinlans: 畢竟抓學生抄作業的經驗大都是這樣累積過來的,非亂猜。 06/21 20:47
tinlans: 當然你要說裡面有大都是你整理跟親自寫的我也相信就是。 06/21 20:50
tinlans: 而且既然你本人都敢這樣宣稱,那我就不多說了。 06/21 20:50
tinlans: http://i.imgur.com/GZPqVv1.png 06/21 22:02
tinlans: http://i.imgur.com/AQMZ8Wn.png 06/21 22:02
tinlans: 我個人能給的建議就是,既然你都希望別人轉載你的文能標 06/21 22:03
tinlans: 明出處,那麼做類似的事情時也應該標一下。儘管你的確有 06/21 22:03
tinlans: 花上大把的時間做整理已經加上自己的註解和看法等等。 06/21 22:04
tinlans: 不然這些小小的瑕疵就會讓你自己毀了你一年的心血。 06/21 22:04
tinlans: 我跟大陸高手交流的時間不會比你少,所以才對這些更敏銳 06/21 22:06
tinlans: 其中一張圖裡的複製 -> 複制也是一大破綻。 06/21 22:07
tinlans: 總之,你的貢獻絕對不可以否認,只是給些建議。 06/21 22:09
tinlans: 我不知道你多大了,有沒有讀過研究所,或者有沒有打算讀 06/21 22:15
tinlans: 。但是你這樣的做法在學術論文裡,已經觸犯死罪。 06/21 22:15
tinlans: 所以講出來也是為了你將來好。 06/21 22:16
Fizban: 我在文末的QA有說為了寫文章收集了不少資料 06/22 07:39
Fizban: 例如官方白皮書 06/22 07:39
Fizban: 你第一張圖就是FS官方白皮書的內容 06/22 07:41
Fizban: 既然你有針對文章內容去搜尋 06/22 07:42
Fizban: 應該知道並不是隨便抓幾篇26的文去簡轉繁 06/22 07:42
Fizban: 我不是防毒專業,要寫這種文免不了要收集資料 06/22 07:42
Fizban: 像第二張圖,為了粗淺解釋什麼是基於統計學的機器學習 06/22 07:42
Fizban: 就找了貝葉斯算法當例子 06/22 07:42
Fizban: 但除此之外,關於360的功能介紹,完全出自我本人之手 06/22 07:43
Fizban: 如果說這篇文章完全沒有引用,那的確不是 06/22 07:43
Fizban: 但要說整篇都是抄別人的、東拼西湊,這種指控我也很難接受 06/22 07:43
Fizban: 以論文的角度看這篇是很不嚴謹 06/22 07:44
Fizban: 但這篇不是論文,我的目的是對已知防毒原理作介紹 06/22 07:44
Fizban: 我不太清楚資工系的情況 06/22 07:44
Fizban: 我本身是資管研究所畢業,當年搞的是影像演算法 06/22 07:44
Fizban: 所謂的論文就是要自己想出的一個新的演算法(idea) 06/22 07:44
Fizban: 然後發表出來 06/22 07:45
Fizban: 這篇則是對已知的東西做介紹,其實不管內容多嚴謹 06/22 07:45
Fizban: 都無法達到論文的高度 06/22 07:45
Fizban: 最後謝謝你的指教,我不太習慣PTT 06/22 07:46
Fizban: 希望這樣解釋你可以接受 06/22 07:46
tinlans: 我只是給建議而已,沒什麼接受的問題。我知道你的東西是 06/22 10:06
tinlans: 有些是來自對岸的白皮書翻譯,不過對譯者就不是很尊重。 06/22 10:07
tinlans: 你的介紹是很好的,圖也看得都自己截的,只是替你擔心。 06/22 10:08
tinlans: 當然最理想是吸收後轉換成你自己的話重寫出來,不過就如 06/22 10:09
tinlans: 你所說的這不是論文,大致上就是類似報告,註明出處即可 06/22 10:10
tinlans: ,畢竟你也希望轉你文的人能註明出處。 06/22 10:15
tinlans: 實際上你的文我全部都有讀完,所以你出來說明時,我也沒 06/22 10:24
tinlans: 否定這裡面大都是你自己的東西,因此才說不希望這些小瑕 06/22 10:25
tinlans: 疵毀了你整篇。而且前言其實就是給人一種偏高的期待,突 06/22 10:27
tinlans: 然讀到一些用詞突兀的片段、專有名詞用法跟你前面有些出 06/22 10:27
tinlans: 入的地方,就會鮮明感受到這段文字不是你的東西。又因為 06/22 10:29
tinlans: 前言給人的期待真的稍微偏高,就容易產生一種失望感。 06/22 10:30
tinlans: 其中一個失望感就有點像是「立志寫文章出來教育人的卻沒 06/22 10:32
tinlans: 有把自己想寫的東西都搞懂 (沒變成自己的話及例子),直接 06/22 10:33
tinlans: 貼別人的混過去」那種感覺。現在你是作者可能不太理解這 06/22 10:33
tinlans: 感覺,有一天你讀別人的就會懂了。這個不是什麼指責,你 06/22 10:34
tinlans: 就當成是讀者給的 feedback 吧。 06/22 10:34
tinlans: 另外,提到論文的原因是因為論文也有提到相關研究的章節 06/22 11:00
tinlans: 但是依然不允許裡面的字句和他人的寫作雷同,因此科技英 06/22 11:00
tinlans: 文寫作要練的一個技巧就是重新構句,避免變成抄襲。 06/22 11:01
tinlans: 至於大學報告的訓練則是允許學生這麼做,但要註明出處。 06/22 11:02
tinlans: 至於有的研究生可以拿學長的論文改一改就發一篇,是因為 06/22 11:03
tinlans: 作者欄有交集做保險,教授會讓低年級的在學長的論文掛名 06/22 11:03
tinlans: 做保險,而最終保險是教授都有掛名,所以才能那樣玩。 06/22 11:04
tinlans: 嗯,總而言之,整理貢獻跟付出還是遠高於那些小瑕疵的。 06/22 11:06