Introduction to Malware
1940s-1970s
惡意程式(Malware)的歷史可以追溯到 1940 年代。在 1949 年,著名數學家兼物理學家 John von Neumann 首次提出自我複製程式(self-replicating program)的概念,這一概念成為了後來惡意程式開發的基礎。該想法在其學生的協助下取得進一步的發展,並在他去世後於 1996 年發表《Theory of Self-Reproducing Automata》,探討機器可以建立自己複製品的可能性。 在 1971 年,Bob Thomas 創建了被認為是最早的惡意程式 Creeper,是為 ARPANET 的安全測試而設計的,用於測試自我複製程式的可能性。

在 1986 年,來自 Pakistan 的 Alvi 兄弟編寫了第一個專門針對個人電腦的惡意程式 Brain,其通過磁碟傳播,目標是自我複製,最終導致系統性能下降甚至崩潰。

1980s-1990s
在 1988 年,Cornell University 的 Robert Morris 創建了第一個網路蠕蟲,意外地感染了約 6000 台電腦設備,甚至引發美國法律界對於惡意程式及網路威脅的關注。

在 1990 年代,惡意程式的數量與種類大幅增加,舉凡以下:
- 1995年,Concept 出現,開始利用 Microsoft Word 的 Macro 漏洞。
- …
2000s-
2000 年代初期出現一系列基於電子郵件的蠕蟲病毒:
- 2000 年,ILOVEYOU 蠕蟲在全球範圍內造成數十億美元的損失。
- 2001 年,Code Red 蠕蟲利用 Microsoft IIS 漏洞進行傳播。
- …
2000 年代中後期,惡意程式逐漸開始被利用在牟取財利:
- 2005 年,GpCode作為早期勒索軟體的代表出現,加密使用者文件並要求支付贖金。
- 2007 年,Storm僵屍網路(Botnet)出現,用於控制受感染的電腦進行進一步的惡意行為。
太多了列不完,以下是維基百科整理的,有興趣的可以參考以下。
Malware Lifecycle and Architecture
Lifecycle
惡意軟體的生命週期可分為四個時期:
- 感染(Infection):透過軟體漏洞或社交工程技術感染目標設備。
- 隱藏(Concealment):試圖保持隱蔽性並維持對受害目標的控制。
- 通訊(Communication):資訊交換與進一步攻擊過程的通訊。
- 破壞與濫用行為(Damage and abuse behavior):實現惡意竊取或破壞系等統的惡意行為。
Architecture
- 入侵向量(Intrution Vector)
- 實現進入目標系統
- 惡意程式主體(Malware Body)
- 實現主要惡意目的
- 保護機制(Protection Mechanism)
- 防止攔截(Anti-Interception)
- 防止偵測(Anti-Detection)
- …

Malware Delivery
當惡意程式開發完成後,接下來就是要將惡意程式傳播到目標設備上,而惡意程式的傳播方式有很多種,以下列舉幾種常見的:
-
釣魚郵件(Phishing Email):攻擊者可能通過發送釣魚郵件受騙目標,下載並點擊惡意附件或連結,當目標點擊時,惡意程式就會被傳播到目標設備上。
- 透過電子郵件附件或連結進行傳播
-
惡意網站(Malicious Website):攻擊者可能透過建立惡意網站,誘騙目標進入,亦或是對原先合法的網站進行攻擊,將惡意程式插入到網站中,從而誘導目標下載並執行惡意程式。
- 透過網站漏洞或社交工程技術進行傳播
-
供應鏈攻擊(Supply Chain Attack):攻擊者可能透過入侵供應商的系統,將惡意程式插入到供應商的軟體中,當目標下載並執行供應商的軟體時,惡意程式就會被傳播到目標設備上。
- 透過供應商軟體進行傳播
- ...
Are you ready for malware development?
在開始惡意程式開發之前,還是有不少先備知識需要學習。 首先,既然是要在電腦系統上進行實現,勢必要先知道基本電腦科學(Computer Science)知識, 而想在電腦上實現特定操作與功能,最好的方法就是自己寫程式,因此程式語言(Programming Lauguage)也是非常重要的, 而程式語言有分很多種,現今普遍使用的 Python、C++等都屬於高階程式語言(High-level Programming Language),而過去未出現高階語言之前,大多都是使用低階程式語言(Low-level Programming Language)- 組合語言(Assembly Lauguage)實現,而組合語言本身是依賴於架構的,可移植性低,某種程度上也造就後來高階語言的發展, 再更深入若想要真正理解程式在電腦中真正的執行流程,就需要從編譯原理(Compiler Principle)、作業系統(Operating System)、計算機組織(Computer Organization)等深入了解,通過以上的學習就可以幫助更加理解真正實現這些電腦架構的基礎原理。
以下暫列出一些對於後續惡意程式開發學習基本上一定要知道的:
- 程式語言(Programming Lauguage)- C/C++
- 組合語言(Assembly Lauguage) - x86/x64
- 編譯原理(Compiler Principle)
- 作業系統(Operating System)
- 計算機組織(Computer Organization)
- ...
References
- https://hackforums.net/showthread.php?tid=6243986
- https://zh.wikipedia.org/zh-tw/知名病毒及蠕蟲的歷史年表
- 奇幻熊在網路釣魚:為何網際網路如此脆弱?駭客如何利用人性竊取機密,以及我們如何更安全