it-swarm-vi.com

Làm thế nào crackers có thể xây dựng lại băm mật khẩu muối 200k nhanh như vậy?

Tôi đang nghiên cứu cho một cuộc nói chuyện nhỏ về bảo mật web và tôi đã tìm thấy một bài viết về hack formlings, khiến tôi tò mò. Họ tuyên bố đã sử dụng muối SHA-256 +

Chúng tôi đã có thể khắc phục ngay lỗ hổng và nâng cấp các cơ chế băm của mình từ sha-256 bằng muối ngẫu nhiên thành bcrypt để củng cố an ninh (ngày 10 tháng 7 năm 2012)

Tuy nhiên, những kẻ tấn công đã tuyên bố họ đã tìm thấy ~ 200k mật khẩu trong bộ dữ liệu được công bố 400k (Họ có 11 triệu người dùng, có vẻ như IMHO hầu hết đã được sao chép).

Khoảng một nửa trong số 400.000 băm đã được xây dựng lại bằng các công cụ bẻ khóa mật khẩu. (Ngày 11 tháng 7 năm 2012)

Điều này có vẻ đáng ngờ với tôi. Tôi biết rằng nếu không sử dụng PKCS # 5 hoặc các kỹ thuật tương tự, bảo mật của SHA-256 bị hạn chế, nhưng họ cần bao nhiêu năng lực tính toán để tìm được nhiều mật khẩu nhanh như vậy?

Tôi đoán là những đứa trẻ đã nói dối về việc băm. Có ai đó một số hiểu biết về điều đó?

33
Patrick Cornelissen

Không có câu trả lời nào hiện có bao gồm phần quan trọng của câu hỏi này với sự hài lòng của tôi: còn muối thì sao?

Nếu chỉ các giá trị băm mật khẩu được đăng, các cracker khác không thể biết:

  1. Giá trị muối trên mỗi mật khẩu thực tế (được cho là ngẫu nhiên, trên mỗi nguồn).

  2. Làm thế nào muối được trộn với mật khẩu trong mã.

Tất cả những gì họ có là kết quả cuối cùng, băm!

rất nhiều cách mật khẩu và muối có thể được kết hợp để tạo thành hàm băm:

sha256(pass + salt)
sha256(salt + pass)
sha256(sha256(pass) + sha256(salt))
sha256(pass + sha256(salt))
sha256(sha256(...(salt + pass + salt)...))

Nhưng nếu muối là khuyến nghị 8 ký tự về tính ngẫu nhiên thuần túy thì

sha256("monkey1" + "w&[email protected]")
sha256("w&[email protected]" + "monkey1")

Điều này có nghĩa là mật khẩu 7 hoặc 8 ký tự "điển hình" trở thành cực kỳ khó để vũ lực, bởi vì nó có hiệu quả từ 15 ký tự trở lên! Hơn nữa, để bẻ khóa băm mật khẩu mà bạn biết được muối, trừ khi bạn cũng có muối, bạn không có lựa chọn nào khác ngoại trừ lực lượng vũ phu !

Dựa trên nghiên cứu tôi đã sử dụng bẻ khóa GP , tôi đã đạt được 8213,6 M c/s bằng cách sử dụng hai thẻ ATI cao cấp bẻ khóa bẻ khóa mật khẩu MD5. Trong điểm chuẩn của tôi, điều này có nghĩa là tôi có thể thử:

all 6 character password MD5s   47 seconds
all 7 character password MD5s   1 hour, 14 minutes
all 8 character password MD5s   ~465 days
all 9 character password MD5s   fuggedaboudit

Lưu ý rằng SHA-256 là 13% tốc độ MD5 trên GPU sử dụng Hashcat . Vì vậy, nhân các số này với khoảng 8 để xem sẽ mất bao lâu.

Nếu các muối là không biết, điều đó có nghĩa là về cơ bản bạn là vũ phu buộc tương đương với hơn 12 mật khẩu ký tự. Điều đó vượt xa phạm vi của bất kỳ sức mạnh tính toán nào đã biết.

