1. 程式人生 > >有關網路攻擊的CSRF

有關網路攻擊的CSRF

最近在工作做一個SSO,考慮很多網路安全方面的問題,看到一篇好文章,分享給大家:

一.CSRF是什麼?

  CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。

二.CSRF可以做什麼?

  你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義傳送惡意請求。CSRF能夠做的事情包括:以你名義傳送郵件,發訊息,盜取你的賬號,甚至於購買商品,虛擬貨幣轉賬......造成的問題包括:個人隱私洩露以及財產安全。

三.CSRF漏洞現狀

  CSRF這種攻擊方式在2000年已經被國外的安全人員提出,但在國內,直到06年才開始被關注,08年,國內外的多個大型社群和互動網站分別爆出CSRF漏洞,如:NYTimes.com(紐約時報)、Metafilter(一個大型的BLOG網站),YouTube和百度HI......而現在,網際網路上的許多站點仍對此毫無防備,以至於安全業界稱CSRF為“沉睡的巨人”。

四.CSRF的原理

  下圖簡單闡述了CSRF攻擊的思想:

  

  從上圖可以看出,要完成一次CSRF攻擊,受害者必須依次完成兩個步驟:

  1.登入受信任網站A,並在本地生成Cookie。

  2.在不登出A的情況下,訪問危險網站B。

  看到這裡,你也許會說:“如果我不滿足以上兩個條件中的一個,我就不會受到CSRF的攻擊”。是的,確實如此,但你不能保證以下情況不會發生:

  1.你不能保證你登入了一個網站後,不再開啟一個tab頁面並訪問另外的網站。

  2.你不能保證你關閉瀏覽器了後,你本地的Cookie立刻過期,你上次的會話已經結束。(事實上,關閉瀏覽器不能結束一個會話,但大多數人都會錯誤的認為關閉瀏覽器就等於退出登入/結束會話了......)

  3.上圖中所謂的攻擊網站,可能是一個存在其他漏洞的可信任的經常被人訪問的網站。

  上面大概地講了一下CSRF攻擊的思想,下面我將用幾個例子詳細說說具體的CSRF攻擊,這裡我以一個銀行轉賬的操作作為例子(僅僅是例子,真實的銀行網站沒這麼傻:>)

  示例1:

  銀行網站A,它以GET請求來完成銀行轉賬的操作,如:http://www.mybank.com/Transfer.php?toBankId=11&money=1000

  危險網站B,它裡面有一段HTML的程式碼如下:

[html] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <imgsrc=
    http://www.mybank.com/Transfer.php?toBankId=11&money=1000>
首先,你登入了銀行網站A,然後訪問危險網站B,噢,這時你會發現你的銀行賬戶少了1000塊......

  為什麼會這樣呢?原因是銀行網站A違反了HTTP規範,使用GET請求更新資源。在訪問危險網站B的之前,你已經登入了銀行網站A,而B中的<img>以GET的方式請求第三方資源(這裡的第三方就是指銀行網站了,原本這是一個合法的請求,但這裡被不法分子利用了),所以你的瀏覽器會帶上你的銀行網站A的Cookie發出Get請求,去獲取資源“http://www.mybank.com/Transfer.php?toBankId=11&money=1000”,結果銀行網站伺服器收到請求後,認為這是一個更新資源操作(轉賬操作),所以就立刻進行轉賬操作......

  示例2:

  為了杜絕上面的問題,銀行決定改用POST請求完成轉賬操作。

  銀行網站A的WEB表單如下:

[html] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <formaction="Transfer.php"method="POST">
  2.   <p>ToBankId: <inputtype="text"name="toBankId"/></p>
  3.   <p>Money: <inputtype="text"name="money"/></p>
  4.   <p><inputtype="submit"value="Transfer"/></p>
  5. </form>

後臺處理頁面Transfer.php如下:

