1. Trang chủ
  2. » Giáo án - Bài giảng

Học phần: An toàn mạng Bài báo cáo: Tìm hiểu về hashcat trong kali linux

36 50 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 36
Dung lượng 2,92 MB

Cấu trúc

  • II. Khái quát về hàm băm mật mã (4)
  • A. Giới thiệu sơ lược về hàm băm mật mã (4)
  • B. Định nghĩa tổng quát của hàm băm (4)
  • C. Tính chất của hàm băm mật mã (5)
  • D. Phân loại hàm băm mật mã (6)
  • E. Mô hình xử lý dữ liệu (7)
  • F. Ứng dụng của hàm băm (8)
    • III. Mô tả Hashcat (10)
  • A. Giới thiệu về Hashcat (10)
  • B. Các đặc trưng (11)
    • IV. Cài đặt và Cách sử dụng Hashcat trong Kali Linux (12)
  • A. Cài Đặt (12)
  • B. Cách sử dụng (14)
    • V. Các cách bẻ khóa (22)
  • A. Cách bẻ khóa hàm băm (22)
  • B. Bẻ khóa mật khẩu thông qua tấn công từ điển (23)
  • C. Bẻ khóa mật khẩu thông qua Bruteforce (27)
    • VI. Demo (27)
  • A. Demo 1 (27)
  • B. Demo 2 (32)
  • C. Demo 3 (34)
    • VII. Kết luận (35)
    • VIII. Tài liệu tham khảo (36)

Nội dung

Giới thiệu sơ lược về hàm băm mật mã

Hàm băm là một hàm chuyển đổi một mảng dữ liệu lớn thành một mảng dữ liệu nhỏ hơn, được ứng dụng rộng rãi trong nhiều lĩnh vực tin học, đặc biệt là trong mật mã Bài viết này sẽ tập trung vào các hàm băm mật mã và phân tích các ứng dụng của chúng trong việc đảm bảo tính toàn vẹn của dữ liệu.

Hàm băm nhận đầu vào là chuỗi bit có chiều dài hữu hạn và tạo ra chuỗi bit cố định n bit (n > 0), được gọi là mã băm.

Trong mã hóa, mã băm là đại diện thu gọn cho chuỗi bit có độ dài tùy ý, giúp nhận diện chuỗi đó Kết hợp với chữ ký số, hàm băm đảm bảo tính toàn vẹn của dữ liệu Trong lược đồ chữ ký số, mã băm được tính tại thời điểm T1 và bảo vệ khỏi thay đổi bất hợp pháp Để kiểm tra tính toàn vẹn tại thời điểm T2, người ta tính giá trị hàm băm của chuỗi bit x và so sánh với mã băm tại T1 Nếu hai giá trị khớp nhau, chuỗi bit x được xác nhận chưa bị thay đổi, cho thấy tính toàn vẹn của chuỗi bit đã được bảo đảm.

Định nghĩa tổng quát của hàm băm

Hàm băm (hash function) là một hàm toán học h có tối thiểu 2 thuộc tính:

- Nén (Compression): h là một ánh xạ từ chuỗi đầu vào x có chiều dài bất kỳ sang một chuỗi đầu ra h(x) có chiều dài cố định n bit

- Dễ tính toán (Ease of computation): cho trước hàm h và đầu vào x, việc tính toán h(x) là dễ dàng.[1]

Mô hình nén thông tin của hàm băm cho thấy quá trình mà thông điệp đầu vào có chiều dài tùy ý trải qua nhiều vòng xử lý, dẫn đến việc tạo ra chuỗi rút gọn hay chuỗi đại diện (Digest) với kích thước cố định ở đầu ra.

Tính chất của hàm băm mật mã

Một hàm băm mật mã lý tưởng có các tính chất sau :

Tính kháng tiền ảnh (Preimage resistance) là một tính chất quan trọng trong các hàm băm, đảm bảo rằng với mỗi đầu ra y đã cho, không thể tìm thấy bất kỳ dữ liệu đầu vào x nào sao cho h(x) = y Điều này có nghĩa là không thể xác định một thông điệp từ một giá trị băm đã biết trước.

