2011-06-24 29 views
31

請投票前操作裝配閱讀本...散列會話指紋真的有必要嗎?

所以我已經看到了很多通過用戶代理的級聯和兩個IP塊或任何建立指紋會話管理類。他們似乎還添加了一個鹽,然後在將該指紋存儲在會話變量中之前對其進行哈希處理。

這種指紋產生通常發生在每個請求上,以便驗證會話的當前用戶是否爲原始會話用戶。這就是爲什麼我想知道,是散列真的需要這樣的東西?

如果黑客可以進入文件系統查看會話文件內容,那麼您是不是已經在那個時候洗過?

任何信息非常感謝。

+0

你想確保我不能預測地重新創建你的會話密鑰(因此私人鹽)。如果我可以,那麼我不需要訪問你的服務器,我可以通過隨機生成一個密鑰,直到我進入你的系統蠻力強制我的方式。 –

+1

@Geoffrey瓦格納第一,爲什麼鹽在服務器端重要的一個問題蠻力攻擊..?我會使用相同的salt服務器端來嘗試模擬該用戶訪問他們的會話嗎?對於暴力行爲,他們仍然只需要在這種情況下猜測客戶端的頭部輸入就可以進行攻擊,因爲服務器會爲他們做散列。 – dqhendricks

+0

我收回我的聲明,我完全不是在服務器架構,哎呀 –

回答

10

其中大部分是有道理的,但散列和醃製是沒有意義的。

如果您將會話綁定到IP地址,那麼劫持會話變得困難得多。這是我推薦做的事情,但是你不需要對此嚴格要求。你可以只綁定IPv4的前三部分。這是你的選擇。越嚴格的IP檢查越安全,但對用戶來說不太方便。

至於綁定基於用戶代理的會話,這也可能有所幫助。必須認識到,如果你工作在一個未加密的通道上(例如HTTP),那麼用戶代理檢查就不那麼有用了,因爲它也可以被入侵者重現。

說到醃製和散列,這是沒用的。他們沒有加強你的身份檢查。他們做的唯一事情就是讓你的設計複雜化。對於這個問題,我相信他們會降低你的安全水平。

與往常一樣,一些規則要牢記:

  • 使用強效的會話標識符。這意味着使用好的隨機源並確保有足夠的位。
  • 將會話綁定到IP,至少在某種程度上。
  • 如果可能,將會話綁定到用戶代理。
  • 使用SSL/TLS。沒有它,理論上所有的會話系統都是不安全的。
  • 確保您的會話存儲。無論是基於文件系統還是基於數據庫。
+0

來自同一用戶的任何其他訪問都將使用相同的U-A,因此如果用戶通過HTTP進行瀏覽,則攻擊者可以嗅探U-A。 –

+0

@tc沒錯。因此,檢查UA似乎更像是一個額外的安全層。 – Tower

+0

你說salt + hashing是無用的,但同時你說你應該保護會話存儲。在我看來,使用這兩樣東西將有助於隱藏這些信息,因此如果黑客獲得對數據庫的訪問權限,但不能生成這些條目的確切代碼,他仍然不知道這些信息是什麼(假設您不保存該信息在同一臺計算機上的其他地方,顯然......就像你的日誌。) –

4

我能想到的兩種情況下,這將是有益的:

  1. 當會話數據存儲的客戶端。 (就像在一個cookie中一樣。)所以,我會被阻止把我的cookie帶到另一臺計算機上,並且會阻止我製作自己的cookie內容。 (好的,所以這不是一個很可能的場景......)
  2. 當會話數據存儲在某些共享服務器端資源(即/ tmp)中並且容易被窺探時。在這種情況下,如果窺探者能夠看到會話的內容,他們仍然不能僞造該會話的連接,因爲他們不知道指紋中有哪些數據。
+0

1.將會話數據存儲在cookie中?聽起來很奇怪,如果你將它存儲在會話中,爲什麼還要將它存儲在cookie中? 2.這是真的,但如果您的共享服務器允許其他帳戶持有人打開您的tmp文件,則無論如何,您都會遇到嚴重的安全問題......我參與過的每個共享服務器都不允許您訪問其他的tmp文件。然而,這是非常好的一點。 – dqhendricks

+0

1. Cookie *是會話。不需要任何服務器端存儲。也就是說,數據實際上在cookie中,而不是cookie中持有指向服務器端資源的指針。 2.我並不是指「(共享服務器)端」資源,我的意思是「共享(服務器端)」資源 - 即,即使私有服務器也具有共享/ tmp文件系統。這不僅僅是文件。可能是數據庫表或memcache羣集。我並不是說哈希指紋增加了很多安全性,但這不是一個可怕的想法。至少,它給你一個較短的字符串來存儲和比較。 :) –

