蛮力攻击(英语:Brute-force attack),又称为穷举攻击(英语:Exhaustive attack)或暴力破解,是一种密码分析的方法,即将密码进行逐个推算直到找出真正的密码为止。例如:一个已知是四位数并且全部由阿拉伯数字组成的密码,其可能共有10000种组合,因此最多尝试9999次就能找到正确的密码。理论上除了具有完善保密性的密码以外,利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。有些人运用计算机来增加效率,有些人透过字典攻击来缩小密码组合的范围。
wiki百科:https://zh.wikipedia.org/wiki/%E8%9B%AE%E5%8A%9B%E6%94%BB%E5%87%BB
打个比方:你家有一个密码锁防盗门,由0~9数字构成了6位密码。密码锁在没有设置登录失败次数的情况下,小偷可以通过反复通过密码碰撞尝试,最终总会有一次碰到真正的密码,成功打开门锁。
原因1:矿马入侵
公有云服务器因为创造灵活,配置灵活等特点,常被黑灰产用为挖矿的洼地。而因为近几年数字货币价值持续走高,让公有云挖矿成为公有云上不可被忽视的安全问题。
推荐云鼎实验室的一篇公有云挖矿态势文章
《云上挖矿大数据:黑客钟爱门罗币》:
公有云矿马入侵的两种常见方式:(1)远程登录暴力破解 (2)组件版本漏洞入侵
原因2:恶意渗透
因为公有云服务器可能存在有价值的信息,如数据库数据,机密文件等。或存在恶性商业竞争,会有攻击人员有针对性地攻击,而暴力破解攻击就是其中一种常见的攻击手段。
云CVM防止被爆破攻击,两步预防:
1.限制安全组登录IP为固定IP:https://cloud.tencent.com/developer/article/1739874
2.设置登录方式为密钥登录:https://cloud.tencent.com/developer/article/1046002
如果每个公有云用户在新建一台cvm的时候,都可以做到以下三点,至少可以杜绝云上95%以上的挖矿木马攻击,勒索病毒攻击:
(1)安全组进行合理配置,限制远程登录IP为固定IP。
(2)设置登录方式为密钥登录。
(3)对cvm上所用到的所有系统组件,应用组件及时更新最新版。
但这个世界就是这样,并不是有了医生就消灭了病患,有了富裕就消灭了贫穷。
依然长期存在因安全配置不当服务器被暴破入侵的情况。思考一下,如何找到暴破攻击者的IP呢?
因此,写了一个对暴力破解攻击IP模糊定位的工具,给它命名:Brutehunter(暴破猎人)
Brutehunter 工具链接:https://github.com/Haixuwan/Brutehunter
讲工具怎么用前,先告诉大家几个点:
2.Brutehunter适用什么场景?
(1) 公有云挖矿木马源攻击IP溯源
(2) 暴破攻击IP定位
3.使用方法:(本文暂不阐述工具逻辑,待后文分享,先教大家怎么用)
第一步:下载启动(筛选高可疑暴破源IP)
git clone https://github.com/Haixuwan/Brutehunter cd Brutehunter chmod 777 brutehunter.sh ./brutehunter.sh
三个关键路径:
登录失败IP列表:/tmp/brutehunter/report/ip/F_ip.txt 登录成功IP列表:/tmp/brutehunter/report/ip/S_ip.txt 通过暴力破解入侵高可疑IP地址:/tmp/brutehunter/report/ip/risk_ip.txt
第二步:同自身服务器登录白名单IP比较
Brutehunter筛选出的高可疑地址,同服务器常用登录的白名单IP对比,剩下IP地址的就是可疑的暴破IP了,可进行下一步溯源。
长板:1.全量暴破IP筛选,不会遗漏IP。
短板:1.Brutehunter是基于既有登录失败又有登录成功的IP逻辑进行筛选,经白名单IP对比后的剩下IP只能是高可疑IP,必须再进行一步人工确认和溯源,但足够筛选人工溯源定位工作量。
附上源码:
# author:Haixuwan # update 2021.03.12 #!/bin/bash echo " ------------------------------------------------------------------------------------------------------------------------------------ ██████╗ ██████╗ ██╗ ██╗████████╗███████╗ ██╗ ██╗██╗ ██╗███╗ ██╗████████╗███████╗██████╗ ██╔══██╗██╔══██╗██║ ██║╚══██╔══╝██╔════╝ ██║ ██║██║ ██║████╗ ██║╚══██╔══╝██╔════╝██╔══██╗ ██████╔╝██████╔╝██║ ██║ ██║ █████╗ ███████║██║ ██║██╔██╗ ██║ ██║ █████╗ ██████╔╝ ██╔══██╗██╔══██╗██║ ██║ ██║ ██╔══╝ ██╔══██║██║ ██║██║╚██╗██║ ██║ ██╔══╝ ██╔══██╗ ██████╔╝██║ ██║╚██████╔╝ ██║ ███████╗ ██║ ██║╚██████╔╝██║ ╚████║ ██║ ███████╗██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ ╚══════╝╚═╝ ╚═╝ Brutehunter V1.0 Author:Haixuwan ------------------------------------------------------------------------------------------------------------------------------------ 溯源报告: /tmp/brutehunter/report 溯源高可疑IP地址路径: /tmp/brutehunter/report/ip ------------------------------------------------------------------------------------------------------------------------------------ 以下文件不存在: " # 创建报告文件夹: /tmp/brutehunter/report/ip function mkfile(){ mkdir /tmp/brutehunter/ >/dev/null 2>&1 mkdir /tmp/brutehunter/report >/dev/null 2>&1 mkdir /tmp/brutehunter/report/ip >/dev/null 2>&1 chmod +x ./tmp/brutehunter >/dev/null 2>&1 chmod +x ./tmp/brutehunter/report >/dev/null 2>&1 chmod +x ./tmp/brutehunter/report/ip >/dev/null 2>&1 dir="/tmp/brutehunter/report/ip" } # Flogin_ip() 筛选登录失败IP地址: function Flogin_ip(){ #(1)登录日志模糊审计: /var/log/*secure* # /var/log/*auth* # 适用CentOS:(egrep '[0-9]+\.'过滤掉字段,只保留含有数字和.的数据) grep "Failed " /var/log/*secure*|awk '{print $13}'|egrep '[0-9]+\.'|sort -u > /tmp/brutehunter/report/ip/F_secure_login_ip.txt # 查找登录失败的IP地址,将IP列表导为F-slogin_ip.txt(这里IP地址不够全): # 适用于Ubuntu:(ubuntu主机访问日志路径/var/log/auth.log,这里IP地址) grep "fail" /var/log/*auth*|awk '{print $10}'|sort -u > /tmp/brutehunter/report/ip/F_auth_login_ip.txt # 查找登录失败的IP地址,将IP列表导为F-slogin_ip.txt(这里IP地址不够全): #(2)lastb查看全部登录失败用户的IP地址: /var/log/btmp lastb|awk '{print $3}'|egrep '([0-9]+\.)'|sort -u > /tmp/brutehunter/report/ip/F_btmp_login_ip.txt # 全部用户登录失败的IP地址,存为/report/ip/F-aulogin_ip.txt(全部爆破失败的IP地址,这里的IP地址比较全,可以参考为爆破失败的IP地址) #(3)审计messages事件日志(从syslog中记录信息): /var/log/*messa* grep "Access denied" /var/log/*messa*|awk '{print $13}'|awk -F'@' '{print $NF}'|sed "s|'||g"|egrep '[0-9]+\.'|sort -u > /tmp/brutehunter/report/ip/F_messages_login_ip.txt # messages事件日志登录失败日志 #(4)审计audit.log系统存储日志项: /var/log/*audit* grep "fail" /var/log/audit/*audi*|awk '{print $11}'|egrep '[0-9]+\.'|sed 's/addr=//g'|sed 's/hostname=//g'|sort -u > /tmp/brutehunter/report/ip/F_audit_login_ip.txt # audit系统存储日志中登录失败的IP地址 } # Slogin_ip() 筛选登录成功的IP地址: function Slogin_ip(){ #(1)当前登录日志模糊审计: /var/log/*secure* # /var/log/*auth* # 适用于CentOS:(redhat类linux系统主机访问日志路径/var/log/secure,这里取IP地址) grep "Accept" /var/log/*secure*|awk '{print $11}'|sort -u > /tmp/brutehunter/report/ip/S_secure_login_ip.txt # 查找登录成功的用户IP,将该IP列表导出为S_login_ip.txt # 适用于Ubuntu:(ubuntu主机访问日志路径/var/log/auth.log,这里IP地址) grep "Accept" /var/log/*auth*|awk '{print $11}'|sort -u > /tmp/brutehunter/report/ip/S_auth_login_ip.txt # 查找登录成功的用户IP,将该IP列表导出为S_auth_ip.txt #(2)登录用户日志审计记录: /var/log/wtmp # 查找当前登录用户记录IP地址,将IP列表导出为S_culogin_ip.txt(当前用户的历史登录IP,登录成功的): who /var/log/*wtmp*|awk '{print $5}'|sort -u > /tmp/brutehunter/report/ip/S_currentuser_login_ip.txt sed -i "s/(//g" /tmp/brutehunter/report/ip/S_currentuser_login_ip.txt #删除S_culogin_ip.txt中的( sed -i "s/)//g" /tmp/brutehunter/report/ip/S_currentuser_login_ip.txt #删除S_culogin_ip.txt中的) #(3)审计audit.log系统存储日志项: /var/log/*audit* grep "success" /var/log/audit/*audi*|awk '{print $11}'|egrep '[0-9]+\.'|sed 's/addr=//g'|sed 's/hostname=//g'|sort -u > /tmp/brutehunter/report/ip/S_audit_login_ip.txt # audit系统存储日志中登录成功的IP地址 #(4)用户最后一次登录成功IP地址: last|awk '{print $3}'|egrep '([0-9]+\.)'|sort -u > /tmp/brutehunter/report/ip/S_lastlog_ip.txt } # Combine_ip(): 筛选的ip地址整合 function Combine_ip(){ #(1)将所有登录失败IP地址整合为F_ip.txt cd /tmp/brutehunter/report/ip/ echo " ------------------------------------------------------------------------------------------------------------------------------------ 暴力破解结果 " echo " 登录失败IP地址个数:(路径:/tmp/brutehunter/report/ip/F_ip.txt)" cat F_secure_login_ip.txt F_auth_login_ip.txt F_btmp_login_ip.txt F_messages_login_ip.txt F_audit_login_ip.txt|sort -u > F_ip.txt # 将四个失败登录IP地址文件汇总,去重,取登录失败IP地址合计总数 cat F_ip.txt|wc -l #(2)将所有登录成功IP地址整合为S_ip.txt echo " 登录成功IP地址个数:(路径:/tmp/brutehunter/report/ip/S_ip.txt)" cat S_secure_login_ip.txt S_auth_login_ip.txt S_currentuser_login_ip.txt S_audit_login_ip.txt S_lastlog_ip.txt|sort -u> S_ip.txt # 将四个失败登录IP地址文件汇总,去重,取登录成功IP地址合计总数 cat S_ip.txt|wc -l #(3)将登录成功IP和失败IP匹配高可以登录地址 cat F_ip.txt S_ip.txt|sort|uniq -d > risk_ip.txt # 取登录成功IP和登录失败IP集合交集 echo " 经暴力破解入侵的高可疑IP地址个数:" cat risk_ip.txt|wc -l # 显示成功入侵IP地址个数 echo " 经暴力破解入侵的高可疑IP地址:(路径:/tmp/brutehunter/report/ip/risk_ip.txt)" cat risk_ip.txt } # 登录最早时间线溯源Time_ip(): function Time_ip(){ ip=$(cat $dir/risk_ip.txt) echo " ------------------------------------------------------------------------------------------------------------------------------------ 日志记录信息:" for line in $ip do grep $line /var/log/*secure*|echo "$f" >> $dir/$line.txt grep $line /var/log/*auth* >> $dir/$line.txt who|grep $line >> $dir/$line.txt #grep $line /var/log/audit/*audi* >> $dir/$line.txt >/dev/null 2>&1 last|grep $line >> $dir/$line.txt done } # 登录操作行为分析 #function Action_ip(){ #} mkfile Flogin_ip Slogin_ip Combine_ip Time_ip
欢迎大家给我的github项目点赞~
持续更新好用的,有意思的工具。
近期大家对这个比较感兴趣,下期分享
...
人们仍然存在的一个误解是,只有大企业才能负担得起采用大数据驱动的解决方案的...
PHP 8.1 正在开发中,首个 Alpha 版本计划 6 月发布,11 月正式 GA。 via https:...
一般情况下,不同帐号的裸金属服务器内网是不通的,这也是一种安全隔离措施。 但...
公司介绍 深圳赛盒科技有限公司(IrobotBox)是一家以高科技创意为核心的技术服...
G口服务器是配置带宽超过1G的服务器,服务器的网卡必须是在千M以上。G口服务器比...
我们何其幸运!这个世界上竟然还有几乎完全支持FP编程的流行语言,这种语言就是St...
自使用Java十五年后,我写第一本Kotlin书到现在已经快五年了。 我们的团队没有遵...
有什么 云服务器 是按时计费的吗?有的。 云服务器 ,是一种简单高效、处理能力...
本文转载自微信公众号Python编程时光(Cool-Python)。 1. 警告不是异常 你是不...