《白帽子講Web安全》筆記11-17章從頭學起=》Web安全學習系列(1)
一步一步=》Web安全學習系列(2)
轉載請注明出處:http://blog.csdn.net/cym492224103
-
- 第11章 加密算法與随機數
- 針對加密攻擊
- Stream Cipher Attack
- ECB模式的缺陷
- 密鑰管理
- 建議
- 第12章 Web架構安全
- 第13章 應用層拒絕服務攻擊
- 本質
- 防禦措施
- Slowloris攻擊
- 第14章 PHP安全
- 檔案包含漏洞
- 變量覆寫漏洞
- 代碼執行漏洞
- 定制安全的PHP環境
- 第15章 WebServer配置安全
- WebServer的安全
- Apache安全
- Nginx安全
- JBoss遠端指令執行
- Tomcat遠端指令執行
- 第16章 網際網路業務安全
- 安全是一個産品的特性
- 賬号被盜途徑
- 第17章 安全開發流程SDL
- 微軟的安全開發流程
- SDL實戰經驗
- 第11章 加密算法與随機數
第11章 加密算法與随機數
針對加密攻擊
唯密文攻擊
攻擊者有一些密文,他們是使用同一加密算法和同一密鑰加密的。這種攻擊是最難的。
已知明文攻擊
知道對應密文的明文。
選擇明文攻擊
不僅知道一些密文和明文,還能選擇用于加密的明文。
選擇密文攻擊
攻擊者選擇不同的密文來解密。
Stream Cipher Attack
流密碼的加密基于異或(XOR)操作進行的,每次都隻操作一個位元組。性能非常好。
常見的流加密算法:RC4\ORYX\SEAL等。
破解攻擊:Reused Key Attack
假設密鑰C,明文A,明文B,那麼XOR加密可表示
E(A)= A xor C
E(B)= B xor C
密文是公之于衆,是以很容易可計算:
E(A)xor E(B)
是以兩個相同的數進行XOR運算結果為0,有此可得:
E(A)xor E(B)=(A xor C)xor(B xor C)=A xor B xor C xor C = A xor B
進而得到
E(A)xor E(B) = A xor B
通過規則破解加密
ECB模式的缺陷
對于ECB模式來說,改變分組密文的順序,将改變解密後的明文順序,替換某個分組密文,解密後該對應分組的明文也會被替換,而其他分組不收影響。
當需要加密的明文多于一個分組長度時,應該避免使用ECB模式。
密鑰管理
在密碼學裡有個基本的原則:密碼系統的安全性應該依賴于秘鑰的複雜性,而不應該依賴于算法保密性。
密鑰管理中最常見的錯誤,就是将密鑰碼在代碼裡。
寫死的密鑰存在的問題
1.代碼被傳播,可能被逆向。
2.軟體開發人員都能檢視代碼,可能會由人員洩露代碼。
常見做法将密鑰儲存在配置檔案或者資料庫。(定時更換密鑰)
順序增長有可能被預測,可以使用随機數。
在重要和敏感的系統中我們要使用安全的随機數生成算法。在java中,我們可以使用
java.security.SecureRandom
建議
在加密算法的選擇和使用上:
1.不要使用ECB模式
2.不要使用流密碼(比如:RC4)
3.使用HMAC-SHA1代替MD5(甚至代替SHA1)
4.不要使用相同的key做不同的事情
5.salts與IV需要随機生成
6.不要自己實作加密算法,盡量使用安全專家已經實作好的庫
7.不要依賴系統的保密性
當你不知道如何選擇時有一下建議:
1.使用CBC模式的AES256用于加密
2.使用HMAC-SHA512用于完整性檢查
3.使用帶salt的SHA-256或SHA-512用于Hashing
第12章 Web架構安全
優秀的安全方案:在正确的地方,做正常的事。
XSS:過濾文本。
CSRF:所有寫操作所要使用POST,每次操作請求都需要插入token的HTTP頭。
HTTP Response:web架構設定跳轉函數的白名單。
Cookie劫持:添加HttpOnly
SQL注入:預編譯函數。
第13章 應用層拒絕服務攻擊
DDOS又稱分布式拒絕服務,全稱Distributed Denial of Service.
DDOS本是利用合理的請求造成資源過載,導緻服務不可用。
本質
分布式拒絕服務攻擊,将正常請求放大若幹倍,通過若過個網絡節點同時發起攻擊,以達成規模效應。這些網絡節點往往是黑客們所控制的“殭屍電腦”,數量達到一定規模後,就形成了一個“僵屍網絡”。大型的僵屍網絡,甚至達到了數萬、數十萬台的規模。如此規模的僵屍網絡發起的DDOS攻擊,幾乎是不可阻擋的。
防禦措施
1.限制請求頻率
在應用中針對每個“用戶端”做一個請求頻率的限制。
2.驗證碼
阻止自動化重放行為
3.伺服器配置
Apache配置:調小Timeout、KeepAliveTimeout值、增加MaxClients值。
Apache提供的子產品接口為我們擴充Apache、設計防禦措施提供了可能。目前已經有一些開源的Module實作了針對應用層DDOS保護攻擊。
mod_qos是Apache的一個Module,它開源幫助緩解應用層的DDOS攻擊。
思路:限制IP通路頻率。
如果攻擊者使用代理伺服器,傀儡機進行攻擊,該如何有效的保護網站呢?
Yahoo提供解決思路:跟進IP位址和Cookie等資訊,可以計算客服端的請求頻率并進行攔截。
Slowloris攻擊
原理:極低的速度往伺服器發送HTTP請求,占用請求連接配接數不釋放,無法接受新的請求,導緻拒絕服務。
要保持住這個連接配接,RSnake構造了一個畸形的HTTP請求,準确地說,是一個不完整的HTTP請求。
在正常的HTTP標頭中,以兩個CLRF表示HTTP Headers部分結束。
正常的 Content-Length:42\r\n\r\n 處理後的 42\r\n
由于web service隻收到一個\r\n,是以認為還沒結束,并保持此連接配接。
此類拒絕服務攻擊本質,實際上是對有限的資源的無限制濫用。
HTTP Request Header長度最大8192位元組。
HTTP Request Body預設限制大小2GB。
正則寫不好可能被惡意輸入利用,消耗大量資源,進而導緻DOS。這種攻擊叫做ReDos。
第14章 PHP安全
檔案包含漏洞
include()
require()
include_once()
require_once()
當使用這四個函數包含一個新的檔案時,該檔案将作為PHP代碼執行,PHP核心并不會在意該被包含檔案是什麼類型。
利用漏洞需要兩個條件:
1.包含檔案為動态變量
2.使用者能夠控制該變量
要解決檔案包含漏洞,避免包含動态的變量,尤其是使用者可以控制的變量。
一種變通方式,使用枚舉:
<?php
switch($file)
case ‘main’:
include ‘xxxxxx’;
break;
case ‘xxx’:
include ‘xxxxxx’;
break;
default:
include ‘xxxxxx’;
?>
遠端檔案包含漏洞( RFI:Remote File Inclusion)
PHP配置allow_url_include為ON的話,則include/require函數可以加載遠端檔案。
變量覆寫漏洞
當register_globals為ON時,送出請求URL:hit://www.a.com/test.php?auth=1變量$auth将自動得到指派。
安全建議:
首先,確定register_globals=OFF.若不能自定義php.ini,則應該在代碼中控制。
其次,熟悉可能造成變量覆寫的函數和方法,檢查使用者是否能夠控制變量的來源。
最後,養成初始化變量的好習慣。
代碼執行漏洞
挖掘漏洞的過程,通常需要先找到危險函數,然後回溯函數的調用過程,最終看在整個調動過程中使用者是否有可能控制輸入。
PHP有很多函數可以直接執行代碼的函數:比如:eval()、assert()、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec()等。
一般來說最好禁用這些函數。
定制安全的PHP環境
register_globals = OFF(防止變量覆寫)
allow_url_include = OFF(加載遠端檔案)
allow_url_open = OFF(打開遠端檔案)
display_errors = OFF(錯誤回顯)
log_errors= OFF(錯誤日志)
cgi.fix_pathinfo = 0(避免檔案解析問題)
session.cookie_httponly = 1(開啟HttpOnly,包含cookie)
session.cookie_secure = 1(若是全站HTTPS則請開啟)
第15章 WebServer配置安全
WebServer的安全:
1.本身是否安全。
2.是否提供安全功能。
Apache安全:
1.檢查Module的安裝情況,根據最小權限原則,應該盡可能的減少不必要的Module,對于要使用的Module,則檢查其對應的版本是否存在已知的安全漏洞。
2.Apache以root身份或者admin身份運作是一個非常糟糕的決定,最好使用隻有運作web應用的權限使用者身份運作。
3.Apache還提供了一些配置參數優化伺服器的性能,提高對抗DDOS攻擊能力。詳細請看“《web安全》第13章 應用層拒絕服務攻擊”
Nginx安全:
1.Nginx與Apache最大的差別在于,檢查Apache安全時需要更多的要關注Module的安全,而Nginx則需要關注軟體本身,及時更新軟體版本。
2.Nginx的配置非常靈活,可以做一些簡單的條件判斷,比如客服端的User-Agent具有什麼特征。
JBoss遠端指令執行
1.預設安裝時通路JMX-Console是沒有任何認證的。
2.通過DeploymentScanner遠端加載一個war包。
Tomcat遠端指令執行
和Boss一樣,可以直接通路控制頁面,管理者可以通過控制頁面部署war包。
第16章 網際網路業務安全
安全是一個産品的特性
如果我們的産品能夠潛移默化的培養使用者的安全習慣,将使用者往更安全的行為上引導,那麼這樣的安全就是最理想的産品安全。
提高注冊門檻,防止垃圾注冊。
賬号被盜途徑:
1、網站登入過程中無HTTPS,密碼在網絡中嗅探。
2、使用者電腦中了木馬,密碼被鍵盤記錄軟體所擷取。
3、使用者被釣魚網站所迷惑,密碼被釣魚網站所騙取。
4、網站某登入入口可以被暴力破解。
5、網站密碼取回流程存在邏輯漏洞。
6、網站存在XSS等客服端腳本漏洞,使用者賬戶被間接竊取。
7、網站存在SQL注入等伺服器漏洞,網站被黑客入侵導緻使用者賬戶資訊洩露。
第17章 安全開發流程(SDL)
微軟的安全開發流程:
1.教育訓練
2.安全要求
3.bug欄
4.安全和隐私風險評估
5.設計要求
6.減小攻擊面
7.威脅模組化
8.使用指定的工具
9.棄用不安全函數
10.靜态分析
11.動态程式分析
12.模糊測試
13.威脅模型和攻擊面評價
14.事件響應計劃
15.最終安全評析
16.釋出/存檔
SDL實戰經驗
1、與項目經理進行充分溝通,排出足夠事件。
2、規範公司的立項流程,確定所有項目都能通知到安全團隊,避免遺漏。
3、梳理安全的部門的權威,項目必須由安全部門稽核完成後才能釋出。
4、将技術方案寫入開發、測試工作手冊中。
5、給工程師教育訓練安全方案。
6、記錄所有安全BUG,激勵程式員編寫安全的代碼。