DinteATTT - Block_DinteAttt_PageBreadcrumb

DinteATTT - Block_DinteAttt_Article_Toolbar

Hướng dẫn xây dựng dòng thời gian điều tra chuyên sâu với PLASO

 

Tài liệu này được biên soạn nhằm cung cấp quy trình vận hành chi tiết bộ công cụ Plaso (phiên bản hiện đại của log2timeline). Đây là giải pháp hàng đầu trong lĩnh vực điều tra số giúp các cán bộ của Bộ Nông nghiệp và Môi trường tham khảo nhằm thực hiện thu thập, giải mã và thống nhất hàng nghìn nguồn dữ liệu khác nhau trên Linux thành một "Super Timeline" – một trục thời gian duy nhất cho phép quan sát toàn bộ diễn biến sự cố theo trình tự thời gian chính xác tuyệt đối.

I. TỔNG QUAN VỀ HỆ SINH THÁI VÀ KIẾN TRÚC PLASO

Plaso không vận hành như một phần mềm đơn lẻ mà là một hệ sinh thái các công cụ phối hợp chặt chẽ, được thiết kế để xử lý dữ liệu ở quy mô lớn (Big Data Forensics) và giải quyết bài toán "Time-stomping" (kẻ tấn công thay đổi thời gian tệp tin).

- log2timeline.py: Trái tim của hệ thống. Công cụ này thực hiện quét toàn bộ tệp tin, trích xuất siêu dữ liệu (metadata) từ hệ thống tệp và sử dụng hàng trăm bộ giải mã (Parsers) để đọc nội dung bên trong các file log nhị phân hoặc văn bản. Kết quả được lưu vào tệp lưu trữ trung gian .plaso (thường sử dụng định dạng SQLite hoặc nén).

- psort.py: Công cụ xử lý hậu kỳ. Vì tệp .plaso thô chứa rất nhiều dữ liệu "nhiễu" từ hệ thống, psort đóng vai trò như một bộ máy lọc và định dạng. Nó cho phép sắp xếp, loại bỏ dữ liệu không liên quan và xuất ra các định dạng thân thiện như CSV, JSON hoặc đẩy trực tiếp vào Elasticsearch/Timesketch.

- pinfo.py: Công cụ kiểm định (Audit). Dùng để kiểm tra cấu trúc bên trong của tệp .plaso, xác định các parser nào đã chạy thành công, thời gian xử lý và thống kê tổng số lượng bản ghi thu được để đảm bảo không có dữ liệu nào bị bỏ sót trong quá trình giải mã.

- psteal.py: Công cụ "tất cả trong một", kết hợp cả quá trình trích xuất (log2timeline) và xuất dữ liệu (psort) chỉ trong một câu lệnh, cực kỳ hữu ích cho các tình huống cần xử lý nhanh (Triage).

II. CHUẨN BỊ VÀ TỐI ƯU HÓA HỆ THỐNG

1. Yêu cầu tài nguyên và Hiệu năng

Xây dựng Super Timeline là tác vụ tiêu tốn tài nguyên nhất trong điều tra số. Cán bộ kỹ thuật cần chú ý:

- RAM: Khuyến nghị tối thiểu 8GB - 16GB. Plaso sử dụng bộ nhớ để lưu trữ các bảng ánh xạ và cache dữ liệu trung gian.

- CPU: Càng nhiều nhân càng tốt. Plaso tận dụng cơ chế đa luồng (Workers) để xử lý song song nhiều tệp log.

- Lưu trữ: Tệp .plaso trung gian có thể có dung lượng lớn hơn 20-30% so với tổng dung lượng log gốc do chứa thêm các thông tin metadata và chỉ mục.

2. Cài đặt chuẩn hóa

Sử dụng PPA trên Ubuntu để luôn có bản cập nhật các mẫu chữ ký tấn công mới nhất:

- sudo add-apt-repository ppa:gift/stable

- sudo apt-get update

- sudo apt-get install plaso-tools

III. QUY TRÌNH ĐIỀU TRA CHI TIẾT (WORKFLOW)

Bước 1: Trích xuất và Giải mã với log2timeline.py

Giai đoạn này tốn nhiều thời gian nhất. Chúng ta cần định nghĩa rõ phạm vi trích xuất để tránh lãng phí tài nguyên vào dữ liệu rác.

Kịch bản: Trích xuất tập trung vào hệ thống và ứng dụng (Nginx, Postgres)

