Task 26 [Day 21] Blue Teaming Needles In Computer Stacks
Câu chuyện
Grinch Enterprises đã rất lén lút trong năm nay - sử dụng nhiều vectơ tấn công (cả biết và chưa biết) để tàn phá Best Festival Company. Còn 4 ngày nữa là đến Giáng sinh và vẫn còn rất nhiều việc phải làm! McBlue, người kỹ thuật duy nhất, đã đề xuất sử dụng tự động hóa và công cụ để phát hiện các tệp độc hại trên mạng. Bạn có thể làm việc với anh ấy để xóa bất kỳ tệp độc hại nào khỏi mạng không?
Mục tiêu học tập:
Trong nhiệm vụ này, chúng ta sẽ học:
- Quy tắc Yara là gì
- Cấu trúc cơ bản của quy tắc Yara là gì
- Cách viết các quy tắc Yara cơ bản
- Cách sử dụng các quy tắc Yara
Yara
Giới thiệu:
YARA là một công cụ đa nền tảng để đối sánh các mẫu quan tâm trong các tệp (độc hại). Nó được tạo ra bởi Victor Alvarez từ VirusTotal. Nó được sử dụng để thực hiện nghiên cứu về họ phần mềm độc hại và xác định phần mềm độc hại có các mẫu tương tự. Nó có thể giúp phân loại phần mềm độc hại trong các họ phần mềm độc hại khác nhau và cũng có thể được sử dụng như một công cụ hỗ trợ phát hiện để phân tích phần mềm độc hại.
Các quy tắc Yara được sử dụng rất rộng rãi trong ngành công nghiệp cho các mục đích nêu trên. Có nhiều kho mã nguồn mở khác nhau về các quy tắc Yara được chia sẻ bởi các tổ chức và những người khác nhau, có thể được cộng đồng bảo mật tận dụng trong cuộc chiến chống lại phần mềm độc hại. Tại GitHub kho chứa các liên kết đến rất nhiều kho mã nguồn mở như vậy.
Cấu trúc:
Cú pháp cơ bản của quy tắc Yara như sau:
rule rulename
{
meta:
author = "tryhackme"
description = "test rule"
created = "11/12/2021 00:00"
strings:
$textstring = "text"
$hexstring = {4D 5A}
conditions:
$textstring and $hexstring
}
Chúng ta có thể thấy rằng quy tắc bắt đầu bằng quy tắc từ, theo sau là tên của quy tắc. Điều này cho biết sự bắt đầu của quy tắc. Chúng tôi thảo luận về các phần khác nhau của quy tắc dưới đây. Trong số này, phần siêu dữ liệu (sử dụng meta từ khóa) như đã thảo luận ở phần cuối, vì nó là phần tùy chọn.
Strings:
Như tên cho thấy, phần này là tất cả về các chuỗi bạn muốn khớp trong một quy tắc Yara. Trong phần này, chúng ta định nghĩa các chuỗi như thể chúng ta sẽ định nghĩa các biến. Khai báo chuỗi bắt đầu bằng dấu $, theo sau là tên mà chúng ta muốn gán cho chuỗi đó. Trong ví dụ trên, chúng tôi đã định nghĩa hai chuỗi là $textstring
và $hexstring
.
Như tên của các chuỗi ký hiệu, các chuỗi có thể là chuỗi văn bản hoặc chuỗi hex. Chuỗi văn bản là chuỗi được tìm thấy trong phần văn bản dễ đọc của tệp, tuy nhiên, chuỗi hex là chuỗi nguyên của các byte trong tệp. Để xác định chuỗi văn bản, chúng tôi sử dụng dấu ngoặc kép và để xác định chuỗi hex, chúng tôi sử dụng dấu ngoặc nhọn. Việc triển khai điều này có thể được nhìn thấy trong quy tắc ví dụ ở trên. Chuỗi văn bản cũng có thể sử dụng biểu thức chính quy hoặc regex, để so khớp mẫu phức tạp hơn.
Các điều kiện:
Phần điều kiện xác định các điều kiện mà người viết quy tắc muốn đáp ứng để quy tắc đạt được trên tệp. Điều kiện là biểu thức boolean và chúng sử dụng các chuỗi được xác định trong phần chuỗi làm biến. Ví dụ, trong ví dụ trên, chúng tôi sử dụng toán tử và giữa hai chuỗi. Điều này có nghĩa là quy tắc sẽ thành công nếu nó xác định chuỗi hex 4D 5A ở bất kỳ đâu trong tệp cũng như văn bản chuỗi văn bản. Không có điều kiện nào khác trong quy tắc này. Các toán tử được sử dụng phổ biến nhất là và, hoặc không. Toán tử and trả về true khi tất cả các điều kiện đều đúng. Toán tử or trả về true khi bất kỳ một trong các điều kiện là true. Và không trả về true khi điều kiện đã cho là sai. Trong trường hợp chuỗi, và sẽ đúng khi tệp chứa tất cả các chuỗi là một phần của điều kiện đó hoặc sẽ đúng khi tệp chứa bất kỳ chuỗi nào là một phần của điều kiện đó và sẽ không đúng khi chuỗi được đề cập trong điều kiện không phải là một phần của tệp. Bảng sau đây minh họa khi nào mỗi toán tử này sẽ đúng:
Operator | Condition |
and | All statements are true |
or | Any one statement is true |
not | The statement is false |
Các điều kiện có thể phức tạp hơn nhiều so với những điều kiện chúng tôi đã đề cập ở trên, nhưng để ngắn gọn, chúng tôi sẽ không đi sâu vào chi tiết trong nhiệm vụ này.
Metadata:
Siêu dữ liệu là một phần không bắt buộc, nhưng quan trọng trong các quy tắc. Nó bắt đầu với meta từ khóa. Nó có thể được sử dụng để thêm thông tin bổ sung về quy tắc để giúp nhà phân tích trong phân tích của họ. Nói chung, nó chứa các số nhận dạng được xác định tùy ý và các giá trị của chúng, được mọi người hiểu. Ví dụ: trong quy tắc ví dụ của chúng tôi ở trên, chúng tôi đã sử dụng các số nhận dạng của author
, description
, và created
. Các định danh này dễ hiểu về loại thông tin mà chúng đang cung cấp. Việc thêm siêu dữ liệu vào quy tắc đặc biệt quan trọng khi đóng góp cho cộng đồng, vì chúng cung cấp thông tin ngữ cảnh quan trọng và ghi nhận tác giả cho quy tắc.
Viết các quy tắc của riêng bạn:
Với phần giới thiệu cơ bản, chúng ta có thể thử viết một số quy tắc của riêng mình. Cho đến nay, chúng ta đã hiểu rằng quy tắc về cơ bản bao gồm phần định nghĩa chuỗi và phần điều kiện. Phần định nghĩa chuỗi sẽ xác định các chuỗi mà chúng ta muốn sử dụng trong quy tắc và phần điều kiện sẽ xác định các điều kiện sẽ áp dụng cho các chuỗi đó. Cuối cùng, chúng tôi có thể thêm bất kỳ thông tin bổ sung nào trong phần siêu dữ liệu.
Để bắt đầu viết quy tắc, hãy khởi động máy được gắn với tác vụ. Khi máy đã khởi động, hãy nhấp vào biểu tượng tryhackme ở góc trên bên trái. Trong thanh tìm kiếm, viết scite và chọn biểu tượng liên quan để mở trình soạn thảo văn bản SciTE. Bạn cũng có thể mở bất kỳ trình soạn thảo văn bản nào khác mà bạn chọn.
Bây giờ, sử dụng kiến thức thu được từ nhiệm vụ này, hãy bắt đầu viết quy tắc. Chúng tôi sẽ viết một quy tắc khớp với một số chuỗi từ tệp kiểm tra chống vi-rút EICAR mà chúng tôi đã tìm hiểu trong nhiệm vụ phân tích phần mềm độc hại. Tệp này được đặt trên màn hình Desktop trên máy với tên testfile
. Ảnh chụp màn hình sau đây cho thấy quy tắc demo của chúng tôi để phát hiện một vài chuỗi được tìm thấy trong tệp kiểm tra EICAR.
rule eicaryara {
meta:
author="tryhackme"
description="eicar string"
strings:
$a="X5O"
$b="EICAR"
$c="ANTIVIRUS"
$d="TEST"
condition:
$a and $b and $c and $d
}
Tiếp theo, chúng tôi lưu tệp này và đặt cho nó một cái tên mà chúng tôi chọn. Chúng tôi đã lưu tệp này trên Máy tính để bàn để truy cập dễ dàng hơn khi chạy quy tắc Yara trên tệp thử nghiệm của chúng tôi.
Chạy các quy tắc Yara:
Vì vậy, bây giờ chúng tôi đã viết một quy tắc, hãy tìm hiểu cách chạy quy tắc đó.
Cú pháp để chạy một quy tắc Yara có thể được phát biểu đơn giản như sau:
yara [options] rule_file [target]
Trong ví dụ của chúng tôi ở trên, rule_file của chúng tôi sẽ là tệp chúng tôi đã lưu dưới dạng eicaryara và đích sẽ là tệp thử nghiệm của chúng tôi. Do đó, lệnh của chúng tôi để chạy quy tắc sẽ giống như sau:
yara [options] eicaryara testfile
Đưa ra các tùy chọn ở đây là tùy chọn. Nếu chúng ta chạy lệnh này như nó vốn có, nó sẽ trả về cho chúng ta tên quy tắc và tên tệp nếu quy tắc được nhấn. Nếu quy tắc không được nhấn, nó sẽ không trả về bất cứ điều gì.
Khi quy tắc là một lần truy cập, đầu ra sẽ giống như sau:
user@TryHackMe$ yara eicaryara testfile
eicaryara testfile
user@TryHackMe$
Khi quy tắc bị bỏ sót, đầu ra sẽ giống như sau:
user@TryHackMe$ yara eicaryara testfile
user@TryHackMe$
Chúng ta có thể sử dụng tùy chọn -m cho Yara để trả về siêu dữ liệu khi quy tắc được nhấn. Đầu ra, trong trường hợp đó, sẽ như thế này:
user@TryHackMe$ yara -m eicaryara testfile
eicaryara [author="tryhackme",description="eicar string"] testfile
user@TryHackMe$
Tương tự, chúng ta có thể sử dụng tùy chọn -s để in các chuỗi khớp với tệp. Đầu ra trong kịch bản đó sẽ như sau:
user@TryHackMe$ yara -s eicaryara testfile
eicaryara testfile
0x1c:$b: EICAR
0x2b:$c: ANTIVIRUS
0x35:$d: TEST
user@TryHackMe$
Kết quả đầu ra ở đây hiển thị quy tắc đã khớp, các chuỗi đã khớp, số nhận dạng và vị trí của chúng trong tệp. Lưu ý rằng ảnh chụp màn hình chứa 3 trong số 4 chuỗi mà chúng tôi đã viết trong quy tắc. Điều này là do chúng tôi đã sửa đổi quy tắc trước khi chạy lệnh này để một trong các chuỗi không xuất hiện trong tệp. Do đó, chúng tôi chỉ thấy các chuỗi xuất hiện trong tệp thử nghiệm và chúng tôi không thấy các chuỗi không khớp.
Các nguồn bổ sung:
Để ngắn gọn, chúng tôi chỉ đề cập đến những điều cơ bản của các quy tắc Yara trong nhiệm vụ này. Các quy tắc Yara có khả năng thực hiện nhiều đối sánh mẫu phức tạp hơn những gì chúng ta đã đề cập ở đây. Nếu bạn muốn tìm hiểu thêm về các quy tắc của Yara, bạn có thể kiểm tra phòng Yara trên TryHackMe. Bạn cũng có thể xem tài liệu Yara hoặc xem qua một số quy tắc do cộng đồng viết để biết loại quy tắc Yara nào được cộng đồng viết ra.
Bây giờ, hãy xem liệu chúng ta có thể trả lời những câu hỏi sau để đánh giá những gì chúng ta đã học được cho đến nay hay không.
Triển khai máy móc gắn liền với nhiệm vụ. Nó sẽ hiển thị trong chế độ xem chia đôi màn hình khi sẵn sàng. Nếu bạn không thấy máy trong trình duyệt của mình, hãy nhấp vào nút "Hiển thị Chế độ xem Phân tách".
Sau khi triển khai máy ảo chúng ta sẽ bắt đầu khai thác
Mở note lên và dán đoạn code của bài gợi ý vào chúng ta phân tích nhé
Theo như gợi ý chúng ta thay toán tử and bằng gì để quy tắc trên thực hiện
Đó là or nhé để thực hiện truy cập tệp tin đọc dữ liệu
Tùy chọn nào được sử dụng trong lệnh Yara để liệt kê siêu dữ liệu của các quy tắc là một lần truy cập vào tệp?
Mình sử dụng -m nhé.
Phần nào chứa thông tin về tác giả của quy tắc Yara?
Mình đọc ở phần hướng dẫn dùng Yara phần cho mình nhiều thông tin nhất là metada
0 Comments