运维安全应该怎么作?

运维安全中的攻与防博弈,如何第一时间预警,这是咱们为企业提供的第一道安全防线,建设安全体系创建统一安全管理平台,是咱们为企业打造一个安全可靠的平台的惟一途径。随着互联网的兴起,众多业务部署在互联网上,时刻都面临着威胁与考验。专业的和自动化的恶意破坏,企业老是后知后觉,没法作到有效的预警和响应,致使企业数据被窃取或服务中断。在平常运维工做中,对linux服务器进行安全检查是一个很是重要的环节。因为安全意识不高或者没有规范的安全约束致使生产环境中招被植入恶意程序的安全事件频频发生。那么咱们必定要有一良好的安全习惯才能为企业打造一个安全可靠稳定的生产环境。linux

一、如何安全防范

   首先要有安全规范的配置约束,系统文件如何配置,应该有什么样的权限,应该放置什么位置,应该什么用户使用,都要有明确的边界与要求。最基本的要有linux系统安全基线(以前博客中讲到过安全基线能够自行查阅)
   网络环境流量策略要明确、要有业务、数据、运维安全域、全部流量权限控制要精确,生产区域的流量必定不要放行出方向流量避免僵尸网络的产生致使服务器瘫痪、必要的状况要配置、IDS\IPS,FW\WAF。常见问题应对,通常常见问题如网络层的ddos,可使用隐藏ip技术,或购买流量清洗。
   主机系统要统一化配置、命名规范、目录统1、版本统1、有能力的状况下部署安全防御系统,安装主机IDS。主机配置要作变动限制、变动启用报警、文件防篡改、登陆安全认证,用户密码设置复杂按期更改知足等保要求。远程登陆要严格控制可使用堡垒机访问。可疑文件及时检查、无用文件及时清理不给恶意破坏程序留有余地,有用文件及时进归档、重要文件及时备份。审计安全日志不可缺乏或增强历史命令的详细定义。
运维安全应该怎么作?
运维应具有病毒查杀、登陆审计、密码破解、恶意请求、高危命令、本地提权、反弹Shell多维度的侦查,能够快速的发现对企业服务器的扫描行为,及时预警解决。主机安全漏洞也要按期升级、增强内网安全,部署安全补丁服务器或YUM源服务器。
   应用软件须要作上线前安全评估后方能上线,没有作过代码安全检测的软件直接上生产环境都是在耍流氓,生产环境将面临风险与挑战,WEB安全更是不容忽视的,再强的安全防御也怕代码级的漏洞,业务漏洞影响更是严重,升级整改很是重要。有能力的企业能够定制开发安全网关。像跨站,xss,sql注入等应用层漏洞,须要开发对业务代码漏洞修复,须要有安全编码规范,和使用代码检测工具作安全检测,展现平台类应用注意防篡改,被挂马,权限合理管理分配,增强内部技术人员安全意识。
   数据安全应该是安全级别最高的,数据存储须要作安全域隔离,针对平台作通讯加密以及数据落地加密存储(数据加密可选,如今这么多法律法规出来,尤为我的信息,数据安全,出现漏洞致使数据泄露,将会给公司带来大损失,好比监管机构查和罚款,股票波动,声誉损失,客户流失。redis

  • 简单的安全防御体系:
    1. 主机层:防病毒、hids、基线加固、漏洞扫描
    2. 数据安全:加解密、数据库审计
    3. 应用层:waf、风控、ids
    4. 网络层:nids、防火墙
      ***:外网访问公司内部网,或者不一样区域间专网
      堡垒机:生产环境访问必须堡垒机,权限控制,审计等。
      运维安全应该怎么作?

二、常规安全检查

1)检查系统日志
检查系统错误登录日志,统计IP重试次数(last命令是查看系统登录日志,好比系统被reboot或登录状况)
[root@localhost ~] # lastsql

2)检查系统用户
查看是否有异常的系统用户
[root@localhost ~] # cat /etc/passwd数据库

