# Snort

Trước tiên, hãy xác minh Snort đã được cài đặt. Lệnh sau sẽ hiển thị phiên bản của Snort.

```bash
snort -V
```

Khi chúng ta sử dụng một tệp cấu hình, Snort có nhiều sức mạnh hơn! Tệp cấu hình là một tệp quản lý tất cả trong một của Snort. Các quy tắc, plugin, cơ chế phát hiện, hành động mặc định và cài đặt đầu ra được xác định ở đây. Có thể có nhiều tệp cấu hình cho các mục đích và trường hợp khác nhau nhưng chỉ có thể sử dụng một tệp tại thời điểm chạy.

Lưu ý rằng mỗi khi bạn khởi động Snort, nó sẽ tự động hiển thị biểu ngữ mặc định và thông tin ban đầu về thiết lập của bạn. Bạn có thể ngăn chặn điều này bằng cách sử dụng tham số "-q".

<figure><img src="/files/eHdjtRyRzawR8NpyV3QV" alt=""><figcaption></figcaption></figure>

**Sniffer Mode**

<figure><img src="/files/cvsiChgj16RcUiCpG7wO" alt=""><figcaption></figcaption></figure>

Khởi động phiên bản Snort ở chế độ verbose (-v) và sử dụng giao diện (-i) "eth0";

```bash
sudo snort -v -i eth0
```

Trong trường hợp bạn chỉ có một giao diện, Snort sẽ sử dụng nó theo mặc định.

#### Sniffing with parameter "-v"

```bash
sudo snort -v
```

```
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=64)
12/01-20:10:13.846653 192.168.175.129:34316 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23826 IpLen:20 DgmLen:64 DF
Len: 36
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

12/01-20:10:13.846794 192.168.175.129:38655 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:23827 IpLen:20 DgmLen:64 DF
Len: 36
===============================================================================
Snort exiting
```

Như bạn có thể thấy trong đầu ra đã cho, chế độ verbose cung cấp thông tin đầu ra giống như tcpdump. Khi chúng ta ngắt quá trình đánh hơi bằng CTRL+C, nó sẽ dừng và tóm tắt các gói tin đã đánh hơi.

#### Sniffing with parameter "-d"

Khởi động phiên bản Snort ở chế độ dumping packet data (-d)

```bash
sudo snort -d
```

```
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=67)

12/01-20:45:42.068675 192.168.175.129:37820 -> 192.168.175.2:53
UDP TTL:64 TOS:0x0 ID:53099 IpLen:20 DgmLen:56 DF
Len: 28
99 A5 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F  .............goo
67 6C 65 03 63 6F 6D 00 00 1C 00 01              gle.com.....

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-20:45:42.070742 192.168.175.2:53 -> 192.168.175.129:44947
UDP TTL:128 TOS:0x0 ID:63307 IpLen:20 DgmLen:72
Len: 44
FE 64 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F  .d...........goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01  gle.com.........
00 01 00 00 00 05 00 04 D8 3A CE CE              .........:..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
```

Như bạn có thể thấy trong đầu ra đã cho, chế độ tải dữ liệu gói tin bao gồm chế độ verbose và cung cấp nhiều dữ liệu hơn.

#### Sniffing with parameter "-de"

Khởi động phiên bản Snort ở chế độ dump (-d) và grabbing header lớp liên kết (-e);

```bash
sudo snort -d -e
```

```
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=70)
12/01-20:55:26.958773 00:0C:29:A5:B7:A2 -> 00:50:56:E1:9B:9D type:0x800 len:0x46
192.168.175.129:47395 -> 192.168.175.2:53 UDP TTL:64 TOS:0x0 ID:64294 IpLen:20 DgmLen:56 DF
Len: 28
6D 9C 01 00 00 01 00 00 00 00 00 00 06 67 6F 6F  m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01              gle.com.....

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-20:55:26.965226 00:50:56:E1:9B:9D -> 00:0C:29:A5:B7:A2 type:0x800 len:0x56
192.168.175.2:53 -> 192.168.175.129:47395 UDP TTL:128 TOS:0x0 ID:63346 IpLen:20 DgmLen:72
Len: 44
6D 9C 81 80 00 01 00 01 00 00 00 00 06 67 6F 6F  m............goo
67 6C 65 03 63 6F 6D 00 00 01 00 01 C0 0C 00 01  gle.com.........
00 01 00 00 00 05 00 04 D8 3A D6 8E              .........:..
```

