2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Cuối cùng Bài viết chúng tôi đã gặp ngăn xếp ELK, nó bao gồm những sản phẩm phần mềm nào. Và nhiệm vụ đầu tiên mà một kỹ sư phải đối mặt khi làm việc với ngăn xếp ELK là gửi nhật ký để lưu trữ trong elaticsearch để phân tích tiếp theo. Tuy nhiên, đây chỉ là dịch vụ môi, elaticsearch lưu trữ nhật ký dưới dạng tài liệu với các trường và giá trị nhất định, có nghĩa là kỹ sư phải sử dụng nhiều công cụ khác nhau để phân tích thông báo được gửi từ hệ thống cuối. Điều này có thể được thực hiện theo nhiều cách - tự viết chương trình để thêm tài liệu vào cơ sở dữ liệu bằng API hoặc sử dụng các giải pháp làm sẵn. Trong khóa học này chúng ta sẽ xem xét giải pháp Logstash, là một phần của ngăn xếp ELK. Chúng ta sẽ xem cách chúng ta có thể gửi nhật ký từ hệ thống điểm cuối đến Logstash, sau đó chúng ta sẽ thiết lập tệp cấu hình để phân tích cú pháp và chuyển hướng đến cơ sở dữ liệu Elaticsearch. Để thực hiện việc này, chúng tôi lấy nhật ký từ tường lửa Check Point làm hệ thống đến.

Khóa học không đề cập đến việc cài đặt ELK stack vì có rất nhiều bài viết về chủ đề này; chúng ta sẽ xem xét thành phần cấu hình.

Hãy lập một kế hoạch hành động cho cấu hình Logstash:

  1. Kiểm tra xem elaticsearch có chấp nhận nhật ký không (kiểm tra chức năng và tính mở của cổng).
  2. Chúng tôi xem xét cách chúng tôi có thể gửi sự kiện tới Logstash, chọn phương thức và triển khai nó.
  3. Chúng tôi định cấu hình Đầu vào trong tệp cấu hình Logstash.
  4. Chúng tôi định cấu hình Đầu ra trong tệp cấu hình Logstash ở chế độ gỡ lỗi để hiểu thông điệp tường trình trông như thế nào.
  5. Đang thiết lập bộ lọc.
  6. Thiết lập đầu ra chính xác trong ElasticSearch.
  7. Logstash ra mắt.
  8. Kiểm tra nhật ký ở Kibana.

Chúng ta hãy xem xét từng điểm chi tiết hơn:

Kiểm tra xem elaticsearch có chấp nhận nhật ký không

Để thực hiện việc này, bạn có thể sử dụng lệnh cuộn tròn để kiểm tra quyền truy cập vào Elaticsearch từ hệ thống mà Logstash được triển khai. Nếu bạn đã định cấu hình xác thực thì chúng tôi cũng chuyển người dùng/mật khẩu qua Curl, chỉ định cổng 9200 nếu bạn chưa thay đổi. Nếu bạn nhận được phản hồi tương tự như phản hồi bên dưới thì mọi thứ đã ổn.