Bây giờ nếu bạn muốn tranh luận rằng

  1. gốc crackers cũng thu được muối, nhưng chọn không đăng chúng.

  2. gốc crackers cũng có mã nguồn (hoặc đó là nguồn mở) để họ biết mật khẩu được xử lý như thế nào, nhưng chọn không đăng thông tin đó.

  3. Formspring đang nói dối và mật khẩu của họ không được muối hoặc muối không đúng cách sao cho muối không có tác dụng.

Có thể dễ dàng, bẻ khóa 200k băm mật khẩu 400k trong vài ngày là điều dễ dàng.

34
Jeff Atwood

Chỉnh sửa: Tất cả những điều dưới đây giả định rằng các muối được biết đến, bởi vì đó là cách sử dụng muối Word theo tiêu chuẩn công nghiệp (dòng thứ 3) .

Giống như một ví dụ về cách thức này thường xuất hiện trong cơ sở dữ liệu, hãy xem cái này SHA-256 Unix Crypt output:

$5$rounds=80000$wnsT7Yr92oJoP28r$cKhJImk5mfuSKV9b3mumNzlbstFUplKtQXXMo4G6Ep5

.. Ở đâu wnsT7Yr92oJoP28r là muối trong bản rõ. Tài liệu Python Tài liệu Passlib có mô tả tốt về nhiều các định dạng mật khẩu băm phổ biến , và hầu hết các muối trong kho lưu trữ này được ghép nối với biểu diễn mật khẩu được băm.

' không biết đến kẻ tấn công salt' mà @Jeff Atwood thảo luận thường được gọi là "hạt tiêu". Xem Mật khẩu băm thêm muối + hạt tiêu hoặc muối là đủ?


Năm 2009, Daniel J. Bernstein đã viết một triển khai SHA-1 được tối ưu hóa cao cho khung CUDA của NVIDIA. Trước đó, họ đã quản lý 690 triệu băm SHA-1 mỗi giây trên một máy chủ sử dụng bốn thẻ đồ họa.

Các cuộc tấn công vũ phu chống lại mật khẩu băm là một khối lượng công việc "lúng túng song song" . Vào năm 2010, Thomas Roth đã chứng minh tấn công vũ phu ~ 10 băm với giá ~ 2 $ sử dụng Amazon EC2. Điều này có thể dễ dàng được nhân rộng, nếu tỷ lệ không đủ cao, thì chỉ cần thêm nhiều phiên bản EC2.

Vì vậy, về cơ bản, đây không phải là câu hỏi về sẽ mất bao lâu để xác nhận lại mật khẩu. Đó là một câu hỏi về sức mạnh tính toán mà kẻ tấn công sẵn sàng hoặc có thể trả bao nhiêu để có được kết quả nhanh hơn.

những kẻ tấn công tuyên bố họ đã tìm thấy ~ 200.000 mật khẩu

Một lời giải thích hợp lý là những kẻ tấn công đã không nhắm mục tiêu đại diện băm cụ thể, họ chỉ đi cho "trái cây treo thấp". Nói cách khác, họ chỉ tìm mật khẩu "dễ đoán". Có lẽ một cái gì đó như:

  • Danh sách ứng viên mật khẩu phổ biến nhất trong bản rõ, được xây dựng từ danh sách công khai mật khẩu người dùng thực tế. (Trong những năm qua, đã có một vài rò rỉ mật khẩu người dùng thực .)
  • Và có lẽ họ cũng đã thử tất cả các mật khẩu chữ thường có thể phát âm lên đến giới hạn trên thấp, ví dụ lên đến 6 ký tự. (Trong dữ liệu MySpace năm 2006 được đặt ở trên, người ta thấy rằng 17% tất cả mật khẩu người dùng cuối có từ 6 ký tự trở xuống.)

Tôi đoán là những đứa trẻ đã nói dối về việc băm.