查看是否产生了新用户,UID和GID为0的用户
[root@localhost ~] # grep "0" /etc/passwd安全

查看 passwd 的修改时间,判断是否在不知的状况下添加用户
[root@localhost ~] # ls -l /etc/passwd服务器

查看是否存在特权用户
[root@localhost ~] # awk -F: '$3==0 {print $1}' /etc/passwd网络

查看是否存在空口令账户
[root@localhost ~] # awk -F: 'length($2)==0 {print $1}' /etc/shadow运维

3)检查异常进程
注意UID为0的进程
使用 ps -ef命令查看进程socket

查看该进程所打开的端口和文件
[root@localhost ~] # lsof -p pid命令查看xss

检查隐藏进程
[root@localhost ~] # ps -ef | awk '{print }' | sort -n | uniq >1
[root@localhost ~] # ls /proc |sort -n|uniq >2
[root@localhost ~] # diff 1 2
隐藏进程检查工具unhide取证工具经过对全部可用的TCP/IP端口进行暴力求解的方式,辨别全部正在监听,却没有列入/bin/netstat或者/bin/ss命令输出的TCP/IP端口身份。

4)检查异常系统文件
[root@localhost ~] # find / -uid 0 -perm -4000 -print
[root@localhost ~] # find / -size +10000k -print
[root@localhost ~] # find / -name "…" -print
[root@localhost ~] # find / -name ".." -print
[root@localhost ~] # find / -name "." -print
[root@localhost ~] # find / -name " " -print

5)检查系统文件完整性
[root@localhost ~] # rpm -qf /bin/ls
[root@localhost ~] # rpm -qf /bin/login
[root@localhost ~] # md5sum -b 文件名
[root@localhost ~] # md5sum -t 文件名

6)检查RPM的完整性
[root@localhost ~] # rpm -Va #注意相关的/sbin,/bin,/usr/sbin,/usr/bin
输出格式说明:
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

7)检查网络
[root@localhost ~] # ip link | grep PROMISC(正常网卡不应在promisc模式,可能存在sniffer)
[root@localhost ~] # lsof -i
[root@localhost ~] # netstat -nap(察看不正常打开的TCP/UDP端口)
[root@localhost ~] # arp -a

8)检查系统计划任务
[root@localhost ~] # crontab -u root -l
[root@localhost ~] # cat /etc/crontab
[root@localhost ~] # ls /etc/cron.*

9)检查系统后门
[root@localhost ~] # cat /etc/crontab
[root@localhost ~] # ls /var/spool/cron/
[root@localhost ~] # cat /etc/rc.d/rc.local
[root@localhost ~] # ls /etc/rc.d
[root@localhost ~] # ls /etc/rc3.d

10)检查系统服务
[root@localhost ~] # chkconfig --list 【Centos6】
[root@localhost ~] #systemctl list-unit-files 【Centos7】
[root@localhost ~] # rpcinfo -p(查看RPC服务)

11)检查rootkit
[root@localhost ~] # rkhunter -c
[root@localhost ~] # chkrootkit -q

12)检查应用访问日志的IP来源
awk '{count[$1]++}END{for (ip in count) {printf "%-20s:%d\n",ip,count[ip]}}' access_log

三、Linux系统安全响应思路

常见的中毒表如今如下三个方面:
1)服务器出方向的带宽大这是僵尸网络主机的一个特征。
由于服务器中招后常见的就是拿去当肉鸡;再者就是拿你的数据等。因此服务器带宽方面须要特别注意下,若是服务器出去的带宽很大,服务器或网络确定有些异常,须要及时检查一下!

2)系统里是否存在多余的不明的用户?
中毒以后会致使系统里产生一些不明用户或者登录日志,因此这方面的检查也是能够看出一些异常的。