[elastic@elasticsearch ~]$ curl -u <<user_name>> : <<password>> -sS -XGET "<<ip_address_elasticsearch>>:9200"
{
  "name" : "elastic-1",
  "cluster_name" : "project",
  "cluster_uuid" : "sQzjTTuCR8q4ZO6DrEis0A",
  "version" : {
    "number" : "7.4.1",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "fc0eeb6e2c25915d63d871d344e3d0b45ea0ea1e",
    "build_date" : "2019-10-22T17:16:35.176724Z",
    "build_snapshot" : false,
    "lucene_version" : "8.2.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[elastic@elasticsearch ~]$

Nếu không nhận được phản hồi thì có thể có một số loại lỗi: quá trình elaticsearch không chạy, cổng được chỉ định sai hoặc cổng bị chặn bởi tường lửa trên máy chủ nơi cài đặt elaticsearch.

Hãy xem cách bạn có thể gửi nhật ký tới Logstash từ tường lửa điểm kiểm tra

Từ máy chủ quản lý Check Point, bạn có thể gửi nhật ký tới Logstash qua syslog bằng tiện ích log_exporter, bạn có thể đọc thêm về nó tại đây Bài viết, ở đây chúng tôi sẽ chỉ để lại lệnh tạo luồng:

cp_log_export thêm tên check_point_syslog target-server < > cổng đích 5555 giao thức định dạng tcp chế độ đọc chung bán thống nhất

< > - địa chỉ của máy chủ nơi Logstash chạy, cổng đích 5555 - cổng mà chúng tôi sẽ gửi nhật ký, gửi nhật ký qua tcp có thể tải máy chủ, vì vậy trong một số trường hợp, sử dụng udp sẽ đúng hơn.

Thiết lập INPUT trong file cấu hình Logstash

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Theo mặc định, tệp cấu hình nằm trong thư mục /etc/logstash/conf.d/. File cấu hình gồm 3 phần có ý nghĩa: INPUT, FILTER, OUTPUT. TRONG ĐẦU VÀO chúng tôi chỉ ra hệ thống sẽ lấy nhật ký từ đâu, trong LỌC phân tích nhật ký - thiết lập cách chia thông báo thành các trường và giá trị, trong OUTPUT chúng tôi định cấu hình luồng đầu ra - nơi các nhật ký được phân tích cú pháp sẽ được gửi.

Trước tiên, hãy định cấu hình INPUT, xem xét một số loại có thể là - tệp, tcp và exe.

TCP:

input {
tcp {
    port => 5555
    host => “10.10.1.205”
    type => "checkpoint"
    mode => "server"
}
}

chế độ => "máy chủ"
Cho biết Logstash đang chấp nhận kết nối.

cổng => 5555
máy chủ => “10.10.1.205”
Chúng tôi chấp nhận kết nối qua địa chỉ IP 10.10.1.205 (Logstash), cổng 5555 - cổng phải được chính sách tường lửa cho phép.

gõ => "điểm kiểm tra"
Chúng tôi đánh dấu tài liệu, rất thuận tiện nếu bạn có nhiều kết nối đến. Sau đó, đối với mỗi kết nối, bạn có thể viết bộ lọc của riêng mình bằng cách sử dụng cấu trúc logic if.

File:

input {
  file {
    path => "/var/log/openvas_report/*"
    type => "openvas"
    start_position => "beginning"
    }
}

Mô tả các cài đặt:
đường dẫn => "/var/log/openvas_report/*"
Chúng tôi chỉ ra thư mục mà các tập tin cần được đọc.

gõ => "openvas"
Loại sự kiện.

start_position => "bắt đầu"
Khi thay đổi một tập tin, nó sẽ đọc toàn bộ tập tin, nếu bạn đặt “kết thúc” thì hệ thống sẽ đợi bản ghi mới xuất hiện ở cuối tập tin.

Thực thi:

input {
  exec {
    command => "ls -alh"
    interval => 30
  }
}

Khi sử dụng đầu vào này, một lệnh shell (chỉ!) được khởi chạy và đầu ra của nó được chuyển thành thông điệp tường trình.

lệnh => "ls -alh"
Lệnh có đầu ra mà chúng tôi quan tâm.

khoảng thời gian => 30
Khoảng thời gian gọi lệnh tính bằng giây.

Để nhận nhật ký từ tường lửa, chúng tôi đăng ký bộ lọc tcp hoặc udp, tùy thuộc vào cách gửi nhật ký tới Logstash.

Chúng tôi định cấu hình Đầu ra trong tệp cấu hình Logstash ở chế độ gỡ lỗi để hiểu thông điệp tường trình trông như thế nào

Sau khi định cấu hình INPUT, chúng ta cần hiểu thông điệp tường trình sẽ trông như thế nào và cần sử dụng phương pháp nào để định cấu hình bộ lọc nhật ký (trình phân tích cú pháp).

Để thực hiện việc này, chúng tôi sẽ sử dụng bộ lọc xuất kết quả ra thiết bị xuất chuẩn để xem tin nhắn gốc; tệp cấu hình hoàn chỉnh tại thời điểm này sẽ trông như thế này:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

output 
{
	if [type] == "checkpoint" 
       {
		stdout { codec=> json }
	}
}

Chạy lệnh để kiểm tra:
sudo /usr/share/logstash/bin//logstash -f /etc/logstash/conf.d/checkpoint.conf
Chúng ta xem kết quả, hình ảnh click được:

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Nếu bạn sao chép nó sẽ trông như thế này:

action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,0x5,0xfe0a0a0a,0xc0000000}" origin="10.10.10.254" originsicname="CN=ts-spb-cpgw-01,O=cp-spb-mgmt-01.tssolution.local.kncafb" sequencenum="8" time="1576766483" version="5" context_num="1" dst="10.10.10.10" dst_machine_name="[email protected]" layer_name="TSS-Standard Security" layer_name="TSS-Standard Application" layer_uuid="dae7f01c-4c98-4c3a-a643-bfbb8fcf40f0" layer_uuid="dbee3718-cf2f-4de0-8681-529cb75be9a6" match_id="8" match_id="33554431" parent_rule="0" parent_rule="0" rule_action="Accept" rule_action="Accept" rule_name="Implicit Cleanup" rule_uid="6dc2396f-9644-4546-8f32-95d98a3344e6" product="VPN-1 & FireWall-1" proto="17" s_port="37317" service="53" service_id="domain-udp" src="10.10.1.180" ","type":"qqqqq","host":"10.10.10.250","@version":"1","port":50620}{"@timestamp":"2019-12-19T14:50:12.153Z","message":"time="1576766483" action="Accept" conn_direction="Internal" contextnum="1" ifdir="outbound" ifname="bond1.101" logid="0" loguid="{0x5dfb8c13,

Nhìn vào những thông báo này, chúng tôi hiểu rằng nhật ký trông giống như: field = value hoặc key = value, có nghĩa là bộ lọc có tên kv là phù hợp. Để chọn bộ lọc phù hợp cho từng trường hợp cụ thể, bạn nên tự làm quen với chúng trong tài liệu kỹ thuật hoặc hỏi bạn bè.

Thiết lập bộ lọc

Ở giai đoạn cuối cùng chúng tôi đã chọn kv, cấu hình của bộ lọc này được trình bày bên dưới:

filter {
if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
}
}

Chúng tôi chọn ký hiệu mà chúng tôi sẽ chia trường và giá trị - “=”. Nếu chúng tôi có các mục giống hệt nhau trong nhật ký, chúng tôi chỉ lưu một phiên bản trong cơ sở dữ liệu, nếu không, bạn sẽ nhận được một mảng các giá trị giống hệt nhau, nghĩa là nếu chúng tôi có thông báo “foo = some foo=some” thì chúng tôi chỉ viết foo = một số.

Thiết lập đầu ra chính xác trong ElasticSearch

Sau khi Bộ lọc được định cấu hình, bạn có thể tải nhật ký lên cơ sở dữ liệu nghiên cứu:

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Nếu tài liệu được ký bằng loại điểm kiểm tra, chúng tôi sẽ lưu sự kiện vào cơ sở dữ liệu elaticsearch, cơ sở dữ liệu này chấp nhận các kết nối vào ngày 10.10.1.200 trên cổng 9200 theo mặc định. Mỗi tài liệu được lưu vào một chỉ mục cụ thể, trong trường hợp này chúng ta lưu vào chỉ mục “điểm kiểm tra-” + ngày giờ hiện tại. Mỗi chỉ mục có thể có một tập hợp các trường cụ thể hoặc được tạo tự động khi một trường mới xuất hiện trong thông báo; bạn có thể xem cài đặt trường và loại của chúng trong ánh xạ.

Nếu bạn đã định cấu hình xác thực (chúng ta sẽ xem xét nó sau), thông tin xác thực để ghi vào một chỉ mục cụ thể phải được chỉ định, trong ví dụ này là “tssolution” với mật khẩu “cool”. Bạn có thể phân biệt quyền của người dùng để chỉ ghi nhật ký vào một chỉ mục cụ thể và không hơn thế nữa.

Khởi chạy Logstash.

Tệp cấu hình đăng nhập:

input 
{
         tcp 
         {
                port => 5555
  	  	type => "checkpoint"
    		mode => "server"
                host => “10.10.1.205”
   	 }
}

filter {
        if [type] == "checkpoint"{
	kv {
		value_split => "="
		allow_duplicate_values => false
	}
        }
}

output 
{
if [type] == "checkpoint"
{
 	elasticsearch 
        {
		hosts => ["10.10.1.200:9200"]
		index => "checkpoint-%{+YYYY.MM.dd}"
    		user => "tssolution"
    		password => "cool"
  	}
}
}

Chúng tôi kiểm tra tính chính xác của tệp cấu hình:
/usr/share/logstash/bin//logstash -f checkpoint.conf
2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Bắt đầu quá trình Logstash:
sudo systemctl bắt đầu logstash

Chúng tôi kiểm tra xem quá trình đã bắt đầu chưa:
nhật ký trạng thái sudo systemctl

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Hãy kiểm tra xem ổ cắm có hoạt động không:
netstat -nat |grep 5555

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Kiểm tra nhật ký ở Kibana.

Sau khi mọi thứ chạy xong thì vào Kibana - Discover, đảm bảo mọi thứ đã được cấu hình đúng, hình ảnh có thể nhấp được!

2. Ngăn xếp đàn hồi: phân tích nhật ký bảo mật. Đăng nhập

Tất cả nhật ký đều được đặt đúng chỗ và chúng ta có thể thấy tất cả các trường cũng như giá trị của chúng!

Kết luận

Chúng tôi đã xem xét cách viết tệp cấu hình Logstash và kết quả là chúng tôi có được trình phân tích cú pháp của tất cả các trường và giá trị. Bây giờ chúng ta có thể làm việc với việc tìm kiếm và vẽ biểu đồ cho các trường cụ thể. Tiếp theo trong khóa học, chúng ta sẽ xem xét trực quan hóa trong Kibana và tạo một trang tổng quan đơn giản. Điều đáng nói là tệp cấu hình Logstash cần được cập nhật liên tục trong một số trường hợp nhất định, chẳng hạn như khi chúng ta muốn thay thế giá trị của một trường từ số thành một từ. Trong các bài viết tiếp theo chúng tôi sẽ làm điều này liên tục.

Vậy nên hãy chờ trong giây lát (Telegram, Facebook, VK, Blog giải pháp TS), Yandex Zen.

Nguồn: www.habr.com

Thêm một lời nhận xét