用于安全监控的实时SSH仪表板

SSH(安全外壳)是用于基于Linux的系统,路由器,交换机,防火墙,设备和其他资产的最常见的远程管理协议。尽管SSH守护程序提供了出色的强化功能,以增强您的身份验证方法和访问控制,但SSHD并未提供本机监视功能。

这篇博客文章详细介绍了如何使用ELK堆栈中的Kibana(Elasticsearch,Logstash和Kibana)将SSH日志文件转换为实时和交互式开源SIEM(安全信息和事件管理)仪表板。这样,您就知道谁在敲门并在SSH会话中获得可见性。图1显示了该实时仪表板。此安全性仪表板的左侧显示失败的SSH操作,而右侧显示成功的SSH会话:


用于安全监控的实时SSH仪表板

图1:SSH安全仪表板

在以下情况下,此数据和仪表板可能会很有用:

-您的SSH密钥对被盗/复制/破解,并被恶意参与者用来登录。
-利用了(Web应用程序)漏洞,并执行了特权升级,这导致sudo特权/根访问,或者生成并配置了辅助SSH密钥对。
-在网关,管理和Web /应用程序服务器上执行并行攻击,并且您想要使用SSH和sudo日志数据进行威胁搜索。
-SSHD或sudo配置中的配置错误会导致大量的登录和提升。

设置

您可以自己托管集中式ELK堆栈,也可以利用AzureElastic Cloud的ELK PaaS 。后者实质上是云原生SIEM解决方案。

SSHD日志与操作系统无关,这意味着即使您运行的是Debian,Red Hat或基于Ubuntu的系统,如果您运行的是OpenBSD版本,SSH日志条目的格式也应统一。但是,时间/日期表示法可能不统一,应该在Logstash中进行标准化。

日志数据流管道

SSH日志文件需要经过几个工作站,然后我们才能获得用于监视目的的闪亮的实时安全性仪表板。图2显示了用于日志转发,收集,分析和可视化的数据流过程:

用于安全监控的实时SSH仪表板
图2:从SSH源到SIEM的日志数据流

步骤1:从源头开始,SSH身份验证尝试和会话活动会自动附加到/ var / log / authlog日志文件中。SSH authlog文件的内容如下所示:

<span style="color:#000000"><code>$ tail /var/log/authlog

Apr 15 12:55:28 cryptsus-bastion sshd[25158]: Connection from 61.61.61.61 port 35444 on 209.209.209.209 port 22 rdomain "0"
Apr 15 12:55:58 cryptsus-bastion sshd[25158]: fatal: Timeout before authentication for 61.61.61.61 port 35444
Apr 15 12:56:30 cryptsus-bastion sshd[35310]: Connection from 61.61.61.61 port 13361 on 209.209.209.209 port 22 rdomain "0"
Apr 15 12:56:54 cryptsus-bastion sshd[7145]: Connection from 95.95.95.95 port 10265 on 209.209.209.209 port 22 rdomain "0"
Apr 15 12:56:55 cryptsus-bastion sshd[7145]: Accepted key ED25519 SHA256:doBfNsySf8/sA29ak2aBl29Aksdliuj2923lA23a/G4lcZs found at /home/$USERNAME/.ssh/authorized_keys:3
Apr 15 12:56:55 cryptsus-bastion sshd[7145]: Postponed publickey for krabelize from 95.95.95.95 port 10265 ssh2 [preauth]
Apr 15 12:56:55 cryptsus-bastion sshd[7145]: Accepted key ED25519 SHA256:doBfNsySf8/sA29ak2aBl29Aksdliuj2923lA23a/G4lcZs found at /home/$USERNAME/.ssh/authorized_keys:3
Apr 15 12:56:55 cryptsus-bastion sshd[7145]: Accepted publickey for krabelize from 95.95.95.95 port 10265 ssh2: ED25519 SHA256:doBfNsySf8/sA29ak2aBl29Aksdliuj2923lA23a/G4lcZs
Apr 15 12:56:55 cryptsus-bastion sshd[7145]: User child is on pid 73005
Apr 15 12:56:55 cryptsus-bastion sshd[73005]: Starting session: shell on ttyp0 for krabelize from 95.95.95.95 port 10265 id 0
</code></span>

步骤2:本地rsyslogd守护程序(远程syslog)或Filebeat代理将每个新日志条目转发到集中式Logstash服务器,该服务器通过TLS与CA证书结合对网络上的日志流量进行加密,并通过TCP发送(可靠日志记录)。Rsyslogd是Linux固有的,而Filebeat是Elastic的第三方代理,需要首先安装。

