电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot 中該如何防御計時攻擊

瀏覽:4日期:2023-08-17 09:41:36

松哥最近在研究 Spring Security 源碼,發(fā)現(xiàn)了很多好玩的代碼,抽空寫幾篇文章和小伙伴們分享一下。

很多人吐槽 Spring Security 比 Shiro 重量級,這個重量級不是憑空來的,重量有重量的好處,就是它提供了更為強大的防護功能。

比如松哥最近看到的一段代碼:

protected final UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException { prepareTimingAttackProtection(); try { UserDetails loadedUser = this.getUserDetailsService().loadUserByUsername(username); if (loadedUser == null) { throw new InternalAuthenticationServiceException( 'UserDetailsService returned null, which is an interface contract violation'); } return loadedUser; } catch (UsernameNotFoundException ex) { mitigateAgainstTimingAttack(authentication); throw ex; } catch (InternalAuthenticationServiceException ex) { throw ex; } catch (Exception ex) { throw new InternalAuthenticationServiceException(ex.getMessage(), ex); }}

這段代碼位于 DaoAuthenticationProvider 類中,為了方便大家理解,我來簡單說下這段代碼的上下文環(huán)境。

當(dāng)用戶提交用戶名密碼登錄之后,Spring Security 需要根據(jù)用戶提交的用戶名去數(shù)據(jù)庫中查詢用戶,這塊如果大家不熟悉,可以參考松哥之前的文章:

Spring Security 如何將用戶數(shù)據(jù)存入數(shù)據(jù)庫? Spring Security+Spring Data Jpa 強強聯(lián)手,安全管理只有更簡單!

查到用戶對象之后,再去比對從數(shù)據(jù)庫中查到的用戶密碼和用戶提交的密碼之間的差異。具體的比對工作,可以參考 Spring Boot 中密碼加密的兩種姿勢! 一文。

而上面這段代碼就是 Spring Security 根據(jù)用戶登錄時傳入的用戶名去數(shù)據(jù)庫中查詢用戶,并將查到的用戶返回。方法中還有一個 authentication 參數(shù),這個參數(shù)里邊保存了用戶登錄時傳入的用戶名/密碼信息。

那么這段代碼有什么神奇之處呢?

我們來一行一行分析。

源碼梳理

1

首先方法一進來調(diào)用了 prepareTimingAttackProtection 方法,從方法名字上可以看出,這個是為計時攻擊的防御做準備,那么什么又是計時攻擊呢?別急,松哥一會來解釋。我們先來吧流程走完。prepareTimingAttackProtection 方法的執(zhí)行很簡單,如下:

private void prepareTimingAttackProtection() { if (this.userNotFoundEncodedPassword == null) { this.userNotFoundEncodedPassword = this.passwordEncoder.encode(USER_NOT_FOUND_PASSWORD); }}

該方法就是將常量 USER_NOT_FOUND_PASSWORD 使用 passwordEncoder 編碼之后(如果不了解 passwordEncoder,可以參考 Spring Boot 中密碼加密的兩種姿勢! 一文),將編碼結(jié)果賦值給 userNotFoundEncodedPassword 變量。

2

接下來調(diào)用 loadUserByUsername 方法,根據(jù)登錄用戶傳入的用戶名去數(shù)據(jù)庫中查詢用戶,如果查到了,就將查到的對象返回。

3

如果查詢過程中拋出 UsernameNotFoundException 異常,按理說直接拋出異常,接下來的密碼比對也不用做了,因為根據(jù)用戶名都沒查到用戶,這次登錄肯定是失敗的,沒有必要進行密碼比對操作!

但是大家注意,在拋出異常之前調(diào)用了 mitigateAgainstTimingAttack 方法。這個方法從名字上來看,有緩解計時攻擊的意思。

我們來看下該方法的執(zhí)行流程:

private void mitigateAgainstTimingAttack(UsernamePasswordAuthenticationToken authentication) { if (authentication.getCredentials() != null) { String presentedPassword = authentication.getCredentials().toString(); this.passwordEncoder.matches(presentedPassword, this.userNotFoundEncodedPassword); }}

