[討論] 2017各款防毒軟體技術原理剖析 (前言)

看板AntiVirus (防毒)作者 (Lovelive!)時間7年前 (2017/05/27 02:39), 編輯推噓9(9097)
留言106則, 17人參與, 最新討論串1/1
在巴哈看一篇關於各家防毒軟體的技術分析文章就轉過來 如果有轉載需求請記得附上以下原始網址 ※本文發佈於巴哈姆特電應板以及部落格 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

05/27 03:41, , 1F
好文
05/27 03:41, 1F

05/27 09:16, , 2F
我很討厭他第一段的說詞。
05/27 09:16, 2F

05/27 09:57, , 3F
有看過巴哈防毒分類的文就知道第一段只是講述事實
05/27 09:57, 3F

05/27 09:57, , 4F
巴哈很多不裝防毒派的,以為行為良好就沒事
05/27 09:57, 4F

05/27 09:59, , 5F
有人肯在那種地方發科普該鼓勵,我早就逃來ptt防毒版了..
05/27 09:59, 5F

05/27 11:39, , 6F
巴哈那種一堆只會玩遊戲的小朋友就算了吧 顆顆
05/27 11:39, 6F

05/27 13:11, , 7F
05/27 13:11, 7F

05/27 15:43, , 8F
推整理
05/27 15:43, 8F

05/27 17:32, , 9F
好喜歡第一段的說詞
05/27 17:32, 9F

05/27 17:34, , 10F
第一段的說法很正確阿 跟風的本來就一堆
05/27 17:34, 10F

05/27 19:48, , 11F
第一段是個連結 請看原文
05/27 19:48, 11F

05/27 19:49, , 12F
他就是在指那篇文章
05/27 19:49, 12F

05/28 11:34, , 13F
沒辦法,第一段是事實,
05/28 11:34, 13F

05/28 11:34, , 14F
看看FB有多少人在喊「只有不去上XX網站,保持良好行為,不
05/28 11:34, 14F

05/28 11:34, , 15F
裝防毒也沒關係」
05/28 11:34, 15F

05/28 11:34, , 16F
就是不知道什麼是良好行為才問人啊!
05/28 11:34, 16F

05/28 11:34, , 17F
良好行為也包括了裝防毒啊
05/28 11:34, 17F

05/28 17:22, , 18F
正常網站都可能不小心上架了藏有惡意軟體的廣告了?
05/28 17:22, 18F

05/28 21:39, , 19F
自己中一次就知道行為良不良好,自己的資料自己備份~
05/28 21:39, 19F

05/28 21:40, , 20F
自己的電腦自己維護,不會備份不會維護,自食惡果剛好~
05/28 21:40, 20F

05/29 00:21, , 21F
我自己也是不額外裝防毒的阿 內建的Defender+真正好習慣(
05/29 00:21, 21F

05/29 00:21, , 22F
定期更新系統、備份檔案等)八成都能避掉
05/29 00:21, 22F

05/29 00:22, , 23F
不過有資源的話裝一下不會吃虧
05/29 00:22, 23F

05/31 18:34, , 24F
這文應該不是巴哈那邊原創的
05/31 18:34, 24F

05/31 18:35, , 25F
滿口大陸用語,應該是對岸哪裡複製來簡轉繁的
05/31 18:35, 25F

06/04 18:20, , 26F
阿就是作者原創的呀 他在噗浪說的
06/04 18:20, 26F

06/05 16:52, , 27F
現在大家很常用對岸用語 回滾這詞 台灣有嗎?我還真不知
06/05 16:52, 27F

06/15 16:12, , 28F
原作應該是大陸人吧
06/15 16:12, 28F

06/20 03:03, , 29F
默認、數字簽名、模塊、數據庫、哈希 << 這些說不過去
06/20 03:03, 29F

06/20 03:06, , 30F
重點是他大陸、台灣、英文用語交叉用,很像術語自動轉換
06/20 03:06, 30F

06/20 03:07, , 31F
沒有轉好或判斷失誤等等的,process 也各有程序跟進程。
06/20 03:07, 31F

06/20 03:08, , 32F
要不就是分不同網站複製貼上整理出來的吧。
06/20 03:08, 32F

06/20 22:44, , 33F
我是原作者,樓上少在那亂猜
06/20 22:44, 33F

06/20 22:44, , 34F
最近才辦PTT帳號,原本懶得回的
06/20 22:44, 34F

06/20 22:44, , 35F
我的確常逛對岸論壇,用語可能多少受到影響
06/20 22:44, 35F

06/20 22:44, , 36F
但默認、數據庫、模塊←這些詞我不覺得有什麼問題
06/20 22:44, 36F

06/20 22:45, , 37F
台灣人就不會講默認、數據庫?
06/20 22:45, 37F

06/20 22:45, , 38F
還是一定要改成預設、資料庫才可以?
06/20 22:45, 38F

06/20 22:45, , 39F
說真的我寫文章根本沒考慮太多,又不是政治文章
06/20 22:45, 39F
還有 27 則推文
06/22 07:42, , 67F
像第二張圖,為了粗淺解釋什麼是基於統計學的機器學習
06/22 07:42, 67F

