Dictionary Attack và Brute Force attack là gì ? Tìm hiểu kĩ về 2 phương thức này

Bài viết này sẽ nói về một tham vọng nho nhỏ là tổ hợp bộ từ điển password tiếng Việt. Cũng như nói sơ qua về Password Dictionary Attack với Password Brute Force Attack.

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack

Dictionary Attack và Brute Force attack

Đầu tiên cần có chút phân biệt nho nhỏ giữa 2 kiểu tấn công nhắm vào mật khẩu này. Nhưng trước nhất chúng ta nên nói sơ qua về password ( tôi không dùng từ Mật Khẩu vì từ này sai tét bét ).

Password mà tôi nói tới ở đây thường là một chuỗi tổ hợp ký tự có độ dài giới hạn bao gồm tất cả các ký tự mà bảng mã ký tự lớn nhất hành tinh hiện nay có thể đánh mã số – bảng mã Unicode. Sức mạnh của password nằm ở 2 điểm

  • Chỉ một hoặc một số ít người biết nội dung ( tổ hợp ký tự được dùng ) làm password. Điều này đem tới thứ lợi ích đầu tiên là “bí mật
  • Nếu một người không biết nội dung của password thì buộc phải dí dao vào cổ thằng có password để đòi hoặc buộc sẽ phải đoán. Tức là phải tốn công sức ở một mức độ nào đó để lấy được Password. Điều này đem đến lợi ích thứ 2 “bảo mật”

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack

Theo như điểm thứ 2 ở trên thì chúng ta hình thành được 2 con đường để phá vỡ lợi ích “bảo mật” ( bảo vệ bí mật ) của password

  • Dí dao lấy password từ thằng có password. Dĩ nhiên là tôi nói đùa đấy, đây là cách nói cụ thể cho hướng lấy password từ chính người có nó, thông qua tấn công APT, nghe lén, keylogging… Tuy nhiên nếu như người có password là người không dễ để có thể lấy được password, ví dụ: không thể dí dao vào cổ Tổng Thống Mỹ để lấy password ( bạn sẽ bị phơ ngay 1 viên kẹo ), hoặc attack vào máy tính của một chuyên gia bảo mật am tường ( kiểu như lão mrro, gamma95 ) bạn sẽ bị phản “damage” nếu thử attack họ ( ví dụ stl chơi dại khi đụng vào anh TQN )
  • Đoán mò password. Đúng bạn phải “đoán” và “mò” password
    Tôi sẽ nói rõ hơn về vụ “đoán” và “mò” password này. Đây là 2 động từ tiếng Việt của 2 phương pháp kỹ thuật tấn công password dưới đây

    • Đoán: Dictionary Attack
    • Mò: Brute Force Attack

Brute Force Attack

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack Tôi sẽ nói về cái này trước. Đây là kiểu tấn công mà bạn sẽ “mò” tất cả các tổ hợp ký tự có thể là password cho đến khi có một tổ hợp ký tự trùng khớp với tổ hợp ký tự được dùng làm password. Phương pháp tấn công này giúp ta thấy rõ được điểm mạnh cốt lõi của password.

Password là bí mật, không ai biết được nó có độ dài bao nhiêu và tổ hợp từ những ký tự gì ngoài người sở hữu nó

Người tấn công về mặt lý thuyết buộc phải thử “tất cả” các trường hợp có thể có của tổ hợp ký tự cho đến khi tìm ra tổ hợp đúng. Chính cái “tất cả” này làm cho password an toàn. Do năng lực tính toán là có “giới hạn” nên việc “mò” hết “tất cả” các tổ hợp sẽ tốn 1 thứ là “thời gian”. Nếu một password có thể đẩy việc mò ra nó tới một thời gian xa xôi trong tương lai ( tính bằng ngàn năm ) thì coi như nó thắng người tấn công vì người đó không thể chờ tới lúc mò ra được password.