Tính kháng tiền ảnh thứ hai (2nd - Preimage resistance) là một thuộc tính quan trọng trong các hàm băm, cho phép đảm bảo rằng với bất kỳ dữ liệu đầu vào x nào và giá trị băm y = h(x), không thể tìm được giá trị x’ sao cho h(x’) = h(x) Điều này có nghĩa là không thể xác định hai thông điệp khác nhau mà lại cho cùng một giá trị băm, từ đó tăng cường tính bảo mật của hệ thống.

Tính kháng xung đột (Collision resistance) là đặc tính quan trọng trong bảo mật, cho phép không thể tìm ra hai dữ liệu đầu vào khác nhau, x và x’, mà vẫn tạo ra cùng một giá trị băm h(x) = h(x’) Điều này đảm bảo rằng bất kỳ sự thay đổi nào trong thông điệp đều dẫn đến sự thay đổi giá trị băm, giúp bảo vệ tính toàn vẹn của dữ liệu.

Phân loại hàm băm mật mã

Hàm băm có thể được phân loại theo khóa sử dụng hoặc chức năng Theo khóa sử dụng, có hai loại hàm băm: hàm băm không khóa (unkeyed) và hàm băm có khóa (keyed) Hàm băm không khóa chỉ nhận đầu vào là thông điệp, trong khi hàm băm có khóa nhận đầu vào bao gồm cả thông điệp và khóa bí mật.

Trong lĩnh vực bảo mật thông tin, các hàm băm không khóa sử dụng mã phát hiện sửa đổi (MDC) để đảm bảo tính toàn vẹn của dữ liệu Đồng thời, trong các hàm băm có khóa, mã xác thực thông điệp (MAC) là phương pháp phổ biến nhất để xác thực tính chính xác của thông tin.

Theo chức năng, có thể chia các hàm băm thành 2 loại chính:

Mã phát hiện sửa đổi (MDC - Modification Detection Code) là một công cụ quan trọng được sử dụng để tạo chuỗi đại diện cho thông điệp MDC thường được kết hợp với các kỹ thuật khác như chữ ký số nhằm đảm bảo tính toàn vẹn của dữ liệu.

MDC là một loại hàm băm không khóa, bao gồm hai loại chính: Hàm băm một chiều (OWHF) cho phép tính giá trị băm dễ dàng nhưng khó khôi phục thông điệp từ giá trị đó, và Hàm băm chống đụng độ (CRHF) mà trong đó rất khó để tìm hai thông điệp khác nhau có cùng giá trị băm.

Mã xác thực thông điệp (MAC - Message Authentication Code) là một công cụ quan trọng để đảm bảo tính toàn vẹn của thông điệp mà không cần sử dụng thêm kỹ thuật nào khác MAC hoạt động như một hàm băm có khóa, với đầu vào bao gồm thông điệp và một khóa bí mật, giúp xác thực rằng thông điệp không bị thay đổi trong quá trình truyền tải.

Mô hình xử lý dữ liệu

Mô hình tổng quát xử lý dữ liệu của các hàm băm cho thấy thông điệp đầu vào có độ dài tùy ý được đưa qua hàm nén lặp nhiều vòng, nhằm tạo ra chuỗi đầu ra có kích thước cố định Chuỗi đầu ra này sau đó tiếp tục trải qua một khâu chuyển đổi.

8 định dạng tùy chọn (optional output transformation) để tạo ra chuỗi băm kết quả (output)

Quá trình xử lý dữ liệu của các hàm băm bao gồm ba bước chính: tiền xử lý, xử lý lặp và chuyển đổi định dạng Trong bước tiền xử lý, thông điệp đầu vào x được nối thêm một số bit và kích thước khối, sau đó chia thành các khối có kích thước xác định, tạo ra t khối dữ liệu x = x1 x2…xt Tiếp theo, trong bước xử lý lặp, từng khối dữ liệu xi được xử lý qua hàm nén f, cho ra chuỗi đầu ra Ht Cuối cùng, Ht được chuyển đổi định dạng bởi hàm g để tạo ra giá trị băm h(x).

Ứng dụng của hàm băm

Giới thiệu về Hashcat

Hashcat là phần mềm nổi tiếng nhất hiện nay trong việc crack hash và khôi phục mật khẩu từ hash, với giao diện dòng lệnh mạnh mẽ Được thiết kế để phá vỡ ngay cả những mật khẩu phức tạp nhất trong thời gian ngắn, Hashcat cho phép bẻ khóa mật khẩu theo nhiều phương pháp khác nhau, mang lại sự linh hoạt và tốc độ vượt trội.

