System security
- 提供「安全功能」與「安全服務」
- 針對各種常用作業系統,進行相關配置,以正確對付、防禦各種入侵
- 保證網路作業系統提供的網路服務得到安全配置
病毒(Virus)
藉由用存取控制(Access control)的機制來保護資訊的安全,防止非法使用者的入侵與蓄意破壞
- 特徵
- A fragment of code embedded in a legitimate program
- 依附在別的程式上
- 會自行複製、感染、傳播、發作
- 「UNIX」與「Multiuser」作業系統不易受到病毒影響,因為「可執行檔」的寫入被系統保護
啟動磁區病毒
- 早期的病毒類型,感染開機磁片中「Boot」程式或硬碟分割表以取得控制權限
檔案型病毒
- 寄生於執行檔後,會再自主感染其他執行檔
- 「常駐型」:會常駐在記憶體中,當其他程式執行時會進一步執行感染動作
- 「非常駐型」:感染磁碟機中找出尚未被感染的程式加以感染
- 寄生於執行檔後,會再自主感染其他執行檔
巨集病毒
- 裡用軟體本身提供的巨集功能設計出的病毒
- Microsoft word 的 VBA 巨集
- 裡用軟體本身提供的巨集功能設計出的病毒
電腦蠕蟲
A process that use spawn mechanism(孕育機制) to duplicate itself
不須依附在別的程式內
可能不用使用者操作也會自我複製執行
未必破壞被感染的系統
執行垃圾程式碼以發動「分散式阻斷服務攻擊」(DDos)
- 採用垃圾郵件、漏洞傳播,如:莫里斯蠕蟲
特洛伊木馬
A code segment that misuses its environment
病毒依附在一般程式碼
滿足特定條件後便將使用者資料傳出,未達條件不進行任何動作
「Spyware」:常伴隨著商業軟體,施行網頁綁架與廣告騷擾
Autorun病毒
- 利用 USB 當作媒介,會自動執行程式侵入電腦
千面人病毒
- 每繁殖一次會以不同病毒碼傳染到別處,每一個中毒的檔案所含的病毒程式碼皆不同
攻擊手段
- Dumpster diving
- 攻擊者翻找目標系統文件、檔案、垃圾資料與殘存資訊,試圖找到密碼與其他有用的資訊
- Trap door
- The designer of a program or system might leave a hole in the software that only is capable of use
- 隱藏在程式中的秘密功能
- Logic bomb
- A program that initiates a security incident only under certain circumstances
- 難以查出問題所在
- 正常情況不發生,當發生特定條件時會發生錯誤
- Stack overflow / Buffer overflow
- Attacker sends more data than the program expected
- 溢位(Overflow)後將原本「Stack」中的「Return address」改成惡意程式的位置
- 避免方法
- Use static code analysis to look for memory writes that go beyond array boundaries
- Randomize the base address of program libraries/stack in the memory
- 使用安全的函數(strcpy()→strncpy())
- 使用高階程式語言
- Java、Python
- Port scanning
- Is not a attacker but rather a means for a cracker to detect a system's vulnerabilities to attacker
- 首先搜尋目標網路上所有可以接觸到的主機,然後查出主機上開啟了哪些通訊埠,並且進一步偵測出目標主機上所執行的作業系統類型及版本(OS fingerprinting),最後刺探出目標主機上正在執行或待命的網路服務與目標主機的 IP 位址之間的關係
- Port scanning (通訊埠端口掃描)
- 駭客會傳送一連串的特殊訊息去測試此主機上有執行哪些網路服務,如 HTTP 使用 Port 80,透過「Port Scanning」得知哪些通訊埠是開啟的,讓駭客知道主機上目前所執行的網路服務類型
- Network Scanning(網路架構掃描)
- 若能得知目標網路內有哪些主機是可以接觸到、啟動(active)的,能夠縮小攻擊範圍並知道哪些主機可以成為被攻擊目標
- Vulnerability Scanning(弱點掃描)
- 偵測及發現目標網路內被掃描的主機上所存在的弱點與漏洞,以便未來進行入侵攻擊
- Denial of service(Dos)
- Dos attacks are aimed not at gaining information or stealing resources but rather at disrupting legitimate use of a system or facility
- DDos
- 利用多台殭屍系統(Zombies)同時對目標伺服器發出大量請求以癱瘓服務
Symmetric encryption and asymmetric encryption
Symmetric encryption
Same key is used to encrypt and to decrypt
Data encrypt standard(DES)
- 64 bit block cypher
- 每次加密操作只處理 64-bit 資料,稱為「Block」
- 56 bit key length
Triple DES
- C:Cypher;密文
- M:Plaintext;明文
- 使用「金鑰包」包含三個 DES 金鑰 \(K_1、K_2、K_3\) 均為 56-bits
- 加密:使用 \(K_1\) 的金鑰進行 DES 加密,在用 \(K_2\) 的金鑰進行 DES「解密」,最後使用 \(K_3\) 進行 DES 加密,『\(C = E_{K_3}(D_{K_2}(E_{K_1}(M)))\)』
- 解密:使用 \(K_3\) 的金鑰進行 DES 解密,在用 \(K_2\) 的金鑰進行 DES「加密」,最後使用 \(K_1\) 進行 DES 解密,『\(M = D_{K_1}(E_{K_2}(D_{K_1}(C)))\)』
- 金鑰選項(\(K_1、K_2、K_3\))
- 金鑰選項1:三個金鑰獨立
- 強度最高,擁有 3×56 = 168 個獨立金鑰位元(Bit)
- 金鑰選項2:\(K_1、K_2\) 獨立、\(K_3 = K_1\)
- 安全性稍低,擁有 2×56 = 112 個獨立金鑰位元(Bit),但可以防禦「中途相遇攻擊」
- 金鑰選項3:\(K_1 = K_2 = K_3\)
- 等同於普通 DES(因為會互相抵銷),擁有 56 個獨立金鑰位元(Bit)
- 金鑰選項1:三個金鑰獨立
Advanced encryption standard(AES)
在密碼學中又稱「Rijndael加密法」,是美國聯邦政府採用的一種區段加密標準,用來替代原先的DES
嚴格地說,AES 和 Rijndael 加密法並不完全一樣(雖然在實際應用中兩者可以互換),因為Rijndael加密法可以支援更大範圍的區段和金鑰長度
- AES 的區段(Block cypher)長度固定為128-bit
- 金鑰長度(Key length)則可以是 128、192、256-bit
而Rijndael使用的金鑰和區段長度均可以是128、192、256-bit
加密過程中使用的金鑰是由「Rijndael金鑰生成法」產生
RSA 比 DES 和其它對稱演算法要慢得多;實際上「傳送方」會使用一種對稱演算法來加密他的資訊,然後用 RSA 來加密他的比較短的對稱密碼,然後將用 RSA 加密的對稱密碼和用對稱演算法加密的訊息送給「接收方」
C:Cypher;密文
M:Plaintext;明文
\(K_{as}\):AES 金鑰
\(K_{bs}、K_{bp}\):RSA 私鑰與公鑰(接收方)
加密
- 利用「AES 金鑰」對明文(M)加密
- 再使用「RSA 公鑰」對「AES 金鑰」加密
- 將上述兩者一併傳給接收方
- \(\Rightarrow E_{K_{as}}(M)|E_{K_{bp}}(K_{as})\)
解密
- 用「RSA 私鑰」解密出「AES 金鑰」
- 再使用「AES 金鑰」解密出明文
- 爾後雙方傳遞資料只需使用「AES 金鑰」加密明文即可
- \(\Rightarrow D_{K_{bs}}(E_{K_{bp}}(K_{as})) = K_{as} \\ D_{K_{as}}(E_{K_{as}}(M)) = M\)
Rivest cypher 4(RC4)
是密鑰長度可變的一種「串流流加密算法」,也屬於對稱加密算法,RC4 是有線等效加密(WEP)中採用的加密算法,也曾經是「Transport layer security(TLS)」可採用的算法之一
RC4 由偽隨機數生成器(Pseudo-random bit generator)和異或運算(XOR)組成
RC4的密鑰長度可變
- 40 ~ 2048 bit
RC4一個字節一個字節(Byte)地加解密
給定一個密鑰,偽隨機數生成器接受密鑰並產生一個「S盒」
- S盒用來加密數據,而且在加密過程中S盒會變化
快速但是安全性低
Asymmetric encryption
Rivest–Shamir–Adleman(RSA)
- 「接收方」生成一對公鑰、私鑰
- 找出兩個極大質數 p、q
- 計算 N = p×q
- 同時算得 \(r = \phi (N) = (p-1)\times(q-1)\)
- 求出整數 e其滿足
gcd(e,r) = 1
且 e < r - 求出整數 d其滿足
e﹡d ≡ 1 (mod r)
- \(e\cdot d-1 = k\cdot r, k \in Z\)
- 最後得到公鑰:(N, e)、私鑰:(N, d)
- 找出兩個極大質數 p、q
- 「接收方」公開其公鑰給欲傳遞訊息的「傳遞方」
- 「傳遞方」使用公鑰將明文加密
- 將明文(M)轉換成一整數(m)
- f:M→m
- \(C \equiv m^e (\mod N)\),C 為密文
- 將明文(M)轉換成一整數(m)
- 「傳遞方」將密文傳送給「接收方」使用私鑰將其密文解密
- \(m \equiv C^d (\mod N)\)
- 將整數(m)轉換明文(M)
- f':m→M
- 由尤拉公式可以得知
- 模反元素必存在
- \(a\times?\equiv1(\mod n)\\ \Rightarrow a\times a^{\phi(n)-1} = a^{\phi(n)} \equiv 1(\mod n)\)
- 私鑰解密證明(\(C^d \equiv M(\mod n)\))
- 根據加密原則 \(M^e \equiv C (\mod n)\)
- 則 $C = M^e - kn, k Z $
- 將 C 帶入解密規則
- \((M^e - kn)^d \equiv M(\mod n), k \in Z \\ \Rightarrow (M^e)^d \equiv M(\mod n)\)
- 因為 \(e \cdot d \equiv 1(\mod \phi(n))\) ,則 \(e\cdot d = h\phi(n)+1, h\in Z\)
- 則 \(M^{h\phi(n)+1} \equiv M (\mod n)\)
Authentication
Constraining the set of potential sender of a message and is also useful for proving that a message has not been modified
Message authentication code(MAC)
特定演算法後產生的一小段資訊附加在原始訊息後傳送,以確認「某段訊息的完整性」與「傳送者的身分驗證」
- 資訊鑑別碼(MAC)不能提供對資訊的保密,若要同時實現保密認證,同時需要對資訊進行加密
以 RSA 為一個訊息署名
- 「傳送者」為原始訊息計算一個雜湊值(Message digest)
- 用「傳送者」的私鑰「加密」這個雜湊值即為一個「署名文」
- 將原始訊息與「署名文」一併傳給「接收方」
- 這個訊息只有用「傳送者」的公鑰才能解密
- 「接收者」獲得「署名文」後使用「傳送者」的公鑰「解密」得到雜湊值
- 將雜湊值與「接受者」自己為這個訊息計算的雜湊值比較
- 假如兩者相符,則此訊息在傳播路徑上沒有被篡改過
第三方攻擊
和其它加密過程一樣,對RSA來說分配公鑰的過程是非常重要的,分配公鑰的過程必須能夠抵擋中間人攻擊
- 「竊聽者」交給 A 一個公鑰使 A 相信這是 B 的公鑰,則「竊聽者」可以截下 A 傳遞給 B 的資訊
- 「竊聽者」亦將自己的公鑰傳給 B 使 B 以為這是 A 的公鑰,則「竊聽者」可以將所有 B 遞移給 A 的訊息截下來,將這個訊息用自己的私鑰解密,然後將這個訊息再用 A 的公鑰加密後傳給 A
理論上 A 和 B 都不會發現訊息被竊聽,所以今天一般用可靠的第三方機構簽發憑證來防止這樣的攻擊