06/22 07:42, , 68F
就找了貝葉斯算法當例子
06/22 07:42, 68F

06/22 07:43, , 69F
但除此之外,關於360的功能介紹,完全出自我本人之手
06/22 07:43, 69F

06/22 07:43, , 70F
如果說這篇文章完全沒有引用,那的確不是
06/22 07:43, 70F

06/22 07:43, , 71F
但要說整篇都是抄別人的、東拼西湊,這種指控我也很難接受
06/22 07:43, 71F

06/22 07:44, , 72F
以論文的角度看這篇是很不嚴謹
06/22 07:44, 72F

06/22 07:44, , 73F
但這篇不是論文,我的目的是對已知防毒原理作介紹
06/22 07:44, 73F

06/22 07:44, , 74F
我不太清楚資工系的情況
06/22 07:44, 74F

06/22 07:44, , 75F
我本身是資管研究所畢業,當年搞的是影像演算法
06/22 07:44, 75F

06/22 07:44, , 76F
所謂的論文就是要自己想出的一個新的演算法(idea)
06/22 07:44, 76F

06/22 07:45, , 77F
然後發表出來
06/22 07:45, 77F

06/22 07:45, , 78F
這篇則是對已知的東西做介紹,其實不管內容多嚴謹
06/22 07:45, 78F

06/22 07:45, , 79F
都無法達到論文的高度
06/22 07:45, 79F

06/22 07:46, , 80F
最後謝謝你的指教,我不太習慣PTT
06/22 07:46, 80F

06/22 07:46, , 81F
希望這樣解釋你可以接受
06/22 07:46, 81F

06/22 10:06, , 82F
我只是給建議而已,沒什麼接受的問題。我知道你的東西是
06/22 10:06, 82F

06/22 10:07, , 83F
有些是來自對岸的白皮書翻譯,不過對譯者就不是很尊重。
06/22 10:07, 83F

06/22 10:08, , 84F
你的介紹是很好的,圖也看得都自己截的,只是替你擔心。
06/22 10:08, 84F

06/22 10:09, , 85F
當然最理想是吸收後轉換成你自己的話重寫出來,不過就如
06/22 10:09, 85F

06/22 10:10, , 86F
你所說的這不是論文,大致上就是類似報告,註明出處即可
06/22 10:10, 86F

06/22 10:15, , 87F
,畢竟你也希望轉你文的人能註明出處。
06/22 10:15, 87F

06/22 10:24, , 88F
實際上你的文我全部都有讀完,所以你出來說明時,我也沒
06/22 10:24, 88F

06/22 10:25, , 89F
否定這裡面大都是你自己的東西,因此才說不希望這些小瑕
06/22 10:25, 89F

06/22 10:27, , 90F
疵毀了你整篇。而且前言其實就是給人一種偏高的期待,突
06/22 10:27, 90F

06/22 10:27, , 91F
然讀到一些用詞突兀的片段、專有名詞用法跟你前面有些出
06/22 10:27, 91F

06/22 10:29, , 92F
入的地方,就會鮮明感受到這段文字不是你的東西。又因為
06/22 10:29, 92F

06/22 10:30, , 93F
前言給人的期待真的稍微偏高,就容易產生一種失望感。
06/22 10:30, 93F

06/22 10:32, , 94F
其中一個失望感就有點像是「立志寫文章出來教育人的卻沒
06/22 10:32, 94F

06/22 10:33, , 95F
有把自己想寫的東西都搞懂 (沒變成自己的話及例子),直接
06/22 10:33, 95F

06/22 10:33, , 96F
貼別人的混過去」那種感覺。現在你是作者可能不太理解這
06/22 10:33, 96F

06/22 10:34, , 97F
感覺,有一天你讀別人的就會懂了。這個不是什麼指責,你
06/22 10:34, 97F

06/22 10:34, , 98F
就當成是讀者給的 feedback 吧。
06/22 10:34, 98F

06/22 11:00, , 99F
另外,提到論文的原因是因為論文也有提到相關研究的章節
06/22 11:00, 99F

06/22 11:00, , 100F
但是依然不允許裡面的字句和他人的寫作雷同,因此科技英
06/22 11:00, 100F

06/22 11:01, , 101F
文寫作要練的一個技巧就是重新構句,避免變成抄襲。
06/22 11:01, 101F

06/22 11:02, , 102F
至於大學報告的訓練則是允許學生這麼做,但要註明出處。
06/22 11:02, 102F

06/22 11:03, , 103F
至於有的研究生可以拿學長的論文改一改就發一篇,是因為
06/22 11:03, 103F

06/22 11:03, , 104F
作者欄有交集做保險,教授會讓低年級的在學長的論文掛名
06/22 11:03, 104F

06/22 11:04, , 105F
做保險,而最終保險是教授都有掛名,所以才能那樣玩。
06/22 11:04, 105F

06/22 11:06, , 106F
嗯,總而言之,整理貢獻跟付出還是遠高於那些小瑕疵的。
06/22 11:06, 106F
文章代碼(AID): #1PA7P4wd (AntiVirus)
文章代碼(AID): #1PA7P4wd (AntiVirus)