#### Sniffing with parameter "-X"

Khởi động phiên bản Snort ở chế độ full packet dump (-X);&#x20;

```bash
sudo snort -X
```

```
Running in packet dump mode

        --== Initializing Snort ==--
...
Commencing packet processing (pid=76)
WARNING: No preprocessors configured for policy 0.
12/01-21:07:56.806121 192.168.175.1:58626 -> 239.255.255.250:1900
UDP TTL:1 TOS:0x0 ID:48861 IpLen:20 DgmLen:196
Len: 168
0x0000: 01 00 5E 7F FF FA 00 50 56 C0 00 08 08 00 45 00  ..^....PV.....E.
0x0010: 00 C4 BE DD 00 00 01 11 9A A7 C0 A8 AF 01 EF FF  ................
0x0020: FF FA E5 02 07 6C 00 B0 85 AE 4D 2D 53 45 41 52  .....l....M-SEAR
0x0030: 43 48 20 2A 20 48 54 54 50 2F 31 2E 31 0D 0A 48  CH * HTTP/1.1..H
0x0040: 4F 53 54 3A 20 32 33 39 2E 32 35 35 2E 32 35 35  OST: 239.255.255
0x0050: 2E 32 35 30 3A 31 39 30 30 0D 0A 4D 41 4E 3A 20  .250:1900..MAN: 
0x0060: 22 73 73 64 70 3A 64 69 73 63 6F 76 65 72 22 0D  "ssdp:discover".
0x0070: 0A 4D 58 3A 20 31 0D 0A 53 54 3A 20 75 72 6E 3A  .MX: 1..ST: urn:
0x0080: 64 69 61 6C 2D 6D 75 6C 74 69 73 63 72 65 65 6E  dial-multiscreen
0x0090: 2D 6F 72 67 3A 73 65 72 76 69 63 65 3A 64 69 61  -org:service:dia
0x00A0: 6C 3A 31 0D 0A 55 53 45 52 2D 41 47 45 4E 54 3A  l:1..USER-AGENT:
0x00B0: 20 43 68 72 6F 6D 69 75 6D 2F 39 35 2E 30 2E 34   Chromium/95.0.4
0x00C0: 36 33 38 2E 36 39 20 57 69 6E 64 6F 77 73 0D 0A  638.69 Windows..
0x00D0: 0D 0A                                            ..

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

WARNING: No preprocessors configured for policy 0.
12/01-21:07:57.624205 216.58.214.142 -> 192.168.175.129
ICMP TTL:128 TOS:0x0 ID:63394 IpLen:20 DgmLen:84
Type:0  Code:0  ID:15  Seq:1  ECHO REPLY
0x0000: 00 0C 29 A5 B7 A2 00 50 56 E1 9B 9D 08 00 45 00  ..)....PV.....E.
0x0010: 00 54 F7 A2 00 00 80 01 24 13 D8 3A D6 8E C0 A8  .T......$..:....
0x0020: AF 81 00 00 BE B6 00 0F 00 01 2D E4 A7 61 00 00  ..........-..a..
0x0030: 00 00 A4 20 09 00 00 00 00 00 10 11 12 13 14 15  ... ............
0x0040: 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25  .......... !"#$%
0x0050: 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35  &'()*+,-./012345
0x0060: 36 37                                            67

=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
```

### Snort in Logger Mode

Bạn có thể sử dụng Snort như một công cụ đánh hơi và ghi nhật ký các gói tin đã đánh hơi thông qua chế độ ghi nhật ký. Bạn chỉ cần sử dụng các tham số chế độ ghi nhật ký gói tin và Snort sẽ thực hiện phần còn lại để hoàn thành việc này.

<figure><img src="/files/XzehRbg59iH4PWJ5rWz4" alt=""><figcaption></figcaption></figure>

