使用ELK實時分析SSH暴力破解

  • 2019 年 11 月 14 日
  • 筆記

在上一篇《通過rsyslog搭建集中日誌伺服器》,我們分享了如何通過rsyslog搭建集中日誌伺服器,收集系統日誌,在本篇,我們會利用這些系統日誌進行安全分析。

這是ELK入門到實踐系列的第二篇文章,分享如何使用ELK實時分析SSH暴力破解。從一張圖看出SSH登錄時間、登錄狀態、用戶名字典,嘗試次數、來源IP等,可洞悉SSH暴力破解,迅速定位攻擊者。

安全日誌分析

linux系統的安全日誌為/var/log/secure,記錄驗證和授權方面的資訊,只要涉及帳號和密碼的程式都會記錄,比如SSH登錄。

登錄成功:

Nov  7 00:57:50 localhost sshd[22514]: Accepted password for root from 192.168.28.1 port 18415 ssh2  Nov  7 00:57:50 localhost sshd[22514]: pam_unix(sshd:session): session opened for user root by (uid=0

登錄失敗:

Nov  7 00:59:12 localhost sshd[22602]: Failed password for root from 192.168.28.1 port 18443 ssh2  Nov  7 00:59:14 localhost sshd[22602]: error: Received disconnect from 192.168.28.1 port 18443:0:  [preauth]

通過以上資訊,我們只需要一條資訊就可以判斷登錄成功或失敗。

# SSH登錄成功  Nov  7 00:57:50 localhost sshd[22514]: Accepted password for root from 192.168.28.1 port 18415 ssh2  #  SSH登錄失敗  Nov  7 00:59:12 localhost sshd[22602]: Failed password for root from 192.168.28.1 port 18443 ssh2

Grok正則捕獲

基於上述,我們來構造Grok正則捕獲關鍵資訊欄位。

在線grok調試地址:http://grokdebug.herokuapp.com/

Logstash安裝配置

1、下載安裝(環境要求:JDK8)

wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.tar.gz  tar -zxvf logstash-7.3.2.tar.gz  cp -r logstash-7.3.2 /usr/local/logstash

2、測試

/usr/local/logstash/bin/logstash -e 'input { stdin{}} output{ stdout{}}'

3、Logstash配置

input {    file {      path => "/var/log/secure"    }  }    filter {      grok {          match => {            "message" => ".*sshd[d+]: %{WORD:status} .* %{USER:username} from.*%{IP:clientip}.*"          }      }  }  output {     if ([status] == "Accepted" or [status] == "Failed") {            elasticsearch {              hosts => ["http://192.168.28.151:9200"]              index => "secure-%{+YYYY.MM.dd}"              #user => "elastic"              #password => "changeme"            }            stdout {              codec => rubydebug            }      }  }

Elasticsearch部署

1、安裝

yum -y install elasticsearch

2、配置

cd /etc/elasticsearch/vi  elasticsearch.yml    network.host: 0.0.0.0    http.port: 9200

3、啟動ES

/bin/systemctl daemon-reloadsystemctl start elasticsearch

Kibana數據展示

安裝部署

# 安裝yum -y install kibana# 配置cd /etc/kibana  cp kibana.yml kibana.yml.bak  vi kibana.yml      server.port: 5601      server.host: "0.0.0.0"      elasticsearch.hosts: ["http://192.168.28.151:9200"]# 啟動systemctl daemon-reload  systemctl restart kibana

繪製數據表

可以直觀的看到攻擊者所使用的用戶名字典,登錄成功或者失敗的次數。

繪製折線圖

Y軸為登錄失敗次數,X軸為登錄時間,對SSH登錄狀態和IP地址做了一個直觀的統計。

製作儀錶盤

將前面繪製的數據表和折線圖導入到一個儀錶盤,就可以通過一張圖進行安全日誌分析,實時洞悉SSH暴力破解。

結語

本文中,通過對secure日誌的分析,構建Grok正則捕獲關鍵欄位資訊,然後將日誌數據導入ELK進行實時分析。基於ELK實現日誌收集分析,有著更多的應用場景,慢慢去摸索,繼續分享一些最佳實踐。