可以看到,這里首先獲取到登錄用戶傳入的密碼即 presentedPassword,然后調(diào)用 passwordEncoder.matches 方法進行密碼比對操作,本來該方法的第二個參數(shù)是數(shù)據(jù)庫查詢出來的用戶密碼,現(xiàn)在數(shù)據(jù)庫中沒有查到用戶,所以第二個參數(shù)用 userNotFoundEncodedPassword 代替了,userNotFoundEncodedPassword 就是我們一開始調(diào)用 prepareTimingAttackProtection 方法時賦值的變量。這個密碼比對,從一開始就注定了肯定會失敗,那為什么還要比對呢?

計時攻擊

這就引入了我們今天的主題--計時攻擊。

計時攻擊是旁路攻擊的一種,在密碼學(xué)中,旁道攻擊又稱側(cè)信道攻擊、邊信道攻擊(Side-channel attack)。

這種攻擊方式并非利用加密算法的理論弱點,也不是暴力破解,而是從密碼系統(tǒng)的物理實現(xiàn)中獲取的信息。例如:時間信息、功率消耗、電磁泄露等額外的信息源,這些信息可被用于對系統(tǒng)的進一步破解。

旁路攻擊有多種不同的分類:

緩存攻擊(Cache Side-Channel Attacks),通過獲取對緩存的訪問權(quán)而獲取緩存內(nèi)的一些敏感信息,例如攻擊者獲取云端主機物理主機的訪問權(quán)而獲取存儲器的訪問權(quán)。 計時攻擊(Timing attack),通過設(shè)備運算的用時來推斷出所使用的運算操作,或者通過對比運算的時間推定數(shù)據(jù)位于哪個存儲設(shè)備,或者利用通信的時間差進行數(shù)據(jù)竊取。 基于功耗監(jiān)控的旁路攻擊,同一設(shè)備不同的硬件電路單元的運作功耗也是不一樣的,因此一個程序運行時的功耗會隨著程序使用哪一種硬件電路單元而變動,據(jù)此推斷出數(shù)據(jù)輸出位于哪一個硬件單元,進而竊取數(shù)據(jù)。 電磁攻擊(Electromagnetic attack),設(shè)備運算時會泄漏電磁輻射,經(jīng)過得當(dāng)分析的話可解析出這些泄漏的電磁輻射中包含的信息(比如文本、聲音、圖像等),這種攻擊方式除了用于密碼學(xué)攻擊以外也被用于非密碼學(xué)攻擊等竊聽行為,如TEMPEST 攻擊。 聲學(xué)密碼分析(Acoustic cryptanalysis),通過捕捉設(shè)備在運算時泄漏的聲學(xué)信號捉取信息(與功率分析類似)。 差別錯誤分析,隱密數(shù)據(jù)在程序運行發(fā)生錯誤并輸出錯誤信息時被發(fā)現(xiàn)。 數(shù)據(jù)殘留(Data remanence),可使理應(yīng)被刪除的敏感數(shù)據(jù)被讀取出來(例如冷啟動攻擊)。 軟件初始化錯誤攻擊,現(xiàn)時較為少見,行錘攻擊(Row hammer)是該類攻擊方式的一個實例,在這種攻擊實現(xiàn)中,被禁止訪問的存儲器位置旁邊的存儲器空間如果被頻繁訪問將會有狀態(tài)保留丟失的風(fēng)險。 光學(xué)方式,即隱密數(shù)據(jù)被一些視覺光學(xué)儀器(如高清晰度相機、高清晰度攝影機等設(shè)備)捕捉。

所有的攻擊類型都利用了加密/解密系統(tǒng)在進行加密/解密操作時算法邏輯沒有被發(fā)現(xiàn)缺陷,但是通過物理效應(yīng)提供了有用的額外信息(這也是稱為“旁路”的緣由),而這些物理信息往往包含了密鑰、密碼、密文等隱密數(shù)據(jù)。

而上面 Spring Security 中的那段代碼就是為了防止計時攻擊。

具體是怎么做的呢?假設(shè) Spring Security 從數(shù)據(jù)庫中沒有查到用戶信息就直接拋出異常了,沒有去執(zhí)行 mitigateAgainstTimingAttack 方法,那么黑客經(jīng)過大量的測試,再經(jīng)過統(tǒng)計分析,就會發(fā)現(xiàn)有一些登錄驗證耗時明顯少于其他登錄,進而推斷出登錄驗證時間較短的都是不存在的用戶,而登錄耗時較長的是數(shù)據(jù)庫中存在的用戶。

