Home Grown Red Team: Từ Workstation đến Domain Controller với Havoc C2 và Microsoft EDR

Nov 28 2022
Chào mừng trở lại! Trong mục blog này, một lần nữa chúng ta sẽ đối mặt với Bộ bảo vệ dành cho điểm cuối EDR của Microsoft để xem liệu chúng ta có thể chuyển từ ngữ cảnh có tính toàn vẹn thấp sang Quản trị viên miền và thực thi mã từ xa trên Bộ điều khiển miền hay không! Trong vài tháng qua, tôi đã nghiên cứu kỹ các kỹ thuật khác nhau để xem chúng ta có thể làm gì với công cụ nguồn mở chống lại một trong những EDR phổ biến nhất hiện có. Trong blog này, tôi sẽ đề cập đến một số khái niệm phổ biến về việc truy cập vào Bộ điều khiển miền nhưng với các kỹ thuật khác nhau mà tôi đã tìm thấy.

Chào mừng trở lại! Trong mục blog này, một lần nữa chúng ta sẽ đối mặt với Bộ bảo vệ dành cho điểm cuối EDR của Microsoft để xem liệu chúng ta có thể chuyển từ ngữ cảnh có tính toàn vẹn thấp sang Quản trị viên miền và thực thi mã từ xa trên Bộ điều khiển miền hay không!

Trong vài tháng qua, tôi đã nghiên cứu kỹ các kỹ thuật khác nhau để xem chúng ta có thể làm gì với công cụ nguồn mở chống lại một trong những EDR phổ biến nhất hiện có.

Trong blog này, tôi sẽ đề cập đến một số khái niệm phổ biến về việc truy cập vào Bộ điều khiển miền nhưng với các kỹ thuật khác nhau mà tôi đã tìm thấy.

Bao gồm các:

  • UAC Bypass với nhị phân tùy chỉnh UACME
  • Chuyển động bên với CrackMapExec và SharpWMI.exe
  • Phiên đi đến Giao ước
  • DCSync với Giao ước

tàn phá C2

Tôi đã trình bày cách thiết lập và chạy Havoc. Nếu bạn không quen với nó, bạn có thể xem bài đăng của tôi Bắt hệ thống trên Windows 11 với Havoc C2 .

Với C2 của tôi, tôi sẽ tạo một số shellcode và chạy nó thông qua công cụ shellcode của riêng tôi, Harriet.

Bây giờ tôi có tệp nhị phân FUD, tôi có thể chuyển nó sang máy trạm đầu tiên trong môi trường AD của mình.

Theo các bài viết trước của tôi, chúng tôi có một môi trường AD cực kỳ nhỏ ở đây. Vì mục đích tiết kiệm thời gian và không gian blog, chúng ta sẽ bắt đầu với một DA đã biết trong ngữ cảnh trung bình.

Tôi chuyển bộ cấy của mình sang Win11-Blue.blueteam.local và lấy lại đèn hiệu ban đầu của chúng tôi.

Hãy kiểm tra EDR và ​​xem liệu quá trình thực thi ban đầu có thành công hay không.

Tất cả im lặng! Được chứ! Chúng ta có thể tiếp tục. Thực hiện một lệnh “whoami” đơn giản cho chúng ta thấy rằng Danny thuộc nhóm DA.

Chạy SharpUp cho chúng tôi biết rằng chúng tôi có thể thực hiện bỏ qua UAC để nhận đặc quyền của quản trị viên.

Nhị phân UACME tùy chỉnh

Trong một bài đăng trước, tôi đã sử dụng phương pháp ComputerDefaults để nhận quyền quản trị viên, nhưng phương pháp đó hiện đang bị Defender For Endpoint phát hiện. Chúng tôi muốn có được DA mà không có cảnh báo, vì vậy chúng tôi sẽ làm một điều kỳ quặc: thả thứ gì đó vào đĩa!

Trên máy Phát triển Windows 11 của mình, tôi sao chép dự án UACME.

bản sao git https://github.com/hfiref0x/UACME.git

Chúng tôi tải tệp sln và chúng tôi đã tải dự án của mình.

Khi được biên dịch, tệp nhị phân UACME được đặt tên là Akagi, vì vậy chúng tôi sẽ bắt đầu tùy chỉnh các tệp được tìm thấy trong phần đó của trình khám phá giải pháp.

Mở rộng dự án, chúng tôi thấy một số phần dành cho tệp tiêu đề, tài nguyên, v.v.

Chúng ta có thể bắt đầu quy trình của mình bằng cách tìm và thay thế nhanh các chuỗi phổ biến được tìm thấy trong dự án.

Một số chuỗi khác chúng ta có thể thay thế dưới đây:

Akagi

UACME

UAC

KHỐI HÀNG

Nếu chúng tôi cố gắng xây dựng giải pháp ngay bây giờ, nó sẽ thất bại.

Nó không thể tìm thấy tệp biểu tượng vì chúng tôi chưa thay đổi tên của nó. Vì vậy, chúng ta cần thay đổi tên của nó trong thư mục Akagi.

