当前位置 : 主页 > 操作系统 > centos >

运维安全应该怎么做?

来源:互联网 收集:自由互联 发布时间:2022-06-20
运维安全中的攻与防博弈,如何第一时间预警,这是我们为企业提供的第一道安全防线,建设安全体系建立统一安全管理平台,是我们为企业打造一个安全可靠的平台的唯一途径。随着

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

1、如何安全防范

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

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

2、常规安全检查

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

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命令查看进程

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

检查隐藏进程[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 mismatchL – readLink path mismatchU – user ownership differsG – group ownership differsT – 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

3、Linux系统安全响应思路

常见的中毒表现在以下几个方面:1)服务器出方向的带宽大这是僵尸网络主机的一个特征。因为服务器中招后常见的就是拿去当肉鸡;再者就是拿你的数据等。所以服务器带宽方面需要特别注意下,如果服务器出去的带宽很大,服务器或网络肯定有些异常,需要及时检查一下!

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

3)开机是否启动一些不明服务和crond任务里是否有一些异常任务?因为中毒会随系统的启动而启动的,所以一般会开机启动,检查一下启动的服务或者文件是否有异常,一般会在 /etc/rc.local 和crondtab -l 显示出来。1运行 ps 和 top 命令,查找占用资源大的进程。2查看这些陌生程序所在路径,ls /proc/ 进程号 /exe ,然后再次 kill 掉进程。3接着用 strace 命令跟踪这些陌生程序:strace /bin/XX1.调试命令strace -p pid2.跟踪指定进程的PIDgdb -p pid4)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 dropped4 ICMP packets dropped because they were out-of-window13852408 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.157、源端口8081且与nethogs监控数据一致,说明确实本机已建立socket连接向外发送数据包。

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

4、安全建议

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

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

上一篇:Nginx安装与负载均衡配置
下一篇:没有了
网友评论