(**Thay đổi quyền sở hữu tệp/thư mục** - Bạn cũng có thể thay đổi quyền sở hữu tệp/thư mục để đọc nó với tư cách là người dùng của bạn: `sudo chown username file` hoặc `sudo chown username -R directory`. Tham số "-R" giúp xử lý đệ quy các tệp và thư mục.)

#### Logging with parameter "-l"

Đầu tiên, hãy khởi động phiên bản Snort ở chế độ ghi nhật ký gói tin;&#x20;

```bash
sudo snort -dev -l
```

```
Running in packet logging mode

        --== Initializing Snort ==--
Initializing Output Plugins!
Log directory = /var/log/snort
pcap DAQ configured to passive.
Acquiring network traffic from "ens33".
Decoding Ethernet

        --== Initialization Complete ==--
...
Commencing packet processing (pid=2679)
WARNING: No preprocessors configured for policy 0.
WARNING: No preprocessors configured for policy 0.
```

Bây giờ, hãy kiểm tra tệp nhật ký đã tạo. Lưu ý rằng tên tệp nhật ký sẽ khác trong trường hợp của bạn.

```bash
ls .
snort.log.1638459842
```

#### Logging with parameter "-K ASCII"

Khởi động phiên bản Snort ở chế độ ghi nhật ký gói tin;&#x20;

```bash
sudo snort -dev -K ASCII -l .
```

Bây giờ, hãy kiểm tra tệp nhật ký đã tạo.

```bash
ls .
142.250.187.110  192.168.175.129  snort.log.1638459842
```

Các nhật ký được tạo bằng tham số "-K ASCII" hoàn toàn khác nhau. Có hai thư mục có tên địa chỉ IP. Hãy xem xét chúng.

```bash
user@ubuntu$ ls ./192.168.175.129/
ICMP_ECHO  UDP:36648-53  UDP:40757-53  UDP:47404-53  UDP:50624-123
```

Khi chúng ta xem xét kỹ hơn các thư mục đã tạo, chúng ta có thể thấy rằng các nhật ký ở định dạng ASCII và được phân loại, vì vậy có thể đọc chúng mà không cần sử dụng phiên bản Snort.

Nói tóm lại, chế độ ASCII cung cấp nhiều tệp ở định dạng có thể đọc được, vì vậy có thể đọc các nhật ký một cách dễ dàng bằng trình soạn thảo văn bản. Trái ngược với định dạng ASCII, định dạng nhị phân không thể đọc được và yêu cầu phân tích bằng Snort hoặc một ứng dụng như tcpdump.

Hãy so sánh định dạng ASCII với định dạng nhị phân bằng cách mở cả hai trong trình soạn thảo văn bản. Sự khác biệt giữa tệp nhật ký nhị phân và tệp nhật ký ASCII được hiển thị bên dưới. (Bên trái: định dạng nhị phân. Bên phải: định dạng ASCII).

<figure><img src="/files/4Pb4Li0ZKRlXERsXCUwU" alt=""><figcaption></figcaption></figure>

#### Đọc log đã tạo với tham số "-r"

Khởi động phiên bản Snort ở chế độ đọc gói tin;&#x20;

```bash
sudo snort -r snort.log.1638459842
```

```
Running in packet dump mode

        --== Initializing Snort ==--
Initializing Output Plugins!
pcap DAQ configured to read-file.
Acquiring network traffic from "snort.log.1638459842".

        --== Initialization Complete ==--
...
Commencing packet processing (pid=3012)
WARNING: No preprocessors configured for policy 0.
12/02-07:44:03.123225 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:41900 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1   Seq:49  ECHO
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
WARNING: No preprocessors configured for policy 0.
12/02-07:44:26.169620 192.168.175.129 -> 142.250.187.110
ICMP TTL:64 TOS:0x0 ID:44765 IpLen:20 DgmLen:84 DF
Type:8  Code:0  ID:1   Seq:72  ECHO
===============================================================================
Packet I/O Totals:
   Received:           51
   Analyzed:           51 (100.000%)
    Dropped:            0 (  0.000%)
   Filtered:            0 (  0.000%)
Outstanding:            0 (  0.000%)
   Injected:            0
===============================================================================
Breakdown by protocol (includes rebuilt packets):
...
      Total:           51
===============================================================================
Snort exiting
```