Để đẩy việc “mò” password tới một thời gian xa xôi trong tương lai người ta có 2 cách, dựa trên 2 thành tố cơ bản tạo thành password: độ dài password và độ dài bảng ký tự được sử dụng.

Ví dụ:

Với một bảng ký tự như sau:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

ta có tất cả 65 ký tự

Ta tạo thành một mật khẩu: Hvaonline2013

Có độ dài là 13 ký tự

Vậy tôi có 369,720,589,101,871,000,000,000 tổ hợp
Giả sử tôi có một máy tính với khả năng tạo 80,000,000 tổ hợp ký tự trên 1 giây. Thì tôi cần

4,621,507,363,773,390 second (hoặc)
77,025,122,729,557 minutes (hoặc)
1,283,752,045,493 hours (hoặc)
53,489,668,562 days (hoặc)
1,782,988,952 months (hoặc)
148,582,413 years

Tất nhiều thiên niên kỷ trôi qua để làm công việc này. Do đó password này đạt được thứ lợi ích là “bảo mật”

Hãy nhớ các con số phía trên tôi tính, để lát nữa bạn thấy một điểm yếu khác của password khiến password có thể bị phá vỡ nhanh hơn trên kia. Bên cạnh đó tôi có viết một bài về cách tính số tổ hợp ký tự tại đây

Tóm lại, với kiểu tấn công Brute force password tôi sẽ chết già trước khi mò các mật khẩu có độ dài lớn. Và các password sẽ an toàn trước tôi.

Dictionary Attack

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack

Vấn đề của Brute Force Attack là việc “mò” hết “tất cả” các tổ hợp làm tôi “mất thời gian”. Thể nên kỹ thuật Dictionary Attack ra đời. Kỹ thuật này thay hành động “mò” vô tội vạ bằng hành động “đoán” có tính toán.
Bạn có thể hiểu sơ sơ về phương thức tấn công này dựa vào cái tên của chính nó “Dictionary” tức “từ điển”, hay nói ngắn gọn bạn có một danh sách các tổ hợp ký tự có “khả năng cao” là password rồi mang dò coi trong cái danh sách đó có cái nào là password không.

Từ khóa trong đoạn trên là “khả năng”. Chính xác thứ làm cho phương pháp tấn công này trở nên yếu ớt trước password là “khả năng” password nằm trong cái danh sách ( từ điển ) của bạn là “giới hạn”. Vì nếu bạn có một danh sách quá dài, “thời gian” để bạn dò hết danh sách đó cũng sẽ khiến bạn thua cái password nếu nó đẩy bạn tới một giới hạn thời gian xa xôi trong tương lai. Do đó việc cần làm ở đây là “đoán” về “cấu trúc” của password rồi từ đó hình thành một từ điển “ngắn gọn hơn” và có “khả năng cao hơn”. Ví dụ một số điểm có thể được coi là thành phần cấu trúc của password:

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack

  • Password có thể hình thành từ một cụm từ có nghĩa trong một ngôn ngữ cụ thể: Password có thể là một cụm từ tiếng Việt chẳng hạn, ví dụ: phucdeptrai
  • Password có thể được đặt theo một thói quen: kiểu như 123456789, 987654321, 123456, 1234567, 12345678, matkhau, password, admin …
  • Thành phần của password được hình thành theo một khuôn mẫu: ví dụ Xuanthanh2503

Bằng việc dựa vào các khuôn mẫu nêu trên kèm với việc điều tra tính cách cá nhân người tạo Password, tôi có thể giới hạn danh sách password xuống thành một cái list khá gọn hơn. Ví dụ tôi nhận định một cái list tương đối phù hợp cho người Việt Nam sẽ bao gồm:

  • Ngôn ngữ: tiếng Việt
  • Tổ hợp từ có nghĩa
  • Số từ trong mật khẩu: 2 hoặc 3
  • Theo như tôi thống kê từ khá nhiều DB tôi tiếp cận được ( trong qua trình nghiên cứu, các DB này do các hacker vứt bừa bãi trên các diễn đàn mạng, tôi down về phân tích ). Các password được coi là “mạnh” ở Việt Nam thường có dạng:
    • Cụm 2-3 tự tiếng Việt có nghĩa
    • Chữ cái đầu viết hoa – 2 từ tiếng Việt có nghĩa – từ 3 đến 4 chữ số
    • Ký tự @#$! – Chữ cái đầu viết hoa – 2 từ tiếng Việt có nghĩa – từ 3 đến 4 chữ số – Ký tự @#$!