# Sử dụng tham số --workers để tăng tốc độ và --parsers để lọc nguồn dữ liệu
log2timeline.py --workers 4 --parsers "syslog,bash_history,linux_auth,nginx_access,postgresql" --storage-file web_app_case.plaso /var/log/

- Giải thích tham số:

+ --workers 4: Chạy 4 tiến trình song song.

+ --parsers: Chỉ kích hoạt các bộ giải mã cần thiết cho Nginx và Postgres, giúp giảm 50-70% thời gian xử lý so với việc quét toàn bộ.

Bước 2: Xử lý hậu kỳ và Tinh lọc dữ liệu với psort.py

Dữ liệu thô từ bước 1 thường rất lớn. psort giúp chúng ta "nhìn thấy" sự thật qua các bộ lọc.

Xuất dữ liệu ra định dạng CSV theo khung thời gian sự cố:

psort.py -o l2tcsv --slice "2025-12-31 10:00:00" --slice_size 120 -z Vietnam -w analysis_result.csv web_app_case.plaso
- Giải thích tham số:

+ --slice: Chỉ lấy dữ liệu xung quanh mốc thời gian nghi ngờ (10:00 sáng).

+ --slice_size 120: Lấy dữ liệu trong vòng 120 phút tính từ mốc thời gian chỉ định.

+ -z Vietnam: Tự động chuyển đổi toàn bộ mốc thời gian về múi giờ Việt Nam (GMT+7).

IV. CÁC ARTIFACT "VÀNG" TRÊN LINUX CẦN CHÚ Ý

Khi phân tích kết quả, cán bộ kỹ thuật không được bỏ qua các tệp tin sau:

- Auth.log / Secure: Ghi lại mọi nỗ lực đăng nhập, sử dụng lệnh sudo và thay đổi mật khẩu. Đây là nơi chứa dấu vết của các đợt tấn công dò mật khẩu.

- Bash History: Lưu trữ các câu lệnh thực thi trong Shell. Cần tìm kiếm dấu vết của các lệnh tải mã độc như wget, curl hoặc các lệnh xóa dấu vết như history -c.

- UTMP / WTMP / BTMP: File nhị phân ghi lại lịch sử đăng nhập/đăng xuất và các nỗ lực đăng nhập thất bại ngay cả khi dịch vụ log văn bản bị tắt.

- Cron Logs: Các tác vụ lập lịch lạ. Kẻ tấn công thường cài đặt các script chạy ngầm tại /etc/cron.* để duy trì sự hiện diện sau khi khởi động lại máy chủ.

V. BẢNG TRA CỨU DẤU HIỆU BẤT THƯỜNG TRÊN LINUX (AUDITD & SYSTEM)

Nếu hệ thống sử dụng auditd, Plaso sẽ trích xuất được các sự kiện cực kỳ chi tiết. Dưới đây là các loại bản ghi "chết người" cần lọc ngay:

Audit Type / ID

Ý nghĩa

Dấu hiệu nghi vấn và Hệ quả

USER_AUTH (1100)

Xác thực người dùng

Đăng nhập thành công từ IP lạ vào khung giờ không làm việc.

USER_LOGIN (1101)

Đăng nhập thất bại

Tần suất xuất hiện mã này dày đặc (hàng nghìn lần/phút) là dấu hiệu tấn công Brute-force.

ADD_USER (1107)

Tạo người dùng mới

Kẻ tấn công đã có quyền Admin và đang tạo "cửa sau" (backdoor) để truy cập lâu dài.

SYSCALL (execve)

Thực thi lệnh hệ thống

Hiển thị chính xác câu lệnh được chạy. Nghi vấn nếu thấy nc -e /bin/sh (Reverse Shell).

PATH / CWD

Đường dẫn thực thi

Các lệnh hệ thống (ls, cat) chạy từ thư mục /tmp hoặc /var/www/html.

DAEMON_START (1103)

Khởi động dịch vụ

Xuất hiện các dịch vụ mới không nằm trong danh sách quản lý của doanh nghiệp.

VI. THU THẬP VÀ PHÂN TÍCH LOG ỨNG DỤNG (NGINX & POSTGRESQL)

1. Nhật ký Web Server (Nginx) - Tuyến phòng thủ đầu tiên

Log Nginx phản ánh mọi tương tác từ bên ngoài vào ứng dụng.

Status Code / Keyword

Ý nghĩa

Dấu hiệu nghi vấn kỹ thuật

403 Forbidden