Khi chúng tôi thay đổi tên của biểu tượng, biểu tượng sẽ được tạo thành công.

Bây giờ nếu chúng ta xem xét các chi tiết của nhị phân được xây dựng, chúng ta sẽ thấy rằng có một số thuộc tính đáng chú ý.

Chúng tôi tìm kiếm nhanh APT 92 trong dự án của mình, chúng tôi tìm thấy tệp Resources.rc với các mô tả này.

Lướt qua các tệp Nguồn, chúng ta thấy thư mục phương thức.

Mỗi tệp phương thức này đại diện cho các bỏ qua UAC khác nhau sẽ được sử dụng trong tệp nhị phân đã biên dịch. Nếu chúng ta xem qua từng phương thức này, chúng ta sẽ thấy các nhận xét khác nhau với tên phương thức. Để vượt qua Defender và các công cụ AV khác, chúng tôi cần xóa các nhận xét này khỏi từng tệp phương thức.

Việc xóa tất cả các nhận xét khỏi các tệp phương thức có thể mất nhiều thời gian, nhưng chúng ta chỉ phải thực hiện một lần trước khi có tệp nhị phân không bị AV bắt được.

Và sau khi chúng tôi đã xóa tất cả các nhận xét khỏi tệp và biên dịch lại, chúng tôi sẽ nhận được tệp nhị phân của mình. Chạy nó với AntiScan.me, chúng tôi thấy rằng chúng tôi đã bỏ qua một số nhà cung cấp AV.

Quét nó bằng Windows Defender, chúng tôi thấy rằng nó không được phát hiện.

Bắt quản trị viên

Quay lại Havoc, chúng ta chỉ cần tải tệp nhị phân lên mục tiêu của mình.

Hãy kiểm tra với EDR của Microsoft để xem chúng tôi đã bị bắt chưa.

Không giống như nó. Hãy tiếp tục!

Với nhị phân UACME của chúng tôi trên mục tiêu, chúng tôi cần thực thi nó bằng phương thức của mình. Các lệnh Powershell và shell có thể khiến chúng ta bị bắt, vì vậy hãy sử dụng WMI. May mắn thay, SharpWMI cho phép chúng tôi chạy các lệnh trong bộ nhớ.

Nhưng trước tiên, chúng ta cần một phương pháp cho Windows 11.

59 có vẻ tốt. Hãy gọi phương thức của chúng ta bằng SharpWMI.

dotnet inline-execute /home/user/Desktop/SharpWMI.exe action=exec computername=WIN11-BLUE.blueteam.local command=”C:\Users\danny\Downloads\Acaji.exe 59 C:\Users\danny\Downloads \Inj3c13.exe”

Và chúng tôi lấy lại đèn hiệu Quản trị viên của mình!

Kiểm tra lại EDR của chúng tôi, chúng tôi không có phát hiện nào.

Tuyệt quá! Vì vậy, bây giờ chúng tôi đã xác định rằng chúng tôi có thể thực thi mã mà không cần kích hoạt EDR, chúng tôi có thể sử dụng phương pháp tương tự này để di chuyển qua miền tới DC.

LƯU Ý: Tất nhiên bạn sẽ không làm điều này trong một ứng dụng trong thế giới thực. Chúng tôi có DA nên chúng tôi chỉ có thể DCsync, nhưng chúng tôi muốn xem liệu chúng tôi có thể di chuyển mà không thay đổi EDR hay không.

Phong trào bên

Vì vậy, trên WIN11-BLUE, chúng tôi có khả năng tải lên tệp nhị phân của mình, nhưng làm cách nào để thực hiện việc này khi chúng tôi không có đèn hiệu trên DC?

Trong một bài viết trước, tôi đã chứng minh rằng chúng ta có thể làm điều này với Powershell và một tác vụ đã lên lịch. Trong bài viết này, chúng tôi sẽ sử dụng một phương pháp khác. Chúng tôi sẽ tải tệp nhị phân của mình lên mục tiêu bằng CrackMapExec và sau đó gọi nó bằng SharpWMI.

Thiết lập cho cuộc tấn công của chúng tôi

Vì vậy, đối với POC này, chúng tôi sẽ giả vờ một lần nữa rằng có một tài liệu tối mật về DC mà chúng tôi cần phải khai thác. Điều đầu tiên chúng ta cần làm là lấy mật khẩu hoặc hàm băm cho người dùng Danny của chúng ta.

Vì chúng tôi là quản trị viên, chúng tôi có thể sử dụng một số phương pháp để lấy giá trị băm nhưng cách dễ nhất đối với tôi là chuyển phiên qua Giao ước và sử dụng lệnh DCsync của họ.

Vì vậy, trên Giao ước, chúng tôi đã thiết lập tệp shellcode của mình và tải tệp đó xuống hệ thống cục bộ của chúng tôi.

Để đơn giản, tôi sẽ đổi tên tệp thành grunt.bin và sau đó tôi sẽ chạy nó qua Harriet. Điều này sẽ mã hóa nó để chúng tôi có thể vượt qua EDR.

