Linux系统

 
简单整理一下 Linux 下的安全加固、痕迹清理、应急响应
 

安全加固

 

用户安全

 
设置口令生存期
 
vim /etc/login/defs
 

 

PASS_MAX_DAYS  //密码最长有效期
PASS_MIN_DAYS  //密码修改之间最小的天数
PASS_MIN_LEN   //密码最小长度
PASS_WARN_AGE  //口令失效前多少天开始通知用户修改密码

 
一键修改脚本
 

read -p  "设置密码最多可多少天不修改:" A
read -p  "设置密码修改之间最小的天数:" B
read -p  "设置密码最短的长度:" C
read -p  "设置密码失效前多少天通知用户:" D
sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS   '$A'' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS   '$B'' /etc/login.defs
sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN     '$C'' /etc/login.defs
sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE   '$D'' /etc/login.defs
echo "已设置好密码策略......"

 

设置口令复杂度
 

vim /etc/pam.d/system-auth
 

将 password requisite  pam_cracklib.so 改为 password requisite  pam_cracklib.so retry=3 difok=2 minlen=8 lcredit=-1 dcredit=-1

 

difok:本次密码与上次密码至少不同字符数
minlen:密码最小长度,此配置优先于login.defs中的PASS_MAX_DAYS
ucredit:最少大写字母
lcredit:最少小写字母
dcredit:最少数字
retry:重试多少次后返回密码修改错误

 
登录失败策略
 
vim /etc/pam.d/sshd
 

在下面编辑

auth required pam_tally2.so deny=3 unlock_time=150 even_deny_root root_unlock_time300

 

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

 
禁止 root 用户远程登录
 

vim /etc/ssh/sshd_config

 

 
设置为 no 即可
 

访问控制

 
删除多余的账户
 

userdel user  //删除账户
userdel -r user //删除的同时且删除家目录

 
锁定不必要的账户
 

passwd -l user

 

awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd  //查看具有登录权限的用户
awk -F: '($3==0)' /etc/passwd  //查看UID为0的账户,UID为0的用户会自动切换到root用户,所以危害很大
awk -F: '($2=="")' /etc/shadow //查看空口令账号

 
脚本管理
 

echo "系统中有登录权限的用户有:"
awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
echo "********************************************"
echo "系统中UID=0的用户有:"
awk -F: '($3=="0"){print $1}' /etc/passwd
echo "********************************************"
N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
echo "系统中空密码用户有:$N"
if [ $N -eq 0 ];then
 echo "恭喜你,系统中无空密码用户!!"
 echo "********************************************"
else
 i=1
 while [ $N -gt 0 ]
 do
    None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
    echo "------------------------"
    echo $None
    echo "必须为空用户设置密码!!"
    passwd $None
    let N--
 done
 M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
 if [ $M -eq 0 ];then
  echo "恭喜,系统中已经没有空密码用户了!"
 else
echo "系统中还存在空密码用户:$M"
 fi
fi

安全审计

 
开启审核策略
 

service rsyslog status

service auditd status

systemctl start auditd

 
有点多不想在总结了
 

痕迹清理

 

清除历史命令

 

1. history -r //退出前执行

2. history -c //清除当前用户命令记录

3. vim打开

:set history=0
:!command

4. 修改配置文件 /etc/profile

HISTSIZE=0

5. .

unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null; export HISTSIZE=0; export HISTFILESIZE=0

 

清除系统日志痕迹

 
日志文件
 

/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信息
/var/log/cron 与定时任务相关的日志信息
/var/log/spooler 与UUCP和news设备相关的日志信息
/var/log/boot.log 守护进程启动和停止相关的日志消息
/var/log/btmp – 记录所有失败登录信息  命令:lastb
/var/log/auth.log 系统授权信息,包括用户登录和使用的权限机制等 (debian)
/var/log/lastlog 记录系统中所有用户最后一次登录时间的日志,使用lastlog命令查看
/var/log/wtmp    记录所有用户的登录、注销信息,使用last命令查看
/var/log/utmp    记录当前已经登录的用户信息,使用w,who,users等命令查看

 
清空日志文件
 

echo > /var/log/xxx

 
删除/替换ip
 

