這篇文章涉及的知識點有以下幾方面:html
1.SSL Strip(SSp)攻擊究竟是什麼?linux
2.中間人攻擊——ARP欺騙的原理、實戰及防護android
3會話劫持原理算法
4.CC攻擊chrome
5.添加時間戳防止重放攻擊數據庫
6.淺析HTTPS中間人攻擊與證書校驗windows
7.什麼是HttpOnly?瀏覽器
8.如何設計相對安全的cookie自動登陸系統緩存
9. SSH安全
10.服務器操做系統的安全防範
11. 日誌文件查看
12.localStorage和sessionStorage區別
13.簡單的查找旁站
1.SSL Strip(SSp)攻擊究竟是什麼?
SSL協議(Secure Socket Layer,安全套接層)主要是使用公開密鑰體制和X.509數字證書技術保護信息傳輸的機密性和完整性,它不能保證信息的不可抵賴性,主要適用於點對點之間的信息傳輸,經常使用Web Server方式。
詳細解釋http://hover.blog.51cto.com/258348/218841
2.中間人攻擊——ARP欺騙的原理、實戰及防護
什麼是網關
首先來簡單解釋一下什麼是網關,網關工做在OSI七層模型中的傳輸層或者應用層,用於高層協議的不一樣網絡之間的鏈接,簡單地說,網關就比如是一個房間通向另外一個房間的一扇門。
ARP協議是什麼
ARP(Address Resolution Protocol)地址轉換協議,工做在OSI模型的數據鏈路層,在以太網中,網絡設備之間互相通訊是用MAC地址而不是IP地址,ARP協議就是用來把IP地址轉換爲MAC地址的。而RARP和ARP相反,它是反向地址轉換協議,把MAC地址轉換爲IP地址。
假設A(192.168.1.2)與B(192.168.1.3)在同一局域網,A要和B實現通訊。A首先會發送一個數據包到廣播地址(192.168.1.255),該數據包中包含了源IP(A)、源MAC、目的IP(B)、目的MAC,這個數據包會被髮放給局域網中全部的主機,可是隻有B主機會回覆一個包含了源IP(B)、源MAC、目的IP(A)、目的MAC的數據包給A,同時A主機會將返回的這個地址保存在ARP緩存表中。
ARP欺騙原理
上面提到過了ARP緩存表,在每臺主機都有一個ARP緩存表,緩存表中記錄了IP地址與MAC地址的對應關係,而局域網數據傳輸依靠的是MAC地址。
假設主機 A 192.168.1.2,B 192.168.1.3,C 192.168.1.4; 網關 G 192.168.1.1; 在同一局域網,主機A和B經過網關G相互通訊,就比如A和B兩我的寫信,由郵遞員G送信,C永遠都不會知道A和B之間說了些什麼話。可是並非想象中的那麼安全,在ARP緩存表機制存在一個缺陷,就是當請求主機收到ARP應答包後,不會去驗證本身是否向對方主機發送過ARP請求包,就直接把這個返回包中的IP地址與MAC地址的對應關係保存進ARP緩存表中,若是原有相同IP對應關係,原有的則會被替換。
這樣C就有了偷聽A和B的談話的可能,繼續思考上面的例子:
C假扮郵遞員,首先要告訴A說:「我就是郵遞員」 (C主機向A發送構造好的返回包,源IP爲G 192.168.1.1,源MAC爲C本身的MAC地址),愚蠢的A很輕易的相信了,直接把「C是郵遞員」這個信息記在了腦子裏;
C再假扮A,告訴郵遞員:「我就是A」 (C向網關G發送構造好的返回包,源IP爲A 192.168.1.2,源MAC地址爲本身的MAC地址),智商捉急的郵遞員想都沒想就相信了,之後就把B的來信送給了C,C固然就能夠知道A和B之間聊了些什麼
上面ABCG的故事就是ARP雙向欺騙的原理了
ARP單向欺騙就更好理解了,C只向A發送一個返回包,告訴A:G 192.168.1.1 的MAC地址爲 5c-63-bf-79-1d-fa(一個錯誤的mac地址),A把這個信息記錄在了緩存表中,而G的緩存表不變,也就是說,A把數據包給了C,而G的包仍是給A,這樣就是ARP單向欺騙了。
3會話劫持原理
什麼是會話劫持
在現實生活中,好比你去市場買菜,在交完錢後你要求先去幹一些別的事情,稍候再來拿菜;若是這個時候某個陌生人要求把菜拿走,賣菜的人會把菜給陌生人嗎?!固然,這只是一個比喻,但這偏偏就是會話劫持的喻意。所謂會話,就是兩臺主機之間的一次通信。例如你Telnet到某臺主機,這就是一次Telnet會話;你瀏覽某個網站,這就是一次HTTP會話。而會話劫持(Session Hijack),就是結合了嗅探以及欺騙技術在內的攻擊手段。例如,在一次正常的會話過程中,攻擊者做爲第三方參與到其中,他能夠在正常數據包中插入惡意數據,也能夠在雙方的會話當中進行簡聽,甚至能夠是代替某一方主機接管會話。咱們能夠把會話劫持攻擊分爲兩種類型:1)中間人攻擊(Man In The Middle,簡稱MITM),2)注射式攻擊(Injection);而且還能夠把會話劫持攻擊分爲兩種形式:1)被動劫持,2)主動劫持;被動劫持實際上就是在後臺監視雙方會話的數據流,叢中得到敏感數據;而主動劫持則是將會話當中的某一臺主機「踢」下線,而後由攻擊者取代並接管會話,這種攻擊方法危害很是大,攻擊者能夠作不少事情,好比「cat etc/master.passwd」(FreeBSD下的Shadow文件)。圖1爲會話劫持示意圖。
MITM攻擊簡介
這也就是咱們常說的「中間人攻擊」,在網上討論比較多的就是SMB會話劫持,這也是一個典型的中間人攻擊。要想正確的實施中間人攻擊,攻擊者首先須要使用ARP欺騙或DNS欺騙,將會話雙方的通信流暗中改變,而這種改變對於會話雙方來講是徹底透明的。關於ARP欺騙黑客防線介紹的比較多,網上的資料也比較多,我就不在多說了,我只簡單談談DNS欺騙。DNS(Domain Name System),即域名服務器,咱們幾乎每天都要用到。對於正常的DNS請求,例如在瀏覽器輸入www.hacker.com.cn,而後系統先查看Hosts文件,若是有相對應的IP,就使用這個IP地址訪問網站(其實,利用Hosts文件就能夠實現DNS欺騙);若是沒有,纔去請求DNS服務器;DNS服務器在接收到請求以後,解析出其對應的IP地址,返回給我本地,最後你就能夠登錄到黑客防線的網站。而DNS欺騙則是,目標將其DNS請求發送到攻擊者這裏,而後攻擊者僞造DNS響應,將正確的IP地址替換爲其餘IP,以後你就登錄了這個攻擊者指定的IP,而攻擊者早就在這個IP中安排好了惡意網頁,可你卻在不知不覺中已經被攻擊者下了「套」……DNS欺騙也能夠在廣域網中進行,比較常見的有「Web服務器重定向」、「郵件服務器重定向」等等。但無論是ARP欺騙,仍是DNS欺騙,中間人攻擊都改變正常的通信流,它就至關於會話雙方之間的一個透明代理,能夠獲得一切想知道的信息,甚至是利用一些有缺陷的加密協議來實現。
注射式攻擊簡介
這種方式的會話劫持比中間人攻擊實現起來簡單一些,它不會改變會話雙方的通信流,而是在雙方正常的通信流插入惡意數據。在注射式攻擊中,須要實現兩種技術:1)IP欺騙,2)預測TCP序列號。若是是UDP協議,只需僞造IP地址,而後發送過去就能夠了,由於UDP沒有所謂的TCP三次握手,但基於UDP的應用協議有流控機制,因此也要作一些額外的工做。對於IP欺騙,有兩種狀況須要用到:1)隱藏本身的IP地址;2)利用兩臺機器之間的信任關係實施入侵。在Unix/Linux平臺上,能夠直接使用Socket構造IP包,在IP頭中填上虛假的IP地址,但須要root權限;在Windows平臺上,不能使用Winsock,須要使用Winpacp(也可使用Libnet)。例如在Linux系統,首先打開一個Raw Socket(原始套接字),而後本身編寫IP頭及其餘數據。
4.CC攻擊
攻擊者藉助代理服務器生成指向受害主機的合法請求,實現DDOS,和假裝就叫:CC(ChallengeCollapsar)。
CC主要是用來攻擊頁面的。你們都有這樣的經歷,就是在訪問論壇時,若是這個論壇比較大,訪問的人比較多,打開頁面的速度會比較慢,訪問的人越多,論壇的頁面越多,數據庫就越大,被訪問的頻率也越高,佔用的系統資源也就至關可觀。
一個靜態頁面不須要服務器多少資源,甚至能夠說直接從內存中讀出來發給你就能夠了,可是論壇就不同了,我看一個帖子,系統須要到數據庫中判斷我是否有讀帖子的權限,若是有,就讀出帖子裏面的內容,顯示出來——這裏至少訪問了2次數據庫,若是數據庫的數據容量有200MB大小,系統極可能就要在這200MB大小的數據空間搜索一遍,這須要多少的CPU資源和時間?若是我是查找一個關鍵字,那麼時間更加可觀,由於前面的搜索能夠限定在一個很小的範圍內,好比用戶權限只查用戶表,帖子內容只查帖子表,並且查到就能夠立刻中止查詢,而搜索確定會對全部的數據進行一次判斷,消耗的時間是至關的大。
CC就是充分利用了這個特色,模擬多個用戶(多少線程就是多少用戶)不停的進行訪問(訪問那些須要大量數據操做,就是須要大量CPU時間的頁面).這一點用一個通常的性能測試軟件就能夠作到大量模擬用戶併發。
5.添加時間戳防止重放攻擊
如過客戶端在向服務端接口進行請求,若是請求信息進行了加密處理,被第三方截取到請求包,雖然第三方沒法解密獲取其中的數據,可是可使用該請求包進行重複的請求操做。若是服務端不進行防重放攻擊,就會參數服務器壓力增大,數據紊亂的後果。而使用添加時間戳的方式能夠解決這一問題。。
6.淺析HTTPS中間人攻擊與證書校驗
http://www.2cto.com/article/201607/523509.html
證書是https裏很是重要的主體,可用來識別對方是否可信,以及用其公鑰作密鑰交換。能夠看見證書裏面包含證書的頒發者,證書的使用者,證書的公鑰,頒發者的簽名等信息。其中Issuer Name是簽發此證書的CA名稱,用來指定簽發證書的CA的可識別的惟一名稱(DN, Distinguished Name),用於證書鏈的認證,這樣經過各級實體證書的驗證,逐漸上溯到鏈的終止點,便可信任的根CA,若是到達終點在本身的信任列表內未發現可信任的CA則認爲此證書不可信。
https握手過程的證書校驗環節就是爲了識別證書的有效性惟一性等等,因此嚴格意義上來講https下不存在中間人攻擊,存在中間人攻擊的前提條件是沒有嚴格的對證書進行校驗,或者人爲的信任僞造證書,下面一塊兒看下幾種常見的https「中間人攻擊」場景。
證書未校驗
因爲客戶端沒有作任何的證書校驗,因此此時隨意一張證書均可以進行中間人攻擊,可使用burp裏的這個模塊進行中間人攻擊。
經過瀏覽器查看實際的https證書,是一個自簽名的僞造證書。
部分校驗
作了部分校驗,例如在證書校驗過程當中只作了證書域名是否匹配的校驗,可使用burp的以下模塊生成任意域名的僞造證書進行中間人攻擊。
實際生成的證書效果,若是隻作了域名、證書是否過時等校驗可輕鬆進行中間人攻擊(因爲chrome是作了證書校驗的因此會提示證書不可信任)。
證書鏈校驗
若是客戶端對證書鏈作了校驗,那麼攻擊難度就會上升一個層次,此時須要人爲的信任僞造的證書或者安裝僞造的CA公鑰證書從而間接信任僞造的證書,可使用burp的以下模塊進行中間人攻擊。
能夠看見瀏覽器是會報警告的,由於burp的根證書PortSwigger CA並不在瀏覽器可信任列表內,因此由它做爲根證書籤發的證書都是不能經過瀏覽器的證書校驗的,若是將PortSwigger CA導入系統設置爲可信任證書,那麼瀏覽器將不會有任何警告。
手機客戶端Https數據包抓取
上述第1、二種狀況很少加贅述,第三種狀況就是咱們常用的抓手機應用https數據包的方法,即導入代理工具的公鑰證書到手機裏,再進行https數據包的抓取。導入手機的公鑰證書在android平臺上稱之爲受信任的憑據,
能夠看見是Issuer和Subject同樣的自簽名CA公鑰證書,另外咱們也能夠經過證書類型就能夠知道此爲公鑰證書,crt、der格式的證書不支持存儲私鑰或證書路徑(有興趣的同窗可查找證書相關信息)。導入CA公鑰證書以後,參考上文的證書校驗過程不難發現經過此方式能經過證書鏈校驗,從而造成中間人攻擊,客戶端使用代理工具的公鑰證書加密隨機數,代理工具使用私鑰解密並計算獲得對稱加密密鑰,再對數據包進行解密便可抓取明文數據包。
中間人攻擊原理
一直在說中間人攻擊,那麼中間人攻擊究竟是怎麼進行的呢,下面咱們經過一個流行的MITM開源庫mitmproxy來分析中間人攻擊的原理。中間人攻擊的關鍵在於https握手過程的ClientKeyExchange,因爲pre key交換的時候是使用服務器證書裏的公鑰進行加密,若是用的僞造證書的公鑰,那麼中間人就能夠解開該密文獲得pre_master_secret計算出用於對稱加密算法的master_key,從而獲取到客戶端發送的數據;而後中間人代理工具再使用其和服務端的master_key加密傳輸給服務端;一樣的服務器返回給客戶端的數據也是通過中間人解密再加密,因而完整的https中間人攻擊過程就造成了,一圖勝千言,來吧。
App證書校驗
經過上文第一和第二部分的說明,相信你們已經對https有個大概的瞭解了,那麼問題來了,怎樣才能防止這些「中間人攻擊」呢?
app證書校驗已是一個老生常談的問題了,可是市場上仍是有不少的app未作好證書校驗,有些只作了部分校驗,例如檢查證書域名是否匹配證書是否過時,更多數的是根本就不作校驗,因而就形成了中間人攻擊。作證書校驗須要作徹底,只作一部分都會致使中間人攻擊,對於安全要求並非特別高的app可以使用以下校驗方式:
查看證書是否過時 服務器證書上的域名是否和服務器的實際域名相匹配, 校驗證書鏈。
7什麼是HttpOnly?
若是您在cookie中設置了HttpOnly屬性,那麼經過js腳本將沒法讀取到cookie信息,這樣能有效的防止XSS攻擊
8如何設計相對安全的cookie自動登陸系統
http://blog.sina.com.cn/s/blog_90cbd0ab0101ew0p.html
這種技術其實就是基於 cookie的自動登陸,用戶登陸的時候會把須要驗證的token寫到cookie裏面,當用戶session失效的時候,token會經過cookie 發送給服務器端,服務器端解析token判斷是否已經登陸;這裏面的token如何設計是關鍵,到底存什麼數據才能保證系統的安全性呢?
有些新手可能會想,把用戶id和password直接md5加密存到cookie,這樣作是最糟糕的設計,用戶的敏感信息直接暴露出來,黑客能夠僞造別人的id進行嘗試性登陸,能夠想象黑客知道了admin帳號的id,試過幾千幾萬次,密碼和加密算法極可能破解出來。
token要相對安全,不該該是簡單的用戶名和密碼md5加密,用戶密碼其實徹底能夠不用存進去,分兩步來作:
1)token 是一些信息的組合,用戶id+用戶名+expires過時時間+ip地址+salt,具體加密算法最好本身寫,不能使是常見的加密函數(md5),固然這 個加密函數必須可逆,這個token咱們同時要保存在用戶表數據庫裏面,set cookie的時候記得http only;
2) 服務器端拿到cookie以後,進行逆解析,這個時候咱們要驗證以下信息:cookie是否過時、ip地址是否發生變化、用戶id和用戶名是否存在;用戶 存在以後,咱們再拿這個token跟第一步存在數據庫中的token進行比較,看是否相等,若是不等說明token已通過期,這樣作可保證每次用戶登陸之 後token值都不同,以前用過的token都會失效;
9 SSH
SSH 爲 Secure Shell 的縮寫,由 IETF 的網絡小組(Network Working Group)所制定;SSH 爲創建在應用層基礎上的安全協議。SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。
10服務器操做系統的安全防範
中止運行不須要的軟件;(極可能成爲外部攻擊的入口)
按期實施漏洞防範措施;(選定軟件時確認軟件的升級情況,肯定打補丁方式,關注各類漏洞信息,確認漏洞後調查補丁情況以及防範對策,並制定對應計劃)
對不須要對外公開的端口或者服務加以訪問限制;(經過端口掃描確認各端口服務狀態)
提升認證強度。
11 日誌文件查看
windows7的日誌信息文件存放在C:windows-》System32-》winevt-》Logs文件夾下,對應的日誌文件也有不少,而且文件格式都是evtx格式的文件,直接用Eventvwr.msc這個命令啓用事件查看器來查看便可。
或者點擊開始而後單擊控制面板進入win7控制面板,單擊「系統和安全」選項。在右下方找到「查看事件日誌」進入windows系統日誌查看器。
在日誌查看器左側能夠選擇查看不一樣類型日誌,通常系統報錯應該在「windows日誌/系統」中找相關信息。雙擊單條日誌能夠查看詳細信息,而右側欄能夠對日誌進行刪除、複製等操做。
12.localStorage和sessionStorage區別
http://www.cnblogs.com/tylerdonet/p/4833681.html
http://www.2cto.com/article/201505/401601.html
localStorage和sessionStorage同樣都是用來存儲客戶端臨時信息的對象。
他們均只能存儲字符串類型的對象(雖然規範中能夠存儲其餘原生類型的對象,可是目前爲止沒有瀏覽器對其進行實現)。
localStorage生命週期是永久,這意味着除非用戶顯示在瀏覽器提供的UI上清除localStorage信息,不然這些信息將永遠存在。
sessionStorage生命週期爲當前窗口或標籤頁,一旦窗口或標籤頁被永久關閉了,那麼全部經過sessionStorage存儲的數據也就被清空了。
不一樣瀏覽器沒法共享localStorage或sessionStorage中的信息。相同瀏覽器的不一樣頁面間能夠共享相同的 localStorage(頁面屬於相同域名和端口),可是不一樣頁面或標籤頁間沒法共享sessionStorage的信息。這裏須要注意的是,頁面及標 籤頁僅指頂級窗口,若是一個標籤頁包含多個iframe標籤且他們屬於同源頁面,那麼他們之間是能夠共享sessionStorage的。
13簡單的查找旁站
百度 域名查找IP 打開可行的網頁,在裏面輸入目標域名,搜索出服務器的IP,而後百度 IP反查域名 選擇一個可行的網頁打開,輸入剛剛查詢到的IP,旁站就統統出來了。 目標站無法子入侵不表明旁站也同樣。