pam模块及linux防暴力破解-------登陆限制

Centos多次登录失败用户被锁定及使用Pam_Tally2解锁

在linux系统中,用户多次登录失败会被锁定,一段时间内将不能再登录系统,这是一般会用到Pam_Tally2进行账户解锁。pam_tally2模块用于某些数对系统进行失败的ssh登录尝试后锁定用户帐户。此模块保留已尝试访问的计数和过多的失败尝试。pam_tally2模块有两个部分,一个是pam_tally2.so,另一个是pam_tally2。它是基于PAM模块上,并且可以被用于检查和调节计数器文件。它可以显示用户登录尝试次数,单独设置计数,解锁所有用户计数。手动解除锁定:
查看某一用户错误登陆次数:
pam_tally --user
例如,查看work用户的错误登陆次数:
pam_tally --user work
清空某一用户错误登陆次数:
pam_tally --user --reset
例如,清空 work 用户的错误登陆次数,
pam_tally --user work –-reset如果使用pam_tally没生效的话,也可以使用pam_tally2命令:pam_tally2 --u tom --reset将用户的计数器重置清零(SLES 11.2和12版本下用此命令才重置成功)查看错误登录次数:pam_tally2 --u tomfaillog -r 命令清空所有用户错误登录次数
在服务器端以root用户登录
执行命令:
# faillog –a 查看用户登录错误次数faillog -u user –r 清空指定用户user的错误登录次数如果超过三次的话,用户不能登录并且此后登录用户错误登录次数还是会增加。在登录错误次数不满三次时,登录成功后,则这个用户登录错误值将清零,退出后重新telnet登录将采用新的计数。其他例子:
Pam_tally2锁定SSH登录默认情况下,pam_tally2模块已经安装在大多数Linux发行版,它是由PAM包本身的控制。本文演示如何锁定和深远的登录尝试的失败一定次数后解锁SSH帐户。如何锁定和解锁用户帐户
使用“/etc/pam.d/password-auth”配置文件来配置的登录尝试的访问。打开此文件并以下AUTH配置行举行的“ 身份验证 ”部分的开头添加到它。auth required pam_tally2.so file=/var/log/tallylog deny=3 even_deny_root unlock_time=1200
接下来,添加以下行“ 账户 ”部分。account required pam_tally2.so
even_deny_root -政策也适用于root用户。
unlock_time = 1200 -帐户将被锁定,直到20分钟 。(如果要永久锁定,直到手动解锁,请删除此参数。)一旦你使用上面的配置完成,现在尽量尝试使用任何“ 用户名 ”3失败的登录尝试到服务器。当你取得了超过3次,你会收到以下消息。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

服务器有公网IP开启ssh,需要做防暴力破解,pam中有个模块可以帮助我们限定用户登录的失败次数,达到指定阈值,锁定用户

 

一:ssh远程登录限制

         a.在/etc/pam.d/sshd文件中添加配置

       #########deny=3 表示尝试登录次数,超过3次后会执行后续动作,单位为秒
                          even_deny_root 对root也开启此限制
                         添加到/etc/pam.d/sshd文件最上方
           head -1 /etc/pam.d/sshd

                 auth required pam_tally2.so deny=3 unlock_time=3600 even_deny_root root_unlock_time=3600                进行测试

          添加新用户vbn

 

           ssh远程登录

 无法登陆:

 

清除用户的锁定信息:
pam_tally2 -u vbn -r

 使用正确密码,登陆成功!!!!

 