Nếu tôi hiểu chính xác các liên kết của bạn, thì băm được phát hiện trên một diễn đàn vào ngày 7 tháng 7. Nhưng chúng có thể đã bị đánh cắp từ Formspring vài tuần hoặc vài tháng trước đó?

Với những gì tôi mô tả ở trên, có vẻ như không hợp lý với tôi rằng một vòng SHA256 với một loại muối duy nhất cho mỗi mật khẩu đã được sử dụng, như Formspring nói.

Tất cả phụ thuộc vào bao nhiêu thời gian và nỗ lực mà những kẻ tấn công dồn vào vết nứt vũ phu. Nhưng trong phạm vi tài nguyên mà một nhóm nhỏ tin tặc có thể có, có vẻ hợp lý khi phát hiện 200.000 mật khẩu yếu từ bộ dữ liệu gồm 11 triệu biểu diễn băm đơn giản SHA-256.

16
Jesper M

Bẻ khóa băm không được đánh dấu là khá nhỏ: bạn chỉ cần tra cứu hàm băm trong một bảng được tính toán trước và tìm câu trả lời của bạn. Không có ý nghĩa gì khi buộc những người còn lại vì các bảng Rainbow của bạn đã bao gồm từ điển vũ phu của bạn.

Nhưng bẻ khóa mật khẩu muối vẫn đơn giản; chậm hơn nhưng vẫn đơn giản Trong hầu hết các cuộc tấn công vũ phu, kẻ tấn công đi theo chiều rộng không sâu. Thay vì thử 1 tỷ mật khẩu đối với 1 tài khoản, anh ta thử hàng chục hoặc hàng trăm hoặc hàng nghìn mật khẩu phổ biến đối với TẤT CẢ các tài khoản. Chắc chắn các bảng Rainbow nhanh hơn, nhưng một mình muối không cản trở phương pháp vũ phu cổ điển. Bắt đầu ở đầu từ điển của bạn và thử mật khẩu đó với tất cả các tài khoản: điều này rõ ràng liên quan đến việc tính toán lại hàm băm cho mỗi tài khoản, nhưng mặt khác, khả năng bạn bị đánh là khá cao (đó chính xác là "mật khẩu chung" nghĩa là gì , dù sao). Tiếp theo, lấy mật khẩu phổ biến nhất tiếp theo của bạn, tiếp theo, v.v.

Cuối cùng, bạn chỉ có thể nhận được vài nghìn mật khẩu, nhưng nói theo thống kê, có thể có hàng trăm tài khoản có mật khẩu "123456" trong danh sách của bạn và một số lượng khá lớn sử dụng "password1" và "111111" và "test" .

200K trong số 11 triệu là đáng tin cậy; chỉ khoảng 2%. 200K trong số 400K ít hơn như vậy. Không phải không thể nhưng không có khả năng. Luật giảm dần trở lại đá ở đâu đó; Tôi không chắc là bao xa nhưng có lẽ đó là một tỷ lệ thực sự đơn giản như 1/e hoặc một cái gì đó. Ngoài ra tôi còn hoài nghi.

8
tylerl

Nó đứng trong lý do mà họ không nói dối.

  1. Như @ Jeff lưu ý việc truy cập vào muối là điều cần thiết để bẻ khóa nhanh, nhưng như @Remus Rusanu lưu ý: "nếu họ có được băm thì tôi khó có thể thấy họ không lấy được muối như thế nào tốt "vì chúng phải được lưu trữ theo cách mà chúng có thể được liên kết với nhau. Tôi sẽ giả định rằng: ít nhất là các tin tặc ban đầu có quyền truy cập vào muối.1

  2. @Jeff cũng nói rằng họ phải có quyền truy cập vào mã nguồn để biết cách kết hợp muối và mật khẩu. Tôi đề xuất một cách tiếp cận khác để tìm hiểu cách kết hợp muối và mật khẩu:

    1. hãy giả sử rằng họ có tài khoản mẫu trước cuộc tấn công (một giả định khá hợp lý)
    2. tìm tài khoản cụ thể đó (muối, băm) trong danh sách thu được
    3. biết mật khẩu, muối và hàm băm kết quả, có thể dễ dàng xây dựng một tập lệnh nhỏ để kiểm tra tất cả các cách hợp lý (và một số cách không hợp lý) để kết hợp mật khẩu và muối (không quá vài nghìn cách?)
    4. ???
    5. lợi nhuận!
  3. họ tuyên bố có "hàng chục triệu thành viên" khiến @Jesper quả treo thấp lý thuyết nghe có vẻ rất hợp lý.

