WHAT
項(xiàng)目中必須對應(yīng)的隱性需求-安全漏洞修復(fù)
WHY
????小時候下圍棋,總樂于持白子。因?yàn)槲业拇蚍ㄊ恰皬哪抢飦砦夷睦锒隆?,在防守中尋找對方的漏洞。這種作戰(zhàn)方法是有底層的思想根因的:就是懶惰。不愿意去主動思考布局。
????在這一思想的引導(dǎo)下,我目前正面臨著過去十多年積累起來的困境。記得大學(xué)之前,面對一個認(rèn)識的人,我心里是有預(yù)期的。我大體知道這個人在想什么。慢慢的,除了我周圍的親人,其他人站在我面前我大腦一片空白。曾經(jīng)以為這是因?yàn)槲颐鎸Φ沫h(huán)境更加復(fù)雜了。后來細(xì)想這不是本因,本因是我正一點(diǎn)點(diǎn)的失去獲得常識的能力。
? ? 小時候很愛大自己十歲的親哥哥,他不喜歡我,視我為資源掠奪者。我想當(dāng)時是遇到過一些事情,但不至于是什么忍受不了的大事。我卻選擇了逃避,在上大學(xué)時消除了自己的部分記憶。怕壓力,第一份工作在一個二線城市世外桃源一樣的大園子里上班。后來想換地方,找了現(xiàn)在的老公先給我鋪路。因?yàn)楫厴I(yè)比同齡人略早些,所以在沒有結(jié)婚壓力的時候就結(jié)婚了,沒有生子壓力的時候就生娃了。仗著運(yùn)氣好嫁對了人,萬事不操心,過著白癡一樣的生活。不知己之痛,更不知別人之痛。所以常識漸失。
????電視劇《黃真伊》里面一句話:藝術(shù)最重要的是痛苦。后來想痛苦大概是最重要一種能力。在設(shè)定項(xiàng)目計劃的時候,最重要的要解決痛點(diǎn)。很多人的成功都來源于夢想和渴望。而夢想和渴望就是求而未得之痛。下棋時更愿意花心思去布局的人必然是對成功渴望更大的人。棋未下,我已經(jīng)輸了。
? ? 安全問題或許是一多半產(chǎn)品人員在提需求的時候都不會特意強(qiáng)調(diào)的東西,卻是對技術(shù)人員來說必須要考慮的常識。XXX被DDos攻擊,系統(tǒng)癱瘓。XXX數(shù)據(jù)泄露導(dǎo)致股價大跌,公司被起訴。最近風(fēng)口浪尖上的臉書照片事件就是血淋漓的例子。一旦遇上,卷鋪蓋走人算是輕的了。如果技術(shù)人員不慎重對待,結(jié)果必然會如現(xiàn)在的我一樣,陷入作繭自縛的困境。
HOW
? ? 今天將一些產(chǎn)品或者上上下下都會考慮的顯性安全需求(如合規(guī)需求)排除在外,總結(jié)下開發(fā)人員必備的安全設(shè)計。在我看來,這個如限流、降級一樣,屬于系統(tǒng)的穩(wěn)定性范疇,當(dāng)然很多人將其獨(dú)立出來作為安全性范疇也是非常合理的。
????這類設(shè)計總結(jié)來說是用來解決兩類問題。一個是自己不作死,另一個是不被別人搞死。
一.不作死
1.1 準(zhǔn)入校驗(yàn)
? ??1.1.1 文本準(zhǔn)入
? ? 1.1.2 操作合理性準(zhǔn)入
1.2 數(shù)據(jù)處理
????1.2.1 輸入轉(zhuǎn)義
? ? 1.2.2 輸出轉(zhuǎn)義
? ? 1.2.3 敏感信息加密
1.3 權(quán)限控制
1.3.1 杜絕批量操作
? ? 1.3.2 限制暴露范圍
二.不被搞死
2.1 應(yīng)對代碼注入
2.1.1 XSS攻擊
? ? 2.1.2 CSRF攻擊
? ? 2.1.3 mysql注入攻擊
2.2 漏洞補(bǔ)丁升級
2.2.1 弱口令漏洞
? ? 2.2.2 開源代碼漏洞
? ? 2.2.3 文件上傳漏洞
2.3 基礎(chǔ)安全設(shè)施
? ? 2.3.1 WAF
? ? 2.3.2 安全審計
? ? 2.3.3 風(fēng)控
? ? 2.3.4 安全監(jiān)控
?
????上面的目錄我先單獨(dú)列一下,希望大家可以記住。都是平時開發(fā)中需要考慮的。下面稍詳細(xì)的介紹一下。
?1.1.1 文本準(zhǔn)入
????做業(yè)務(wù)需求有個常識,對于用戶輸入的每個字段都需要和產(chǎn)品經(jīng)理討論一下:什么類型、長度多少、允許的字符集范圍、格式是否合法。這么做一方面是設(shè)計問題,包括產(chǎn)品設(shè)計、數(shù)據(jù)庫設(shè)計,還有一部分是安全問題:一個數(shù)值型的字段肯定比一個粗放的文本型字段被攻擊的可能性小,起碼不會傳到后端之后被當(dāng)成腳本被執(zhí)行。
1.1.2 操作合理性準(zhǔn)入
? ??比如一個普通用戶不能編輯另一個用戶的個人信息。比如i申請公司服務(wù)器,一次申請1萬臺機(jī)器。比如流量準(zhǔn)入,一臺機(jī)器以超快的速度頻繁訪問一個網(wǎng)站的資訊信息,就可能不是真實(shí)用戶操作而是爬蟲。以上都會對系統(tǒng)安全性產(chǎn)生極大的影響。
1.2.1 輸入轉(zhuǎn)義 &?1.2.2 輸出轉(zhuǎn)義
????我在項(xiàng)目有個原則:盡量保存用戶的原始信息。比如用戶輸入一個頁面腳本編寫方法的文章,在數(shù)據(jù)庫中保存的時候,盡量只轉(zhuǎn)義sql關(guān)鍵字(apache 里有現(xiàn)成的轉(zhuǎn)義方法)而不轉(zhuǎn)義html和js腳本。html和腳本在顯示再做轉(zhuǎn)義。
1.2.3 敏感信息加密
? ??最基本的用戶密碼必須密文存儲,并且不能明文出現(xiàn)在日志中。 其他信息如手機(jī)號、銀行卡號等不能全文顯示。一般的表示方法是XXX***XXXX。
1.3.1 杜絕批量操作?
? ??常規(guī)代碼里的操作都必須是點(diǎn)對點(diǎn)的。批量操作,查詢可以,只要能保證存儲壓力夠。要是批量的執(zhí)行XXX,應(yīng)用場景有:比如臨時的一次性操作。如果是常規(guī)操作,那就必須走審批,而且一次操作必須有個數(shù)限制,保證出了問題影響范圍也可控。
1.3.2 限制暴露范圍
????開發(fā)一整套系統(tǒng)內(nèi)部各個模塊通常有內(nèi)網(wǎng)域名、外網(wǎng)域名或者dubbo這種服務(wù)注冊發(fā)現(xiàn)機(jī)制。這種區(qū)分出了傳輸效率、成本、資源等考慮之外,還有一個很重要的因素就是安全。一個外網(wǎng)服務(wù)肯定要比一個內(nèi)網(wǎng)服務(wù)更可能遭到攻擊。
2.1.1 XSS攻擊
? ??XSS(Cross Site Scripting)攻擊全稱跨站腳本攻擊,是為不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆。它是一種在web應(yīng)用中的計算機(jī)安全漏洞,它允許惡意web用戶將代碼植入到提供給其他用戶使用的頁面中。
危害包括:
1>盜取各類用戶賬號,如機(jī)器登陸賬號、用戶網(wǎng)銀賬號、各類管理員賬號
2>控制企業(yè)數(shù)據(jù),包括讀取、篡改、添加、刪除企業(yè)敏感數(shù)據(jù)的能力。
3>盜竊企業(yè)重要的具有商業(yè)價值的資料
4>非法轉(zhuǎn)賬
5>強(qiáng)制發(fā)送電子郵件
6>網(wǎng)站掛么
7>控制受害者機(jī)器想其他網(wǎng)站發(fā)起攻擊
2.1.2 CSRF攻擊
????CSRF(Cross-site request forgery),中文名稱:跨站請求偽造。也被稱為:one click attack/session riding。區(qū)別于XSS的利用站點(diǎn)內(nèi)的信任用戶,它通過偽裝成受信任用戶的請求來達(dá)到目的。
常見特性:
1>依靠用戶標(biāo)識危害網(wǎng)站
2>利用網(wǎng)站對用戶標(biāo)識的信任
3>欺騙用戶的瀏覽器發(fā)送http請求給目標(biāo)站點(diǎn)
2.1.3 mysql注入攻擊
????概念很好理解不多說。介紹一下種類:
1>GET注入:輸入?yún)?shù)通過URL發(fā)送
2>POST注入:輸出參數(shù)通過HTTP正文發(fā)送
3>COOKIE注入:輸入?yún)?shù)通過HTTP COOKIE發(fā)送
3>HTTP Headers注入:通過HTTP提交應(yīng)用程序使用的頭發(fā)送
2.2.1 弱口令漏洞
????弱口令(weak password)沒有嚴(yán)格和準(zhǔn)確的定義,通過人為容易被別人猜測到或被破解工具破解的口令。主要類別有:
1>空口令或系統(tǒng)缺省的口令
2>口令長度小于8個字符
3>口令為連續(xù)的某個字符或重復(fù)的某些字符
4>口令應(yīng)該為以下四類字符的組合,大寫字母、小寫字母、數(shù)字和特殊字符。沒類字符至少包含一個。如果某類字符只包含一個,那么該字符不應(yīng)為首字符或尾字符。
5>口令不應(yīng)漢堡本人、父母、子女和配偶的姓名和出生日期、紀(jì)念日期、登陸名、email等與本人有關(guān)的信息,以及字典中的單詞。
6>口令不應(yīng)該為用數(shù)據(jù)或符號代替某些字母的單詞
7>至少90天內(nèi)更換一次口令,防止未被發(fā)現(xiàn)的入侵者繼續(xù)使用該口令。
????記得很久之前在日本出差的時候,當(dāng)?shù)厝硕枷掳嗔耍覀冃枰卿浵到y(tǒng)查看東西。但是只有當(dāng)?shù)厝擞忻艽a,還好有我。我在當(dāng)時別人輸出密碼時記住了,省了大事兒。
2.2.2 開源代碼漏洞
????舉幾個例子:
1>Jackson反序列化遠(yuǎn)程代碼執(zhí)行漏洞
北京時間2017年4月15日,jackson框架被發(fā)現(xiàn)存在一個反序列化代碼執(zhí)行漏洞。該漏洞存在于Jackson框架下的enableDefaultTyping方法。攻擊者可以遠(yuǎn)程在服務(wù)器主機(jī)上越權(quán)執(zhí)行任意代碼,從而取得該網(wǎng)站服務(wù)器的控制權(quán)。
2>Jboss遠(yuǎn)程代碼執(zhí)行漏洞
Java應(yīng)用里都有特定的接口用于傳遞序列化對象數(shù)據(jù),而在反序列化時沒有限制實(shí)例化對象的類型,導(dǎo)致可以任意構(gòu)造用用中已經(jīng)包含的對象利用反序列化操作進(jìn)行實(shí)例化。
2.2.3 文件上傳漏洞
????這個獲得服務(wù)器權(quán)限的直接性就不多說了。說說工作中一般的預(yù)防措施吧。
1>客戶端校驗(yàn):規(guī)定上傳文件的后綴
2>服務(wù)端校驗(yàn):主要是文件頭校驗(yàn),如content-type等
2.3.1 WAF
????Web應(yīng)用防護(hù)系統(tǒng)(Web Applicatio Firewall)是通過執(zhí)行一系列針對http/https的安全策略來專門為web應(yīng)用提供保護(hù)的一款產(chǎn)品。主要特點(diǎn)是:
1>異常檢測協(xié)議
????對http的請求進(jìn)行異常檢測,拒絕不合符http標(biāo)準(zhǔn)的請求。也可以只允許http協(xié)議的部分選項(xiàng)通過,從而減少攻擊的影響范圍。
2>增強(qiáng)的輸入驗(yàn)證
3>及時補(bǔ)丁
4>基于規(guī)則的保護(hù)和基于異常的保護(hù)
5>狀態(tài)管理
2.3.2 安全審計
????是由專業(yè)審計人員根據(jù)有關(guān)的法律法規(guī)、財產(chǎn)所有者的委托和管理當(dāng)局的授權(quán),對計算機(jī)網(wǎng)絡(luò)環(huán)境下的有關(guān)活動或行為進(jìn)行系統(tǒng)的、獨(dú)立的檢查驗(yàn)證,并做出相應(yīng)評價。
????靜兒接觸多的是金融方面的,太多合規(guī)操作:包括服務(wù)器獨(dú)立部署、牌照、一清二清,做金融業(yè)務(wù)開發(fā)對比如8583報文、銀行發(fā)布的各類文件都要仔細(xì)研讀。
2.3.3 風(fēng)控
????風(fēng)險控制的四種基本方法:風(fēng)險回避、損失控制、風(fēng)險轉(zhuǎn)移和風(fēng)險保留。金融的核心就是風(fēng)控。
2.3.4 安全監(jiān)控
????安全監(jiān)控通過實(shí)時監(jiān)控網(wǎng)絡(luò)或主機(jī)活動、監(jiān)視分析用戶和系統(tǒng)的行為,審計系統(tǒng)配置和漏洞,評估敏感系統(tǒng)和數(shù)據(jù)的完整性,識別攻擊行為,對異常行為進(jìn)行統(tǒng)計和跟蹤,識別違反安全法規(guī)的行為,使用誘騙服務(wù)器記錄黑客行為等功能,使管理員有效的監(jiān)視、控制和評估網(wǎng)絡(luò)或主機(jī)系統(tǒng)。
總結(jié)
????安全無小事,保持敬畏之心。
????互聯(lián)網(wǎng)這個行業(yè)其實(shí)不怎么缺學(xué)東西快的,缺有想法的。但是很多有想法的人需要經(jīng)歷多次失敗才會成功。這些失敗就是碰上了安全等需要但是沒有考慮的釘子才成為成功之母的。