简单整理一下 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/cPASS_MAX_DAYS '$A'' /etc/login.defs
sed -i '/^PASS_MIN_DAYS/cPASS_MIN_DAYS '$B'' /etc/login.defs
sed -i '/^PASS_MIN_LEN/cPASS_MIN_LEN '$C'' /etc/login.defs
sed -i '/^PASS_WARN_AGE/cPASS_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
";}'|uniq -c|sort -nr
grep "Failed password" /var/log/auth.log|perl -e 'while($_=<>){ /for(.*?) from/; print "$1
";}'|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