Ok, họ vẫn có thể nói dối nhưng ít nhất có vẻ hợp lý là họ không.

1. Nếu giả định này sai - các tin tặc ban đầu đã không xuất bản muối VÀ không thử tự bẻ khóa mật khẩu - phần còn lại có thể không có khả năng.

7
João Portela

hashcat có thể thực hiện chỉ hơn 1 tỷ băm SHA256 mỗi giây trên Radeon HD7970, chỉ bằng một nửa tốc độ của SHA1 và một phần tư tốc độ của MD5. Tuy nhiên, đây thậm chí không phải là nút cổ chai :

Một điều nữa trước khi chúng ta tiếp tục; Bạn có nhận thấy tốc độ bẻ khóa là chỉ duy nhất là 258,7M mỗi giây không? Điều gì đã xảy ra với thông lượng lý thuyết của một vài tỷ băm SHA1 mỗi giây? Vấn đề là thông lượng cao hơn chỉ có thể đạt được với các đột biến trên mạng của các giá trị từ điển mật khẩu hoặc bằng cách làm việc thông qua các khả năng mật khẩu khác nhau trực tiếp trong GPU. Nói cách khác, nếu bạn để GPU lấy một giá trị từ điển thì chuyển đổi nó thành một số khả năng khác nhau, nó có thể hoạt động nhanh hơn rất nhiều. GPU có thể được cung cấp mật khẩu đủ nhanh để đạt được cùng một mức thông lượng nên việc có một danh sách mật khẩu có hiệu quả là một nút cổ chai.

Vì vậy, sử dụng SHA256 (hoặc thậm chí SHA512) không an toàn hơn sử dụng SHA1 hoặc MD5 để chống lại các loại tấn công này.

4
mgorven

Cả hai bài đăng đều không đề cập đến việc liệu thủ phạm có được quyền truy cập vào mã nguồn của Formspring hay không. Nếu đây là trường hợp, phương pháp xây dựng băm và tạo ra muối ngẫu nhiên sẽ có sẵn cho những kẻ tấn công. Điều này sẽ làm cho nhiệm vụ bẻ khóa dễ dàng hơn đáng kể, đặc biệt nếu phương pháp tạo ra muối "ngẫu nhiên" giới hạn chúng ở một giá trị tập tương đối nhỏ.

Với tốc độ rõ ràng mà bộ giới hạn này đã bị bẻ khóa, tôi đoán tốt nhất là đây là trường hợp.

3
mitchellrj

Nếu họ đang sử dụng băm với một loại muối duy nhất cho mỗi mật khẩu, thì thông thường sẽ mất một thời gian đáng kể trước khi người ta có thể bẻ khóa các mật khẩu này. Trừ khi mật khẩu cực kỳ yếu hoặc mật khẩu là từ trong từ điển. Bruteforcing tinh khiết có vẻ hơi khó xảy ra nếu chúng mạnh.

Phần cứng của Tom có ​​một bài viết về mật khẩu GPGP bẻ khóa. Mật khẩu yếu ( không hơn 10 ký tự bao gồm chữ hoa, chữ thường, ký hiệu, ...) có thể bị bẻ khóa trong vài phút, thậm chí bằng muối nếu biết muối.

Nếu không, sẽ mất nhiều ngày, nhiều tháng, mật khẩu dài hơn thậm chí hàng ngàn năm. Nhưng đây là không có muối. Với một muối nó sẽ mất mãi mãi.

1
Lucas Kauffman