Lê Triệu Phú
Intern
HƯỚNG DẪN SỬ DỤNG DATA LAKE SEARCH
1. Tổng quan và Cách truy cập Data Lake Search
Các bước truy cập Query Editor:
Bước 1: Truy cập vào Sophos Central > Security Operations > Data Lake Search.
Bước 2: Chọn thẻ Query Editor trên giao diện làm việc.
Bước 3: Sử dụng công cụ Search Help (biểu tượng trợ giúp) để mở hướng dẫn trực quan bao gồm: tính năng Build with Me hỗ trợ tạo truy vấn, cú pháp cơ bản, danh sách schema, các toán tử và các ví dụ mẫu.
Bước 4: Tham khảo Schema Library để tra cứu toàn bộ danh mục các schema dữ liệu và trường dữ liệu có thể tìm kiếm.
2. Cấu trúc Cú pháp Truy vấn (Anatomy of a Query)
Mọi truy vấn trong Query Editor đều tuân theo một cấu trúc tiêu chuẩn để trích xuất dữ liệu chính xác và tối ưu hiệu năng:
FROM <schema, schema> WHERE <điều_kiện> earliest=<thời_gian> latest=<thời_gian>
Chi tiết các thành phần trong cú pháp:
• FROM: Chỉ định một hoặc nhiều schema dữ liệu cần truy vấn (ví dụ: process, auth, netflow, detection). Có thể bỏ qua mệnh đề FROM khi sử dụng Logical Types (@).
• WHERE: Mệnh đề điều kiện lọc dữ liệu (không bắt buộc). Có thể kết hợp nhiều điều kiện phức tạp bằng các toán tử logic AND, OR, NOT và nhóm ngoặc đơn ( ).
• earliest / latest: Xác định giới hạn thời gian bắt đầu và kết thúc của truy vấn.
Ví dụ cú pháp thực tế:
FROM process earliest=-24h
FROM process, auth WHERE @user CONTAINS 'system' earliest=-12h
3. Các Khái niệm Cốt lõi (Core Concepts)
3.1. Schemas (Lớp Dữ liệu)
Schema là danh mục phân loại dữ liệu tương tự như bảng trong cơ sở dữ liệu quan hệ. Các ví dụ schema phổ biến bao gồm process (sự kiện tiến trình), auth (xác thực), netflow (luồng mạng) và detection (cảnh báo phát hiện).
Quy tắc quan trọng: Một truy vấn không thể tìm kiếm đồng thời cả detections và events. Nếu cần phân tích cả hai, phải chạy hai truy vấn riêng biệt.
3.2. Logical Types (Kiểu Dữ liệu Logic)
Logical Types bắt đầu bằng ký tự @ (ví dụ: @ip, @user, @domain, @raw). Chúng tự động mở rộng và tìm kiếm trên tất cả các trường tương ứng thuộc nhiều schema khác nhau mà không cần khai báo từng trường thủ công.
FROM netflow WHERE @ip = '10.0.0.1' earliest=-2h
@user CONTAINS 'system'
3.3. Cửa sổ Thời gian (Time Window & Time Ranges)
Mặc định bộ lọc thời gian trên giao diện là 24 giờ nếu không chỉ định. Bạn có thể bổ sung earliest và latest trực tiếp vào câu lệnh:
• Đơn vị tương đối: s (giây), m (phút), h (giờ), d (ngày), w (tuần), mo (tháng), y (năm). Ký tự @ dùng để làm tròn về đầu mốc thời gian (ví dụ: -1d@d làm tròn về đầu ngày).
• Định dạng tuyệt đối: Tuân theo chuẩn ISO 8601 (ví dụ: '2019-06-01T00:00:00').
• Mặc định: Nếu chỉ chỉ định latest, earliest sẽ tự động lấy mặc định là 24 giờ trước đó.
4. Toán tử, Hàm và Gom nhóm Dữ liệu
4.1. Danh mục Toán tử So sánh
Tất cả các giá trị chuỗi phải được bọc trong dấu nháy đơn. Giá trị và toán tử không phân biệt hoa thường (ngoại trừ hostname dịch sang host_id):
Lưu ý về Escape Chuỗi: Khi chuỗi tìm kiếm chứa dấu nháy đơn, sử dụng định dạng e'...' và ký tự escape backslash. Ví dụ:
FROM process WHERE commandline CONTAINS e'echo \'mimikatz\'' earliest=-24h
4.2. Cú pháp Địa chỉ IP và CIDR
Data Lake Search hỗ trợ biểu diễn dải IP dạng CIDR đối với sự kiện (Event queries) qua các toán tử =, MATCHES, IN (và dạng phủ định). Detections không hỗ trợ CIDR.
FROM netflow WHERE source_address = '192.168.2.0/24'
FROM email WHERE @ip IN ('2001:db8:abcd:1234:0:1::/128')
Quan trọng về IPv6: Các phép so sánh chuỗi như =, CONTAINS so sánh IPv6 theo dạng chuỗi văn bản thuần túy. Để đảm bảo khớp chính xác bất kể định dạng IPv6 (đầy đủ hay rút gọn), bắt buộc phải sử dụng ký hiệu CIDR với tiền tố /128 cho một địa chỉ đơn lẻ.
4.3. Các Hàm Xử lý Kết quả (Piped Functions)
Có thể chuyển tiếp (pipe |) kết quả truy vấn vào các hàm để sắp xếp hoặc lọc dữ liệu:
• sort: Sắp xếp kết quả. Với 1 loại sự kiện: sắp xếp theo trường bất kỳ. Nhiều loại sự kiện: chỉ hỗ trợ event_time_usec và ingest_time_usec. Không hỗ trợ cho detections.
• head N / tail N: Lấy N kết quả đầu tiên hoặc cuối cùng từ mỗi loại sự kiện.
• tolower() / toupper(): Chuyển chuỗi về chữ thường/chữ hoa trong mệnh đề BY để chuẩn hóa gom nhóm không phân biệt hoa thường.
• fields: Chỉ định các cột trả về (Chỉ áp dụng qua API, không khả dụng trên giao diện Taegis UI).
4.4. Gom nhóm và Thống kê (Aggregations)
Cú pháp gom nhóm: <search> | aggregate <func>(<field>) by <field> | by <int><unit>
FROM process WHERE commandline CONTAINS 'powershell' earliest=-24h | aggregate count(username) BY username
FROM dnsquery earliest=-1d | aggregate count BY 1h
Các hàm thống kê hỗ trợ bao gồm: sum (tổng), min (nhỏ nhất), max (lớn nhất), avg (trung bình), count (đếm số dòng) và cardinality (đếm số giá trị duy nhất khác null). Tính năng aggregate chỉ hỗ trợ cho truy vấn sự kiện (events).
5. Quy tắc và Rào chắn Kỹ thuật (Guardrails & Key Rules)
Khi làm việc với Query Editor, các nhà phân tích cần tuân thủ các quy tắc kỹ thuật sau:
✔ Tách biệt Event và Detection: Không thể kết hợp sự kiện và phát hiện trong cùng một truy vấn. Khi truy vấn Detections dựa trên trường sự kiện, phải thêm tiền tố schema sự kiện (ví dụ: process.commandline).
✔ Động cơ Regex khác biệt: Event queries sử dụng động cơ Regex tương thích Java. Detection queries sử dụng động cơ Regex dựa trên Lucene/Elasticsearch.
✔ Quy tắc xử lý Hostname: Trường hostname tự động chuyển đổi sang host_id. Chỉ hỗ trợ toán tử so sánh chuỗi nguyên bản (=, !=, IN, !IN) và phân biệt hoa thường (ví dụ: FROM auth WHERE hostname = 'Demo-PC01').
✔ Giới hạn dữ liệu thô (@raw): Trường @raw và original_data chỉ có thể truy xuất dữ liệu trong vòng 20 ngày gần nhất. Với khoảng thời gian dài hơn, cần chia nhỏ truy vấn theo từng mốc 20 ngày.
✔ Từ khóa dự phòng (Reserved Words): Các từ khóa như AGG, AND, AS, COUNT, EARLIEST, FROM, WHERE,... nếu được dùng làm giá trị văn bản thuần túy trong điều kiện tìm kiếm thì phải được đặt trong dấu nháy đơn.
6. Các Mẫu Truy vấn Phổ biến (Common Query Patterns)
Bảng tổng hợp các mẫu truy vấn thông dụng giúp tra cứu nhanh trong quá trình điều tra sự cố:
7. Tài liệu tham khảo
https://docs.taegis.secureworks.com/search/data_lake_search/query_language/
1. Tổng quan và Cách truy cập Data Lake Search
Các bước truy cập Query Editor:
Bước 1: Truy cập vào Sophos Central > Security Operations > Data Lake Search.
Bước 2: Chọn thẻ Query Editor trên giao diện làm việc.
Bước 3: Sử dụng công cụ Search Help (biểu tượng trợ giúp) để mở hướng dẫn trực quan bao gồm: tính năng Build with Me hỗ trợ tạo truy vấn, cú pháp cơ bản, danh sách schema, các toán tử và các ví dụ mẫu.
Bước 4: Tham khảo Schema Library để tra cứu toàn bộ danh mục các schema dữ liệu và trường dữ liệu có thể tìm kiếm.
2. Cấu trúc Cú pháp Truy vấn (Anatomy of a Query)
Mọi truy vấn trong Query Editor đều tuân theo một cấu trúc tiêu chuẩn để trích xuất dữ liệu chính xác và tối ưu hiệu năng:
FROM <schema, schema> WHERE <điều_kiện> earliest=<thời_gian> latest=<thời_gian>
Chi tiết các thành phần trong cú pháp:
• FROM: Chỉ định một hoặc nhiều schema dữ liệu cần truy vấn (ví dụ: process, auth, netflow, detection). Có thể bỏ qua mệnh đề FROM khi sử dụng Logical Types (@).
• WHERE: Mệnh đề điều kiện lọc dữ liệu (không bắt buộc). Có thể kết hợp nhiều điều kiện phức tạp bằng các toán tử logic AND, OR, NOT và nhóm ngoặc đơn ( ).
• earliest / latest: Xác định giới hạn thời gian bắt đầu và kết thúc của truy vấn.
Ví dụ cú pháp thực tế:
FROM process earliest=-24h
FROM process, auth WHERE @user CONTAINS 'system' earliest=-12h
3. Các Khái niệm Cốt lõi (Core Concepts)
3.1. Schemas (Lớp Dữ liệu)
Schema là danh mục phân loại dữ liệu tương tự như bảng trong cơ sở dữ liệu quan hệ. Các ví dụ schema phổ biến bao gồm process (sự kiện tiến trình), auth (xác thực), netflow (luồng mạng) và detection (cảnh báo phát hiện).
Quy tắc quan trọng: Một truy vấn không thể tìm kiếm đồng thời cả detections và events. Nếu cần phân tích cả hai, phải chạy hai truy vấn riêng biệt.
3.2. Logical Types (Kiểu Dữ liệu Logic)
Logical Types bắt đầu bằng ký tự @ (ví dụ: @ip, @user, @domain, @raw). Chúng tự động mở rộng và tìm kiếm trên tất cả các trường tương ứng thuộc nhiều schema khác nhau mà không cần khai báo từng trường thủ công.
FROM netflow WHERE @ip = '10.0.0.1' earliest=-2h
@user CONTAINS 'system'
3.3. Cửa sổ Thời gian (Time Window & Time Ranges)
Mặc định bộ lọc thời gian trên giao diện là 24 giờ nếu không chỉ định. Bạn có thể bổ sung earliest và latest trực tiếp vào câu lệnh:
• Đơn vị tương đối: s (giây), m (phút), h (giờ), d (ngày), w (tuần), mo (tháng), y (năm). Ký tự @ dùng để làm tròn về đầu mốc thời gian (ví dụ: -1d@d làm tròn về đầu ngày).
• Định dạng tuyệt đối: Tuân theo chuẩn ISO 8601 (ví dụ: '2019-06-01T00:00:00').
• Mặc định: Nếu chỉ chỉ định latest, earliest sẽ tự động lấy mặc định là 24 giờ trước đó.
4. Toán tử, Hàm và Gom nhóm Dữ liệu
4.1. Danh mục Toán tử So sánh
Tất cả các giá trị chuỗi phải được bọc trong dấu nháy đơn. Giá trị và toán tử không phân biệt hoa thường (ngoại trừ hostname dịch sang host_id):
| Toán tử | Mô tả Chi tiết & Quy tắc Sử dụng |
| = <literal> | Khớp chính xác không phân biệt hoa thường. |
| != <literal> | Phủ định của phép so sánh bằng. |
| > , >= , < , <= | Toán tử so sánh số học (lớn hơn, nhỏ hơn, bằng). |
| CONTAINS / !CONTAINS | Tìm kiếm chuỗi con (substring) không phân biệt hoa thường. |
| MATCHES / !MATCHES | So sánh dạng khớp mẫu wildcard (globbing, phân biệt hoa thường) hoặc ký tự CIDR. |
| MATCHES_REGEX / !MATCHES_REGEX | So sánh biểu thức chính quy (Regex) không phân biệt hoa thường. |
| IN / !IN (<value list>) | Kiểm tra giá trị thuộc hoặc không thuộc danh sách liệt kê. |
| IS NULL / IS NOT NULL | Kiểm tra sự tồn tại hoặc giá trị rỗng (null) của trường dữ liệu. |
Lưu ý về Escape Chuỗi: Khi chuỗi tìm kiếm chứa dấu nháy đơn, sử dụng định dạng e'...' và ký tự escape backslash. Ví dụ:
FROM process WHERE commandline CONTAINS e'echo \'mimikatz\'' earliest=-24h
4.2. Cú pháp Địa chỉ IP và CIDR
Data Lake Search hỗ trợ biểu diễn dải IP dạng CIDR đối với sự kiện (Event queries) qua các toán tử =, MATCHES, IN (và dạng phủ định). Detections không hỗ trợ CIDR.
FROM netflow WHERE source_address = '192.168.2.0/24'
FROM email WHERE @ip IN ('2001:db8:abcd:1234:0:1::/128')
Quan trọng về IPv6: Các phép so sánh chuỗi như =, CONTAINS so sánh IPv6 theo dạng chuỗi văn bản thuần túy. Để đảm bảo khớp chính xác bất kể định dạng IPv6 (đầy đủ hay rút gọn), bắt buộc phải sử dụng ký hiệu CIDR với tiền tố /128 cho một địa chỉ đơn lẻ.
4.3. Các Hàm Xử lý Kết quả (Piped Functions)
Có thể chuyển tiếp (pipe |) kết quả truy vấn vào các hàm để sắp xếp hoặc lọc dữ liệu:
• sort: Sắp xếp kết quả. Với 1 loại sự kiện: sắp xếp theo trường bất kỳ. Nhiều loại sự kiện: chỉ hỗ trợ event_time_usec và ingest_time_usec. Không hỗ trợ cho detections.
• head N / tail N: Lấy N kết quả đầu tiên hoặc cuối cùng từ mỗi loại sự kiện.
• tolower() / toupper(): Chuyển chuỗi về chữ thường/chữ hoa trong mệnh đề BY để chuẩn hóa gom nhóm không phân biệt hoa thường.
• fields: Chỉ định các cột trả về (Chỉ áp dụng qua API, không khả dụng trên giao diện Taegis UI).
4.4. Gom nhóm và Thống kê (Aggregations)
Cú pháp gom nhóm: <search> | aggregate <func>(<field>) by <field> | by <int><unit>
FROM process WHERE commandline CONTAINS 'powershell' earliest=-24h | aggregate count(username) BY username
FROM dnsquery earliest=-1d | aggregate count BY 1h
Các hàm thống kê hỗ trợ bao gồm: sum (tổng), min (nhỏ nhất), max (lớn nhất), avg (trung bình), count (đếm số dòng) và cardinality (đếm số giá trị duy nhất khác null). Tính năng aggregate chỉ hỗ trợ cho truy vấn sự kiện (events).
5. Quy tắc và Rào chắn Kỹ thuật (Guardrails & Key Rules)
Khi làm việc với Query Editor, các nhà phân tích cần tuân thủ các quy tắc kỹ thuật sau:
✔ Tách biệt Event và Detection: Không thể kết hợp sự kiện và phát hiện trong cùng một truy vấn. Khi truy vấn Detections dựa trên trường sự kiện, phải thêm tiền tố schema sự kiện (ví dụ: process.commandline).
✔ Động cơ Regex khác biệt: Event queries sử dụng động cơ Regex tương thích Java. Detection queries sử dụng động cơ Regex dựa trên Lucene/Elasticsearch.
✔ Quy tắc xử lý Hostname: Trường hostname tự động chuyển đổi sang host_id. Chỉ hỗ trợ toán tử so sánh chuỗi nguyên bản (=, !=, IN, !IN) và phân biệt hoa thường (ví dụ: FROM auth WHERE hostname = 'Demo-PC01').
✔ Giới hạn dữ liệu thô (@raw): Trường @raw và original_data chỉ có thể truy xuất dữ liệu trong vòng 20 ngày gần nhất. Với khoảng thời gian dài hơn, cần chia nhỏ truy vấn theo từng mốc 20 ngày.
✔ Từ khóa dự phòng (Reserved Words): Các từ khóa như AGG, AND, AS, COUNT, EARLIEST, FROM, WHERE,... nếu được dùng làm giá trị văn bản thuần túy trong điều kiện tìm kiếm thì phải được đặt trong dấu nháy đơn.
6. Các Mẫu Truy vấn Phổ biến (Common Query Patterns)
Bảng tổng hợp các mẫu truy vấn thông dụng giúp tra cứu nhanh trong quá trình điều tra sự cố:
| Mục đích / Mẫu Truy vấn | Cú pháp Mẫu Trong Query Editor |
| Tìm kiếm trên 1 schema cụ thể | FROM process WHERE image_path CONTAINS 'powershell.exe' earliest=-24h |
| Truy vấn nhiều schema theo trường chung | FROM process, auth WHERE sensor_type = 'ENDPOINT_SOPHOS' earliest=-1h |
| Tìm kiếm không phụ thuộc schema (qua Logical Type) | @user CONTAINS 'system' |
| Tìm kiếm cảnh báo theo tiêu đề detection | FROM detection WHERE title CONTAINS 'Powershell' earliest=-7d |
| Tìm kiếm cảnh báo theo trường sự kiện liên quan | FROM detection WHERE process.commandline CONTAINS 'powershell.exe' earliest=-7d |
| Lọc theo dải IP trong schema netflow | FROM netflow WHERE @ip = '10.0.0.1' earliest=-2h |
| Đếm số lượng sự kiện nhóm theo tên máy chủ | FROM auth | count by tolower(user_name), domain, tolower(hostname) |
7. Tài liệu tham khảo
https://docs.taegis.secureworks.com/search/data_lake_search/query_language/
Bài viết liên quan
Bài viết mới