删除
sed -i '/ip/'d  /var/log/xx
替换
sed -i 's/ip/127.0.0.1/g' /var/log/xxx

清除web入侵痕迹

 

替换
sed -i 's/ip/127.0.0.1/g' access.log
清除
cat /var/log/nginx/access.log | grep -v evil.php > tmp.log
cat tmp.log > /var/log/nginx/access.log/

 

使用安全文件删除工具

 
shred
 

shred -f -u -z -v -n 8 1.txt  //指定覆盖8次

 
dd可用于安全地清除硬盘或者分区的内容
 

dd if=/dev/zero of=要删除的文件 bs=大小 count=写入的次数

 
wipe 使用特殊的模式来重复地写文件,从磁性介质中安全擦除文件。
 

wipe filename

 

隐藏远程登录SSH登记记录

 
隐身登录系统,不会被w、who、last等指令检测到。
 

ssh -T root@192.168.0.1 /bin/bash -i

 
不记录ssh公钥在本地.ssh目录中

ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash –i

 

应急响应

 

入侵排查

 

账号排查

 

1、查询特权用户特权用户(uid 为0)
awk -F: '$3==0{print $1}' /etc/passwd
2、查询可以远程登录的帐号信息
awk '/\$1|\$6/{print $1}' /etc/shadow
3、除root帐号外,其他帐号是否存在sudo权限。如非管理需要,普通帐号应删除sudo权限
more /etc/sudoers | grep -v "^#\|^$" | grep "ALL=(ALL)"
4、禁用或删除多余及可疑的帐号
    usermod -L user    禁用帐号,帐号无法登录,/etc/shadow第二栏为!开头
    userdel user       删除user用户
    userdel -r user    将删除user用户,并且将/home目录下的user目录一并删除

 

历史命令

 

cat .bash_history

 

检查异常端口

 

netstat -antlp|more
查看下pid所对应的进程文件路径
运行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 为对应的pid 号)

 

检查异常进程

 

ps aux | grep pid

 

检测自启项

 

启动项文件:
    more /etc/rc.local
    /etc/rc.d/rc[0~6].d
    ls -l /etc/rc.d/rc3.d/

 

检测定时任务

 

crontab -l

 
排查目录
 

    /var/spool/cron/* 
    /etc/crontab
    /etc/cron.d/*
    /etc/cron.daily/* 
    /etc/cron.hourly/* 
    /etc/cron.monthly/*
    /etc/cron.weekly/
    /etc/anacrontab
    /var/spool/anacron/*

 

检查异常文件

 

1、查看敏感目录,如/tmp目录下的文件,同时注意隐藏文件夹,以“..”为名的文件夹具有隐藏属性
2、得到发现WEBSHELL、远控木马的创建时间,如何找出同一时间范围内创建的文件?
可以使用find命令来查找,如 find /opt -iname "*" -atime 1 -type f  找出 /opt 下一天前访问过的文件
3.针对可疑文件可以使用stat进行创建修改时间

 

检查系统日志

 
一开始很多的发行版用的是 /var/log/secure 但是最近最新的用的是 rsyslog,两者存放日志不一样(因此后面的查询命令有两条)
 

1、定位有多少IP在爆破主机的root帐号

grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

定位有哪些IP在爆破:

grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

grep "Failed password" /var/log/auth.log|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c

爆破用户名字典是什么?

 grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
 
  grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
  
2.登录成功的IP有哪些

grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more

grep "Accepted " /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more


登录成功的日期、用户名、IP:

grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'

grep "Accepted " /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}'

3.查看是否有添加/删除用户

grep "useradd" /var/log/secure

userdel 

grep "useradd" /var/log/auth.log

 

应急响应工具

 
Webshell查杀工具
 
还有最近新出来的应急响应工具whohk
 
 

参考资料

 
https://github.com/heikanet/whohk

https://mp.weixin.qq.com/s/i2WvFmF1qQjbx-BaStXb1Q

https://www.cnblogs.com/anbuxuan/p/11837007.html

https://www.cnblogs.com/17bdw/p/11354141.html

posted @ 2020-09-22 17:38  Zahad003  阅读(344)  评论(0编辑  收藏  举报