Command Line Spoofing

Thông thường, tham số được truyền vào cho chương trình để chương trình thực thi dựa trên các tham số đó. Hiện này có khoảng 600 điều kiện dựa vào commandline trong bộ rule của sigma, đó là bằng chứng thông tin từ command line là vô cùng quan trong trọng việc phát hiện các hành vi độc hại.

Tuy nhiêu, với kỹ thuật che giấu tham số, kẻ tấn công có thể chạy một tiến trình với tham số giả mạo, sau đó, trước khi chương trình truy cập các tham số này, sẽ tiến hành thay đổi nó thành các tham số thật. Bằng cách này, các công cụ bảo mật khi theo dõi việc tạo tiến trình sẽ không thể biết được tham số thật sự khi chương trình thực thi, qua đó hạn chế được việc bị phát hiện.

1. Cách thực hiện

Để làm được việc này, kẻ tấn công cần tạo tiến trình mục tiêu chứa tham số giả với cờ CREATE_SUSPENED, sau đó thay đổi tham số của tiến trình và khôi phục để chương trình tiếp tục thực thi.

 

Trong windows, thông tin về tham số của chương trình được lưu tại trường

ProcessParameters của cấu trúc PEB chứa các thông tin của tiến trình hiện tại. Giả sử một tiến trình 64 bit sẽ có cấu trúc PEB như sau:

Trường ProcessParameters là một con trỏ trỏ tới cấu trúc RTL_USER_PROCESS_PARAMETERST, có dạng:

 

Command line sẽ được lưu ở dạng cấu trúc UNICODE_STRING, mục tiêu để ghi dữ liệu command line sau khi sửa là địa chỉ Buffer:

Khi tiến trình được tạo với cờ CREATE_SUSPENED, các thông số cơ bản của cấu trúc PEB sẽ được khởi tạo. Kẻ tấn công sẽ đọc PEB và tìm các địa chỉ ProcessParameters, CommandLine để lấy được địa chỉ Buffer, sau đó ghi đè tham số thật sự vào địa chỉ Buffer và khôi phục luồng thực thi của tiến trình.

Để không bị các phần mềm kiểm tra thông tin tiến trình như process explorer hay process hacker phát hiện, kẻ tấn công lợi dụng cơ chế đọc dòng lệnh của các công cụ này. Trong khi bản thân các chương trình khi truy xuất tham số sẽ bỏ qua trường Lenght – độ dài được chỉ định của trường Buffer trong cấu trúc UNICODE_STRING, chỉ quan tâm đến dữ liệu từ Buffer thì các công cụ trên chỉ đọc Buffer dựa trên trường Length. Do đó, trước khi khôi phục luồng thực thi của tiến trình, kẻ tấn công sẽ thay đổi giá trị của trường length thành các giá trị nhỏ hơn độ dài thật sự của tham số qua đó, đánh lừa được các công cụ trên. Điểm bất lợi của phương pháp này là chỉ che giấu được một phần phía sau của tham số thật.

 

Với kỹ thuật trên, có thể kể ra một số trường hợp để ứng dụng nhắm tránh bị các giả pháp bảo mật phát hiện khi bắt đầu thực thi:

    • Chạy các lệnh powershell, wmi, wscript, cscript,… để thực hiện các hành vi độc hại: che giấu được các tham số thực sự như ví dụ với powershell ở trên. [1]

  • Chạy các tiến trình lolbin để thực thi các hành vi độc hại như tải xuống hoặc thực thi lệnh bất kì: che giấu được tham số của các tiến trình lolbin. [2]

  • Chạy mã độc với tham số chứa mật khẩu để tự giải mã hoặc không thực hiện các hành vi độc hại nếu tham số không hợp lệ: che giấu được khóa giải mã hoặc tham số để mã độc chạy các hành vi chính của nó. [3]

2. Làm thế nào để phát hiện?

Kỹ thuật trên có thể tránh bị phát hiện bởi sysmon event id 1 và process create event id 4688, để có thể theo dõi, phát hiện và cảnh báo trong trường hợp kẻ tấn công sử dụng kỹ thuật này trong quá trình tấn công vào hệ thống, có một vài hướng để thực hiện việc này.

Với các hành vi loại [1], các tham số thật sự có thể được phát hiện thông qua việc đối chiếu với dữ liệu log (powershell transcript, event id: “200, 400, 500, 501, 800, 4104,…”, wmi event id: “5657-5661”, sysmon wmi event id: “19-21”) hoặc sử dụng AMSI để kiểm tra các hành vi ngay khi thực thi (AMSI hỗ trợ cscript, wscript, wmi, powershell,…).

 

Đối với các tập tin lolbin ở loại [2], có thể không phát hiện dòng lệnh nhưng sẽ phát hiện được hành vi mà nó thực thi như tải về một tập tin (sysmon event id 11, file audit event id 4663) hay thực thi tập tin khác (sysmon event id 1, process audit event id 4688),…

Việc phát hiện hành vi loại [3] hiện tại vẫn chưa có giải pháp cụ thể nào. Cần tích cực theo dõi hành vi độc hại sau khi tiến trình khởi tạo (ví dụ như mã hóa dữ liệu, kết nối với máy chủ c2c, tạo reverse shell, tải và thực thi mã độc khác,…) để đưa ra cảnh báo sau đó điều tra truy vết ngược kết hợp với quá trình phân tích bộ nhớ (memory dump analysis) các tiến trình nghi ngờ để tìm tham số thật sự trong PEB.

Tham khảo

By,

Blue_Team

432 lượt xem