Lưu ý rằng Snort có thể đọc và xử lý đầu ra giống như nhị phân (tcpdump và Wireshark cũng có thể xử lý định dạng nhật ký này). Tuy nhiên, nếu bạn tạo nhật ký bằng tham số "-K ASCII", Snort sẽ không đọc chúng. Như bạn có thể thấy trong đầu ra trên, Snort đã đọc và hiển thị tệp nhật ký giống như ở chế độ đánh hơi.

Mở tệp nhật ký bằng tcpdump.

```bash
user@ubuntu$ sudo tcpdump -r snort.log.1638459842 -ntc 10
```

```
reading from file snort.log.1638459842, link-type EN10MB (Ethernet)
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 49, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 49, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 50, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 50, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 51, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 51, length 64
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 52, length 64
IP 142.250.187.110 > 192.168.175.129: ICMP echo reply, id 1, seq 52, length 64
IP 192.168.175.1.63096 > 239.255.255.250.1900: UDP, length 173
IP 192.168.175.129 > 142.250.187.110: ICMP echo request, id 1, seq 53, length 64
```

Tham số "-r" cũng cho phép người dùng lọc các tệp nhật ký nhị phân. Bạn có thể lọc nhật ký được xử lý để xem các gói tin cụ thể bằng tham số "-r" và Bộ lọc Gói Berkeley (Berkeley Packet Filters - BPF).

```bash
sudo snort -r logname.log -X # hiển thị đầy đủ log
sudo snort -r logname.log icmp
sudo snort -r logname.log tcp
sudo snort -r logname.log 'udp and port 53' # udp và port là 53
sudo snort -r logname.log -n 10 # sẻ chỉ xử lý 10 gói tin đầu tiên.
```

### Snort in IDS/IPS Mode

&#x20;Khả năng của Snort không chỉ giới hạn ở việc theo dõi và ghi nhật ký lưu lượng. Chế độ IDS/IPS (Hệ thống phát hiện/ngăn chặn xâm nhập) giúp bạn quản lý lưu lượng dựa trên các quy tắc do người dùng định nghĩa.

<figure><img src="/files/9O9xATHZTvjClJVXcKfV" alt=""><figcaption></figcaption></figure>

Khi bạn bắt đầu chạy chế độ IDS/IPS, bạn cần sử dụng các quy tắc. Như đã đề cập trước đó, chúng ta sẽ sử dụng một quy tắc ICMP được xác định trước làm ví dụ. Quy tắc được xác định sẽ chỉ tạo cảnh báo theo bất kỳ hướng nào của hoạt động gói ICMP.

```
alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;)
```

#### IDS/IPS mode with parameter "-c and -T"

```bash
sudo snort -c /etc/snort/snort.conf -T
```

Lệnh này sẽ kiểm tra tệp cấu hình của bạn và nhắc bạn nếu có bất kỳ cấu hình sai nào trong cài đặt hiện tại của bạn.

#### IDS/IPS mode with parameter "-N"

```bash
sudo snort -c /etc/snort/snort.conf -N
```

Lệnh nafyu sẽ tắt chế độ ghi nhật ký.

#### IDS/IPS mode with parameter "-D"

```bash
sudo snort -c /etc/snort/snort.conf -D
```

Chạy chế đệ nền, nếu bạn muốn tắt nó đi có thể sử dụng `ps` để hiện PID sau đó sử dụng `kill` để đóng snort chạy nền.

#### IDS/IPS mode with parameter "-A"

Hãy nhớ rằng có một số chế độ cảnh báo có sẵn trong Snort;

* `console`: Cung cấp các cảnh báo kiểu nhanh trên màn hình console.
* `cmg`: Cung cấp chi tiết tiêu đề cơ bản với tải trọng ở định dạng hex và văn bản.
* `full`: Chế độ cảnh báo đầy đủ, cung cấp tất cả thông tin có thể về cảnh báo.
* `fast`: Chế độ nhanh, hiển thị thông báo cảnh báo, dấu thời gian, địa chỉ IP nguồn và đích cùng với số cổng.
* `none`: Tắt cảnh báo.

#### IDS/IPS mode with parameter "-A console"

Chế độ console cung cấp các cảnh báo kiểu nhanh trên màn hình console. Khởi động phiên bản Snort ở chế độ cảnh báo console (-A console) với lệnh sau:

