SiLK (System for Internet-Level Knowledge) là một bộ công cụ cho phép phân tích an toàn quản lý hiệu quả trên mạng. Đây là một bộ thu thập luồng, có thể dễ dàng, nhanh chóng lưu trữ, truy cập, phân tích, và hiển thị dữ liệu luồng. SiLK được phát triển bởi nhóm CERT NetSA. Nó có khả năng phân tích luồng nhanh chóng và hiệu quả, mà không cần kịch bản chuyên sâu CPU phức tạp. SiLK là một tập hợp bao gồm các ngôn ngữ C, Python, và Perl, và do vậy, nó hoạt động trong hầu hết các môi trường dựa trên UNIX. Phần sau sẽ trình bày một kịch bản cơ bản sử dụng SiLK.
Bộ công cụ đóng gói SiLK
Các công cụ SiLK hoạt động thông qua hai thành phần: hệ thống đóng gói và bộ phân tích. Hệ thống đóng gói là phương pháp mà SiLK thu thập và lưu trữ dữ liệu luồng theo một định dạng gốc phù hợp. Thuật ngữ "đóng gói" (packing) đề cập đến khả năng của SiLK trong việc nén dữ liệu luồng sang một định dạng nhị phân hiệu quả về không gian để phân tích thông qua bộ phân tích SiLK. Bộ phân tích là một bộ công cụ thu thập dữ liệu dùng để lọc, hiển thị, sắp xếp, đếm,... dữ liệu. Đây là một bộ các công cụ dòng lệnh cung cấp một mức độ không giới hạn về tính linh hoạt. Trong khi chính mỗi công cụ hoạt động riêng cũng đã rất hiệu quả, thì chúng còn có thể được kết hợp với nhau theo dạng chuỗi liên tiếp với đầu ra của công cụ này sẽ là đầu vào hợp lý của một công cụ khác.
Để sử dụng các đặc tính của bộ thu thập và phân tích dữ liệu của SiLK, cần phải lấy được dữ liệu từ một bộ sinh luồng. Khi bộ thu thập nhận được luồng dữ liệu từ bộ sinh, thì các dữ liệu sẽ được tách ra một cách hợp lý theo các loại luồng. Các loại luồng sẽ được phân tích dựa trên một tệp tin cấu hình để xác định khi có dữ liệu bên ngoài-đi vào-bên trong, dữ liệu bên trong-đi ra-bên ngoài, dữ liệu bên trong đi đến nhau trong mối liên hệ theo kiến trúc mạng.
Trong SiLK, quá trình thu thập sử dụng một công cụ được gọi là rwflowpack. Rwflowpack phụ trách phân tích các loại luồng, xác định dữ liệu có được từ những cảm biến nào, và đặt các dữ liệu luồng đã tinh lọc vào cơ sở dữ liệu để có thể được phân tích bởi bất kỳ công cụ nào trong bộ công cụ phân tích. Việc này được thể hiện trong Hình 2.6.
Hình 2.6 Luồng công việc của SiLK
Các loại luồng SiLK
SiLK phân các luồng thành một số loại để tiện cho việc lọc và sắp xếp các luồng dữ liệu. Việc này được xử lý dựa trên phạm vi mạng được cung cấp cho ipblocks nội mạng và ngoại mạng trong các tệp tin cấu hình sensor.conf được sử dụng bởi rwflowpack.
Có các loại luồng sau:
In: di chuyển (inbound) đến một thiết bị trong nội bộ mạng (mạng bên trong) Out: di chuyển (outbound) đến một thiết bị bên ngoài mạng
Int2int: từ một mạng nội bộ đến cùng mạng nội bộ, hoặc một mạng nội bộ khác
Ext2ext: từ một mạng bên ngoài đến cùng mạng bên ngoài, hoặc một mạng bên ngoài khác
Inweb: di chuyển (inbound) đến một thiết bị trong mạng nội bộ bằng cách sử dụng cổng 80, 443, hoặc 8080.
Outweb: di chuyển (outbound) tới một thiết bị bên ngoài mạng bằng cách sử dụng cổng 80, 443, hoặc 8080.
Inicmp: di chuyển (inbound) đến một thiết bị trong mạng nội bộ bằng cách sử dụng ICMP (giao thức IP 1)
Innull: di chuyển (inbound) luồng đã được lọc hoặc luồng bên trong mạng (inbound traffic) tới các null-ipblock cụ thể trong sensor.conf
Outnull: di chuyển (outbound) luồng đã được lọc hoặc luồng bên ngoài mạng (outbound traffic) tới các null-ipblock cụ thể trong sensor.conf
Khác: Nguồn không phải bên trong, cũng không phải bên ngoài, hoặc đích đến cũng không phải bên trong hoặc bên ngoài mạng.
Hình 2.7 Các loại luồng SiLK
Các công cụ phân tích SiLK
Khi làm việc với dữ liệu luồng, thời gian phần lớn là làm trên các công cụ phân tích. Hiện có hơn 55 công cụ phân tích trong cài đặt của SiLK, tất cả đều rất hữu ích và một số được sử dụng khá thường xuyên. Các công cụ phân tích làm việc như là một đơn vị liên kết chặt chẽ, với khả năng đưa dữ liệu từ một công cụ sang công cụ khác một cách liền mạch. Công cụ được sử dụng nhiều nhất trong bộ công cụ phân tích là rwfilter. Rwfilter đưa các tệp dữ liệu nhị phân SiLK và các bộ lọc qua chúng để cung cấp những dữ liệu cụ thể mà chuyên gia phân tích yêu cầu. Do kích thước của luồng dữ liệu sẽ liên quan đến thời gian lưu trữ chúng, nên cần phải có cách thuận tiện để đưa dữ liệu vào bộ lọc nhằm lấy ra được dữ liệu phù hợp với từng nhiệm vụ cụ thể.
Để có thể cài đặt SiLK trên Security Onion, xem thông tin tại http://www.appliednsm.com/silk-on-security-onion/.
Lọc luồng dữ liệu với Rwfilter
Phạm vi rộng và tốc độ thu thập luồng dữ liệu làm cho SiLK trở nên mạnh mẽ trong vấn đề thu thập dữ liệu trong bất kỳ môi trường nào. Với SiLK, hầu như các chuyên gia phân tích có thể tập trung vào phạm vi của sự cố mạng nhanh hơn bất kỳ loại dữ liệu nào khác.
Tình huống ví dụ là cần kiểm tra mức độ quấy rối gây ra bởi một máy chủ vi phạm với một địa chỉ IP duy nhất, đây là hành động đầu tiên trong hầu hết các cuộc điều tra. Việc thu hẹp từ dữ liệu PCAP có thể vô cùng tốn kém thời gian. Với SiLK, quá trình này có thể bắt đầu bằng cách sử dụng các lệnh rwfilter cùng với ít nhất một đầu vào, một đầu ra và một tùy chọn phân vùng. Đầu tiên là tùy chọn địa chỉ IP nào đó (any-address option), địa chỉ này sẽ được truy vấn đến tập dữ liệu trong tất cả các luồng để so khớp với địa chỉ IP đã xác định. Việc này có thể được kết hợp với tùy chọn ngày bắt đầu (start-date) và ngày kết thúc (end-date) để thu hẹp khung thời gian quan tâm. Thêm vào đó, có thể cung cấp rwfilter với type = tùy chọn all (muốn cả luồng đi vào
(inbound) và luồng đi ra (outbound)), và pass = tùy chọn stdout (cho phép vượt qua đầu ra rwcut (thông qua biểu tượng sổ thẳng (|)) để có thể được hiển thị trong cửa sổ của thiết bị đầu cuối). Lệnh rwfilter như sau:
rwfilter --any-address=1.2.3.4 --start-date=2013/06/22:11 --end-date=2013/06/22:16 --type=all --pass=stdout | rwcut
(--start-date=2013/06/22:11 sẽ hiển thị toàn bộ dữ liệu lưu lượng lọc phù hợp lúc 11 giờ của ngày hôm đó).
Giả sử có một sự kiện là một IP đáng ngờ (6.6.6.6) đột nhiên nhận được lượng đáng kể dữ liệu mã hóa từ một máy chủ web an toàn ngay sau nửa đêm. Cách dễ nhất để đánh giá mức độ lưu lượng truy cập đáng ngờ là để chạy truy vấn SiLK diện rộng:
rwfilter --start-date=2013/06/22:00 --any-address=6.6.6.6 --type=all --pass=stdout | rwcut Nếu dữ liệu bị trải rộng quá, thì cách đơn giản là thêm vào trong các tùy chọn phân vùng "-- aport = 443" để các bộ lọc trước thu hẹp tìm kiếm chỉ đến những sự kiện liên quan đến tương tác giữa các IP đáng ngờ và các máy chủ web an toàn. Lệnh --aport sẽ lọc dựa trên các cổng phù hợp với giá trị được cung cấp, trong trường hợp này là cổng 443 (cổng phổ biến nhất liên quan đến truyền thông HTTPS).
rwfilter --start-date=2016/06/22:00 --any-address=6.6.6.6 --aport=443 --type=all --pass=stdout | rwcut
Sau khi xem xét dữ liệu, có thể nhận thấy các máy chủ web vi phạm đang liên lạc với một số máy chủ trên mạng nội bộ. Giả sử chúng ta không muốn truyền thông xảy ra từ một máy chủ nội bộ cụ thể (192.168.1.100) đến IP đáng ngờ, thì thay vì sử dụng các tùy chọn --any-address, có thể sử dụng các tùy chọn --saddress và --daddress, cho phép lọc địa chỉ nguồn và địa chỉ đích cụ thể tương ứng. Lệnh này như sau:
rwfilter --start-date=2013/06/22:00 --saddress=192.168.1.100 --daddress=6.6.6.6 --aport=443 --type=all --pass=stdout | rwcut