服务器安全篇之五【入侵检测】
设计者:普金
服务器安全全篇含:
服务器安全篇之一【网络安全】
服务器安全篇之二【ssh安全】
服务器安全篇之三【系统安全】
服务器安全篇之四【数据库灾备与恢复】
服务器安全篇之五【入侵检测】
服务器安全篇之六【入侵处理】
一 摘要
前面讲了防御与安全,但是俗话说,没有钻不透的钢板,没有攻不破的城墙,放在我们IT行业同样适用,没有攻不破的网络,没有绝对的信息安全。软件开发行业里有个名词,叫“千行代码缺陷率”,意思是一千行代码中的漏洞率。绝大部分软件公司的每一千行代码就有可能存在一个漏洞。那么,可以想象一下,我们身边存在多少漏洞?我们最常使用的Windows操作系统的代码量是5000万行左右,安卓系统大概是1200万行,其中的漏洞可想而知。
安全做的再好,也抵不住长期的0day、DDOS攻击,风险还是会有的,这一章就是讲我们如何分析我们是否被入侵以及是怎样被入侵的。
入侵检测技术是一种利用入侵者留下的痕迹等信息,来有效地发现来自外部或内部的非法入侵的技术。它以探测与控制为技术本质,起着主动防御的作用,是网络安全中极其重要的部分。
二 入侵检测分析
入侵的目的
入侵的最终目的是获取到服务器的管理权限,然后为所欲为的服务器上做一些非法操作和破坏
入侵检测工作原理
入侵检测可分为实时入侵检测和事后入侵检测两种。实时入侵检测是在网络连接过程中进行,系统根据用户的历史行为模型、存储在计算机中的专家知识以及神经网络模型,对用户当前的操作进行判断,一旦发现入侵迹象,立即断开入侵者与主机的连接,并收集证据和实施数据恢复。这个检测过程是不断循环进行的。而事后入侵检测是由运维人员进行,根据计算机系统对用户操作所做的历史审计记录,判断用户是否具有入侵行为,如果有就断开连接, 并记录入侵证据和进行数据恢复事后入侵检测是管理员定期或不定期进行的,不具有实时性,因此防御入侵的能力不如实时入侵检测系统。
入侵检测流程
监控异常--- 检测异常 --- 排查问题 -- 处理异常 -- 总结
三 入侵检测方案
针对入实时侵检测我们得先部署实时监控系统,如Zabbix,监控到异常后通知运维人员进行查看检测是否被入侵,检测方式分为手动检测和自动分析检测以及入侵检测系统,可结合一起使用 快速定位。
方法一:手动分析检测
a) 查看失败登录次数
使用ssh登录成功后,会弹出一条信息距离上次成功登录有多少此失败的登录,次数过多说明存在被攻击的情况需要注意或采取一定的措施
b) 使用top命令检测
使用top命令留意可疑进程(需要经验),留意CPU使用率和服务器负载,如有异常可直接看出问题
c) 查看审计日志
当你开启审计日志之后,你指定的一些特殊的操作将会被记录下来,然后通过报表查看
sudo aureport -x –summary
sudo aureport –failed
d) 检查账户
less /etc/passwd
grep :0: /etc/passwd (检查是否产生了新用户,和UID、GID是0的用户)
ls -l /etc/passwd (查看文件修改日期)
awk -F: ‘$3= =0 {print $1}’ /etc/passwd(查看是否存在特权用户)
awk -F: ‘length($2)= =0 {print $1}’ /etc/shadow(查看是否存在空口令帐户)
e) 检查日志
journalctl 显示所有日志
journalctl -n 10 查看最后10条日志
journalctl -f 跟踪日志,让日志动态输出
journalctl -p err…alert 只显示冲突、告警和错误
journalctl -u nginx.service 显示某个单元日志 可同时显示多个添加多个 -u nginx.service -u php-fom.service)
journalctl --since “20 min ago” 查找20分钟前的日志
journalctl --since today 查找今天的日志
journalctl --until 2020-03-04 查找2020-03-04日期的日志
journalctl --until 2020-02-30 | nl > 1.txt 查找2020-02-30之前的所有日志并导出到指定文件
journalctl -k 查看内核日志
journalctl _UID=1000 查找指定用户(UID)日志
systemctl list-unit-files 查看系统所有服务
netstat -tlunp 查看所有开启的端口
last(查看正常情况下登录到本机的所有用户的历史记录)
注意”entered promiscuous mode”
注意错误信息
注意Remote Procedure Call (rpc) programs with a log entry that includes a large number (20) strange characters(-PM-PM-PM-PM-PM-PM-PM-PM)
f) 检查进程
ps -aux (注意UID是0的)
lsof -p pid (察看该进程所打开端口和文件)
cat /etc/inetd.conf | grep -v “^#” (检查守护进程)
检查隐藏进程
ps -ef|awk ‘{print }’|sort -n|uniq 1
ls /proc |sort -n|uniq 2
diff 1 2
g) 检查文件
find / -uid 0 –perm -4000 –print
find / -size +10000k –print
find / -name “…” –print
find / -name “… ” –print
find / -name “. ” –print
find / -name ” ” –print
注意SUID文件,可疑大于10M和空格文件
find / -name core -exec ls -l {} ; (检查系统中的core文件)
检查系统文件完整性
rpm –qf /bin/ls
rpm -qf /bin/login
md5sum –b 文件名
md5sum –t 文件名
h) 检查RPM
rpm -Va
输出格式:
S – File size differs
M – Mode differs (permissions)
5 – MD5 sum differs
D – Device number mismatch
L – readLink path mismatch
U – user ownership differs
G – group ownership differs
T – modification time differs
注意相关的 /sbin, /bin, /usr/sbin, and /usr/bin
i) 检查网络
ip link | grep PROMISC (正常网卡不该在promisc模式,可能存在sniffer)
lsof –i
netstat –nap (察看不正常打开的TCP/UDP端口)
arp –a
j) 检查计划任务 注意root和UID是0的schedule
crontab –u root –l
cat /etc/crontab
ls /etc/cron.*
k) 检查后门
cat /etc/crontab
ls /var/spool/cron/
cat /etc/rc.d/rc.local
ls /etc/rc.d
ls /etc/rc3.d
find / -type f -perm 4000
l) 检查系统服务列表
systemctl list-unit-files
m) 账号文件
/etc/passwd ##用户信息
/etc/shadow ##用户密码信息
/etc/profile ##系统配置文件,环境变量等信息
/home/用户/.bash_profile ##用户独有环境配置文件
/etc/rc.local ##用户自定义开