NỘI DUNG
Cuối nội dung Penetration Testing Step 3 – Password attack bắt đầu từ đâu?, tôi có đề cập đến một câu hỏi nhức nhối là “Thực tế đào đâu ra cái password wordlist để phục vụ ý đồ tấn công?” mà chưa đưa ra câu trả lời. Do vậy, trong nội dung kỳ này, tôi sẽ bàn kỹ hơn về các vấn đề liên quan để trả lời cho câu hỏi nói trên.
Về nguyên tắc, bạn sẽ cần đầu tư thời gian tìm hiểu về mục tiêu để thu thập thêm tư liệu tạo wordlist. Ngoài ra, quá trình tạo wordlist cũng có thể sẽ cần các tool hỗ trợ để bạn có thể rảnh tay suy nghĩ các vấn đề chiến lược thay vì ngồi rị mọ gõ từng từ vào wordlist một cách thô bỉ.
Lưu ý:
- Nhắc nhanh cho trường hợp bạn chưa xem nội dung kỳ trước, wordlist hay dictionary file là file text chứa các words (từ). Với wordlist, Password Attack (lúc này theo kiểu Dictionary Attack dò từng từ) thường sẽ đỡ mất thời gian hơn kiểu Brute Force Attack – dò tìm tất cả các khả năng có thể có của các ký tự password;
- Phương thức xây dựng wordlist và các tool hỗ trợ khá đa dạng nên tôi sẽ chỉ tập trung vào một số giải pháp phổ biến. Bạn sẽ cần xem xét dựa trên tình hình thực tế để áp dụng và có những hiệu chỉnh cần thiết để tăng độ ảo diệu cho các đòn tấn công;
- Cần nhấn mạnh, điểm mấu chốt ở đây là khả năng tạo được một cái wordlist có khả năng sát thương cao chứ không phải wordlist càng dài càng tốt. Độ sát thương của wordlist sẽ phụ thuộc nhiều vào hiệu quả của công tác đầu tư nghiên cứu về mục tiêu;
- Bạn có thể tham khảo phần Information Gathering đề cập trong nội dung Penetration Testing Step 1.a – Cẩm nang không thể thiếu cho Passive Information Gathering để hình dung rõ hơn về công tác đầu tư nghiên cứu về mục tiêu;
- Nội dung kỳ này sẽ có sử dụng Kali Linux trong quá trình demo. Nếu bạn chưa biết Kali Linux là gì thì vui lòng xem nội dung Giải ngố Kali Linux – Phần 1: Kali Linux là gì?. Nếu đã biết Kali Linux nhưng chưa biết cách cài cắm thì bạn có thể xem nội dung Giải ngố Virtualization – Phần 3: Hướng dẫn cài đặt Kali Linux trên VMware Workstation chi tiết nhất Thái Dương hệ;
#1. Wordlist kiểu “hàng chợ” dựng sẵn
Tôi vào vấn đề luôn. Với Kali Linux, tôi sẽ có một số wordlist hàng dựng sẵn tại vị trí /usr/share/wordlists.

Ngoài ra, tôi cũng có thể xem xét dùng các nguồn online như cái SecList để thử vận may.

Lưu ý: Cái SecList nói trên ngoài password wordlist còn có các thứ hay ho khác như username wordlist, payload,…Đây là một đối tượng rất thú vị nhưng tôi xin phép quay lại bàn kỹ hơn trong một diến biến khác để tránh bị sa lầy quên mất chủ đề password wordlist hôm nay.
Nếu bạn ăn ở tốt, có khi ngay nháy đầu tiên với hàng dựng sẵn ở trên bạn đã hạ gục được mục tiêu. Tuy nhiên, trong phần lớn trường hợp bạn sẽ phải nai lưng ra mà thu thập thông tin và xây dựng các wordlist tinh chỉnh nhé.
#2. Wordlist hàng tự dựng dựa trên keyword seed
Trong trường hợp này, wordlist được xây dựng dựa trên ý tưởng password là “biến thể” của một số keyword (từ khóa) quan trọng có liên quan đến mục tiêu. Và với các keyword đóng vai trò làm seed (hạt giống), tôi sẽ phát triển một mớ các password tiềm năng đưa vào wordlist.
Ví dụ, với mục tiêu quen thuộc MegaCorp One của ông Offensive Security, giả sử sau khi thu lượm thông tin và phân tích đánh giá, tôi may mắn túm được một password của user/service hạng ruồi là Nanobot93 (với keyword Nanobot là một sản phẩm của công ty). Mặc dù khả năng khai thác mục tiêu dựa vào cái password này khá hạn chế, điều này đã cho tôi ý tưởng về định dạng có thể có của các password khác.
Lưu ý: Với cái user hạng ruồi có đặc quyền cấp độ gà vịt, bạn có thể triển khai phương án Privilege Escalation (tạm dịch là leo thang đặc quyền) để nâng cấp lên level (ví dụ lên thành Admin) nhằm tăng khả năng khai thác mục tiêu. Chủ đề này tôi sẽ quay lại sau (cái này tôi nói thật, không hứa lèo) nên không bàn kỹ trong nội dung này.
#2.1 Thu thập keyword với CeWL
Với ý tưởng trên, tôi có thể truy cập vào trang web của mục tiêu MegaCorp One duyệt thủ công để thu thập thêm các từ khóa liên quan đến các sản phẩm. Hoặc tôi chọn một giải pháp tinh tế hơn là sử dụng CeWL để cào hốt thông tin với quy mô công nghiệp.