+0

1.不是會話數據存儲在一個cookie中的100%,只是稱爲cookie哈哈? 2.你是否暗示通常存儲在tmp文件夾中的會話文件可以被外部人訪問?存儲在tmp中的文件比文件系統的其他部分更容易訪問,因爲它是服務器上的共享資源?任何關於此的信息都會很棒。 – dqhendricks

1

我可以想象,指紋信息的哈希點是存儲空間,因爲生成的哈希具有固定的長度。

但也使用鹽對我沒有多大意義。因爲正如你所說的那樣,由於數據存儲在會話數據存儲位置,因此如果某人能夠獲得該數據,則會比會話修復/劫持造成更大的問題。

1

你可以在這裏找到一個合理的解決方案: http://shiflett.org/articles/the-truth-about-sessions

指紋對抗會話劫持。 攻擊者不僅需要你的session_id,他還需要任何敏感的HTTP頭。 這爲攻擊者增添了另一個障礙,儘管可以輕鬆克服。

散列在那裏使數據統一。鹽在那裏模糊散列過程 - 所以攻擊者不能爲自己的HTTP頭組合生成有效的指紋。

如果黑客是在文件系統中,你有更大的問題:d

+0

如果會話ID不是首先安全生成的,那麼您已經丟失了。您鏈接的帖子給出了'12345'的示例,並將其稱爲「安全性徹底晦澀」。你猜怎麼了?猜測User-Agent比猜測一個5位數字更容易! –

+0

「哈希是爲了使數據統一起來的,鹽在那裏模糊哈希過程 - 所以攻擊者不能爲自己的HTTP頭組合生成有效的指紋。」 - 爲什麼哈希服務器端會阻止攻擊者猜測標題信息?如果他們試圖模仿某人會話,服務器會在嘗試匹配之前將他猜出的頭部與存儲的信息完全相同地進行散列。 – dqhendricks

+0

喜歡這篇文章,和所有的評論。 – dqhendricks

1

很多人誰不很瞭解有關安全,希望結合流傳在Internet建議比特他們實際將會「足夠好」。將會話ID綁定到U-A會中斷瀏覽器升級(Chrome經常會這樣做),並綁定到IP地址會導致移動性下降(任何人使用Wi-Fi的筆記本電腦),而且許多ISP沒有連續的分配。任何能夠嗅探cookie的人都可以嗅出U-A,並且可能會訪問相同的IP地址,因爲他們將Cookie置於NAT後面的不安全Wi-Fi上。