```bash
sudo snort -c /etc/snort/snort.conf -A console
```

#### IDS/IPS mode with parameter "-A cmg"

Chế độ Cmg cung cấp chi tiết tiêu đề cơ bản với tải trọng ở định dạng hex và văn bản. Khởi động phiên bản Snort ở chế độ cảnh báo cmg (-A cmg) với lệnh sau&#x20;

```bash
sudo snort -c /etc/snort/snort.conf -A cmg
```

#### IDS/IPS mode with parameter "-A fast"

Chế độ nhanh cung cấp thông báo cảnh báo, dấu thời gian và địa chỉ IP nguồn và đích. Hãy nhớ rằng, không có đầu ra console nào ở chế độ này. Khởi động phiên bản Snort ở chế độ cảnh báo nhanh (-A fast) với lệnh sau&#x20;

```bash
sudo snort -c /etc/snort/snort.conf -A fast
```

#### IDS/IPS mode with parameter "-A full"

Chế độ cảnh báo đầy đủ cung cấp tất cả thông tin có thể về cảnh báo. Hãy nhớ rằng, không có đầu ra console nào ở chế độ này. Khởi động phiên bản Snort ở chế độ cảnh báo đầy đủ (-A full) với lệnh sau&#x20;

```bash
sudo snort -c /etc/snort/snort.conf -A full
```

#### IDS/IPS mode with parameter "-A none"

Tắt cảnh báo. Chế độ này không tạo tệp cảnh báo. Tuy nhiên, nó vẫn ghi nhật ký lưu lượng và tạo một tệp nhật ký ở định dạng kết xuất nhị phân. Hãy nhớ rằng, không có đầu ra console nào ở chế độ này. Khởi động phiên bản Snort ở chế độ không cảnh báo (-A none) với lệnh sau:

```bash
sudo snort -c /etc/snort/snort.conf -A none
```

#### IDS/IPS mode: "Using rule file without configuration file"

Có thể chạy Snort chỉ với các quy tắc mà không cần tệp cấu hình. Chạy Snort ở chế độ này sẽ giúp bạn kiểm tra các quy tắc do người dùng tạo. Tuy nhiên, chế độ này sẽ cung cấp hiệu suất kém hơn.

```bash
sudo snort -c /etc/snort/rules/local.rules -A console
```

### Làm việc PCAP với snort

<figure><img src="/files/9tMto0lsn1i0WqRWIyOt" alt=""><figcaption></figcaption></figure>

### Snort Rules

<figure><img src="/files/a9ZMRAuWejxDYQqL5OqG" alt=""><figcaption></figcaption></figure>

Quy tắc không thể được xử lý nếu không có tiêu đề. Các tùy chọn quy tắc là các phần "tùy chọn". Tuy nhiên, hầu như không thể phát hiện các cuộc tấn công tinh vi nếu không sử dụng các tùy chọn quy tắc.

**Hành động (Action)**

Có một số hành động cho các quy tắc. Hãy chắc chắn rằng bạn hiểu chức năng và kiểm tra nó trước khi tạo các quy tắc cho các hệ thống trực tiếp. Các hành động phổ biến nhất được liệt kê dưới đây.

* `alert`: Tạo một cảnh báo và ghi nhật ký gói tin.
* `log`: Ghi nhật ký gói tin.
* `drop`: Chặn và ghi nhật ký gói tin.
* `reject`: Chặn gói tin, ghi nhật ký và kết thúc phiên gói tin.

**Giao thức (Protocol)**

Tham số giao thức xác định loại giao thức được lọc cho quy tắc.

Lưu ý rằng Snort2 chỉ hỗ trợ bốn bộ lọc giao thức trong các quy tắc (IP, TCP, UDP và ICMP). Tuy nhiên, bạn có thể phát hiện các luồng ứng dụng bằng cách sử dụng số cổng và các tùy chọn. Ví dụ: nếu bạn muốn phát hiện lưu lượng FTP, bạn không thể sử dụng từ khóa FTP trong trường giao thức mà lọc lưu lượng FTP bằng cách điều tra lưu lượng TCP trên cổng 21.

#### IP and Port Numbers

