0x00、前言
暴力破解攻击是公有云最常见的攻击方式,根据某公有云统计数据发现,暴力破解占主机威胁数据的56%以上。平均到每个月大约有250万次之多,与此同时,再对比统计暴力破解成功的事件量,平均每月2500次,暴力破解成功率在0.1%。如果以主机为维度统计,暴力破解成功率就明显的提高了,大约在11%。
通过上述数据分析,在公有云环境中,威胁检测产品需要对暴力破解攻击有足够的技术识别与防范。
然后,我们再从攻击者的角度分析:分别从国家和城市两个维度分析,我们发现黑客暴力破解基础设施大部分分布在中国(44%)、美国(20%)和荷兰(7%)。
城市分布:绍兴(10.1%)、纽约(8.8%)、阿姆斯特丹(5.6%)、北京(5.6%)等。
所以,我们在防护的时候,可以重点考虑地理分布。
0x01、如何检测
最原始的解决方案:在云主机上部署Denyhosts,DenyHosts是一个python写的脚本,常用来限制SSH登陆,通过监控系统日志,将超过错误次数的IP放入TCP Wrappers中禁止登陆。
优点:快速解决问题。缺点:无法做集中管理,无数据积累,无法做深度分析。
其次使用公有云提供的主机安全解决方案:目前公有云上比较流行的传统的检测方法是:通过主机安全Agent统计连接频率(可自定义频率,例如:1分钟内连接10次),冻结连接IP一段时间缓解(可自定义冻结时间,例如:10分钟)。
优点:有集中管理,有数据积累。缺点:为啥还有暴力破解成功的案例存在?
再高级点的使用机器学习的方法识别SSH暴力破解,那么为什么还需要使用机器学习统计方法来识别呢?我们发现,很多暴力破解成功的云主机都没有触发规则式的暴力破解检测,而是通过爆破程序检测出其设置的频率规则,慢速暴力破解攻击成功,这种破解大约累积到5000次以上,被破解成功率就能达到10%。
优点:有效的解决了规则带来的漏洞,缺点:目前检出率不是很高,大约在90%左右,还需要配合规则检测。
那么如何通过机器学习的方式来识别低频慢速暴力破解呢?
解决方案:多元高斯异常检测模。使用多元高斯模型可以使我们的算法自动捕获不同特征变量之间的相关性(正相关或者负相关),在组合不正常时将其标识为异常。
@1、数据源选择
可以通过外部网络连接(五元组),也可以选择收集登陆日志,但是为了更好的获得多维数据,建议还是从五元组开始建立每个用户外部连接状态(针对SSH端口的连接计数)
@2、建立登陆行为模型
2.1、高斯分布(正态分布)
异常检测的训练样本都是非异常样本,我们假设这些样本的特征服从高斯分布,在此基础上估计出一个概率模型,从而用该模型估计待测样本属于非异常样本的可能性。
高斯分布包含两个模型参数:均值,方差
2.2、多元高斯分布
训练集用来训练模型 p(x) ,验证集用来选择合适的错误临界点 ε (我们判断 p(x) < ε 时为异常数据),并通过计算查准率、召回率。
0x02、如何防范
1、修改SSH服务默认端口
2、基线检测,通过分析整理CIS level 3有关OpenSSH服务安全检测项,做主机加固。
检测规则 | 规则详情 |
---|---|
检查SSH协议是否设置为2 | /etc/ssh/sshd_config文件中Protocol应设置为:2 |
检查SSH日志级别是否设置为INFO | /etc/ssh/sshd_config文件中LogLevel应设置为:INFO |
检查SSH访问是否受限制 | /etc/ssh/sshd_config文件中应存以下其中之一: AllowUsers <userlist> AllowGroups <grouplist> DenyUsers <userlist> DenyGroups <grouplist> |
检查SSH的LoginGraceTime是否设置为小于等于一分钟 | /etc/ssh/sshd_config文件中LoginGraceTime应设置为:小于等于60 |
检查SSH的PermitUserEnvironment是否禁用 | /etc/ssh/sshd_config文件中PermitUserEnvironment应设置为:no |
检查 SSH X11 是否禁用 | /etc/ssh/sshd_config文件中X11Forwarding 应设置为:no |
检查SSH的PermitEmptyPasswords是否禁用 | /etc/ssh/sshd_config文件中PermitEmptyPasswords应设置为:no |
检查是否仅使用已批准的MAC算法 | /etc/ssh/sshd_config文件中应存在:MACs hmac-sha2-512,hmac-sha2-256 |
检查SSH的root登录是否禁用 | /etc/ssh/sshd_config文件中PermitRootLogin应设置为:no |
检查 /etc/ssh/sshd_config 权限是否配置 | /etc/ssh/sshd_config 文件的权限应为:600,所属用户应为:root,所属用户组应为:root |
检查是否只使用了已批准的密码 | /etc/ssh/sshd_config文件中应存在:Ciphers aes256-ctr,aes192-ctr,aes128-ctr |
检查SSH的IgnoreRhosts是否启用 | /etc/ssh/sshd_config文件中IgnoreRhosts应设置为:yes |
检查SSH的HostbasedAuthentication是否禁用 | /etc/ssh/sshd_config文件中HostbasedAuthentication应设置为:no |
检查SSH空闲超时间隔是否设置 | /etc/ssh/sshd_config文件中ClientAliveInterval应设置为:小于等于300,ClientAliveCountMax应设置为:小于等于3 |