任务
尝试配置ssh登录云服务器对ssh有了一定的认识,ssh暴力破解:进攻篇的目的也是为了更好的理解如何防御。相对于提升安全系数,这里是更为积极的防御措施,主动分析攻击IP并加入黑名单,并结合自己的攻击实现实战演示。
识别攻击IP【1】
查看日志
无效用户名
cat /var/log/secure | grep 'Invalid' | awk '{print $10 "\t" $8}' | sort
- cat /var/log/secure 显示日志文件secure,包括登录信息
- grep ‘Invalid’ 将包含关键词’Invalid’的登录信息筛选出,是无效的用户名
- awk ‘{print $10 “\t” $8}’ 只打印这一行中第10个与第8个字串,分别是登录IP地址与尝试登录名
- sort 排序
上面是尝试攻击我的云服务器的地址,只是用户名无效部分。
登录失败
cat /var/log/secure | grep 'failure' | awk '{print $14 "\t" $15 }' | sort
上面是所有尝试登录失败的记录,包括自己输错密码也会记录下来。此外还有其他尝试用root进行攻击的IP。
所有失败
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'| sort
- awk ‘/Failed/{print $(NF-3)}’
- /Failed/ 匹配文本中包括Failed的行,与grep ‘Failed’的作用相同
- NF-3,NF为一行中的最后一列,-3即最后向前推3个,为倒数第4个;同理有FS为从前数,当然也可以不加FS,直接用$1代表第一列
统计攻击次数
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > ipblacklist.txt
- uniq -c 去重统计每一行出现次数
- sort -bn 倒序排列次数打印结果
- awk ‘{print $2″=”$1;}’ 排好序的输出结果如下图所示,这里就是将ip提到前面,次数放在后面
- > ipblacklist.txt 重定向输出到文件中保存结果
脚本加黑名单【2】
vim /usr/local/bin/secure_ssh.sh
编辑内容如下:
#! /bin/bash
cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c|awk '{print $2"="$1;}' > /usr/local/bin/black.txt
for i in `cat /usr/local/bin/black.txt`
do
IP=`echo $i |awk -F= '{print $1}'`
NUM=`echo $i|awk -F= '{print $2}'`
if [ $NUM -gt 5 ];then
grep $IP /etc/hosts.deny > /dev/null
if [ $? -gt 0 ];then
echo "sshd:$IP:deny" >> /etc/hosts.deny
fi
fi
done
- awk -F= ‘{print $1}’
- -F=以=为分隔符
- grep $IP /etc/hosts.deny > /dev/null
- grep的函数功能Exit status is 0 if any line is selected, 1 otherwise;
- if [ $? -gt 0 ]
- $? 获取函数返回值或者上一个命令的退出状态
- 则如果文件中没有出现命中列入黑名单规则的IP,就继续将IP加入deny规则
- /etc/hosts.deny【3】
- 用来配置使用TCP Wrappers 服务的访问控制
- sshd即是说明sshd的端口控制
实战效果
在通过将自己的服务器做为靶机实施攻击后【4】,通过上述方法追踪并进行控制。攻击后,自己也成功上榜。
执行脚本
. /usr/local/bin/secure_ssh.sh
查看黑名单统计数据black.txt
cat /usr/local/bin/black.txt
查看访问控制文件hosts.deny
cat /usr/local/bin/black.txt
无法攻击
注释掉自己
可以重新暴力破解成功