Các tham số này xác định các địa chỉ IP nguồn và đích và các số cổng liên quan được lọc cho quy tắc.

* **Lọc IP**

  <mark style="color:red;">`alert icmp 192.168.1.56 any <> any any (msg: "ICMP Packet From "; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin ICMP có nguồn gốc từ địa chỉ IP 192.168.1.56.
* **Lọc một dải IP**

  <mark style="color:red;">`alert icmp 192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin ICMP có nguồn gốc từ mạng con 192.168.1.0/24.
* **Lọc nhiều dải IP**

  <mark style="color:red;">`alert icmp [192.168.1.0/24, 10.1.1.0/24] any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin ICMP có nguồn gốc từ các mạng con 192.168.1.0/24 và 10.1.1.0/24.
* **Loại trừ địa chỉ/dải IP**

  "toán tử phủ định" được sử dụng để loại trừ các địa chỉ và cổng cụ thể. Toán tử phủ định được chỉ ra bằng "!"

  <mark style="color:red;">`alert icmp !192.168.1.0/24 any <> any any (msg: "ICMP Packet Found"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin ICMP không có nguồn gốc từ mạng con 192.168.1.0/24.
* **Lọc cổng**

  <mark style="color:red;">`alert tcp any any <> any 21 (msg: "FTP Port 21 Command Activity Detected"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP được gửi đến cổng 21.
* **Loại trừ một cổng cụ thể**

  <mark style="color:red;">`alert tcp any any <> any !21 (msg: "Traffic Activity Without FTP Port 21 Command Channel"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP không được gửi đến cổng 21.
* **Lọc một dải cổng (Loại 1)**

  <mark style="color:red;">`alert tcp any any <> any 1:1024 (msg: "TCP 1-1024 System Port Activity"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP được gửi đến các cổng từ 1-1024.
* **Lọc một dải cổng (Loại 2)**

  <mark style="color:red;">`alert tcp any any <> any :1024 (msg: "TCP 0-1024 System Port Activity"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP được gửi đến các cổng nhỏ hơn hoặc bằng 1024.
* **Lọc một dải cổng (Loại 3)**

  <mark style="color:red;">`alert tcp any any <> any 1025: (msg: "TCP Non-System Port Activity"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP được gửi đến cổng nguồn cao hơn hoặc bằng 1025.
* **Lọc một dải cổng (Loại 4)**

  <mark style="color:red;">`alert tcp any any <> any [21,23] (msg: "FTP and Telnet Port 21-23 Activity Detected"; sid: 100001; rev:1;)`</mark>

  Quy tắc này sẽ tạo một cảnh báo cho mỗi gói tin TCP được gửi đến cổng 21 và 23.

**Hướng (Direction)**

Toán tử hướng chỉ ra luồng lưu lượng được Snort lọc. Phía bên trái của quy tắc hiển thị nguồn và phía bên phải hiển thị đích.

* `->`: Luồng từ nguồn đến đích.
* `<>`: Luồng hai chiều

Lưu ý rằng không có toán tử "<-" trong Snort.

<figure><img src="/files/EaNwtxZ2aypLxwtdRL04" alt=""><figcaption></figcaption></figure>

**Có ba tùy chọn quy tắc chính trong Snort;**

* General Rule Options - Các tùy chọn quy tắc cơ bản cho Snort.
* Payload Rule Options - Các tùy chọn quy tắc giúp điều tra dữ liệu tải trọng. Các tùy chọn này hữu ích để phát hiện các mẫu tải trọng cụ thể.
* Non-Payload Rule Options - Các tùy chọn quy tắc tập trung vào dữ liệu không phải tải trọng. Các tùy chọn này sẽ giúp tạo ra các mẫu cụ thể và xác định các vấn đề mạng.

**Các tùy chọn quy tắc chung (General Rule Options)**

* <mark style="color:red;">`Msg`</mark>: Trường thông báo là **một lời nhắc** cơ bản và định danh nhanh chóng của quy tắc. Khi quy tắc được kích hoạt, trường thông báo sẽ xuất hiện trong console hoặc nhật ký. Thông thường, phần thông báo là một dòng tóm tắt sự kiện.
* <mark style="color:red;">`Sid`</mark>

  ID quy tắc Snort (SID) đi kèm với một phạm vi được xác định trước và mỗi quy tắc phải có một SID ở định dạng phù hợp. Có ba phạm vi khác nhau cho SID được hiển thị bên dưới.

  * `<100`: Các quy tắc được bảo lưu
  * `100-999,999`: Các quy tắc đi kèm với bản dựng.
  * `>=1,000,000`: Các quy tắc được người dùng tạo.

  Tóm lại, các quy tắc chúng ta sẽ tạo phải có sid lớn hơn 100.000.000. Một điểm quan trọng khác là; SID không được trùng lặp và mỗi id phải là duy nhất.
* <mark style="color:red;">`Reference`</mark>

  Mỗi quy tắc có thể có thông tin bổ sung hoặc tham chiếu để giải thích mục đích của quy tắc hoặc mẫu mối đe dọa. Đó có thể là ID Common Vulnerabilities and Exposures (CVE) hoặc thông tin bên ngoài. Có các tham chiếu cho các quy tắc sẽ luôn giúp các nhà phân tích trong quá trình điều tra cảnh báo và sự cố.
* <mark style="color:red;">`Rev`</mark>

  Các quy tắc Snort có thể được sửa đổi và cập nhật cho các vấn đề về hiệu suất và hiệu quả. Tùy chọn Rev giúp các nhà phân tích có thông tin sửa đổi của mỗi quy tắc. Do đó, sẽ dễ dàng hiểu được các cải tiến quy tắc. Mỗi quy tắc có số rev duy nhất của nó và không có tính năng tự động sao lưu trên lịch sử quy tắc. Các nhà phân tích nên tự giữ lịch sử quy tắc. Tùy chọn Rev chỉ là một chỉ báo về số lần quy tắc đã được sửa đổi.

  <mark style="color:red;">`alert icmp any any <> any any (msg: "ICMP Packet Found"; sid: 100001; reference:cve,CVE-XXXX; rev:1;)`</mark>

**Các tùy chọn quy tắc phát hiện tải trọng (Payload Detection Rule Options)**

* <mark style="color:red;">`Content`</mark>

  Dữ liệu tải trọng. Nó khớp với dữ liệu tải trọng cụ thể theo ASCII, HEX hoặc cả hai. Có thể sử dụng tùy chọn này nhiều lần trong một quy tắc duy nhất. Tuy nhiên, bạn càng tạo ra nhiều tính năng khớp mẫu cụ thể, thì càng mất nhiều thời gian để điều tra một gói tin.

  Các quy tắc sau sẽ tạo một cảnh báo cho mỗi gói tin HTTP chứa từ khóa "GET". Tùy chọn quy tắc này phân biệt chữ hoa chữ thường!

  * Chế độ ASCII - <mark style="color:red;">`alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; sid: 100001; rev:1;)`</mark>
  * Chế độ HEX - <mark style="color:red;">`alert tcp any any <> any 80 (msg: "GET Request Found"; content:"|47 45 54|"; sid: 100001; rev:1;)`</mark>
* <mark style="color:red;">`Nocase`</mark>

  Tắt phân biệt chữ hoa chữ thường. Được sử dụng để tăng cường tìm kiếm nội dung.

  <mark style="color:red;">`alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; nocase; sid: 100001; rev:1;)`</mark>
* <mark style="color:red;">`Fast_pattern`</mark>

  Ưu tiên tìm kiếm nội dung để tăng tốc hoạt động tìm kiếm tải trọng. Theo mặc định, Snort sử dụng nội dung lớn nhất và đánh giá nó so với các quy tắc. Tùy chọn "fast\_pattern" giúp bạn chọn kết quả khớp gói ban đầu với giá trị cụ thể để điều tra thêm. Tùy chọn này luôn hoạt động không phân biệt chữ hoa chữ thường và có thể được sử dụng một lần cho mỗi quy tắc. Lưu ý rằng tùy chọn này là bắt buộc khi sử dụng nhiều tùy chọn "content".

  Quy tắc sau có hai tùy chọn content và tùy chọn fast\_pattern cho biết snort sử dụng tùy chọn content đầu tiên (trong trường hợp này là "GET") cho kết quả khớp gói ban đầu.

  <mark style="color:red;">`alert tcp any any <> any 80 (msg: "GET Request Found"; content:"GET"; fast_pattern; content:"www"; sid:100001; rev:1;)`</mark>

**Các tùy chọn quy tắc phát hiện không phải tải trọng (Non-Payload Detection Rule Options)**

Có các tùy chọn quy tắc tập trung vào dữ liệu không phải tải trọng. Các tùy chọn này sẽ giúp tạo ra các mẫu cụ thể và xác định các vấn đề mạng.

* <mark style="color:red;">`ID`</mark>

  Lọc trường id IP.

  <mark style="color:red;">`alert tcp any any <> any any (msg: "ID TEST"; id:123456; sid: 100001; rev:1;)`</mark>
* <mark style="color:red;">`Flags`</mark>

  Lọc các flag TCP.

  * `F` - FIN
  * `S` - SYN
  * `R` - RST
  * `P` - PSH
  * `A` - ACK
  * `U` - URG

  <mark style="color:red;">`alert tcp any any <> any any (msg: "FLAG TEST"; flags:S; sid: 100001; rev:1;)`</mark>
* <mark style="color:red;">`Dsize`</mark>

  Lọc kích thước tải trọng gói tin.

  * `dsize:min<>max;`
  * `dsize:>100`
  * `dsize:<100`

  <mark style="color:red;">`alert ip any any <> any any (msg: "SEQ TEST"; dsize:100<>300; sid: 100001; rev:1;)`</mark>
* <mark style="color:red;">`Sameip`</mark>

  Lọc địa chỉ IP nguồn và đích để tìm bản sao.

  <mark style="color:red;">`alert ip any any <> any any (msg: "SAME-IP TEST"; sameip; sid: 100001; rev:1;)`</mark>

Hãy nhớ rằng, khi bạn tạo một quy tắc, nó là một quy tắc cục bộ và phải nằm trong tệp "local.rules" của bạn. Tệp này nằm trong "/etc/snort/rules/local.rules". Một lời nhắc nhanh về cách chỉnh sửa các quy tắc cục bộ của bạn được hiển thị bên dưới.

```bash
sudo gedit /etc/snort/rules/local.rules 
```

### Các điểm cần nhớ với snort

**Các Thành Phần Chính của Snort**

* **Packet Decoder (Bộ giải mã gói tin)** - Thành phần thu thập gói tin của Snort. Nó thu thập và chuẩn bị các gói tin để tiền xử lý.
* **Pre-processors (Bộ tiền xử lý)** - Một thành phần sắp xếp và sửa đổi các gói tin cho công cụ phát hiện.
* **Detection Engine (Công cụ phát hiện)** - Thành phần chính xử lý, mổ xẻ và phân tích các gói tin bằng cách áp dụng các quy tắc.
* **Logging and Alerting (Ghi nhật ký và Cảnh báo)** - Thành phần tạo nhật ký và cảnh báo.
* **Outputs and Plugins (Đầu ra và Plugin)** - Các mô-đun tích hợp đầu ra (ví dụ: cảnh báo đến syslog/mysql) và hỗ trợ plugin bổ sung (plugin phát hiện quản lý quy tắc) được thực hiện với thành phần này.

Có ba loại quy tắc có sẵn cho Snort

* **Community Rules (Quy tắc cộng đồng)** - Bộ quy tắc miễn phí theo GPLv2. Có thể truy cập công khai, không cần đăng ký.
* **Registered Rules (Quy tắc đã đăng ký)** - Bộ quy tắc miễn phí (yêu cầu đăng ký). Bộ quy tắc này chứa các quy tắc dành cho người đăng ký với độ trễ 30 ngày.
* **Subscriber Rules (Paid) (Quy tắc dành cho người đăng ký (trả phí))** - Bộ quy tắc trả phí (yêu cầu đăng ký). Bộ quy tắc này là bộ quy tắc chính và được cập nhật hai lần một tuần (Thứ Ba và Thứ Năm).

Thiết lập cấu hình trong file cấu hình snort.conf<br>

<figure><img src="/files/Du6ZvLeVpfHwtcJEOgoV" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/soc-and-dfir/snort.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
