认识暴力破解攻击 brute-force attack:
蛮力攻击(英语:Brute-force attack),又称为穷举攻击(英语:Exhaustive attack)或暴力破解,是一种密码分析的方法,即将密码进行逐个推算直到找出真正的密码为止。例如:一个已知是四位数并且全部由阿拉伯数字组成的密码,其可能共有10000种组合,因此最多尝试9999次就能找到正确的密码。理论上除了具有完善保密性的密码以外,利用这种方法可以破解任何一种密码,问题只在于如何缩短试误时间。有些人运用计算机来增加效率,有些人透过字典攻击来缩小密码组合的范围。
wiki百科:https://zh.wikipedia.org/wiki/蛮力攻击
打个比方:你家有一个密码锁防盗门,由0~9数字构成了6位密码。密码锁在没有设置登录失败次数的情况下,小偷可以通过反复通过密码碰撞尝试,最终总会有一次碰到真正的密码,成功打开门锁。
我们作为公有云用户,为什么会被暴破?别人暴破我们干嘛?
原因1:矿马入侵
公有云服务器因为创造灵活,配置灵活等特点,常被黑灰产用为挖矿的洼地。而因为近几年数字货币价值持续走高,让公有云挖矿成为公有云上不可被忽视的安全问题。
推荐云鼎实验室的一篇公有云挖矿态势文章
《云上挖矿大数据:黑客钟爱门罗币》:
https://cloud.tencent.com/developer/article/1384449?from=information.detail.云挖矿
公有云矿马入侵的两种常见方式:(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上所用到的所有系统组件,应用组件及时更新最新版。
代码语言:javascript复制但这个世界就是这样,并不是有了医生就消灭了病患,有了富裕就消灭了贫穷。
依然长期存在因安全配置不当服务器被暴破入侵的情况。思考一下,如何找到暴破攻击者的IP呢?
怎么找到暴破IP?
因此,写了一个对暴力破解攻击IP模糊定位的工具,给它命名:Brutehunter(暴破猎人)
Brutehunter 工具链接:https://github.com/Haixuwan/Brutehunter
讲工具怎么用前,先告诉大家几个点:
1.Brutehunter解决什么问题?
2.Brutehunter适用什么场景?
(1) 公有云挖矿木马源攻击IP溯源
(2) 暴破攻击IP定位
3.使用方法:(本文暂不阐述工具逻辑,待后文分享,先教大家怎么用)
第一步:下载启动(筛选高可疑暴破源IP)
代码语言:javascript复制git clone https://github.com/Haixuwan/Brutehunter
cd Brutehunter
chmod 777 brutehunter.sh
./brutehunter.sh
三个关键路径:
代码语言:javascript复制登录失败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了,可进行下一步溯源。
Brutehunter长短板
长板:1.全量暴破IP筛选,不会遗漏IP。
短板:1.Brutehunter是基于既有登录失败又有登录成功的IP逻辑进行筛选,经白名单IP对比后的剩下IP只能是高可疑IP,必须再进行一步人工确认和溯源,但已足够减少人工溯源定位工作量。
附上源码:
代码语言:javascript复制# 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项目点赞~
持续更新好用的,有意思的工具。
近期大家对这个比较感兴趣,下期分享