Hashcat là một công cụ mạnh mẽ cho phép người dùng sử dụng 5 chế độ tấn công và khôi phục mật khẩu, tương thích với hơn 300 thuật toán hash được tối ưu hóa Phần mềm này hỗ trợ tăng tốc phần cứng từ CPU và GPU trên các hệ điều hành Linux, Windows và OSX Ngoài ra, Hashcat còn cung cấp khả năng bẻ khóa mật khẩu phân tán và hoàn toàn miễn phí với mã nguồn mở.

Hashcat và oclHashcat đã được hợp nhất thành một chương trình Hashcat

Việc phá password hash phụ thuộc vào sức mạnh phần cứng của hệ thống Nếu hệ thống yếu, tốc độ phá password hash chỉ cải thiện rất ít, ngay cả khi sử dụng Hashcat bên ngoài máy ảo Do đó, các hệ thống chuyên dụng cho việc phá password hash thường sở hữu phần cứng mạnh mẽ.

Mặc dù sở hữu phần cứng mạnh mẽ, việc phá hash của bất kỳ thuật toán nào không phải là điều dễ dàng Nếu không xác định chính xác tên thuật toán hash và sử dụng mật khẩu dài, hệ thống có thể phải chạy để phá hash liên tục trong nhiều tuần, thậm chí tháng hoặc năm Thực tế, khi quá trình phá hash kéo dài, người ta thường tìm kiếm các phương pháp khác để giảm thiểu thời gian hoạt động của hệ thống.

Nói tóm lại, việc crack hash là một việc rất tốn thời gian vì nó phụ thuộc vào các yếu tố như:

- Sức mạnh phần cứng của hệ thống dùng để crack

- Password gốc có được salt và pepper hay không?

- Password gốc có phức tạp hay không?

Hệ thống với phần cứng mạnh mẽ có thể giúp tiết kiệm thời gian trong việc crack hash, nhưng chỉ khi giá trị hash đó có thể bị cracked Cách duy nhất để xác định khả năng này là thử nghiệm trong một khoảng thời gian nhất định Tuy nhiên, do xác suất thành công chỉ khoảng 50%, nên trong quá trình pentest hoặc tham gia CTF, bạn không nên quá phụ thuộc vào phương pháp này.

Các đặc trưng

Cài Đặt

Hashcat thường được cài đặt sẵn trên Kali Linux Nếu cần cài đặt, bạn chỉ cần mở terminal và nhập lệnh: sudo apt-get install hashcat.

Và chạy lênh: hashcat –help để kiểm tra cài đặt thành công hay chưa Chạy ra như hình minh họa dưới là cài đặt thành công

13 Để nắm về các lệnh của hashcat hãy nhập lệnh: man hashcat

Cách sử dụng

Cách bẻ khóa hàm băm

Cách đơn giản nhất để bẻ khóa hàm băm là đoán mật khẩu và so sánh giá trị băm của nó với giá trị băm thực tế Tuy nhiên, quá trình này có thể tốn nhiều thời gian.

Tấn công từ điển và brute-force là hai phương pháp phổ biến để đoán mật khẩu, sử dụng tệp chứa từ, cụm từ và mật khẩu thông dụng, nhằm tìm ra các chuỗi có khả năng trở thành mật khẩu.

Cần lưu ý rằng không có cách nào đảm bảo để ngăn chặn các cuộc tấn công từ điển hoặc các cuộc tấn công brute-force

Các cách tiếp cận khác được sử dụng để bẻ khóa mật khẩu:

Bảng tra cứu là một cấu trúc lưu trữ các giá trị băm được tính toán trước từ từ điển, kèm theo mật khẩu tương ứng.

Đảo ngược bảng tra cứu là một phương pháp tấn công mạng cho phép kẻ tấn công sử dụng từ điển hoặc tấn công brute-force trên nhiều hàm băm đồng thời mà không cần tính toán trước bảng tra cứu.

Bảng cầu vồng (Rainbow tables) là một kỹ thuật ghi nhớ thời gian, tương tự như bảng tra cứu nhưng tối ưu hóa kích thước bảng để giảm tốc độ bẻ khóa băm.