[php] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <?php  
  2.     session_start();  
  3.     if (isset($_REQUEST['toBankId'] && isset($_REQUEST['money']))  
  4.     {  
  5.         buy_stocks($_REQUEST['toBankId'], $_REQUEST['money']);  
  6.     }  
  7.   ?>  


危險網站B,仍然只是包含那句HTML程式碼:

[html] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <imgsrc=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

和示例1中的操作一樣,你首先登入了銀行網站A,然後訪問危險網站B,結果.....和示例1一樣,你再次沒了1000塊~T_T,這次事故的原因是:銀行後臺使用了$_REQUEST去獲取請求的資料,而$_REQUEST既可以獲取GET請求的資料,也可以獲取POST請求的資料,這就造成了在後臺處理程式無法區分這到底是GET請求的資料還是POST請求的資料。在PHP中,可以使用$_GET和$_POST分別獲取GET請求和POST請求的資料。在JAVA中,用於獲取請求資料request一樣存在不能區分GET請求資料和POST資料的問題。

  示例3:

  經過前面2個慘痛的教訓,銀行決定把獲取請求資料的方法也改了,改用$_POST,只獲取POST請求的資料,後臺處理頁面Transfer.php程式碼如下:

[php] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <?php  
  2.     session_start();  
  3.     if (isset($_POST['toBankId'] && isset($_POST['money']))  
  4.     {  
  5.         buy_stocks($_POST['toBankId'], $_POST['money']);  
  6.     }  
  7.   ?>  

然而,危險網站B與時俱進,它改了一下程式碼:

[php] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <html>  
  2.   <head>  
  3.     <script type="text/javascript">  
  4.       function steal()  
  5.       {  
  6.                iframe = document.frames["steal"];  
  7.                iframe.document.Submit("transfer");  
  8.       }  
  9.     </script>  
  10.   </head>  
  11.   <body onload="steal()">  
  12.     <iframe name="steal" display="none">  
  13.       <form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">  
  14.         <input type="hidden" name="toBankId" value="11">  
  15.         <input type="hidden" name="money" value="1000">  
  16.       </form>  
  17.     </iframe>  
  18.   </body>  
  19. </html>  

如果使用者仍是繼續上面的操作,很不幸,結果將會是再次不見1000塊......因為這裡危險網站B暗地裡傳送了POST請求到銀行!

  總結一下上面3個例子,CSRF主要的攻擊模式基本上是以上的3種,其中以第1,2種最為嚴重,因為觸發條件很簡單,一個<img>就可以了,而第3種比較麻煩,需要使用JavaScript,所以使用的機會會比前面的少很多,但無論是哪種情況,只要觸發了CSRF攻擊,後果都有可能很嚴重。

  理解上面的3種攻擊模式,其實可以看出,CSRF攻擊是源於WEB的隱式身份驗證機制!WEB的身份驗證機制雖然可以保證一個請求是來自於某個使用者的瀏覽器,但卻無法保證該請求是使用者批准傳送的!

相關推薦

有關網路攻擊CSRF

最近在工作做一個SSO,考慮很多網路安全方面的問題,看到一篇好文章,分享給大家: 一.CSRF是什麼?   CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session ridin

有關網路攻擊的世界地圖是怎麼開發的?比如 ZoomEye 經常有一些這樣很酷的地圖~

Echarts 團隊出大殺器了——基於 WebGL 的地球儀元件,有類似需求的同學趕緊直奔 echarts-x:Examples - Powered by ECharts-X ----- 資料視覺化一直是一個很有趣的領域。許多普通人直觀上難以感受的資料,如漏洞分佈、實時流量分析等,通過資料視覺化的手法,可以清

網路攻擊與防禦技術第三次實驗

中國人民公安大學 Chinese people’ public security university   網路對抗技術 實驗報告   實驗三 密碼破解技術     &

軟體完整性有助於金融服務機構抵禦網路攻擊

作者:新思科技軟體質量與安全部門管理顧問Olli Jarva 2018年8月,大資料協同安全技術國家工程實驗室——金融行業安全研究中心在北京成立,旨在改善金融網路安全態勢,為金融業務創新創造更有利的安全環境。由此可見,金融行業的安全問題已經受到了社會的極大關注。   金

網路攻擊與防禦技術第四次實驗

    中國人民公安大學 Chinese people' public security university     網路對抗技術 實驗報告      

網路攻擊與防禦技術第五次實驗

中國人民公安大學 Chinese people’ public security university   網路對抗技術 實驗報告   實驗五 綜合滲透     &nb

Linux 下的網路攻擊

學習了虛擬機器的linux系統,想玩點有意思的,沒錯就是攻擊,給大家教一個簡單的arpspoof攻擊 這種攻擊會將對方電腦卡的掉線,注意這種操作是在同一區域網下的操作。 接下來說一說具體的步驟 第一步 安裝 sudo apt-get install dsniff ssl

曲速未來 揭示 :強大網路攻擊冰島於複雜網路釣魚形式

    區塊鏈安全諮詢公司 曲速未來 訊息:前段時間,一場無恥的網路釣魚活動讓冰島感到驚訝,向成千上萬的人傳送了惡意電子郵件,企圖欺騙他們安裝強大的遠端訪問工具。   即使潛在受害者人數可能看起來很低,當地警方也表示這是襲擊該國的最大網路攻擊。人們

有關網路流建模的學習筆記

話說網路流這個東西,其題面的特點就是:就算告訴你這道題是網路流,你也不會做(有點皮) 所以說,dzyo大佬就給我們總結了一些基本模型,感覺打開了通往新世界的大門……   最大匹配 用網路流來解決最大匹配這類問題 首先題目中一般會出現“最多,至多”這類字眼,或者問“是

網路攻擊 網路支付

                                          網路攻

使用Spark Mlib K-Means演算法分析網路攻擊資料

package apache.spark.mlib.rdd.kmeanclustering import org.apache.spark.ml.clustering.KMeans import org.apache.spark.ml.feature.{StandardScaler, Vect

幾維安全CEO範俊偉:對程式碼進行加密或能更有效應對網路攻擊

11月17日,由幾維安全和看雪學院聯合主辦的“2018物聯網安全行業論壇”在北京舉行。幾維安全CEO範俊偉在論壇上表示,由於攻擊者可直接購買、拆解物聯網終端,一旦獲取其程式碼,分析程式碼漏洞,就可進行攻擊。如果對程式碼進行加密,即使攻擊者拿到程式碼,也難以分析業務漏洞並實施攻擊。 幾維安全

網路攻擊形式備忘錄

網路攻擊形式備忘錄 以下數種也是我看過幾篇關於網路攻擊論文中,最為常見的攻擊實驗形式 1. Denial of Service (DoS) Attack 拒絕服務攻擊。最常見的DoS攻擊有計算機網路頻寬攻擊和連通性攻擊。目的是讓目標計算機或網路無法提供正常的服務或資源訪問,使目標系統服務系統停

萬方+網路攻擊+機器學習

1. 基於機器學習的入侵檢測技術概述 - 數字安防/2016 入侵檢測系統設計分析 機器學習、誤用規則處理、網路資料包捕獲以及資料預處理等四個部分構成,機器學習模組為該系統的關鍵環節 。 (一)機器學習模組。基於機器學習的入侵檢測系統中的關鍵模組就是機器學習模組,利用該模組的訓練功能可以讓學習機完成檢測

常見網路攻擊案例

1. tcp半連結攻擊 tcp半連結攻擊也稱為:SYN Flood (SYN洪水),是種典型的DoS (Denial of Service,拒絕服務) 攻擊,效果就是伺服器TCP連線資源耗盡,停止響應正常的TCP連線請求 1.1 正常連結時的情況 1.2 半連結攻擊時的情況

區塊鏈安全:基於區塊鏈網路攻擊的方式原理詳解

目前對區塊鏈網路安全威脅最大的3種攻擊方式:Sybil攻擊、Eclipse攻擊和DDoS攻擊。 本文將重點講解上述三種攻擊方式的原理,以供有關機構參考,在開發基於區塊鏈網路的應用系統時採取措施加強防範。 1 基於區塊鏈網路的 Sybil攻擊 Sybil攻擊最初是由Douceur在點對點網路環境中提出的,他指

網路攻擊型別

1,DOS攻擊 DoS是Denial of Service的簡稱,即拒絕服務。 其目的是使計算機或網路無法提供正常的服務。最常見的DoS攻擊有計算機網路頻寬攻擊和連通性攻擊。 DoS攻擊是指故意的攻擊網路協議實現的缺陷或直接通過野蠻手段殘忍地耗盡被攻擊物件的資源,目的是

針對美國智庫、非盈利和公共組織的網路攻擊分析

路透社最近報道有黑客組織對全球的多個目標發起了網路攻擊活動。微軟研究人員也追蹤到了同樣的攻擊活動,本文介紹該攻擊活動的相關細節。 研究人員發現攻擊活動主要攻擊公共機構和非政府組織,比如智庫、研究中心和教育機構,以及石油、天然氣、化工以及醫療行業的私營企業。 第三方安全研究人員分析稱該攻擊是A

青松資訊:你家那臺路由器,很可能是網路攻擊的幫凶!

據調查,網路罪犯對物聯網裝置的興趣持續增長:在2018年上半年,攻擊智慧裝置的惡意軟體樣本數量是2017年全年的三倍。而在2017年,這個數字是2016年的十倍。這對未來幾年來說並不是個好兆頭。   這篇短文將對物聯網裝置的感染媒介及其危害進行簡短分析。 某安全實驗室收集

又出現新型網路攻擊 主要受害物件為Hadoop伺服器

黑客的胃口愈來愈大了,資安業者Radware本週發現,有一名為DemonBot的新興殭屍網路鎖定Apache Hadoop伺服器作為攻擊目標,企圖利用這些由Hadoop伺服器組成的殭屍大軍發動分散式阻斷服務攻擊(DDoS),迄今已有超過70臺Hadoop伺服器感染了Demon