步骤3:使用Logstash将数据标准化为JSON格式。我们使用grok过滤器创建映射字段以创建变量(例如,将IPv4和IPv6地址转换为geo-IP点):

<span style="color:#000000"><code>%{MONTH:month}(%{SPACE})?%{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{WORD}\[%{NUMBER:ssh_session_id}\]: Invalid user %{USER:ssh_user} from %{IPV4:ssh_source_ip} port %{NUMBER:ssh_source_port}
%{MONTH:month}(%{SPACE})?%{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{WORD}\[%{NUMBER:ssh_session_id}\]: %{DATA} %{WORD:ssh_auth_type} for %{USER:ssh_user} from %{IPV4:ssh_source_ip} port %{NUMBER:ssh_source_port} %{NOTSPACE} %{WORD:ssh_key_type} %{NOTSPACE:ssh_hash_type}:%{NOTSPACE:ssh_hash}
%{MONTH:month}(%{SPACE})?%{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{WORD}\[%{NUMBER:ssh_session_id}\]: Starting session: shell on %{DATA:ssh_shell} for %{USER:ssh_user} from %{IPV4:ssh_source_ip} port %{NUMBER:ssh_source_port} %{DATA}
%{MONTH:month}(%{SPACE})?%{MONTHDAY:day} %{TIME:time} %{HOSTNAME:hostname} %{DATA} %{USER:user} to %{USER:sudo_user} on %{DATA:ssh_shell}
</code></span>

步骤4:Elasticsearch存储日志条目,并允许我们过滤Logstash变量,以便仅选择相关数据。

第5步:我们基于Elasticsearch搜索过滤器使用Kibana创建可视化,并将这些可视化添加到我们的SSH安全仪表板中。

步骤6:安全分析人员通过Web GUI通过端口443或SSH隧道或端口转发访问Kibana仪表板。您还可以像使用SOC(安全运营中心)一样,使用实时Kibana仪表板将纯平屏幕悬挂在墙上。

由于日志条目是通过rsyslog在本地自动和自主地转发到集中管理的ELK堆栈的,因此恶意活动也会被自动记录和转发(除非网络会话被该恶意参与者劫持或阻止)。我们应该使用这种自动转发机制来发挥我们的优势。如果满足特定的阈值或变量,则可以配置警报,例如从无关国家/地区成功进行恶意登录。

提示:首先先强化SSH守护程序,然后再应用监视/ SIEM日志记录过滤器。这将消除噪音和误报。

Kibana SSH安全仪表板

结果再次显示在下面,在这里我们可以看到失败的SSH尝试源自何处(图1)。接下来,我们将看到失败的SSH尝试的时间表,该时间表按县和日期/时间排序。这样,我们就可以实时发现SSH蛮力攻击。您也可以将此仪表板用于Honeypot系统。

接下来,您将看到无效的SSH尝试的细目分类,该尝试按国家和SSH用户名排序。此饼图可让您更好地了解攻击者所采用的攻击路径。

最后,我们还将可视化随时间推移失败的sudo尝试。

用于安全监控的实时SSH仪表板
图3:实时失败的SSH会话

图4显示了与图3相反的部分,即成功的SSH会话。这很重要,因为您可能会根据此信息误报和SSH流量转移来推断。

在下面,您可以查看成功登录的IP地址。请注意,Geo-IP转换并不总是准确的,恶意行为者可以使用服务器方法隐藏其真实地理位置。接下来,您可以查看哪些资产通过了成功的SSH身份验证会话以及在什么日期/时间通过。

我们也对SSH身份验证方法感兴趣。我们可以看到仅使用了SSH公钥而不是密码身份验证。接下来,显示ed25519公钥的相关SSH指纹。

最后,记录所有成功的提升sudo操作。从逻辑上讲,这些sudo操作应与成功的SSHD身份验证的时间戳相匹配。

用于安全监控的实时SSH仪表板
图4:实时成功的SSH会话

现在,您可以关联和汇总其他来源的数据。从Web服务,数据库,防火墙,IDS,HIDS,LDAP / AD服务器,AWS / Azure平台和所有其他来源收集日志。这样,您就可以在整个IT环境中看到信息,并且可以通过关联事件和数据来进行侦察甚至横向移动。狩猎快乐威胁!

上一篇:CentOS610 php环境安装


下一篇:Apache WEB服务器安装