Bây giờ chúng ta có một tệp nhị phân, chúng ta có thể sử dụng Donut để biến nó trở lại thành shellcode.

Và phần cuối cùng là đưa nó vào quy trình thực thi Havoc của chúng ta.

Khi mã shell được chèn thành công, chúng tôi chuyển sang Giao ước và chúng tôi có một kiểm tra grunt mới.

Hãy xem qua EDR.

Không có gì để thấy ở đây! Chúng ta có thể di chuyển cùng!

Quay lại Giao ước, chúng ta có thể sử dụng lệnh DCsync và lấy hàm băm của Danny. Và sau vài giây, Danny và tên miền đã có chủ.

Được rồi, mát mẻ. Vì vậy, chúng tôi đã chứng minh rằng chúng tôi có thể nhận được hàm băm của DA. Nhưng bạn sẽ làm gì với nó một khi bạn có nó? Hãy nhớ rằng, mục tiêu hành động của chúng tôi không phải là giành quyền kiểm soát miền, mà là lấy tài liệu bí mật về DC.

Di chuyển lên Bộ điều khiển miền

Chúng tôi có tệp thực thi FUD mà chúng tôi cần tải lên DC. Đối với điều này, chúng tôi sẽ sử dụng CrackMapExec. Vì vậy, đây là mệnh lệnh của chúng tôi.

crackmapexec smb 192.168.1.9 -u danny -H 83c4be1a3fd33a182dafc8bd3bf53d00 -d blueteam.local — đặt tệp /home/kali/Desktop/Inj3c13.exe \\WINDOWS\\TEMP\\25N0v3.exe

Chúng tôi đang sử dụng mô-đun SMB và chúng tôi có IP cho bộ điều khiển miền. Sau đó, chúng tôi sử dụng tên người dùng của danny và nhập hàm băm NTLM của anh ấy. Chúng tôi có miền và sau đó sử dụng lệnh “ — put-file” với đường dẫn đến tệp thực thi FUD của chúng tôi và sau đó là thư mục mà chúng tôi muốn thả tệp vào DC.

Hãy cho nó một đi.

Và cứ như vậy, tệp thực thi của chúng tôi có trên DC! Bây giờ chúng ta cần gọi nó. Chúng tôi có thể sử dụng SharpWMI.exe để thực hiện việc này trong bộ nhớ giống như chúng tôi đã làm với WIN11-BLUE.

Và bây giờ chúng tôi có một đèn hiệu có tính toàn vẹn cao trên DC!

Hãy tìm chiến lợi phẩm!

Sau khi liệt kê một chút, chúng tôi tìm thấy nó trong thư mục Tài liệu của Danny.

Hãy tải về nó.

Trước khi xem xét, hãy đăng ký với EDR.

Điều này thậm chí còn tốt cho những gì?

Và đây là chiến lợi phẩm!

Được rồi! Vì vậy, để kết thúc bài viết này, hãy nói một chút về những gì chúng tôi đã làm và cách chúng tôi thực hiện.

Chúng tôi đã bắt đầu với đèn hiệu có tính toàn vẹn thấp và nâng cấp các quyền riêng tư của mình bằng cách tạo tệp nhị phân UACME tùy chỉnh vượt qua Bộ bảo vệ Windows và Bộ bảo vệ Windows cho Điểm cuối.

Sau đó, chúng tôi đã gọi tệp nhị phân UACME với SharpWMI.exe trong bộ nhớ để có cách tiếp cận bí mật hơn đối với Powershell hoặc các lệnh shell.

Khi các quyền riêng tư của chúng tôi đã được tối đa hóa, chúng tôi đã chuyển một phiên sang Giao ước để sử dụng lệnh DCsync để lấy hàm băm NTLM của DA. Sau đó, chúng tôi đã sử dụng CrackMapExec để tải đèn hiệu lên DC và gọi nó bằng SharpWMI.exe.

Vì vậy, làm thế nào môi trường này gian lận cho sự thành công của chúng tôi? WMI không được bật theo mặc định cho Bộ điều khiển miền, Máy chủ Windows hoặc máy trạm Windows 11.

Tuy nhiên, trong môi trường doanh nghiệp hiện đại, hầu hết các máy này sẽ được bật WMI để giúp quản trị viên hệ thống dễ dàng khắc phục sự cố hơn. Chúng tôi cũng bắt đầu hành trình của mình trên tài khoản của DA, nhưng đó chỉ là để làm cho mọi thứ thuận tiện hơn một chút cho việc viết bài.

Cũng cần hiểu rằng chúng tôi không cài đặt bất kỳ AV nào khác trên hệ thống. Nếu bạn còn nhớ, BitDefender đã xem tệp nhị phân UACME của chúng tôi là độc hại. Vì vậy, hãy cẩn thận khi sử dụng nó trên pentest thực.

Nếu bạn thích bài viết này và muốn xem tôi đang làm gì khác, hãy theo dõi tôi tại đây hoặc trên Twitter @assume_breach