这是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/
    4、使用ELK实时分析SSH暴力破解 - 图1
    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/kibanacp kibana.yml kibana.yml.bakvi kibana.yml server.port: 5601 server.host: “0.0.0.0” elasticsearch.hosts: [“http://192.168.28.151:9200"]# 启动systemctl daemon-reloadsystemctl restart kibana
    绘制数据表
    4、使用ELK实时分析SSH暴力破解 - 图2
    可以直观的看到攻击者所使用的用户名字典,登录成功或者失败的次数。
    绘制折线图
    4、使用ELK实时分析SSH暴力破解 - 图3
    Y轴为登录失败次数,X轴为登录时间,对SSH登录状态和IP地址做了一个直观的统计。
    制作仪表盘
    4、使用ELK实时分析SSH暴力破解 - 图4
    将前面绘制的数据表和折线图导入到一个仪表盘,就可以通过一张图进行安全日志分析,实时洞悉SSH暴力破解。