Băm với salt (Hashing with salt) là một kỹ thuật bảo mật, trong đó các băm được ngẫu nhiên hóa bằng cách thêm vào một chuỗi ngẫu nhiên gọi là "muối" Phương pháp này được áp dụng cho mật khẩu trước khi thực hiện quá trình băm, giúp tăng cường độ an toàn cho thông tin nhạy cảm.

Bẻ khóa mật khẩu thông qua tấn công từ điển

Tấn công từ điển là phương pháp thử nghiệm tất cả các chuỗi từ một danh sách đã được chuẩn bị sẵn Ban đầu, các cuộc tấn công này sử dụng các từ có trong từ điển, nhưng hiện nay, nhiều danh sách lớn hơn có sẵn trên Internet, chứa hàng triệu từ và cụm từ, đã được sử dụng để tăng cường hiệu quả của các cuộc tấn công này.

Hơn 24 trăm triệu mật khẩu đã bị khôi phục từ các vụ vi phạm dữ liệu trong quá khứ, và phần mềm bẻ khóa có thể sử dụng các danh sách này để tạo ra các biến thể phổ biến Các cuộc tấn công từ điển thường thử những khả năng có khả năng thành công cao, vì nhiều người chọn mật khẩu ngắn hoặc từ thông thường Những biến thể này thường được tạo ra bằng cách thêm số hoặc ký tự đặc biệt Do đó, một cách tiếp cận an toàn hơn là tạo mật khẩu dài ngẫu nhiên (từ 15 ký tự trở lên) hoặc sử dụng cụm mật khẩu nhiều từ khóa, kết hợp với việc sử dụng chương trình quản lý mật khẩu hoặc nhập mật khẩu một cách thủ công.

In Kali Linux, there is a well-known file named rockyou.txt that can be accessed easily To navigate to the directory containing this file, simply use the commands: `cd /usr/share/wordlists` followed by `ls` to list the available files.

Để sử dụng file rockyou.txt, trước tiên chúng ta cần giải nén nó vì file hiện đang bị nén bằng gzip Chúng ta có thể thực hiện việc này bằng cách sử dụng lệnh: `sudo gzip -d rockyou.txt.gz` Sau khi giải nén, hãy kiểm tra lại bằng lệnh `ls` để xác nhận rằng file rockyou.txt đã được giải nén thành công.

Rockyou là một tệp dữ liệu khổng lồ, với hơn 14 triệu dòng thông tin Khi sử dụng lệnh “wc -l” để kiểm tra, bạn sẽ thấy kích thước của tệp này rất lớn.

123 MB Đây là tập hợp của những username và password hay được sử dụng nhất

Nếu bạn muốn kiểm tra xem mật khẩu của mình có nằm trong file hay không, hãy sử dụng câu lệnh thay vì mở file trực tiếp Việc mở file lớn có thể làm treo hệ thống nếu phần cứng yếu Sử dụng câu lệnh sau để kiểm tra: `cat rockyou.txt | grep "password"`.

Trong câu lệnh trên, mình đã thử kiểm tra xem password liệu có nằm trong danh sách không? và kết quả như hình bên dưới

Password của bạn không nằm trong rockyou.txt không đồng nghĩa với việc password của bạn an toàn

Việc thay đổi mật khẩu thành password87654321 sau khi phát hiện mật khẩu cũ nằm trong danh sách bị lộ không thực sự giải quyết được vấn đề Các cụm từ như "password" và "123456789" là những lựa chọn dễ đoán, khiến hacker có thể dễ dàng sử dụng phương pháp bruteforce để thử nghiệm các mật khẩu dựa trên chúng Mặc dù quá trình này có thể mất thời gian, nhưng nếu hacker đủ kiên nhẫn, mật khẩu của bạn vẫn có nguy cơ bị lộ.

Thêm một điều nữa đó là password này chủ yếu chứa các ký tự tiếng Anh, chứ không bao gồm các từ tiếng Việt như:

- v.v Nhưng điều đó cũng không đồng nghĩa với việc một file text chứa các mật khẩu có kèm từ tiếng Việt không tồn tại đâu nhé

Bẻ khóa mật khẩu thông qua Bruteforce

Demo 1

