能否通過對編譯器或者編譯環境的限制來應對木馬或者病毒呢?
01-14
程序都需要編譯才能運行的,所以有此想法
或者當木馬病毒被發現時,能夠自動將其從編譯環境中隔離(類似沙盒)
理論上是可行的,但是這並沒有什麼卵用,因為很多病毒都是直接寫彙編的,,,,,
再說了,我不能自己寫個編譯器啊。
真正有效的預防方式是從運行環境入手,這比編譯器限制高到不知道哪裡去了。嚴格來說,答案是肯定的。在多用戶環境下可通過限制普通用戶創建可執行文件的能力(其中包括使用編譯器的能力)來「應對木馬或者病毒」。
不過我猜提問者設想的並不是這種情況。所以,答案又是否定的。
判斷兩個程序外延相等性的程序不存在。你的目標無法實現。
第一反應是不行——這不是一個停機問題的翻版么,給定一個程序,編譯器判斷其是否最終會做某些非法的事情。
當然,如果徹底封死這些非法操作的可能,比如不允許內嵌彙編、限制系統調用甚至把所有文件IO也放入沙箱,那理論上應該是可行的。但這樣一來編譯器和OS相比似乎也沒有特別的優勢了。然並卵
大不了換一個。全統一,大不了造一個。
為什麼.net不能用來寫惡性病毒?因為.net的程序總是可以通過強行添加manifest的方法來覆蓋UAC,就算給了admin許可權,也什麼都幹不了。
我自己也可以寫一個編譯器啊(雖然很矬...)
能,但是這種限制和編譯器里的病毒一樣具有傳播性,所以說你最後還是造出來了病毒
gcc已經封住了一些buffer overflow了吧,比如利用字元串寫入越界的那種。現在俺們在搞利用硬體保護軟體,比如利用Control-Flow Integrity。
可信編譯嗎?
比較難。
首先有開源的編譯器,然後病毒木馬又不像大型軟體那麼複雜,對性能要求那麼高,開源編譯器完全可以滿足要求。
關鍵是讓編譯器去判斷一段代碼是不是有惡意,難度太大了。
還不如像iOS和Android這樣的生態環境通過資格審核來決定是否允許調用「危險介面」,應該是有一定作用的,至少大幅提高了惡意代碼生成的代價。
為什麼以前有很多盜號的 現在怎麼好像消失的乾乾淨淨了(百度上面的騙子除外)
你問問360,能不能做個安全編譯器吧
程序需要編譯才能運行這句話並不完全對,但是可以說是。但是程序並不是每次運行都需要編譯。
寫個bash腳本 sudo rm -rf /然後誘導用戶輸入密碼。。完全不需要編譯器的事。。
當然可以,而且有很多這方面的研究,比如type system。首先是題主所說的「木馬」,我理解為是在一個正常的程序裡面存在信息泄露的問題。舉個Android app的例子,最近的一篇研究是14年CCS的「Collaborative Verification of Information Flow for a High-Assurance App Store (http://homes.cs.washington.edu/~mernst/pubs/infoflow-ccs2014.pdf)」,用type chcker做數據流分析。檢測一個正常程序是否有overflow也可以用type system做,比如韋韜老師group做的Using type analysis in compiler to mitigateinteger-overflow-to-buffer-overflow threat (http://lenx.100871.net/papers/IntPatch-JCS.pdf)。編譯階段做最大的問題是不準確,因為裡面會有很多的point-to analysis,導致比較多false positives。
當前的一些編譯器能在一定程度上保護編譯出來的程序免遭黑客攻擊,如最新VS編譯器依據Control Flow Integrity原理在編譯過程中會在程序中加入的保護指令。
推薦閱讀:
※如何構造上下文無關文法?
※現代C++編譯器是否會根據debug期間運行所得的信息來進行優化?
※有沒有介紹LLVM的書籍可以推薦?最好是中文的
※計算機是怎麼區分int類型和float類型的數據的?
※編譯器為什麼在一次編譯過程中要儘可能的發現所有錯誤?