3)开机是否启动一些不明服务和crond任务里是否有一些异常任务?
由于中毒会随系统的启动而启动的,因此通常会开机启动,检查一下启动的服务或者文件是否有异常,通常会在 /etc/rc.local 和crondtab -l 显示出来。
1)运行 ps 和 top 命令,查找占用资源大的进程。
2)查看这些陌生程序所在路径,ls /proc/ 进程号 /exe ,而后再次 kill 掉进程。
3)接着用 strace 命令跟踪这些陌生程序:strace /bin/XX
1.调试命令
strace -p pid
2.跟踪指定进程的PID
gdb -p pid
4)netstat 检查网络链接状况,检查主机对外的网络链接,查找来源。
netstat -nta |awk '{print $5}' |cut -d: -f1 |sort|uniq -c |sort -n

netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"\t",state[key]}'

[root@localhost tmp]# netstat -s | grep -E 'overflow|drop'
16 outgoing packets dropped
4 ICMP packets dropped because they were out-of-window
13852408 SYNs to LISTEN sockets dropped
从上面看出全链接队列溢出的次数,隔几秒钟执行下,这个数字还在增长确定全链接队列偶尔满了。
运维安全应该怎么作?
Recv-Q Send-Q分别表示网络接收队列,发送队列。Q是Queue的缩写。
这两个值一般应该为0,若是不为0多是有问题的。packets在两个队列里都不该该有堆积状态。可接受短暂的非0状况。短暂的Send-Q队列发送pakets非0是正常状态。
若是接收队列Recv-Q一直处于阻塞状态,多是遭受了拒绝服务 denial-of-service。
若是发送队列Send-Q不能很快的清零,多是有应用向外发送数据包过快,或者是对方接收数据包不够快。
Recv-Q:表示收到的数据已经在本地接收缓冲,可是还有多少没有被进程取走,recv()
Send-Q:对方没有收到的数据或者说没有Ack的,仍是本地缓冲区.
下面是我在生产环境中的部分排查步骤:
查杀软件显示本机没有感染文件:
运维安全应该怎么作?
安全防御软件有时会显示警告有异常流量:
运维安全应该怎么作?

使用nethogs命令查看网络进程使用流量状况,发现异常流量:

运维安全应该怎么作?
可疑IP溯源分析:
运维安全应该怎么作?
目的地址变化可能在往外发包尝试扫描动做。并且源端口使用了80、8080等端口来隐藏进程本身的身份。由此能够判断它就是隐藏在此服务器上。使用tcpdump -nn -vvv -i ens192 src 172.XX.XX.157 and port 8081 查看,发现确实有流量向外发出,源IP172.XX.XX.15七、源端口8081且与nethogs监控数据一致,说明确实本机已创建socket链接向外发送数据包。

再次尝试查找:ccrontab –e没有发现,咱们经过cat /etc/crontab再次查看计划任务发现了两个异常任务:
运维安全应该怎么作?
查看文件内容:经过查询已经得知它的名字是WatchBogMiner变种挖矿程序。
运维安全应该怎么作?
再次删除tmp下的文件,发现redis2和kdevtmpfsi这两个文件不能删除chattr 命令取消权限,将其删除。
运维安全应该怎么作?
问题排查主要卡在了隐藏进程没法进一步定位分析,只要解决了隐藏进程就好排查了。问题延伸: 能够安装unhide查看隐藏进程,小试牛刀有但愿了。
运维安全应该怎么作?
[root@localhost ~] # awk -F":" '{if($3 == 0) print $1}' /etc/passwd
root
结果发现只输入了root这一个用户,说明系统用户是正常的。
其实,当系统被感染rootkit后,系统已经变得不可靠了,惟一的办法就是重装系统了。

四、安全建议

1. 主动修复应用代码级漏洞。
2. 创建监控系统观察异常流量的动向。
3. 主机防御要作好,容器安全权限增强也要作好。
4. 网络防御,不要轻意对外映射与业务无关的端口。
5. 联动安全平台,监控流量、主动查杀、主动防御。

参考安全图谱全景
运维安全应该怎么作?

相关文章
相关标签/搜索