Kịch bản liên quan đến việc sử dụng thông tin dưới dạng JSON Object với tính toàn vẹn được đảm bảo nhờ Message Authentication Code (MAC), cụ thể là HS256 (HMAC cùng SHA256) Qua việc mã hóa secret và các thông tin bằng base64, sau đó hash một chiều, ta có được Signature Công cụ Hashcat được sử dụng để giải mã token và lấy khóa bí mật (JWT SECRET) của thuật toán, từ đó có thể chiếm đoạt một số đặc quyền của hệ thống bằng cách giả mạo Signature hoặc truy cập vào các chức năng cần khóa bí mật Lưu ý rằng kỹ thuật này thường chỉ hiệu quả với những hệ thống nhỏ hoặc các trang web do sinh viên phát triển, chưa đảm bảo độ bảo mật.

JWT là một phương tiện để chuyển giao yêu cầu giữa Client và Server, với thông tin được định dạng bằng JSON Chuỗi Token trong JWT bao gồm ba phần chính: header, payload và signature, được phân tách bằng dấu “.”.

Như ở trên đã nói JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.):

- Header: sẽ chứa kiểu dữ liệu , và thuật toán sử dụng để mã hóa ra chuỗi JWT được base64 lại

- Payload: sẽ chứa các thông tin mình muốn đặt trong chuỗi được base64 lại

A signature is generated by encoding the header and payload along with a secret key, using the formula: data = base64urlEncode(header) + "." + base64urlEncode(payload) The signature is then created by hashing this data with the secret.

Bước 1: Lấy token từ 1 mà mình muốn tấn công: Ở đây là trang web https://datba.000webhostapp.com/api/jb0c2o/auth/log in?email=test@ttc- solutions.com.vn&password345678

Dùng postmen call api theo đường link trên để lấy access_token tức là token

Bước 2: Copy access_token ở hình trên vào 1 file và lưu lại trong kali linux bằng lệnh: echo "access_token ở trên"> hash.txt

Bước 3: Cấp quyền cho file ở trên: chmod +x hash.txt

Bước 4: Chạy lệnh để dùng hashcat giải mã: hashcat -a 0 -m

16500 hash.txt /usr/share/wordlists/rockyou.txt force và chờ đợi máy giải mã

Để hiển thị kết quả giải mã, bạn cần chạy lệnh: `hashcat -a 0 -m 16500 hash.txt /usr/share/wordlists/rockyou.txt show` Cuối cùng, nếu bạn thấy kết quả là :badat, điều đó có nghĩa là quá trình giải mã đã thành công.

Nếu giải mã không thành công sẽ không tra là bất cứ thứ gì Đây là JWT_SECRET bên server

Demo 2

Kịch bản giả định cho thấy nếu một cuộc tấn công SQL Injection thành công, kẻ tấn công có thể truy cập vào mật khẩu được lưu trữ trong cơ sở dữ liệu dưới dạng hash một chiều Điều này đặt ra mối quan ngại về việc giải mã thông tin đã được mã hóa, làm tăng rủi ro bảo mật cho hệ thống.

Bước 1: Dùng Hash Identifier trên Kali Linux để nhận dạng loại hash: Giả sử ở đây có đoạn mã hóa bằng MD5:

- Sau mã hóa: e34d514f7db5c8aac72a7c8191a09617

Bước 2: Để đảm bảo tính chính xác, bạn có thể thử nghiệm với hai kết quả thuật toán trên các trang web trực tuyến Trong bài viết này, tôi sẽ chỉ sử dụng console trên Kali Đầu tiên, hãy kiểm tra mã hash mode của thuật toán trong Hashcat bằng cách xem phần trợ giúp của nó.

Bước 3: Lưu đoạn mã và 1 file rồi cấp quyền như trên demo 1 sau đó

Thực hiện giải mã: hashcat -a 0 -m 0 hash-md5.txt /usr/share/wordlists/rockyou.txt –force

Bước 4: Hiển thị kết quả: hashcat -a 0 -m 0 hash-md5.txt

/usr/share/wordlists/rockyou.txt –show

Demo 3

Kết luận

Bài báo cáo cung cấp cái nhìn tổng quan về hàm băm mật mã, hướng dẫn cài đặt và sử dụng công cụ hashcat trên Kali Linux, kèm theo các demo tấn công đơn giản để giúp độc giả hiểu rõ hơn về công cụ này.

Ngày đăng: 09/02/2022, 13:19

TỪ KHÓA LIÊN QUAN

w