Như bạn có thể thấy, CeWL là Custom Word List Generator sử dụng spider để hốt dữ liệu từ các url làm “nguyên liệu” cho các tool đập password.
Lưu ý: Spider có thể hiểu đơn giản là mấy con “nhện” tạo ra bằng các ngôn ngữ lập trình (ví dụ với Python). Đám nhện này có khả năng chạy tự động trên web để đọc và hốt dữ liệu về thay cho quá trình duyệt web thủ công. Đây là một chủ đề khá hay nên tôi cũng hy vọng có thể sắp xếp bàn kỹ hơn trong tương lai gần.
Quay trở lại với CeWL, để biết thêm thông tin hướng dẫn sử dụng, trên Kali Linux, tôi có thể chạy command sau:
cewl --help

Danh sách options thử nghiệm khá dài nhưng tôi sẽ chỉ tập trung vào mục tiêu quan trọng là cào hốt thông tin của mục tiêu để xây dựng wordlist. Ví dụ, tôi có thể thiết lập command như sau để hốt các từ khóa về ghi vào file text:
cewl www.megacorpone.com -m 5 -w mg1.txt
Lưu ý:
- -m: là tùy chọn quy định độ dài tối thiểu của từ, ví dụ tôi chọn 5;
- -w: là tùy chọn ghi dữ liệu ra file, ví dụ tôi đặt tên file là txt.
Sau khi thấy hàng đã về, tôi có thể kiểm tra đếm từ với command:
wc -l mg1.txt

Như quan sát ở trên, bạn có thể thấy tôi đã húp được 370 từ. Tôi cũng có thể kiểm tra thử nội dung của file thu thập được liên quan đến từ khóa Nano (xuất hiện trong cái password tôi thu lượm ở phần đầu) coi có gì đặc sắc không với command:
grep Nano mg1.txt

Ngon, nội dung file mg1.txt có vẻ như tôi mong đợi. Sau khi đã hốt về được danh sách các từ khóa tiềm năng, tôi có thể dựa vào cái password đã phát hiện (Nanobot93) để xây dựng các password có cú pháp tương tự là tên sản phẩm + 2 con số (tất nhiên cái này để minh họa ý tưởng thôi chứ thực tế không có chuyện dễ ăn thế này đâu nhé).
#2.2 Xây dựng wordlist dựa trên các keywords với John the Ripper
Với phân tích trên, tôi có thể bắt tay vào xây dựng wordlist thủ công, hoặc sử dụng một giải pháp mạnh mẽ hơn là John the Ripper (thực ra tool này chuyên dùng crack password nhưng cũng có tính năng tạo hỗ trợ tạo wordlist).

Không dài dòng, tôi vào việc ngay và luôn. Để tạo wordlist với quy tắc đã xác định ở trên, tôi cần thiết lập rule vào file cấu hình cho chương trình trong /etc/john/john.conf. Đầu tiên, tôi cần mở file cấu hình lên với command:
sudo vi /etc/john/john.conf
Sau đó bổ sung thêm rule để đút thêm 2 con số vào sau từ khóa theo kiểu:
# Add 2 numbers after each word
$[0-9]$[0-9]

Lưu ý:
- $ character được dùng để báo ông John đính kèm thêm ký tự vào. Ký tự ở đây là một con số từ 0-9 (quá trình này lập lại 2 lần để thêm 2 con số);
- Nếu không biết vi/vim/nano là gì thì bạn có thể đọc thêm trong nội dung Giải ngố Kali Linux – Phần 6: Bộ 3 nguyên tử text editor nano/vi/vim và cách buff damage với skill so sánh nội dung file bằng comm/diff;
Sau khi đã thiết lập xong rule, tôi có thể khởi tạo wordlist dựa file text mg1.txt chứa các từ khóa đã thu thập trước đó với command:
john --wordlist=mg1.txt --rules --stdout > mg1wl.txt
Lưu ý: –stdout>mg1wl.txt là dùng redirection đẩy cái standard output vô file mg1wl.txt.
Sau đó tôi kiểm tra số lượng từ (55208 như trường hợp bên dưới) và nội dung với các command:
wc -l mg1wl.txt
grep Nanobot mg1wl.txt

