
1550148500(1).jpg
第1章 我的安全世界觀
==互聯(lián)網(wǎng)本來(lái)是安全的,因?yàn)橛辛搜芯堪踩娜怂圆艜?huì)不安全。==
Web安全簡(jiǎn)史
- “黑客”渴望root權(quán)限
- 黑客們使用的漏洞利用代碼被稱為”exploit“
- 黑客的發(fā)展分為:?jiǎn)⒚蓵r(shí)代、黃金時(shí)代、黑暗時(shí)代
黑帽子,白帽子
- 黑帽子指利用黑客技術(shù)造成破壞,甚至進(jìn)行網(wǎng)絡(luò)犯罪的群體
- 白帽子指精通安全技術(shù),但是工作在反黑客領(lǐng)域的專家們
安全的本質(zhì)
- 安全問(wèn)題的本質(zhì)是信任的問(wèn)題
- 安全是一個(gè)持續(xù)的過(guò)程
安全三要素
- 機(jī)密性、完整性、可用性
如何實(shí)施安全評(píng)估
- 評(píng)估4個(gè)階段:資產(chǎn)等級(jí)劃分、威脅分析、風(fēng)險(xiǎn)分析、確認(rèn)解決方案
- 優(yōu)秀的安全方案應(yīng)具備的特點(diǎn):
- 能夠有效的解決問(wèn)題
- 用戶體驗(yàn)好
- 高性能
- 低耦合
- 易于擴(kuò)展和升級(jí)
白帽子兵法
- Secure by default、最小權(quán)限、縱深防御、數(shù)據(jù)代碼分離、不可預(yù)測(cè)性 五大原則
第2章 瀏覽器安全
同源策略
- 同源策略是瀏覽器最核心也是最基本的安全功能
瀏覽器沙箱
- 掛馬:指利用瀏覽器漏洞執(zhí)行任意代碼的攻擊方式。
- sandbox即沙箱,讓不可信任代碼運(yùn)行在一定環(huán)境中,限制訪問(wèn)隔離區(qū)之外的資源
惡意網(wǎng)址攔截
- 工作原理:就是瀏覽器維護(hù)一個(gè)惡意網(wǎng)址的黑名單,如果用戶訪問(wèn)在黑名單上的網(wǎng)址,就會(huì)彈出一個(gè)警告頁(yè)面。
- 分類:一類是掛馬網(wǎng)站,是指利用瀏覽器漏洞來(lái)執(zhí)行惡意代碼,另一類是釣魚(yú)網(wǎng)站,是指模仿知名網(wǎng)站的相似頁(yè)面來(lái)欺騙用戶。
第3章 跨站腳本攻擊(XSS)
XSS簡(jiǎn)介
- 概念:黑客通過(guò)“HTML注入”篡改網(wǎng)頁(yè),插入惡意腳本,從而在用戶瀏覽網(wǎng)頁(yè)時(shí),控制用戶瀏覽器。
- 根據(jù)效果分類:
- 反射型XSS:簡(jiǎn)單地把用戶輸入的數(shù)據(jù)反射給瀏覽器。
- 存儲(chǔ)型XSS:會(huì)把用戶輸入的數(shù)據(jù)存儲(chǔ)在服務(wù)器端,這種XSS具有穩(wěn)定性。
XSS攻擊進(jìn)階
- XSS Payload 是指攻擊成功后執(zhí)行的惡意腳本
- XSS可以實(shí)現(xiàn)哪些事
- 常見(jiàn)的XSS Payload就是“cookie劫持”
- Cookie的“HttpOnly”標(biāo)識(shí)可以防止“cookie劫持”
- 構(gòu)造get與post請(qǐng)求
- XSS釣魚(yú)
- 識(shí)別用戶瀏覽器:userAgent,通過(guò)分析瀏覽器特性來(lái)區(qū)分
- 識(shí)別用戶安裝的軟件
- CSS History Hack:通過(guò)css可以發(fā)現(xiàn)用戶曾經(jīng)訪問(wèn)過(guò)的網(wǎng)站
- 獲取用戶的真實(shí)ip
- XSS攻擊平臺(tái):Attack API;BeEf;XSS-Proxy
- XSS構(gòu)造技巧:
- 利用字符編碼
- 繞過(guò)長(zhǎng)度限制
- 使用<Base>標(biāo)簽
- Window.name:可以實(shí)現(xiàn)跨域,跨頁(yè)面?zhèn)鬟f數(shù)據(jù)
- Xss防御
- HttpOnly: set-cookie標(biāo)記httpOnly屬性,解決cookie劫持
- 輸入檢查:普遍做法是同時(shí)在客戶端和服務(wù)端代碼中實(shí)現(xiàn)相同的檢查
- 過(guò)濾和轉(zhuǎn)義特殊字符或匹配Xss特征的敏感字符如“<script>”等
- 輸入檢查的方式被成為“XSS Filter”,已經(jīng)有很多開(kāi)源的實(shí)現(xiàn)
- Xss Filter可能會(huì)改變用戶數(shù)據(jù)的語(yǔ)義
- 輸出檢查:編碼,轉(zhuǎn)義
- 正確地防御XSS
- Xss的本質(zhì)是一種“HTML注入”
第4章 跨站點(diǎn)請(qǐng)求偽造(CSRF)
CSRF簡(jiǎn)介
- 與XSS不同,XSS利用站點(diǎn)內(nèi)的信任用戶,而CSRF則通過(guò)偽裝來(lái)自受信任用戶的請(qǐng)求來(lái)利用受信任的網(wǎng)站
CSRF進(jìn)階
- 瀏覽器cookie:一種是Session Cookie,沒(méi)有指定expire,瀏覽器關(guān)閉,cookie就失效,另一種是Third-party-Cookie,又稱為本地cookie,只有expire時(shí)間到了后才會(huì)失效。
- 默認(rèn)會(huì)攔截本地cookie的有:IE6,7,8,Safari
- 如果當(dāng)前瀏覽器會(huì)攔截本地cookie,那就需要攻擊者構(gòu)造攻擊環(huán)境,誘使用戶在瀏覽器中先訪問(wèn)目標(biāo)站點(diǎn),使session cookie生效,再進(jìn)行CSRF攻擊
- 如果CSRF要攻擊的目標(biāo)不需要使用Cookie,那就不用考慮瀏覽器的cookie策略了
- sessioncookie是保存在瀏覽器進(jìn)程中的而Third-party-Cookie是保存在本地的
- 如果網(wǎng)站返回給瀏覽器的HTTP頭中攜帶有P3P頭,將允許瀏覽器發(fā)送第三方Cookie,即使在ie下也不會(huì)攔截。但是由于cookie是以域和path為單位的,p3p頭的設(shè)置會(huì)影響整個(gè)域的所有頁(yè)面。
- 對(duì)于CSRF的防御不能依賴瀏覽器的cookie攔截策略
- 不僅是get,CSRF也可以發(fā)起post請(qǐng)求
- CSRF本質(zhì)
- 所有重要的參數(shù)都能被攻擊者猜測(cè)到,所有參數(shù)和值都能猜到就可以構(gòu)造偽造的請(qǐng)求
- CSRF防御:
- 驗(yàn)證碼:最簡(jiǎn)潔有效的防御手段,但是用戶體驗(yàn)差。
- Referer Check:也可以被用于檢查請(qǐng)求是否來(lái)自合法的源,但是服務(wù)器端并不是任何時(shí)候都可以獲取到Referer,所以不能作為主要防御手段。
- Anti Csrf token:使用token是業(yè)界一致的做法,token的生成需要具有隨機(jī)性和保密性
- 如果網(wǎng)站存在XSS漏洞,那么token防御Csrf也就沒(méi)用了
第5章 點(diǎn)擊劫持(ClickJacking)
點(diǎn)擊劫持簡(jiǎn)介
點(diǎn)擊劫持是一種視覺(jué)上的欺騙手段。攻擊者使用一個(gè)透明的、不可見(jiàn)的iframe,覆蓋在一個(gè)網(wǎng)頁(yè)上,然后誘使用戶在該網(wǎng)頁(yè)上進(jìn)行操作,此時(shí)用戶將在不知情的情況下點(diǎn)擊透明的iframe頁(yè)面。通過(guò)調(diào)整iframe頁(yè)面的位置,可以誘使用戶恰好點(diǎn)擊在iframe頁(yè)面的一些功能性按鈕上。
點(diǎn)擊劫持攻擊方式
- Flash點(diǎn)擊劫持
- 圖片覆蓋攻擊:劫持攻擊的本質(zhì)是視覺(jué)欺騙,所以圖片覆蓋也能起到類似作用
- 拖曳劫持與數(shù)據(jù)竊取:拖曳劫持的思路是誘使用戶從隱藏的iframe中拖曳出攻擊者希望得到的數(shù)據(jù),然后放到攻擊者能控制的另外一個(gè)頁(yè)面中,從而竊取數(shù)據(jù)。
- 觸屏劫持
點(diǎn)擊劫持防御
- 一般通過(guò)禁止跨域的iframe來(lái)防范:frame busting,X-Frame-Options
第6章 HTML5 安全
- HTML5新標(biāo)簽的XSS:可能帶來(lái)新的XSS攻擊。
第7章 注入攻擊
- 注入攻擊的本質(zhì)是把用戶輸入的數(shù)據(jù)當(dāng)作代碼執(zhí)行。
- 兩個(gè)關(guān)鍵條件:第一個(gè)是用戶能夠控制輸入,第二個(gè)是原本程序要執(zhí)行的代碼,拼接了用戶輸入的數(shù)據(jù)。
SQL注入
- 發(fā)現(xiàn)漏洞方式
- 攻擊者通過(guò)web服務(wù)器的錯(cuò)誤回顯構(gòu)造sql注入語(yǔ)句
- 沒(méi)有錯(cuò)誤回顯一樣可以實(shí)現(xiàn)注入,就是所謂的盲注,是通過(guò)簡(jiǎn)單的條件判斷對(duì)比返回結(jié)果來(lái)發(fā)現(xiàn)漏洞。
- 常見(jiàn)數(shù)據(jù)庫(kù)攻擊方式
- sqlmap.py:自動(dòng)化注入工具
- 自定義函數(shù)
- 存儲(chǔ)過(guò)程
- 編碼問(wèn)題:“基于字符集”注入
- SQL Column Truncation
- sql注入的防御
- 建立數(shù)據(jù)庫(kù)賬號(hào)時(shí)要遵循“最小權(quán)限”原則,每個(gè)應(yīng)用分配不同的賬號(hào),且賬號(hào)不應(yīng)該具有創(chuàng)建自定義函數(shù)和操作本地文件的權(quán)限
- 使用預(yù)編譯語(yǔ)句:這是防御sql注入的最佳方式,攻擊者無(wú)法改變sql語(yǔ)句的結(jié)構(gòu)
- 使用存儲(chǔ)過(guò)程:但是存儲(chǔ)過(guò)程也存在注入風(fēng)險(xiǎn),所以應(yīng)避免在存儲(chǔ)過(guò)程中使用動(dòng)態(tài)語(yǔ)句
- 檢查數(shù)據(jù)類型:比如限制輸入為Intger類型,比如限制輸入為日期格式等
- 使用安全函數(shù)
其他注入攻擊
除了sql注入外,在web安全領(lǐng)域還有其他注入攻擊,這些注入攻擊都有相同的特點(diǎn),就是應(yīng)用違背了“數(shù)據(jù)與代碼分離”原則。
- XML注入
- 代碼注入
- CRLF注入
總結(jié)
==在“拼湊”發(fā)生的地方進(jìn)行安全檢查,就能避免注入攻擊==
第8章 文件上傳漏洞
文件上傳漏洞簡(jiǎn)介
- 文件上傳漏洞:用戶上傳了一個(gè)可執(zhí)行的腳本文件并通過(guò)此腳本獲得了執(zhí)行服務(wù)器端命令的能力。這種方式非常有效且沒(méi)有什么技術(shù)門(mén)檻
- 導(dǎo)致的安全問(wèn)題:
- 上傳web腳本語(yǔ)言,服務(wù)器的web容器解釋并執(zhí)行了腳本
- 上傳flash策略文件
- 上傳文件是病毒,木馬,黑客誘騙用戶或管理員下載執(zhí)行
- 上傳的是釣魚(yú)圖片或包含了腳本的圖片,某些版本的瀏覽器會(huì)作為腳本執(zhí)行
- 完成攻擊需要滿足的條件
- 文件能被web容器解釋執(zhí)行:上傳的路徑需要被web容器所覆蓋
- 用戶能夠從web上訪問(wèn)這個(gè)文件
- 文件不能被安全檢查,格式化等方式改變內(nèi)容
- 防御文件上傳漏洞:
- 文件上次的目錄設(shè)置為不可執(zhí)行
- 判斷文件類型:MIME TYPE、后綴檢查。推薦使用白名單的方式,黑名單方式是不可靠的
- 對(duì)于圖片的處理,可以使用壓縮函數(shù)或者resize函數(shù),破壞圖片中可能包含的代碼
- 使用隨機(jī)數(shù)改寫(xiě)文件名和文件路徑
- 單獨(dú)設(shè)置文件服務(wù)器的域名
第9章 認(rèn)證與會(huì)話管理
認(rèn)證的目的是為了認(rèn)出用戶是誰(shuí),而授權(quán)的目的是為了決定用戶能做什么。
- 黑客們廣泛使用的一種破解MD5加密的方法是“彩虹表(Rainbow Table)”,可以通過(guò)加salt的方式使彩虹表攻擊失效
- 多因素認(rèn)證,比如網(wǎng)上支付平臺(tái)的數(shù)字證書(shū),動(dòng)態(tài)口令等
- session劫持是指通過(guò)竊取用戶的SessionId后,使用該SessionId登錄進(jìn)用戶賬戶的攻擊方式
- session Fixation 攻擊
- 概念:比如A把汽車(chē)賣(mài)給B,但沒(méi)把所有的鑰匙給B。B如果沒(méi)換鎖就導(dǎo)致了session fixation問(wèn)題
- 解決方法:登錄完成后,重寫(xiě)SessionId
- session 保持攻擊
-session一般是由周期的,但是如果session一直不失效就會(huì)出現(xiàn)session保持攻擊
-解決方法:
- 強(qiáng)制銷毀session
- 一個(gè)用戶只能擁有一個(gè)session
- 當(dāng)客戶端發(fā)生變化時(shí),要求用戶重新登錄
第10章 訪問(wèn)控制
- 分類:
- 垂直權(quán)限管理:基于角色的權(quán)限管理(RABC模型)
- 在配置權(quán)限時(shí)用遵循“最小權(quán)限原則”,并使用“默認(rèn)拒絕”的策略,只對(duì)需要的主體單獨(dú)配置“允許”的策略
- 水平權(quán)限管理:基于數(shù)據(jù)的訪問(wèn)控制
- 垂直權(quán)限管理:基于角色的權(quán)限管理(RABC模型)
第11章 加密算法與隨機(jī)數(shù)
- 分類
- 唯密文攻擊
- 已知明文攻擊
- 選擇明文攻擊
- 選擇密文攻擊
- 原則:密碼系統(tǒng)的安全性應(yīng)該依賴于密鑰的復(fù)雜性,而不應(yīng)該依賴于算法的保密性
第12章 Web框架安全
- MVC框架數(shù)據(jù)流向:view層,controller層,model層,數(shù)據(jù)的流出則是反過(guò)來(lái)
- MVC框架防御XSS攻擊在view層
- Mvc框架防御SQL注入攻擊在model層
- Mvc框架防御CSRF攻擊:通過(guò)添加security token
第13章 應(yīng)用層拒絕服務(wù)攻擊
- DDOS簡(jiǎn)介:
DDOS又稱為分布式拒絕服務(wù),是指利用合理的請(qǐng)求造成資源過(guò)載,導(dǎo)致服務(wù)不可用。
- 應(yīng)用層DDOS攻擊:所有ip地址都是真實(shí)的,針對(duì)服務(wù)器性能的攻擊。
- cc攻擊:原理就是對(duì)一些消耗資源較大的應(yīng)用頁(yè)面不斷發(fā)起正常的請(qǐng)求,以達(dá)到消耗服務(wù)端資源的目的
- 防御:
- 限制請(qǐng)求頻率:最常見(jiàn)的措施
- 應(yīng)用層代碼優(yōu)化
- 網(wǎng)絡(luò)架構(gòu)優(yōu)化,負(fù)載均衡,CDN和鏡像站點(diǎn)分流
- 限制ip請(qǐng)求頻率
- 驗(yàn)證碼
- 防御:
- 資源耗盡攻擊:攻擊者利用web sever的漏洞或設(shè)計(jì)缺陷,直接造成拒絕服務(wù)的攻擊
- slowloris攻擊:以極低的速度向服務(wù)器發(fā)送HTTP請(qǐng)求,占用連接。
- HTTP POST DOS:指定非常大的Content-length值,然后以很低的速度發(fā)包
- Server Limit DOS:由cookie造成的一種拒絕服務(wù),通過(guò)XSS攻擊將cookie值設(shè)置為超長(zhǎng),由于Web Server對(duì)HTTP頭有長(zhǎng)度限制,導(dǎo)致請(qǐng)求不成功。
- ReDOS,由正則表達(dá)式造成的DDOS
- cc攻擊:原理就是對(duì)一些消耗資源較大的應(yīng)用頁(yè)面不斷發(fā)起正常的請(qǐng)求,以達(dá)到消耗服務(wù)端資源的目的
第14章 PHP安全
- 文件包含漏洞:代碼注入的一種
- 變量覆蓋漏洞
- 代碼執(zhí)行漏洞
第15章 Web Server配置安全
Web服務(wù)器安全考慮的是應(yīng)用部署時(shí)的運(yùn)行環(huán)境安全,包括Web Server、腳本語(yǔ)言解釋器、中間件等軟件,這些軟件提供的一些配置參數(shù),起到安全保護(hù)作用。
- 關(guān)注點(diǎn):一是web server本身是否安全 二是是否提供了可使用了安全功能
- 應(yīng)該用專門(mén)的用戶身份運(yùn)行web server,這個(gè)用戶不應(yīng)該具備shell權(quán)限,它的唯一作用是來(lái)運(yùn)行web應(yīng)用。
- web server如apache提供了一些配置參數(shù),可以用來(lái)優(yōu)化服務(wù)器性能,從而提高對(duì)抗DDOS的攻擊能力。
- log要保存好,甚至可以實(shí)時(shí)的發(fā)送到遠(yuǎn)程服務(wù)器做備份
第16章 互聯(lián)網(wǎng)業(yè)務(wù)安全
- 一般來(lái)說(shuō),安全是產(chǎn)品的一個(gè)特性,安全本身可視為產(chǎn)品的一個(gè)組成部分
- 一個(gè)安全方案至少還需要具備的條件:良好的用戶體驗(yàn),優(yōu)秀的性能
- “威脅分析”是設(shè)計(jì)安全方案的基礎(chǔ)
第17章 安全開(kāi)發(fā)流程(SDL)
- 安全的開(kāi)發(fā)流程,能夠幫助企業(yè)以最小的成本提高產(chǎn)品的安全性
- SDL簡(jiǎn)介:由微軟提出,通過(guò)對(duì)軟件工程的控制,保證產(chǎn)品的安全
- SDL分為16個(gè)階段:
- 培訓(xùn):開(kāi)發(fā)團(tuán)隊(duì)所有成員都必須進(jìn)行適當(dāng)?shù)呐嘤?xùn),了解安全知識(shí)
- 安全要求:項(xiàng)目確立之前就要知道安全的要求
- 質(zhì)量門(mén)/bug欄:在項(xiàng)目開(kāi)始時(shí)定義的標(biāo)準(zhǔn),用于確定安全和隱私質(zhì)量的最低可接受級(jí)別
- 安全和隱私風(fēng)險(xiǎn)評(píng)估:對(duì)功能進(jìn)行安全風(fēng)險(xiǎn)評(píng)估(SRA)和隱私風(fēng)險(xiǎn)評(píng)估(PRA)
- 設(shè)計(jì)要求: 設(shè)計(jì)階段仔細(xì)考慮安全需求
- 減小攻擊面:如關(guān)閉或限制對(duì)系統(tǒng)服務(wù)的訪問(wèn)
- 威脅建模:為項(xiàng)目面臨的威脅建立模型,可參考微軟提出的STRIDE模型
- 使用特定工具:規(guī)定開(kāi)發(fā)團(tuán)隊(duì)使用的工具版本
- 棄用不安全函數(shù):使用安全團(tuán)隊(duì)推薦的函數(shù)
- 靜態(tài)分析:由相關(guān)輔助工具完成代碼靜態(tài)分析,其結(jié)果與人工分析結(jié)合
- 動(dòng)態(tài)程序分析:用于測(cè)試環(huán)節(jié)驗(yàn)證程序的安全性
- 模糊測(cè)試(Fuzzing Test):通過(guò)故意引入不良代碼和隨機(jī)數(shù)據(jù)來(lái)誘發(fā)程序故障
- 威脅模型和攻擊面評(píng)析:由于項(xiàng)目會(huì)經(jīng)常變更,所以需要重新對(duì)威脅模型和攻擊面進(jìn)行評(píng)析
- 事件響應(yīng)計(jì)劃:每個(gè)軟件在發(fā)布時(shí)都必須包含事件響應(yīng)計(jì)劃
- 最終安全評(píng)析(FSR):發(fā)布之前仔細(xì)檢查所有軟件執(zhí)行的安全活動(dòng)
- 發(fā)布、存檔
- SDL適用于瀑布法進(jìn)行開(kāi)發(fā)的軟件團(tuán)隊(duì),對(duì)于敏捷開(kāi)發(fā)團(tuán)隊(duì),則難以適應(yīng)
- 敏捷的SDL就是以變化的觀點(diǎn)來(lái)實(shí)施安全工作,在每個(gè)階段都要更新威脅模型和隱私策略
- SDL實(shí)戰(zhàn)準(zhǔn)則
- 與項(xiàng)目經(jīng)理進(jìn)行充分溝通,排出足夠時(shí)間。
- 規(guī)范公司的立項(xiàng)流程,確保所有項(xiàng)目都能通知到安全團(tuán)隊(duì)。
- 樹(shù)立安全部門(mén)的權(quán)威,項(xiàng)目必須由安全部門(mén)審核后才能發(fā)布。
- 將技術(shù)方案寫(xiě)入開(kāi)發(fā)、測(cè)試的工作手冊(cè)中。
- 給工程師培訓(xùn)安全方案。
- 記錄所有的安全bug,激勵(lì)程序員編寫(xiě)安全的代碼。
- 可以通過(guò)“web安全掃描器”對(duì)項(xiàng)目或產(chǎn)品進(jìn)行漏洞掃描
第18章 安全運(yùn)營(yíng)
- 互聯(lián)網(wǎng)公司如何規(guī)劃安全藍(lán)圖:find and fix,defend and defer,secure at the source