《白帽子講WEB安全》讀書(shū)筆記

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)控制

第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ù)端資源的目的
      • 防御:
        1. 限制請(qǐng)求頻率:最常見(jiàn)的措施
        2. 應(yīng)用層代碼優(yōu)化
        3. 網(wǎng)絡(luò)架構(gòu)優(yōu)化,負(fù)載均衡,CDN和鏡像站點(diǎn)分流
        4. 限制ip請(qǐng)求頻率
        5. 驗(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

第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è)階段:
    1. 培訓(xùn):開(kāi)發(fā)團(tuán)隊(duì)所有成員都必須進(jìn)行適當(dāng)?shù)呐嘤?xùn),了解安全知識(shí)
    2. 安全要求:項(xiàng)目確立之前就要知道安全的要求
    3. 質(zhì)量門(mén)/bug欄:在項(xiàng)目開(kāi)始時(shí)定義的標(biāo)準(zhǔn),用于確定安全和隱私質(zhì)量的最低可接受級(jí)別
    4. 安全和隱私風(fēng)險(xiǎn)評(píng)估:對(duì)功能進(jìn)行安全風(fēng)險(xiǎn)評(píng)估(SRA)和隱私風(fēng)險(xiǎn)評(píng)估(PRA)
    5. 設(shè)計(jì)要求: 設(shè)計(jì)階段仔細(xì)考慮安全需求
    6. 減小攻擊面:如關(guān)閉或限制對(duì)系統(tǒng)服務(wù)的訪問(wèn)
    7. 威脅建模:為項(xiàng)目面臨的威脅建立模型,可參考微軟提出的STRIDE模型
    8. 使用特定工具:規(guī)定開(kāi)發(fā)團(tuán)隊(duì)使用的工具版本
    9. 棄用不安全函數(shù):使用安全團(tuán)隊(duì)推薦的函數(shù)
    10. 靜態(tài)分析:由相關(guān)輔助工具完成代碼靜態(tài)分析,其結(jié)果與人工分析結(jié)合
    11. 動(dòng)態(tài)程序分析:用于測(cè)試環(huán)節(jié)驗(yàn)證程序的安全性
    12. 模糊測(cè)試(Fuzzing Test):通過(guò)故意引入不良代碼和隨機(jī)數(shù)據(jù)來(lái)誘發(fā)程序故障
    13. 威脅模型和攻擊面評(píng)析:由于項(xiàng)目會(huì)經(jīng)常變更,所以需要重新對(duì)威脅模型和攻擊面進(jìn)行評(píng)析
    14. 事件響應(yīng)計(jì)劃:每個(gè)軟件在發(fā)布時(shí)都必須包含事件響應(yīng)計(jì)劃
    15. 最終安全評(píng)析(FSR):發(fā)布之前仔細(xì)檢查所有軟件執(zhí)行的安全活動(dòng)
    16. 發(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)則
    1. 與項(xiàng)目經(jīng)理進(jìn)行充分溝通,排出足夠時(shí)間。
    2. 規(guī)范公司的立項(xiàng)流程,確保所有項(xiàng)目都能通知到安全團(tuán)隊(duì)。
    3. 樹(shù)立安全部門(mén)的權(quán)威,項(xiàng)目必須由安全部門(mén)審核后才能發(fā)布。
    4. 將技術(shù)方案寫(xiě)入開(kāi)發(fā)、測(cè)試的工作手冊(cè)中。
    5. 給工程師培訓(xùn)安全方案。
    6. 記錄所有的安全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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容