API的五個(gè)常見漏洞
API讓天下沒有難做的生意,黑客也是這么認(rèn)為的。在企業(yè)數(shù)字化轉(zhuǎn)型如火如荼的今天,API已經(jīng)遠(yuǎn)遠(yuǎn)超出了技術(shù)范疇,互聯(lián)網(wǎng)商業(yè)創(chuàng)新和傳統(tǒng)企業(yè)數(shù)字化轉(zhuǎn)型都離不開API經(jīng)濟(jì)或者API戰(zhàn)略。API連接的不僅僅是系統(tǒng)和數(shù)據(jù),還包括企業(yè)職能部門、客戶和合作伙伴,甚至整個(gè)商業(yè)生態(tài)。與此同時(shí),日益嚴(yán)峻的安全威脅,使得API正在成為網(wǎng)絡(luò)安全的下一個(gè)前沿陣地。
API使一切都變得更加容易,從數(shù)據(jù)共享到系統(tǒng)連接到關(guān)鍵功能的交付,但API也使攻擊者(包括惡意機(jī)器人)更容易進(jìn)行攻擊。API的應(yīng)用激增,正刺激網(wǎng)絡(luò)犯罪分子越來(lái)越多地利用API安全漏洞進(jìn)行欺詐和竊取數(shù)據(jù)。
以下,我們將探討容易被黑客利用的五個(gè)API漏洞,并分享安全專家們給出的緩解和強(qiáng)化建議。
一、太容易被發(fā)現(xiàn)
假如你是黑客,準(zhǔn)備攻擊一家企業(yè),那么首先要做的第一件事就是識(shí)別盡可能多的API。我首先按常規(guī)方式使用目標(biāo)應(yīng)用程序,在瀏覽器中打開Web應(yīng)用程序或者在手機(jī)端下載安裝移動(dòng)應(yīng)用程序,然后使用攔截代理監(jiān)視通信。
攔截代理能夠捕獲瀏覽器或移動(dòng)應(yīng)用程序?qū)蠖薟eb服務(wù)器發(fā)出的所有請(qǐng)求,從而使攻擊者可以對(duì)所有可用的API端點(diǎn)進(jìn)行分類。例如,大多數(shù)API都將API/V1/login作為身份驗(yàn)證端點(diǎn)。
如果目標(biāo)也是移動(dòng)應(yīng)用程序,則將應(yīng)用程序包拆開,并查看應(yīng)用程序內(nèi)部可用的API調(diào)用。考慮到所有可能的活動(dòng),攻擊者可以搜索無(wú)法正確保護(hù)用戶數(shù)據(jù)的常見配置錯(cuò)誤或API。
最后,攻擊者尋找API文檔。一些組織為第三方發(fā)布API文檔,但為所有用戶使用相同的API端點(diǎn)。
有了一個(gè)不錯(cuò)的端點(diǎn)清單,攻擊者就可以測(cè)試標(biāo)準(zhǔn)用戶行為和異常行為測(cè)試,可以通過兩種方法找到有趣的漏洞。
解決方法:為了使攻擊者更加難以發(fā)現(xiàn)API,請(qǐng)確保通過僅允許有效用戶訪問的權(quán)限管理來(lái)控制對(duì)API文檔的訪問。雖然將證書固定在移動(dòng)應(yīng)用程序上并不能完全隱藏API端點(diǎn),并且也不完美,但確實(shí)給攻擊增加了額外的步驟。對(duì)Web服務(wù)器的API請(qǐng)求應(yīng)盡可能地被混淆和控制。
二、過于詳細(xì)的錯(cuò)誤信息
最近,攻擊者接管賬戶的嘗試在不斷增加。錯(cuò)誤消息過于“詳細(xì)周到”,往往使此類攻擊更加容易。冗長(zhǎng)的錯(cuò)誤消息會(huì)引導(dǎo)攻擊者了解他們需要進(jìn)行哪些更改才能偽裝成合法請(qǐng)求。API專為低負(fù)載下的高速交易而設(shè)計(jì),使攻擊者可以使用高性能系統(tǒng)找出有效賬戶,然后嘗試登錄并更改密碼進(jìn)行利用。
解決方法:不要拿用戶體驗(yàn)作為擋箭牌,有些看起來(lái)有利于用戶體驗(yàn)的做法,未必有利于安全性。系統(tǒng)返回的錯(cuò)誤信息不應(yīng)該包括錯(cuò)誤的用戶名或錯(cuò)誤的密碼,甚至不能包含錯(cuò)誤信息的類別(用戶名還是密碼錯(cuò)誤)。用于查詢數(shù)據(jù)的錯(cuò)誤消息也是如此,如果查詢/搜索格式不正確或由于某種原因而無(wú)法執(zhí)行,則應(yīng)該返回最“沒有營(yíng)養(yǎng)”的錯(cuò)誤信息:“糟糕,哪里出錯(cuò)了”。
三、參數(shù)太多
當(dāng)攻擊者通過API調(diào)用遍歷攻擊系統(tǒng)時(shí),他們必須弄清楚可以發(fā)送些什么來(lái)獲取數(shù)據(jù)。攻擊者“信奉”這樣的一個(gè)事實(shí):即越復(fù)雜的系統(tǒng),出錯(cuò)的地方越多。攻擊者識(shí)別出API后,他們將對(duì)參數(shù)進(jìn)行分類,然后嘗試訪問管理員(垂直特權(quán)升級(jí))或另一個(gè)用戶(水平特權(quán)升級(jí))的數(shù)據(jù)以收集其他數(shù)據(jù)。通常,太多不必要的參數(shù)被暴露給了用戶。
在最近的研究項(xiàng)目中,我們對(duì)目標(biāo)服務(wù)的API調(diào)用返回了大量數(shù)據(jù),很多都是不必要的數(shù)據(jù)信息,例如付款網(wǎng)關(guān)的處理器密鑰和可用的折扣信息等。這些“獎(jiǎng)勵(lì)信息”使攻擊者可以更好地理解這些API調(diào)用的上下文和語(yǔ)法。攻擊者不需要太多的想象力就能弄清楚下一步該怎么做。這些額外的參數(shù)為攻擊者提供了豐富的攻擊數(shù)據(jù)集。
解決方法:如果將用戶看到的內(nèi)容范圍限制為必需內(nèi)容,限制關(guān)鍵數(shù)據(jù)的傳輸,并使數(shù)據(jù)查詢結(jié)構(gòu)未知,那么攻擊者就很難對(duì)他們知道的參數(shù)進(jìn)行暴力破解。
四、數(shù)據(jù)過多
同樣地,由于可用的參數(shù)太多,收集數(shù)據(jù)將成為顯而易見的下一步行動(dòng)。許多企業(yè)的系統(tǒng)支持匿名連接,并且傾向泄漏普通用戶不需要的額外數(shù)據(jù)。另外,許多企業(yè)傾向于存儲(chǔ)可以直接訪問的數(shù)據(jù)。
安全專業(yè)人員正在努力應(yīng)對(duì)API請(qǐng)求經(jīng)常暴露數(shù)據(jù)存儲(chǔ)位置的挑戰(zhàn)。例如,當(dāng)我查看安全攝像機(jī)中的視頻時(shí),可以看到該信息來(lái)自Amazon S3存儲(chǔ)庫(kù)。通常,那些S3存儲(chǔ)庫(kù)的保護(hù)并不周全,任何人的數(shù)據(jù)都可以被檢索。
另一個(gè)常見的數(shù)據(jù)挑戰(zhàn)是數(shù)據(jù)過載,很多企業(yè)都像入冬前的花栗鼠,存儲(chǔ)的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)超出了需要。很多過期客戶數(shù)據(jù)已經(jīng)沒有商業(yè)價(jià)值和保存價(jià)值,但是如果發(fā)生泄露,則會(huì)給企業(yè)帶來(lái)巨大的品牌和合規(guī)風(fēng)險(xiǎn)。
解決方法:對(duì)于存儲(chǔ)用戶數(shù)據(jù)的企業(yè),不僅僅是PII或PHI,都必須進(jìn)行徹底的數(shù)據(jù)審查。在檢查了存儲(chǔ)的數(shù)據(jù)之后,應(yīng)制定數(shù)據(jù)訪問規(guī)則并進(jìn)行測(cè)試。確保能夠匿名訪問的數(shù)據(jù)不涉及任何敏感數(shù)據(jù)。
五、安全設(shè)計(jì)太少
多年以來(lái),應(yīng)用程序設(shè)計(jì)總是優(yōu)先考慮功能性和可用性,很少考慮安全性。很多CISO表示,API安全性尤其不被重視,甚至完全被排除在安全設(shè)計(jì)流程之外。通常都是開發(fā)人員開發(fā)和部署完成后,在API投入生產(chǎn)且頻繁遭受攻擊后才亡羊補(bǔ)牢查找問題。安全性(包括API安全性)需要成為產(chǎn)品設(shè)計(jì)的一部分,并且應(yīng)作為首要考慮因素之一加以實(shí)現(xiàn),而不是事后填坑。
解決方法:審查應(yīng)用程序的安全體系結(jié)構(gòu)是邁向安全系統(tǒng)的重要第一步。請(qǐng)記住,API使攻擊者能更高效地攻擊或利用您的系統(tǒng)。設(shè)計(jì)安全性的目標(biāo)是讓API成為用戶而非攻擊者的高效工具。
以上只列舉了一些常見的API漏洞,總之,最重要的是在軟件開發(fā)生命周期的早期階段就討論安全問題。微小的改進(jìn)就可以帶來(lái)巨大的好處,避免API遭攻擊造成的巨大財(cái)務(wù)和品牌損失。
【本文是51CTO專欄作者“安全牛”的原創(chuàng)文章,轉(zhuǎn)載請(qǐng)通過安全牛(微信公眾號(hào)id:gooann-sectv)獲取授權(quán)】