二:tty登录限制

  1. 复制代码
    vim /etc/pam.d/login
    加入
    auth required pam_tally2.so deny=3 unlock_time=3600 even_deny_root root_unlock_time=1800
    复制代码

    在#%PAM-1.0的下面,即第二行,添加内容,一定要写在前面,如果写在后面,虽然用户被锁定,但是只要用户输入正确的密码,还是可以登录的!

     @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

    Linux用户登录次数限制、开启连接超时、开启审计日志

    主要为了防止暴力破解用户密码
    1、修改PAM配置
    限制终端方式登录:
    [root@localhost ~]# vim /etc/pam.d/login
    # 添加如下一行:
    auth required pam_tally2.so deny=3 unlock_time=100 even_deny_root root_unlock_time=300

    deny: 设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户
    unlock_time: 设定普通用户锁定后,多少时间后解锁,单位是秒
    root_unlock_time: 设定root用户锁定后,多少时间后解锁,单位是秒

    2、限制ssh方式登录
    [root@localhost ~]# vim /etc/pam.d/sshd
    #添加如下一行
    auth required pam_tally2.so deny=3 unlock_time=100 even_deny_root root_unlock_time=300

    由于openssh版本区别,有些版本在/etc/pam.d/sshd添加是不生效的,需要修改ssh配置文件开启PAM模块
    [root@localhost ~]# vim /etc/ssh/sshd_config
    #修改并取消注释
    UsePAM yes

    重启服务
    systemctl restart sshd.service

    [root@localhost ~]# vim /etc/pam.d/sshd
    #%PAM-1.0
    #添加如下两行
    auth required pam_tally2.so deny=3 unlock_time=100 even_deny_root root_unlock_time=300
    #登录成功后重置次数
    account required pam_tally2.so

    3、PAM命令扩展
    查看用户登录失败的次数:
    pam_tally2 -u root
    解锁aihuidi用户
    pam_tally2 -r -u root

    Linux开启日志审计功能
    将下面这段内容添加在/etc/profile文件末尾,执行source /etc/profile使之生效。

    HISTSIZE=1000
    HISTTIMEFORMAT="%Y/%m/%d %T ";export HISTTIMEFORMAT
    export HISTORY_FILE=/var/log/audit.log
    export PROMPT_COMMAND='{ thisHistID=`history 1|awk "{print \\$1}"`;lastCommand=`history 1| awk "{\\$1=\"\" ;print}"`;user=`id -un`;whoStr=(`who -u am i`);realUser=${whoStr[0]};logMonth=${whoStr[2]};logDay=${whoStr[3]};pid=${whoStr[6]};ip=${whoStr[7]};if [ ${thisHistID}x != ${lastHistID}x ];then echo -E `date "+%Y/%m/%d %H:%M:%S"` $user\($realUser\)@$ip[IP:$pid][LOGIN:$logMonth $logDay] --- $lastCommand ;lastHistID=$thisHistID;fi; } >> $HISTORY_FILE'

    [root@localhost ~]# more /var/log/audit.log
    2021/07/30 08:17:55 root(root)@[IP:(172.16.8.78)][LOGIN:2021-07-30 08:09] --- 2021/07/30 08:17:54 source /etc/profile
    2021/07/30 08:17:55 root(root)@[IP:(172.16.8.78)][LOGIN:2021-07-30 08:09] --- 2021/07/30 08:17:55 ls
    2021/07/30 08:17:56 root(root)@[IP:(172.16.8.78)][LOGIN:2021-07-30 08:09] --- 2021/07/30 08:17:56 pwd


    Linux开启用户无操作90秒自动退出终端
    [root@localhost ~]# echo "TMOUT=90" >> ~/.bashrc
    [root@localhost ~]# source .bashrc
    ## 如果用户90秒内没有进行任何操作那么终端就会自动退出。
    [root@localhost ~]# 等待输入超时:自动登出

  2. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  3. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  4. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  5.  

    一、检查系统密码文件,查看文件修改日期

    # ls -l /etc/passwd
    1
    二、查看 passwd 文件中有哪些特权用户

    # awk -F: '$3==0 {print $1}' /etc/passwd
    1
    三、查看系统里有没有空口令帐户

    # awk -F: 'length($2)==0 {print $1}' /etc/shadow
    1
    四、检查系统守护进程

    # cat /etc/xinetd.conf | grep -v "^#" #这个进程在centos7以上没有了
    1
    五、检查网络连接和监听端口

    # netstat –an
    # netstat –rn
    # ifconfig –a
    1
    2
    3
    六、查看正常情况下登录到本机的所有用户的历史记录

    # last
    1
    七、检查系统中的 core 文件

    # find / -name core -exec ls -l {} \;
    1
    八、检查系统文件完整性

    # rpm -Vf /bin/ls
    # rpm -Vf /usr/sbin/sshd
    # rpm -Vf /sbin/ifconfig
    # rpm -Vf /usr/sbin/lsof

    # md5sum –b 文件名
    # md5sum –t 文件名
    1
    2
    3
    4
    5
    6
    7
    九、查找是否有后门

    # cat /etc/crontab
    # ls /var/spool/cron/ ; crontab -l #查看定时任务是否被修改
    # cat /etc/rc.d/rc.local
    # ls /etc/rc.d
    # ls /etc/rc3.d
    # find / -type f -perm 4000 #查看是否为管理员增加或者修改
    1
    2
    3
    4
    5
    6
    十、查看临时目录是否存在攻击者入侵时留下的残余文件

    #tail -n 100 ~/.bash_history | more

    #是否存在.c .py .sh为后缀的文件或者2进制elf文件
    ls -la /tmp
    ls -la /var/tmp
    find / -name \*.elf | xargs ls -l
    1
    2
    3
    4
    5
    6
    十一、在web目录下运行

    #查看是否有木马
    grep -r "getRuntime" ./

    #运行的时候被连接或者被任何程序调用
    find . -type f -name "*.jsp" | xargs grep -i "getRuntime"

    #返回ip地址字符串
    find . -type f -name "*.jsp" | xargs grep -i "getHostAddress"

    #创建WshShell对象可以运行程序、操作注册表、创建快捷方式、访问系统文件夹、管理环境变量
    find . -type f -name "*.jsp" | xargs grep -i "wscript.shell"

    #gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针
    find . -type f -name "*.jsp" | xargs grep -i "gethostbyname"

    #调用系统命令提权
    find . -type f -name "*.jsp" | xargs grep -i "bash"

    #Jsp木马默认名字
    find . -type f -name "*.jsp" | xargs grep -i "jspspy"

    #检查是否有非授权访问管理日志
    find . -type f -name "*.jsp" | xargs grep -i "getParameter"

    #要进中间件所在日志目录运行命令
    fgrep –R "admin_index.jsp" 20170702.log > log.txt #递归地读取每个目录下的所有文件

    #查看是否出现对应的记录
    fgrep –R "and1=1" *.log > log.txt
    fgrep –R "select " *.log > log.txt
    fgrep –R "union " *.log > log.txt
    fgrep –R "../../" *.log > log.txt
    fgrep –R "Runtime" *.log > log.txt
    fgrep –R "passwd" *.log > log.txt

    #查看是否有shell攻击
    fgrep –R "uname -a" *.log > log.txt
    fgrep –R "id" *.log > log.txt
    fgrep –R "ifconifg" *.log> log.txt
    fgrep –R "ls -l" *.log > log.txt
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    十二、安装chrootkit,检查是否有rootkit
    rootkit是入侵者经常使用的工具,这类工具可以隐秘、令用户不易察觉的建立了一条能够总能够入侵系统或者说对系统进行实时控制的途径。

    yum install -y glibc-static
    mkdir chrootkit
    cd chrootkit/
    wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
    tar zxvf chkrootkit.tar.gz
    cd chkrootkit-0.52/
    make sense #编译
    ./chkrootkit #检测命令,若出现INFECTED那就要小心了(./chkrootkit | grep INFECTED)
    1
    2
    3
    4
    5
    6
    7
    8
    检测脚本,放到定时任务里面即可

    #!/bin/bash
    #sript name:chkrootkit.sh

    TOOLKITSPATH=/usr/local
    MAILUSER=root@localhost
    file_chkrootkit_log=chkrootkitcron.log
    servername=`hostname`
    date=`date +%Y-%m-%d`

    cd ${TOOLKITSPATH}/chkrootkit
    ./chkrootkit > ${file_chkrootkit_log}
    [ ! -z "$(grep INFECTED ${file_chkrootkit_log})" ] && \
    grep INFECTED ${file_chkrootkit_log} | mail -s "[chkrootkit] report in ${servername} ${date}" ${MAILUSER}
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    备注:登录的时候提示信息在 /etc/motd 文件里面

    十三、bash shell 漏洞
    1、测试代码,有问题的

    [root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
    vulnerable
    this is a test
    1
    2
    3
    2、修复(下面是参考网上的东西,不知道效果怎么样)

    [root@localhost ~]# yum -y install yum-downloadonly
    [root@localhost ~]# yum -y install bash-4.1.2-33.el6_7.1.x86_64.rpm
    1
    2
    3、重新测试

    [root@localhost ~]# env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
    this is a test

    #备注
    当我们输入 env x='() { :;}; echo vulnerable'; bash -c "echo this is a test" 又可以出来不一样的效果
    1
    2
    3
    4
    5
    十四、完成后做了如下措施

    修改了root账号密码
    修改了sshd默认端口
    修改Nginx用户nologin
    发现系统服务器存在bash严重漏洞、破壳漏洞(Shellshock)并修复
    ————————————————

 

posted @ 2023-06-21 11:19  往事已成昨天  阅读(3477)  评论(0编辑  收藏  举报