使用shell脚本查看用户登录失败记录

简介

日志文件可以收集系统状态以及攻击者的详细信息。假设我们有一个能够通过SSH连接到Internet的系统。很多攻击者试图登入这个系统。我们需要设计一个入侵检测系统来识别登录失败的那些用户。出现这种行为的用户可能是采用字典攻击的骇客。这样的脚本应该生成包含以下细节信息的报告:
❏ 登录失败的用户;
❏ 尝试登录的次数;
❏ 攻击者的IP地址;
❏ IP地址所对应的主机名;
❏ 登录行为发生的时间。

编写脚本

我们可以编写一个shell脚本,对日志文件进行扫描并从中采集所需要的信息。登录细节都记录在/var/log/auth.log或/var/log/secure中。脚本从日志文件中找出失败的登录记录并进行分析。host命令可以用来将IP地址映射为主机名。

检测脚本如下:

#!/bin/bash
#Filename: intruder_detect.sh
#Description: Intruder reporting tool with auth.log input
AUTHLOG=/var/log/auth.log

if [[ -n $1 ]];
then
  AUTHLOG=$1
  echo Using Log file : $AUTHLOG
fi

# Collect the failed login attempts
LOG=/tmp/failed.$$.log
grep "Failed pass" $AUTHLOG > $LOG

# extract the users who failed
users=$(cat $LOG | awk '{ print $(NF-5) }' | sort | uniq)

# extract the IP Addresses of failed attempts
ip_list="$(egrep -o "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" $LOG | sort | uniq)"


printf "%-10s|%-3s|%-16s|%-33s|%s\n" "User" "Attempts" "IP address"\ "Host" "Time range"

# Loop through IPs and Users who failed.

for ip in $ip_list;
do
  for user in $users;
    do
    # Count attempts by this user from this IP

    attempts=`grep $ip $LOG | grep " $user " | wc -l`

    if [ $attempts -ne 0 ] 
    then
      first_time=`grep $ip $LOG | grep " $user " | head -1 | cut -c-16`
      time="$first_time"
      if [ $attempts -gt 1 ] 
      then
        last_time=`grep $ip $LOG | grep " $user " | tail -1 | cut -c-16`
        time="$first_time -> $last_time"
      fi
      HOST=$(host $ip 8.8.8.8 | tail -1 | awk '{ print $NF }' )
      printf "%-10s|%-3s|%-16s|%-33s|%-s\n" "$user" "$attempts" "$ip"\ "$HOST" "$time";
    fi
  done
done

rm $LOG

脚本解析

脚本intruder_detect.sh默认使用/var/log/auth.log作为输入。另外也可以用命令行参数来提供指定的日志文件。失败的登录记录被收集并存入临时文件中,以减少处理量。如果登录失败,SSH会记录类似于下面的日志信息:
在这里插入图片描述
脚本会利用grep命令找出含有字符串Failed passw的行,然后将其入/tmp/failed.$$.log中。

下一步是提取出登录失败的用户。awk命令提取出倒数第5个字段(用户名),通过管道将其传给sort和uniq,生成一个用户列表。

接下来,利用正则表达式和egrep命令提取出不重复的IP地址。嵌套的for循环对所有的IP地址及用户名进行迭代,提取出每个IP地址与用户名的组合。如果某个IP/User(IP/用户名)组合尝试登录的次数大于0,使用grep、head和cut命令提取出第一次登录的时间。

如果尝试登录的次数大于1,则使用tail提取出最后一次登录的时间。尝试登录的详细信息通过printf命令进行格式化并输出。

最后,删除用到的临时文件。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值