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