你可能想要做的是改變一個登錄嘗試,這是爲了防止「會話固定」攻擊(其中,攻擊者使受影響的負載http://example.com/?SESSIONID=foo例如通過<img>的可靠途徑會話ID,等待讓你登錄,現在知道受害者的會話ID)。沒有理由通過登錄保留會話,並且您可以複製需要保留的少數內容(例如購物車)。

+0

Maby我誤解了你,但瀏覽器升級/ IP更改通常是足夠重置會話的理由(如果你沒有「記住我」功能,女巫本身就不好)。 – XzKto

+0

IP更改是重置會話的一個*可怕*原因。它始終發生在IPv6上,或者當您將筆記本電腦從工作地移動到家中時,或者DSL調制解調器重新連接時,或者... –

+0

看起來這真的取決於國家。在我正在開發的網站上,我們做了一些小小的研究,只有不到1%的用戶每週更多地更改IP的最後一個八位組(每天只有大約2k個獨立用戶,所以這是不太好統計)。讓他們每次重新登錄似乎並沒有打擾他們(他們與其他人有類似的活動統計)。你有一些數字來確認你的帖子?我對此非常感興趣。 – XzKto

1

如果黑客能獲得到你 文件系統來發現你的會話文件 內容,是不是已經在該區在 這一點?

如果你使用PHP作爲CGI(就像nginx一樣),那麼我認爲不是。如果您設置了權限,那麼會話文件必須對PHP用戶具有讀/寫權限,而您的PHP文件應該只具有讀權限。因此,如果您將鹽從Web服務器傳遞到PHP,那麼PHP用戶無法訪問它(他不能創建任何新的/更改可以由您的Web服務器運行的現有PHP文件,並且他不能訪問網絡服務器,因爲它在另一個用戶上運行),所以他不能真正破解(更改)cookie(只刪除它們),因爲他不能得到鹽。當然,你也必須通過web服務器傳遞數據庫設置。

我從來沒有真正嘗試過,所以請糾正我,如果我錯了。

3

在補充,其中包含如何保護您的會話存儲我想補充一些想法不是可以在一些特定的應用解釋哈希&鹽一些很好的提示@Kai Sellgren(+1)的響應。

我不是在討論使用cookie作爲會話存儲的應用程序,我們仍然會在Prestashop電子商務解決方案上看到這一點,並加密了cookie內容(爲什麼他們決定將會話存儲在cookie?)。我明白我們談論服務器端會話存儲。

關鍵的一點是分層安全性和縱深防禦

Compromissions從來布爾的事情,你不「完全地破壞」或「完全地安全的」。我喜歡的真實歷史之一是mySpace worm explanation,它顯示了真正的攻擊和防守步驟必須如何突破。總是有一堵新牆。僅舉一個例子,當我在辦公室時,我與我的老闆分享了相同的IP,也許是同一瀏覽器,這可能會破壞僅基於IP +用戶代理的安全性。

因此,在會話戳記的鹽問題中,我們顯然是在幾個牆壁倒塌之後採取行動的&。凱向我們展示了這些牆壁。當他談到保護會話存儲我想補充兩兩件事:

  • 它改變session.save_path每個PHP應用程序的open_basedir(並獲得一個單獨的虛擬主機的每個)一個很好的主意。很少完成。
  • 如果您的應用程序安裝路徑(如/ MYAPP)上,加上會話cookie一個prefix_path(和解決它的任何其他應用程序在同一臺服務器上)

現在讓我們想象一下一個現實compromission。你已經幾種方法可以在服務器端妥協會話:

  • 的應用與在其他路徑運行(或者在同一服務器上的其他域)其他一些應用程序在網站上運行。至少在這些申請中是相當不安全的。在最壞的情況下,服務器端代碼可以注入到這個應用程序中,但是一些安全牆(如open_basedir或其他chrooting技術)可能會阻止此注入的代碼影響您的單獨應用程序(或數據)。
  • 一些JavaScript庫帶有一些包含高度不安全腳本的測試子目錄,不僅會議信息很好,而且可能會提供一些會話固定或預測。
  • 該應用程序是共享的,並且討論類似wordpress的軟件,您可以想象一些平臺共享許多不同的安裝,具有不同的模塊和可能的一些自定義代碼。在這樣的平臺上,你會發現可以改變每個消費者的鹽的設置,這是有原因的。其中一個網站可能會影響其他人的安全,如果應用程序想要管理一體化網站,清理分離將變得更加困難。

你的目標應用可以通過環境遭到襲擊,如果會話存儲可以與其他應用程序的某些腳本共享,或者從腳本在自己的應用程序,你甚至did'nt發現(這樣的F * **在JavaScript庫中的例子,爲什麼你沒有暫停PHP靜態文件目錄執行!)

從compromission,攻擊者可以potentialy的第一步(和嚴重程度增加):

  • 閱讀會議郵票,也許覺得他應該假以獲得該信息相同的印花稅
  • 共建包含對其配置有效的會話戳的新會話,然後在您的應用程序中使用此新會話標識符。你的應用程序將找到會話文件,並接受他。
  • 改變您的有效會話的一個修改的郵票以同樣的方式

郵票的簡單哈希將讓他的生活困難,但它也只是一堵牆折斷,使這面牆更難以打破。

重要的一點是,從你的問題,如果一個人可以改變會議存儲中的東西,我已經心情不好了嗎?。好吧,也許不完整。如果它是應用程序的chroot/separation/securization允許他做的唯一的東西,鹽對他來說將是一場噩夢。

而第二個重點是:我應該在每個Web應用程序上對此級別的深度安全性進行操作嗎?。答案是否定的。 過度工程是一件壞事,它可以通過簡單的事實來降低應用程序的安全性,它變得更難理解和理解。你並不需要complexify您的應用程序,如果:

  • 你有會話存儲分離的一個相當不錯的水平
  • 你孤單你的服務器上,只有一個人報名,並且沒有任何形式的多點處理
  • 您的應用程序的安全級別是如此之弱,一個簡單的代碼注入可以應用,所以不需要會話固定攻擊者:-)
0

是真正需要的鹽和散列某事李關於這個[http客戶端指紋]?

該散列可能有助於減少會話數據中指紋所消耗的字節數。所以只要散列指紋的尺寸小於指紋本身的尺寸,這在減少空間方面就是有意義的。價格是消耗系統資源來生成散列。

它真的有意義嗎?你需要以此爲基準來說明。

那麼鹽怎麼會有幫助呢?我必須承認,我沒有看到鹽的理由。只有使從哈希中猜出指紋更加困難纔有意義。但是,由於我沒有看到哈希指紋(它只保存在服務器端並且已經相當安全)的安全性好處,鹽醃不會增加任何東西。

如果會話存儲本身不被認爲是安全的(如果這是參數),那麼whole session should be encrypted不僅僅是指紋。

因此,特別是對於指紋,我沒有看到用於哈希和醃製它的很多用途。

相關問題