Và như vậy tôi đã có trong tay một wordlist “tự trồng” dựa trên các keyword seed để tăng độ sát thương cho các đợt công phá vào mục tiêu.
#3. Cải thiện hiệu quả Brute Force trong Password Attack với wordlist
#3.1 Dictionary Attack vs Brute Force attack
Như bạn đã biết (nếu chưa biết thì bây giờ biết cũng không muộn), Dictionary Attack với nguyên lý tra từ để đoán mò password phụ thuộc rất nhiều vào chất lượng thông tin mà bạn thu thập được và phương thức xây dựng wordlist tương ứng. Và hiển nhiên giải pháp này không thể bảo đảm 100% bạn sẽ giành được chiến thắng.
Trong một diễn biến khác, Brute Force Attack với nguyên lý dò tìm từng ký tự có thể có của password là một giải pháp có thể bảo đảm khả năng chiến thắng. Vấn đề là với password quá mạnh, nếu thiếu thiết bị hỗ trợ phù hợp, bạn có thể không sống đủ lâu để biết được kết quả là gì.
Sau khi ngâm cứu kỹ vấn đề của 2 phương án nói trên, tôi quyết định chọn phương án thứ 3 là vận dụng cách tinh chỉnh wordlist (dựa vào thông tin thu thập được) trong Dictionary Attack để thu gọn phạm vi cho Brute Force Attack. Với giải pháp này, tôi hy vọng còn có thể hít được tí hương vị chiến thắng trước khi ra đi.
Lúc này, để tạo một wordlist bao trùm mọi khả năng có thể có (trong phạm vi thu gọn đã xác định) cho phương thức Brute Force, tôi có thể sử dụng công cụ Crunch trên Kali Linux.

#3.2 Dựng wordlist cho Brute Force Attack với Crunch theo kiểu mì ăn liền
Ví dụ với tình huống đơn giản, tôi xác định được mục tiêu bẩn bựa chơi password có độ dài 4-5 ký tự chỉ bao gồm số và các ký tự A-C, tôi có thể chỉ định các ký tự cụ thể cho Crunch để dựng wordlist kiểu mì ăn liền như sau:
sudo crunch 4 5 0123456789ABC -o cruch_list.txt
head cruch_list.txt

Lưu ý: option -o để ghi ra file.
#3.3 Dựng wordlist cho Brute Force Attack với Crunch kiểu character-set
Ngoài cách chỉ định cụ thể các ký tự như trường hợp trên, tôi cũng có thể sử dụng các character-set dựng sẵn của Crunch để hốt hàng cho nhanh. Nội dung này có thể xem tại vị trí /usr/share/crunch/charset.lst.

Lúc này tôi có thể chỉ định nhanh ví dụ theo kiểu mixalpha như sau để tạo wordlist bao gồm tất cả upper case và lower case letter bằng command:
crunch 4 5 -f /usr/share/crunch/charset.lst mixalpha -o crunch_list.txt
#3.4 Dựng wordlist cho Brute Force Attack với Crunch theo Rules
Giờ tôi chuyển sang tình huống phức tạp hơn. Tương tự như trường hợp demo trong Mục 2, giả sử tôi ăn may lượm được thông tin liên quan đến password complexity của mục tiêu và sau một số công tác sàng lọc, phân tích, tôi xác định được cấu trúc password như sau:
[upper case letter] [lower case letters] [2 x special chars] [3 x numeric]
Lưu ý:
- Một lần nữa, tôi nhấn mạnh, cái cấu trúc trên để minh họa là chính, thực tế password complexity có thể sẽ phức tạp hơn nhiều;
- Công tác sàng lọc, phân tích để xác định cấu trúc password thực tế cũng sẽ không dễ dàng gì. Khả năng là bạn sẽ chỉ có thể thu gọn phạm vi xuống một số “bộ” cấu trúc password có tỉ lệ “trúng” cao để tập trung thử nghiệm trước. Nếu vẫn thất bại thì bạn cần di chuyển sang các “bộ” cấu trúc password còn lại để tiếp tục chiến đấu.
Với Crunch rules, tôi sẽ cần sử dụng một số placeholders để diễn đạt lại cấu trúc password nói trên:
- ,: đại diện cho upper case alpha character (các ký tự chữ cái viết hoa);
- @: đại diện cho lower case alpha character (các ký tự chữ cái viết thường);
- ^: đại diện cho special character (các ký tự đặc biệt).
- %: đại diện cho numeric character (các ký tự số);
Như vậy cấu trúc tôi cần sẽ được mô tả thành “,@^^%%%”. Và command tôi cần sử dụng để tạo wordlist mong muốn sẽ là:
crunch 7 7 -t ,@^^%%%

Lưu ý:
- 7 7: tương ứng giá trị nhỏ nhất là lớn nhất của password mà tôi thiết lập;
- -t: được dùng để chỉ định cái rule mà tôi thiết lập.
Như bạn thấy, dù mới quất đến 7 ký tự mà dung lượng wordlist khá ác (đến 5 GB). Do vậy, như tôi đã từng đề cập, với Brute Force Attack nói chung, bạn đừng dại dột mà há mõm ngồi đó chờ đợi kết quả. Việc bạn nên làm sau khi đẩy wordlist vô làm payload và bóp cò tấn công là tiếp tục công cuộc thu thập, phân tích dữ liệu nhằm cải thiện hơn nữa chất lượng wordlist để tung ra các đòn đánh ngày càng chất lượng.
2 thoughts on “Penetration Testing Step 3 – Kỹ nghệ chế biến wordlist phục vụ Password Attack”