Tất tật bạn phải biết về "Giải mã mật khẩu"
Mật khẩu (Password) thường là một xâu, chuỗi, loạt các ký tự mà dịch vụ Internet, phần mềm, hệ thống máy tính yêu cầu người dùng nhập vào bằng bàn phím trước khi có thể tiếp tục sử dụng một số tính năng nhất định.
1. CÁC NGUYÊN LÝ VÀ KĨ THUẬT
Tầm quan trọng và phương pháp giải mã mật khẩu
Mật khẩu là một trong những phương pháp bảo mật được sử dụng phổ biến nhất trên thế giới. Tài khoản đăng nhập và mật khẩu được sử dụng trên các hệ thống máy tính, tài khoản ngân hàng, ATM và rất nhiều ứng dụng khác.
Giải mã mật khẩu giúp bạn có quyền truy cập vào hệ thống, tài khoản email mà bạn muốn. Mặc dù một số mật khẩu rất dễ để giải mã, tuy nhiên một số mật khẩu cực kì khó giải mã. Trong trường hợp này bạn có thể kết hợp sức mạnh của phần cứng (GPU, Siêu máy tính, ASIC, …) hoặc là có thể lấy mật khẩu dựa trên một số phương pháp khác.Đôi khi bạn không cần mật khẩu để truy cập. Bài viết sau Bizfly Cloud sẽ giúp bạn hiểu sâu và rộng hơn về chủ đề "Giải mã mật khẩu". Hãy cùng theo dõi nhé!
Ví dụ: nếu bạn có thể sự dụng lại một cookie, session ID, access token. Bằng các phương thức này có thể có biết được mật khẩu dễ dàng hơn nhiều lần so với việc giải mã mật khẩu phức tạp. Kiểu tấn công này được gọi là REPLAY.
>> Tham khảo thêm: Tổng quan về Cookie và Session
Nguyên lý và kỹ thuật giải mã mật khẩu
1. Lữu trữ mật khẩu
Nói chung, mật khẩu thường không được lưu trữ trong hệ thống dưới dạng cleartext.
Theo nguyên tắc, mật khẩu sẽ được lữu trữ dưới dạng mã băm (Hash). Mã băm là mã hóa một chiều duy nhất cho một đầu vào nhất định. Các hệ thống thường sử dụng mã hóa MD5 hoặc SHA1 để mã hóa mật khẩu lưu trữ.
>> Tìm hiểu thêm: Hash - Hàm băm là gì? Các dạng Hash code
Trong hệ điều hành Windows, mật khẩu trong hệ thống được lưu trữ trong file SAM. Còn hệ điều hành Linux thì lưu trữ chúng trong file /etc/shadow. Các file này chỉ có thể truy cập bởi quyền root hoặc Administrator. Trong cả hai trường hợp, bạn đều có thể lấy nội dung của các file đó và giải mã mật khẩu.
2. Các kiểu giải mã mật khẩu
- Từ điển(Dictionary)
Giải mã mật khẩu sử dụng từ điển là cách đơn giản và nhanh nhất. Nguyên lý đơn giản là nó so sánh từng từ trong từ điển có giống với mật khẩu cần giải mã hay không.
Với cách tiếp cận này, nếu bạn thực hiện bằng tay dường như là không thể, nhưng máy tính sẽ giúp bạn thực hiện việc này rất nhanh và hiệu quả có thể so sánh hàng triệu từ trong vài giờ. Đây thường là cách tiếp cận đầu tiên của bạn để giải mã bất kì mật khẩu nào, và trong một số trường hợp, nó có thể thành công trong vài giây.
- Rainbow Table
Phần lớn các hệ thống hiện đại lưu mật khẩu dưới dạng một mã băm (hash). Điều này có nghĩa là ngay cả khi bạn có thể có nội dung của các file chứa mật khẩu thì bạn cũng chỉ có các mật khẩu đã được mã hóa mà thôi. Phương pháp giải mã sử dụng từ điển lấy tập tin từ điển và mã hóa mỗi các từ sau đó so sánh với mật khẩu đã mã hóa. Tuy nhiên sẽ mất thời gian và tốn hiệu năng của CPU. Phương pháp sử dụng Rainbow Table sẽ sử dụng một bảng chứa tất cả các từ trong từ điển đã được mã hóa và so sánh với mật khẩu cần giải mã. Nếu có cái khớp nhau thì tức là bạn đã giải mã thành công.
>> Xem thêm: CPU là gì? Các thông số kỹ thuật của CPU
Vét cạn (Brute Force)
Đây là phương pháp tốn nhiều thời gian nhất để giải mã mật khẩu (khi bạn không có một chút gợi ý gì về mật khẩu). Tôi luôn luôn sử dụng nó cuối cùng khi không còn phương án nào khác. Phương pháp này cố gắng thử tất cả các kí tự chữ hoa, chữ thường, số, kí tự đặc biệt kết hợp với nhau để so sánh với mật khẩu cần giải mã. Phương pháp này phụ thuộc nhiều vào hiệu năng phần cứng mà bạn sử dụng để giải mã.
Hỗn hợp (Hybrid)
Là phương pháp kết hợp ưu điểm của 2 kiểu tấn công từ điển và vét cạn. Thường thì sẽ sử dụng các kí tự thêm vào đầu hoặc cuối các từ trong từ điển. Ví dụ, trong từ điển có từ "password", kiểu tấn công hỗn hợp sẽ kết hợp các kí tự vào cuối tứ "password" như là "password123", "password@123", …
Thay thế
Là một phương pháp giải mã mật khẩu Hybrid đặc biệt, sẽ sử dụng các rule thay thế để tạo ra các từ điển mới. Các rule có thể là thay thế các kí tự, số thành các kí tự khác. Ví dụ, từ điển có từ "password" thì trong bộ từ điển mới sử dụng phương pháp thay thế có thể có các từ sau "PassWord", "p@ssw0rd", "drowssap" …
Các mật khẩu thông dụng
Việc đặt mật khẩu dựa vào thói quen của chủ tài khoản, thường thì một số người hay đặt mật khẩu dựa vào các số, ngày sinh, tên, các từ trong từ điển, mật khẩu mặc định… Trong những năm gần đây các hệ thống bị hack và thông tin tài khoản của hàng triệu người dùng bị rò rỉ (Như vu 5 triệu tài khoản mật khẩu gmail bị rò rỉ) trong đó có rất nhiều mật khẩu đơn giản và thông dụng có thể giải mã trong vòng chưa đến 1s. Như top 10 mật khẩu thông dụng dưới đây:
Chiến lược giải mã
Một số bạn mới tìm hiểu về mảng giải mã mật khẩu này, các bạn thường chọn một công cụ và một vài danh sách từ điển, sau một vài lần không ra kết quả, các bạn cảm thấy chán nản và từ bỏ. Các bạn nên biết là một chuyên gia giải mã mật khẩu đều có một chiến lược. Chiến lược giải mã mật khẩu với mình nhiều khi còn quan trọng hơn mức độ bao phủ của từ điển hay là sức mạnh của phần cứng. Ngay cả các chuyên gia cũng không thể nào giải mã được hết các mật khẩu, nhưng với một chiến lược giải mã tốt, họ có thể giải mã được hầu hết các mật khẩu trong thời gian ngắn nhất. Đây là phần mà tôi thấy thích nhất và cảm thấy quan trọng nhất. Tôi sẽ chia sẻ kinh nghiệm của tôi về xây dựng chiến lược giải mã mật khẩu trong phần cuối cùng của loạt bài này.
Các công cụ phổ biến
John
John the Ripper là công cụ giải mã mật khẩu nối tiếng nhất thế giới. Nó có cả phiên bản cho Windows và Linux. Tuy nhiên trên Linux nó không có giao diện đồ họa mà sử dụng dòng lệnh nên khá khó khăn cho những người mới bắt đâu để khai thách toàn bộ tính năng của nó cho việc giải mã mật khẩu hiệu quả.
Một trong những điều tuyệt vời ở công cụ này là nó được sử dụng trong các chiến lược giải mã mật khẩu mặc định. Trước tiên nó sẽ sử dụng phương pháp từ điển, nếu không thành công, nó sẽ cố gắng sử dụng phương pháp kết hợp. Cuối cùng nó mới sử dụng đến phương pháp Brute Force.
Ophcrack
Đây là công cụ miến phí trên Windows, giải mã mật khẩu dựa trên phương pháp rainbow table. Đây là một trong những công cụ phổ biến nhất trên Windows (Chỉ sau Cain and Abel), công cụ này cũng được sử dụng trên Linux và Mac.
Nó giải mã các mật khẩu định dạng LM và NTLM (Windows). Để giải mã mật khẩu Windows, bạn có thể tải về các rainbow table hoàn toàn miễn phí.
L0phtCrack
L0phtCrack là một giải pháp có thể thay thế cho Ophcrack, nó cố gắng giải mã mật khẩu Windows từ tập tin SAM hoặc Active Directory (AD). Nó cũng sử dụng các phương pháp từ điển và Brute Force.
L0phtCrack đã được mua lại bởi Symantec vào năm 2006. Nhưng sau đó họ lại mua lại nó vào năm 2009.
Cain And Abel
Cain and Abel được biết đến là công cụ giải mã mật khẩu nối tiếng nhất hành tinh. Dùng trên HĐH Windows. Nó có thể crack nhiều loại mã băm như là NTLM, NTLMv2, MD5, Wireless, Oracle, MySQL, SQL Server, SHA1, SHA2, Cisco, VoIP và nhiều loại khác.
>> Tìm hiểu thêm: Sự khác nhau giữa SQL, MySQL và SQL Server
Nó sử dụng các phương pháp giải mã như từ điển, rainbow table, và brute force. Ngoài ra nó có tình năng chọn độ dài mật khẩu khi sử dụng phương pháp brute force. Ngoài ra nó còn là một công cụ tuyệt vời để triển khai tấn công MItM sử dụng ARP Poisoning. Ngay sau loạt bài về giải mã mật khẩu, tôi sẽ giới thiệu đến các bạn loạt bài về tấn công MItM thú vị này.
Hashcat
Hashcat là công cụ yêu thích của tôi, nó hỗ trợ GPU, có thể giải mã hơn 200 loại mã hóa kể cả WPA/ WPA2 Đây là công cụ hoàn toàn miễn phí trên cả Windows và Linux.
Nó hỗ trợ toàn bộ các phương pháp giải mã mật khẩu đã nêu ở trên. Đây là một công cụ mới được phát triển, nó kế thừa toàn bộ những ưu điểm của các công cụ giải mã mật khẩu offline trước đây.
THC-Hydra
THC-Hydra là công cụ dò mật khẩu online được sử dụng phổ biến nhất trên thế giới. Nó có thể dò mật khẩu từ form đăng nhập của các website. Và khi được sử dụng kết hợp với các công cụ khác như Tamper Data, nó có thể là một công cụ mạnh mẽ và hiệu quả để crack gần như mọi loại cơ chế xác thực trực tuyến.
Aircrack-Ng
Đây là bộ công cụ giải mã và thu thập mật khẩu wifi mà tôi thích nhất, nó có khả năng giải mã mật khẩu wifi WEP và WPA/WPA2. Ngoài ra nó còn có rất nhiều tiện ích khác:
– Tạo một soft AP
– Tạo một cuộc tấn công Evil Twin
– Tạo một Rogue AP
– Tấn công DoS môt Wifi AP
Nó chỉ có sẵn cho Linux và yêu cầu một số kiến thức nhất định để tiếp cận sử dụng, bù lại bạn sẽ có được thành quả rất đáng mong đợi khi bạn đầu tư thời gian vào nó. Một điều lưu ý bạn phải sử dụng card wifi tương thích với phần mềm này.
Phần cứng giải mã mật khẩu
Botnet
Giải mã mật khẩu cơ bản chỉ là sức mạnh của hiệu năng tính toán. Những gì mà một máy tính có thể làm được trong 1h, hai máy tính có thể chỉ mất 30 phút. Tương tự, hãy tưởng tượng bạn có một hệ thống mạng Botnet một triệu máy tính. Một số Botnet có sẵn trên thế giới, cung cấp cho bạn với mục đích giải mã mật khẩu. Nếu bạn có mật khẩu có thể mất một năm để giải mã với 1 máy tính, thì với một hệ thống có một triệu máy tính thời gian có thể giảm xuống 1 triệu lần.
GPU
GPU là phương án đơn giản nhất giúp bạn cải thiện sức mạnh của phần cứng, phương án này thích hợp với công cụ hashcat mà tôi đã trình bày ở trên.
ASIC
Trong những năm gần đây, một số IC chuyên dụng được phát triển cho việc giải mã mật khẩu. Các IC này giúp tăng khả năng giải mã mật khẩu nhanh hơn so với 100 CPU làm việc đối xứng.
2. Chiến thuật giải mã mật khẩu
Xây dựng chiến thuật giải mã mật khẩu
Giả định ở đây là chúng ta cần giải mã khẩn cấp một lượng lớn mật khẩu khác nhau. Đầu tiên ta phải nắm rõ được loại mật khẩu cần giải mã mật khẩu là gì. Các loại mã hóa này là mã hóa một chiều. Ví dụ như, Mật khẩu của các hệ thống Windows có định dạng NTLM nằm trong file SAM. Còn các hệ thống Linux mật khẩu trong file/etc/shadow kiểu mã hóa tùy từng hệ điều hành. Công cụ hash-identifier trên linux có thể giúp bạn xác định loại hash (đoạn text dữ liệu sau khi được mã hóa) đó là gì?
Ngoài ra chúng ta có thể dùng John the Ripper để xác định, tỉ lệ xác định đúng khoảng 90%. Còn Cain and Able hay Hashcat chúng ta phải xác định trước loại mã hóa đó là gì.
Chúng ta có thể thấy hình trên là một số loại hash mà cudahashcat hỗ trợ. Các bạn có thể dùng lệnh hashcat – h để xem chi tiết. Hoặc có thể đọc trên trang chủ của hashcat.
Bruteforce các mật khẩu yếu
Mặc dù có vẻ hơi trái so với bình thường, mình thường bắt đầu bằng cách này cố gắng bruteforce các mật khẩu rất ngắn. Nếu mật khẩu dài thì có thể mất đến hàng giờ, hàng ngày. Nhưng với mật khẩu ngắn thì chúng ta chỉ mất vài phút để có thể vét cạn được hết.
Mình thường để độ dài mật khẩu bruteforce từ 5 trở xuống (cái này tùy thuộc vào cấu hình phần cứng của bạn). Trong một số trường hợp chúng ta có thể thành công một số mật khẩu.
Ngoài ra ở bước này, tôi sẽ tiến hành bruteforce mật khẩu chỉ có số, thông thường tôi cho chạy từ 6 đến 8 chữ số(vì từ 1 đến 5 đã chạy rồi). Mật khẩu số 8 kí tự yêu cầu phải thử 100 triệu khả năng. Nếu phần cứng của các bạn mạnh, các bạn hoàn toàn có thể đẩy lên 12 chữ số, chỉ cần khoảng 1 nghìn tỉ khả năng thôi.
Như hình trên là cấu hình tool Cain and Abel brute force mật khẩu từ 1 đến 6 kí tự và chỉ chứa số.
>> Xem thêm: Brute Force Attack là gì? Phải làm gì để phòng chống?
Low-Hanging Fruit 1
“Low-hanging Fruit” trong lĩnh vực giải mã mật khẩu dùng để ám chỉ những mật khẩu được đặt bởi người dùng mà mang tính chất đối phó. Ví dụ một website yêu cầu mật khẩu tối thiểu khi tạo tài khoản mới là 6 kí tự. Thì có một số lượng mật khẩu sẽ được đặt là “123456”, “654321”, “qwerty”…
Một khi chúng ta đã crack được một vài mật khẩu ngắn bằng brute force, chúng ta có thể dùng luôn mật khẩu đấy để giải mã những mật khẩu liên quan. Có thể là mật khẩu thu thập được từ một công ty, tài khoản đăng nhập các website của một người dùng, hoặc là hệ thống thiết bị trong các khu công nghiệp công nghệ cao.
Mặc dù có thể tài khoản bị bẻ khóa có thể bị hạn chế một số quyền, có nhiều cách để leo thang đặc quyền cho tài khoản sysadmin hoặc root.
Để đơn giản mỗi lần chạy bạn nên chạy một nhóm các mật khẩu có thể có liên quan đến nhau, để tăng hiệu quả giải mã.
Thử các mật khẩu phổ biến
Là con người, mỗi chúng ta là một cá thể tồn tại duy nhất, tuy nhiên chúng ta lại thường có xu hướng suy nghĩ giống nhau. Người dùng khi được yêu cầu đặt mật khẩu thường đặt theo thói quen hoặc chỉ để thỏa mãn chính sách mật khẩu được yêu cầu và đương nhiên là phải dễ nhớ. Đó là lý do tại sao bạn sẽ thường xuyên nhìn thấy một số mật khẩu như là “12345678” (mật khẩu wifi) hay bảo mật hơn “Vannam1987”. Mặc dù rất đơn giản nhưng nó vẫn đáp ứng được các chính sách mật khẩu như là 8 kí tự, chữ hoa, chữ thường, chữ số. Mật khẩu kiểu này và các biến thể của nó thường hay được sử dụng.
>> Xem thêm: Những sai lầm cơ bản trong việc đặt mật khẩu mà người dùng Internet thường xuyên mắc phải
Để giải quyết vấn đề này, tôi thường sử dụng phương pháp từ điển để tiến hành giải mã mật khẩu. Các từ điển như là ngày tháng năm sinh, họ tên, họ tên kết hợp ngày tháng năm sinh, chứng minh thư, biển số xe, địa chỉ nhà. Ngoài ra tôi còn sử dụng một số từ điển tổng hợp quốc tế như là “rockyou”. Về từ điển tên người Việt, bạn có thể tham khảo bộ từ điển vipasswordict của Xnohat.
Nếu có thông tin của đối tượng, chúng ta hoàn toàn có thể xây dựng từ điển riêng để giải mã mật khẩu của đối tượng đó.
Phương pháp này có tỉ lệ thành công khá cao, nhất là những tài khoản online. Việc xây dựng được bộ tài khoản ưng ý cũng không quá phức tạp, tôi sẽ giới thiệu với các bạn trong phần tiếp theo.
Low-Hanging Fruit 2
Qua 3 bước trên bạn đã có được một số lượng mật khẩu trong khoảng thời gian tối thiều rồi. Bây giờ chúng ta sẽ đi đến các mật khẩu có độ phức tạp cao hơn. Trong lần giải mã lần này, chúng ta sẽ xử lý các mật khẩu có độ dài và độ phức tạp. Khi chúng ta được yêu cầu thay đổi mật khẩu thường xuyên thì các bạn sẽ làm gì, hẳn là sẽ có bạn cũng như nhiều người khác chọn cách đơn giản nhất là thêm hoặc thay đổi con số ở đầu hoặc cuối mật khẩu. Một số công cụ cho phép giải mã mật khẩu theo “Rule”. Các rule ở đây là các luật để thử các mật khẩu dựa vào mật khẩu gốc. Ví dụ như là thêm số vào đầu hoặc cuối, chuyển “i” thành “1”, chuyển “a” thành “@”. Các công cụ Hashcat và John the Ripper hỗ trợ phương pháp này. Đây cũng là một trong các nguyên nhân tôi thích sử dụng 2 tool này.
Hybrid Attack
Cho đến lần quét này chúng ta có thể đã giải mã được hơn 50% mật khẩu, các bước tiếp theo sẽ khó khăn hơn vì mật khẩu còn lại chưa giải mã được sẽ dài và kết hợp nhiều kí tự chữ hoa, chữ thường, số và kí tự đặc biệt như là “3@$yPa$sW0rd”(easypassword @@). Đây là một trong nhưng mật khẩu tương đối khó. Nó là một biến thể khó của các mật khẩu thông dụng.
Tiếp theo, chúng ta phải cần một danh sách mật khẩu kết hợp từ điển chữ số, chữ hoa, chữ thường kết hợp với rule. May mắn là John the Ripper nó sẽ tự động làm cho chúng ta. Còn Hashcat cũng có tùy chọn cấu hình.
Trong hình trên, chúng ta có thể thấy một số rule kết hợp như thêm số, hoặc chữ hoa vào các vị trí chỉ định.
Cuối cùng, nếu tất cả đều thất bại
Nếu tất cả các cách trên đều không giải mã được mật khẩu, lúc này chúng ta buộc phải nhờ vào sức mạnh của phần cứng hoặc là may mắn. Có thể đối với 1 CPU đơn lẻ thì rất chậm, nhưng có thể tăng tốc từ 1000x trở lên bằng hệ thống botnet, ASIC, hoặc GPU. Tốc độ giải mã nhanh nhất mà 25 GPU kết hợp có thể lên đến 348 tỷ hash/s.
Ngay cả khi chúng ta buộc phải bruteforce, chúng ta cũng phải có chiến lược riêng cho nó. Ví dụ: Nếu chúng ta biết rằng chính sách mật khẩu của đối tượng là 8 kí tự, mà các bước trên không giải mã được thì hãy thử bruteforce với 8 kí tự. Có thể nó sẽ giúp bạn giảm thiểu thời gian và thành công một số mật khẩu.
Trong trường hợp này, bạn nên tìm cách để biết được các thông tin về đối tượng, càng nhiều càng tốt.
Nguồn: securitybox.vn
Theo chuyên gia an ninh mạng: Ngô Cao Đại
>> Có thể bạn quan tâm: Tấn công Brute Force do Cyber Actors tiến hành