Với sự giới hạn lại trong các khuôn mẫu tôi cho rằng ( khá chủ quan ) khả năng password nằm trong danh sách của tôi đối với trường hợp người Việt tạo password là cao

Một số tính toán:

Tôi có một danh sách 1556 từ tiếng Việt đơn

Password dự trù theo dạng Cụm 2-3 “từ” tiếng Việt có nghĩa thì tôi có tổng cộng

3,767,287,616 tổ hợp “từ”

Bạn sẽ thấy sự khác biệt ở đây là tôi có 3,767,287,616 tổ hợp “từ” chứ không phải tổ hợp “ký tự”, mà từ thì có thể dài tới 21 ký tự trong trường hợp password có 3 chữ “nghieng” ( từ dài nhất trong tiếng Việt )
Cũng với máy tính với sức tính toán như trên chúng ta sẽ cần:

Alphabe Table    1,556    (Word, no number)   
Password length    3       
Total combination    3,767,287,616       
           
Computing Power    80,000,000    hash/s   
Time    47    second    (or)
    1    minutes (or)
    0    hours    (or)
    0    days    (or)
    0    months    (or)
    0    years

Dictionary Attack và Brute Force attack là gì Tìm hiểu kĩ về 2 phương thức này, Dictionary Attack, Brute Force attack

Chính xác là còn khoảng 47 giây để crack mật khẩu dài 21 kí tự ! ( khoảng 1 ngày cho 28 kí tự )

Điều cốt lõi ở đây là số tổ hợp “từ” sẽ ít hơn số tổ hợp “ký tự” do không gian tổ hợp bị thu hẹp xuống rất nhiều lần. Với một password 3 từ thì nó cũng không khác mấy khi so với một password 3 ký tự trong trường hợp này

Vietnamese Password Dictionary (vipasswordict)

Vấn đề khi thi triển kỹ thuật tấn công Dictionary Attack là ở Việt Nam chưa có một file từ điển nào được tổ hợp cho mục đích trên. Do đó tôi đang start một dự án nho nhỏ về tạo một vài bộ từ điển password dict cho ngôn ngữ Tiếng Việt. Sơ bộ thì sẽ có các bộ password dict:

  • 1556 Từ tiếng Việt đơn ( đã hoàn tất ): bộ từ này là bộ căn bản dùng để tổ hợp các bộ khác, là 1556 từ tiếng Việt không dấu và đơn nhất
  • Tổ hợp 2 từ tiếng Việt ( đã hoàn tất )
  • Tổ hợp 3 từ tiếng Việt ( đã hoàn tất ): sau khi áp dụng grid computing thì hoàn tất mớ này trong 3 ngày chạy liên tục
  • Tổ hợp 2 từ tiếng Việt – padding thêm 4 kí tự số ( 0000-9999) ( đã hoàn tất ): vì theo như tôi thống kê từ khá nhiều DB tôi tiếp cận được ( trong qua trình nghiên cứu, các DB này do các hacker vứt bừa bãi trên các diễn đàn mạng, tôi down về phân tích ). Các password được coi là “mạnh” ở Việt Nam thường có dạng “Xuanthanh2503”
  • Tổ hợp 3 từ tiếng Việt – kí tự đầu viết hoa – padding thêm 4 kí tự số ( 0000-9999) ( chưa làm )

Hiện tôi đã có tạo một project trên GitHub và sẽ dần dần release từng bộ từ điển tôi tổ hợp xong lên đây hoặc tại đây