現(xiàn)在 Spring Security 中,通過執(zhí)行 mitigateAgainstTimingAttack 方法,無論用戶存在或者不存在,登錄校驗的耗時不會有明顯差別,這樣就避免了計時攻擊。

可能有小伙伴會說,passwordEncoder.matches 方法執(zhí)行能耗費多少時間呀?這要看你怎么計時了,時間單位越小,差異就越明顯:毫秒(ms)、微秒(µs)、奈秒(ns)、皮秒(ps)、?秒(fs)、阿秒(as)、仄秒(zs)。

另外,Spring Security 為了安全,passwordEncoder 中引入了一個概念叫做自適應(yīng)單向函數(shù),這種函數(shù)故意執(zhí)行的很慢并且消耗大量系統(tǒng)資源,所以非常有必要進行計時攻擊防御。

關(guān)于自適應(yīng)單向函數(shù),這是另外一個故事了,松哥抽空再和小伙伴們聊~

好啦,今天就先和小伙伴們聊這么多,小伙伴們決定有收獲的話,記得點個在看鼓勵下松哥哦~

以上就是Spring Boot 中該如何防御計時攻擊的詳細內(nèi)容,更多關(guān)于Spring Boot 防御計時攻擊的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 高压贴片电容|贴片安规电容|三端滤波器|风华电容代理南京南山 | 板框压滤机-隔膜压滤机配件生产厂家-陕西华星佳洋装备制造有限公司 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | 除尘布袋_液体过滤袋_针刺毡滤料-杭州辉龙过滤技术有限公司 | 稳尚教育加盟-打造高考志愿填报平台_新高考志愿填报加盟_学业生涯规划加盟 | 深圳市索富通实业有限公司-可燃气体报警器 | 可燃气体探测器 | 气体检测仪 | 定制/定做衬衫厂家/公司-衬衫订做/订制价格/费用-北京圣达信 | 字典-新华字典-在线字典查字-字典趣 | 福州仿石漆加盟_福建仿石漆厂家-外墙仿石漆加盟推荐铁壁金钢(福建)新材料科技有限公司有保障 | 上海物流公司,上海货运公司,上海物流专线-优骐物流公司 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 干式磁选机_湿式磁选机_粉体除铁器-潍坊国铭矿山设备有限公司 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 昆明化妆培训-纹绣美甲-美容美牙培训-昆明博澜培训学校 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 聚氨酯复合板保温板厂家_廊坊华宇创新科技有限公司 | 帽子厂家_帽子工厂_帽子定做_义乌帽厂_帽厂_制帽厂_帽子厂_浙江高普制帽厂 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 传爱自考网_传爱自学考试网| 高温热泵烘干机,高温烘干热泵,热水设备机组_正旭热泵 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 郑州水质检测中心_井水检测_河南废气检测_河南中环嘉创检测 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 搪玻璃冷凝器_厂家-越宏化工设备 | 临沂招聘网_人才市场_招聘信息_求职招聘找工作请认准【马头商标】 | 兰州牛肉面加盟,兰州牛肉拉面加盟-京穆兰牛肉面 | 东莞精密模具加工,精密连接器模具零件,自動機零件,冶工具加工-益久精密 | 美国查特CHART MVE液氮罐_查特杜瓦瓶_制造全球品质液氮罐 | 扒渣机,铁水扒渣机,钢水扒渣机,铁水捞渣机,钢水捞渣机-烟台盛利达工程技术有限公司 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 富森高压水枪-柴油驱动-养殖场高压清洗机-山东龙腾环保科技有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 智能楼宇-楼宇自控系统-楼宇智能化-楼宇自动化-三水智能化 | 烟台螺纹,烟台H型钢,烟台钢材,烟台角钢-烟台市正丰金属材料有限公司 | 无硅导热垫片-碳纤维导热垫片-导热相变材料厂家-东莞市盛元新材料科技有限公司 | 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 模切之家-专注服务模切行业的B2B平台! | 影像测量仪_三坐标测量机_一键式二次元_全自动影像测量仪-广东妙机精密科技股份有限公司 |