MSITBlog

2 minutes reading time (489 words)

ตรวจสอบ Traffic ในองค์กรด้วย ElasticFlow กัน

1-tT8mkvG0OQ3OCTvliA0cS_20190904-102714_1
 


Introduction

ก่อนอื่นเลยสิ่งที่เราต้องรู้จักก่อนคือ Elastic Stack ใน Stack นี้ก็จะรวมๆเครื่องมือหลายๆอย่างเอาไว้ให้เราได้เลือกใช้งาน และแน่นอนมันฟรี!

และสิ่งที่ต้องแนะนำเลยคือ Elasticsearch ถ้าเรียกตามชื่อก็นั่นแหละครับ ไม่ใช่อะไรมันเอาไว้ทำ search engine ของเราขึ้นมาเช่น การค้นหาสินค้า เอาสินค้าไปวิเคราะห์ ทำเกี่ยวกับเรื่อง Big data และมันก็ยังสามารถนำมาใช้ในเชิง technical เช่น หากเจอ log แบบนี้ระบบเสี่ยงที่จะถูกโจมตีไหม

โดยวันนี้เราจะมานำ log จาก Core Network ในครั้งนี้จะเสนอของ mikrotik โดยทาง mikrotik จะเป็น traffic flow ส่วน Cisco จะเป็น Netflow และจะทำการส่งข้อมูลเข้า elastic กันแบบง่ายๆ ด้วย tools 3 ตัวด้วยกันคือ

Application Log(traffic flow) > Logstash > Elasticsearch > Kibana

 

Logstash คือ tool ที่พัฒนาด้วย JAVA รอการรับ Input มาจากที่ต่างๆ และทำการ Filter ข้อมูลให้อยู่ในรูปแบบ pattern เพื่อทำการส่งไปให้ Elastic ในรูปแบบของ json

Kibana เป็น User interface ของ elastic ซึ่งถ้าหากเราอยากดูข้อมูลแบบดิบๆก็สามารถใช้ curl เข้ามาร่วมในการ query data ต่างๆได้ หรือจะใช้ extension เสริมบน Browser chrome ด้วย ElasticSearch Head

 
ElasticSearch Head

ข้อดีของการใช้ Elasticsearch Head คือไม่ผ่าน REST API บน Kibana ทำให้บางทีจะถูก timeout หากใช้คำสั่งที่มีการใช้เวลาในการ query เยอะ

 

ElastiFlow

ElasticFlow คือ external module ของ logstash โดยการนำ packet ที่เกิดขึ้นบน Network มาทำการเก็บลง Elasticsearch แล้วนำมาวิเคราะห์เกี่ยวกับเหตุการณ์ที่เกิดขึ้น เช่น Threats จะนำ Public IP มาจาก OSINT หลายๆแหล่ง ที่ถูกระบุว่าเป็น IP ที่เชื่อมต่อมาที่ Server ของเรานั้นเสี่ยงต่อการถูกโจมตี อาจจะเป็น Botnet,malware หรือแม้กระทั่ง Brute Force หลังจากมีข้อมูลก็เอาไปใช้ร่วมกับ policy ต่างๆแล้วแต่องค์กร ว่าต้องการรับความเสี่ยงระดับไหน

 

ขั้นตอนการติดตั้ง

  1. Elasticsearch
  2. Logstash
  3. Kibana

จะยกตัวอย่างการติดตั้ง Elasticsearch ด้วย RPM packages ละกันครับ
Install Elastic Stack on CentOS/RHEL/Fedora

Install Elastic Stack with RPM packages

# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
# cat > /etc/yum.repos.d/elastic.repo << EOF
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
# yum install elasticsearch-7.3.0

Enable and start the Elasticsearch service

For Systemd:

# systemctl daemon-reload
# systemctl enable elasticsearch.service
# systemctl start elasticsearch.service

For SysV Init:

# chkconfig --add elasticsearch
# service elasticsearch start

try connection curl:

[root@Elastic-Cloud ~]# curl localhost:9200
{
“name” : “instance-01”,
“cluster_name” : “Cluster01”,
“cluster_uuid” : “LWNCRWIqTJua9FstvOYrZA”,
“version” : {
“number” : “x.x.x”,
“build_flavor” : “default”,
“build_type” : “rpm”,
“build_hash” : “2f32220”,
“build_date” : “2019–04–02T15:59:27.961366Z”,
“build_snapshot” : false,
“lucene_version” : “7.7.0”,
“minimum_wire_compatibility_version” : “5.6.0”,
“minimum_index_compatibility_version” : “5.0.0”
},
“tagline” : “You Know, for Search”
}

จะได้หน้าตาประมาณนี้คือสำเร็จ…

Logstash For CentOS/RHEL/Fedora:

# yum install logstash-7.3.0
# systemctl daemon-reload
# systemctl enable logstash

หลังจากติดตั้ง Logstash เสร็จเราก็จะต้องติดตั้ง
https://github.com/robcowart/elastiflow เพิ่มเติมเพราะเป็น plugin แยกไม่เกี่ยวกับ ELK

ก่อนอื่นต้องเพิ่ม plugin

LS_HOME/bin/logstash-plugin install logstash-codec-sflow
LS_HOME/bin/logstash-plugin update logstash-codec-netflow
LS_HOME/bin/logstash-plugin update logstash-input-udp
LS_HOME/bin/logstash-plugin update logstash-input-tcp
LS_HOME/bin/logstash-plugin update logstash-filter-dns
LS_HOME/bin/logstash-plugin update logstash-filter-geoip
LS_HOME/bin/logstash-plugin update logstash-filter-translate

แล้วสั่ง

git clone https://github.com/robcowart/elastiflow.git

ทำการ copy pipeline files ที่อยู่ใน git

elastiflow/logstash/elastiflow/*

ไปที่ logstash path config จะอยู่ที่

/etc/logstash/elastiflow

ทำการ Setup environment

Copy
logstash.service.d/elastiflow.conf

to
/etc/systemd/system/logstash.service.d/elastiflow.conf

ทำการตรวจสอบ value ต่างๆ หากรันด้วย localhost ก็ไม่ต้องแก้อะไร

# Name resolution option Environment=”ELASTIFLOW_RESOLVE_IP2HOST=false” Environment=”ELASTIFLOW_NAMESERVER=127.0.0.1" Environment=”ELASTIFLOW_DNS_HIT_CACHE_SIZE=25000" Environment=”ELASTIFLOW_DNS_HIT_CACHE_TTL=900" Environment=”ELASTIFLOW_DNS_FAILED_CACHE_SIZE=75000" Environment=”ELASTIFLOW_DNS_FAILED_CACHE_TTL=3600"

ส่วนสำคัญคือ ELASTIFLOW_NETFLOW_IPV4_PORT=2055 จะรับ traffic flow ด้วย port อะไร default = 2055

# Netflow — IPv4 
Environment=”ELASTIFLOW_NETFLOW_IPV4_HOST=0.0.0.0" Environment=”ELASTIFLOW_NETFLOW_IPV4_PORT=2055"

เพิ่ม pipelines.yml ของ logstash ให้ชี้ไปที่ ElastiFlow™pipeline

/etc/logstash/pipelines.yml

- pipeline.id: elastiflow
path.config: "/etc/logstash/elastiflow/conf.d/*.conf"

จากนั้นสั่ง

systemctl start logstash
systemctl status logstash

หน้าตาจะประมาณนี้เป็นอันเสร็จ

 

ลองสั่ง netstat ดู

netstat -antup | grep 2055
 

หน้าตาแบบนี้ถือว่าใช้ได้ โดย logstash จะไปสร้าง index บน elastic ให้เราแค่ไป create index pattern

ไปที่ Core Network ของเรา ตรง Dst.Address ให้ใส่ IP logstash เราเลือก version ตามต้องแล้ว Apply

 

จากนั้นเข้า kibana

localhost:5601
 

เลือกที่ index Pattern > Create index pattern ใส่ elasticflow-*
คลิก Next step > @ timestamp > Create index pattern

 

จากนั้น คลิกที่ Saved Objects เลือก import File ใน git

 

https://github.com/robcowart/elastiflow/tree/master/kibana
import elastiflow.kibana.7.0.x.json version ต้องตรงกับ kibana ที่ใช้* จะได้หน้าตาแบบนี้เป็นอันเรียบร้อย

 

จากนั้น คลิกที่ menu dashboard ทางซ้าย เพื่อทำการ analyze โดยเลือกสักหัวข้อ ตัวอย่างจะเลือก Threats

 

ลอกเลือกมาสักอันนึง ผมสนใจอันนี้ 71.6.135.131

 

หลักจากคลิกก็จะไปที่ www.talosintelligence.com จะบอกว่า IP นี้อยู่ในหมวก Attacker โดยต้องตัดสินใจต่อว่าเลือกที่จะ block หรือไม่

 
 
เพียงเท่านี้เราก็จะสามารถตรวจสอบว่า Traffic ที่เข้ามาใน Network เรานั้นมีความเสี่ยงต่อการถูกโจมตีหรือไม่ หากใครสนใจสามารถดูข้อมูลเพิ่มเติมได้ที่ https://github.com/robcowart/elastiflow/ ครับ
Real-time ASP.NET with SignalR
การศึกษาการทำงานของ Application Discord

Related Posts

 

Comments

No comments made yet. Be the first to submit a comment
Already Registered? Login Here
Guest
Thursday, 20 February 2020