Chặn truy cập

Kẻ tấn công đang cố gắng đọc các file cấu hình nhạy cảm như .git, .env, hoặc web.config.

404 Not Found

Không tìm thấy

Xuất hiện hàng loạt 404 cho các file có tên lạ (ví dụ: shell.php, cmd.jsp) cho thấy hành vi quét lỗ hổng.

500 Internal Error

Lỗi máy chủ

Có thể là dấu hiệu của một cuộc tấn công "cảm tử" để tìm lỗi tràn bộ đệm hoặc khai thác SQLi.

"../", "/etc/passwd"

Path Traversal

Kẻ tấn công đang cố gắng thoát ra khỏi thư mục web để đọc file hệ thống.

"X-Forwarded-For"

IP thực tế

Cần kiểm tra cột này nếu máy chủ nằm sau Proxy/Load Balancer để tìm IP thật của kẻ tấn công.

2. Nhật ký Cơ sở dữ liệu (PostgreSQL) - Nơi lưu trữ tài sản

Log Postgres là bằng chứng cuối cùng về việc dữ liệu có bị đánh cắp hay sửa đổi hay không.

Log Level / Keyword

Ý nghĩa

Dấu hiệu nghi vấn kỹ thuật

FATAL: password failed

Lỗi xác thực

Kẻ tấn công đã xâm nhập vào mạng nội bộ và đang cố gắng bẻ khóa tài khoản postgres.

statement: CREATE USER

Thay đổi phân quyền

Kẻ tấn công tạo User mới và gán quyền SUPERUSER để có toàn quyền trên DB.

statement: GRANT ALL

Chiếm quyền bảng

Quyền hạn tối cao được gán cho một User bình thường của ứng dụng web.

statement: DROP TABLE

Phá hoại dữ liệu

Hành vi trả thù hoặc xóa dấu vết sau khi đã trích xuất dữ liệu thành công.

"COPY ... TO PROGRAM"

Thực thi lệnh OS

Một kỹ thuật cực kỳ nguy hiểm dùng để thực thi lệnh hệ điều hành thông qua PostgreSQL.

VII. PHÂN TÍCH KẾT HỢP (CROSS-REFERENCING SCENARIO)

Sức mạnh thực sự của Plaso nằm ở khả năng kết nối các sự kiện rời rạc thành một câu chuyện logic.

Ví dụ một kịch bản điều tra thực tế:

- Phát hiện đầu tiên (Nginx): Thấy IP 1.2.3.4 gửi yêu cầu POST vào /upload.php lúc 14:05.

- Đối soát (File System): Plaso hiển thị một tệp tin mới backdoor.php được tạo ra trong /var/www/html/uploads lúc 14:05:02.

- Hành vi tiếp theo (Auth Log): Lúc 14:10, thấy lệnh sudo -i được thực thi bởi user www-data (User chạy web). Đây là dấu hiệu leo thang đặc quyền thành công.

- Hành vi cuối cùng (Postgres): Lúc 14:15, bản ghi Postgres cho thấy lệnh SELECT * FROM users_table được thực thi và dữ liệu được kết xuất ra tệp tin.

VIII. LƯU Ý AN TOÀN VÀ PHÁP LÝ (CHAIN OF CUSTODY)

- Nguyên tắc "Chỉ đọc": Tuyệt đối không bao giờ chạy Plaso trực tiếp trên ổ đĩa đang chạy. Hãy copy thư mục log ra một máy trạm phân tích riêng biệt hoặc sử dụng cơ chế mount -o ro (read-only).

- Hash Verification: Luôn tính toán mã MD5/SHA256 của các tệp log gốc trước khi đưa vào Plaso và ghi nhận vào biên bản bàn giao bằng chứng.

- Múi giờ: Plaso lưu chuẩn UTC. Việc quên cộng 7 giờ (GMT+7) là sai lầm phổ biến nhất khiến việc đối soát với các hệ thống khác (như Camera an ninh hoặc log Firewall) bị lệch hoàn toàn.

- Tính chính danh: Sử dụng lệnh pinfo.py case.plaso để ghi lại lịch sử quá trình trích xuất. Đây là bằng chứng quan trọng để chứng minh quy trình trích xuất không gặp lỗi kỹ thuật khi đưa ra hội đồng kỷ luật hoặc pháp luật.

 

 

DinteATTT - Block_DinteAttt_TinTuc_LienQuan

DinteATTT - Block_DinteAttt_Right