监控、审计和运行时安全
监控、审计和运行时安全
目录
[toc]
1、分析容器系统调用:Sysdig
Sysdig介绍
Sysdig:一个非常强大的系统监控、分析和故障排查工具。
汇聚 strace+tcpdump+htop+iftop+lsof
工具功能于一身!
sysdig 除了能获取系统资源利用率、进程、网络连接、系统调用等信息,
只支持本机运行。
还具备了很强的分析能力,例如:
- 按照CPU使用率对进程排序
- 按照数据包对进程排序
- 打开最多的文件描述符进程
- 查看进程打开了哪些文件
- 查看进程的HTTP请求报文
- 查看机器上容器列表及资源使用情况
哪台机器有问题,就在哪台机器上装。
sysdig常用参数
•-l,--list:列出可用于过滤和输出的字段•-M<num_seconds>:多少秒后停止收集例如:sysdig-M3-p"user:%user.name time:%evt.time proc_name:%proc.name"•-p<output_format>,--print=<output_format>:指定打印事件时使用的格式•使用-pc或-pcontainer容器友好的格式•使用-pk或-pkubernetesk8s友好的格式•-c<chiselname><chiselargs>:指定内置工具,可直接完成具体的数据聚合、分析工作•-w<filename>:保存到文件中案例:sysdig-M3-p"user:%user.name time:%evt.time proc_name:%proc.name"-wa.sysdig•-r<filename>:从文件中读取
sysdig常用命令
案例:sysdig命令
执行sysdig命令,实时输出大量系统调用。示例:5950923:59:19.0230995310kubelet(1738) <epoll_ctl格式:%evt.num%evt.outputtime%evt.cpu%proc.name(%thread.tid) %evt.dir %evt.type %evt.info•evt.num:递增的事件号•evt.time:事件发生的时间•evt.cpu:事件被捕获时所在的CPU,也就是系统调用是在哪个CPU执行的•proc.name:生成事件的进程名字•thread.tid:线程的id,如果是单线程的程序,这也是进程的pid•evt.dir:事件的方向(direction),>代表进入事件,<代表退出事件•evt.type:事件的名称,比如open、stat等,一般是系统调用•evt.args:事件的参数。如果是系统调用,这些对应着系统调用的参数自定义格式输出:sysdig-p"user:%user.name time:%evt.time proc_name:%proc.name"
输入sysdig
后,就会显示好多log信息的,表示当前系统上哪些进程在进行系统调用。
==案例:自定义格式输出==
自定义格式输出:sysdig-p"user:%user.name time:%evt.time proc_name:%proc.name"
==sysdig过滤==
sysdig过滤:•fd:根据文件描述符过滤,比如fd标号(fd.num)、fd名字(fd.name)•process:根据进程信息过滤,比如进程id(proc.id)、进程名(proc.name)•evt:根据事件信息过滤,比如事件编号、事件名•user:根据用户信息过滤,比如用户id、用户名、用户home目录•syslog:根据系统日志过滤,比如日志的严重程度、日志的内容•container:根据容器信息过滤,比如容器ID、容器名称、容器镜像查看完整过滤器列表:sysdig-l
示例
示例:1、查看一个进程的系统调用sysdigproc.name=kubelet2、查看建立TCP连接的事件sysdigevt.type=accept3、查看/etc目录下打开的文件描述符sysdigfd.namecontains/etc4、查看容器的系统调用sysdig-M10container.name=web注:还支持运算操作符,=、!=、>=、>、<、<=、contains、in 、exists、and、or、not
[root@k8s-master1 ~]#docker run -d --name=webnginxsysdig-M10container.name=web[root@k8s-master1 image-policy]#curl 172.17.0.2 #访问容器ip
Chisels(实用的工具箱)
Chisels:实用的工具箱,一组预定义的功能集合,用来分析特定的场景。sysdig–cl列出所有Chisels,以下是一些常用的:•topprocs_cpu:输出按照CPU使用率排序的进程列表,例如sysdig-c•topprocs_net:输出进程使用网络TOP•topprocs_file:进程读写磁盘文件TOP•topfiles_bytes:读写磁盘文件TOP•netstat:列出网络的连接情况
sysdig -c topprocs_cpu
sysdig -c topprocs_net
sysdig -c topprocs_files
sysdig -c topfiles_bytes
sysdig -c netstat
其它命令
网络:# 查看使用网络的进程TOPsysdig-ctopprocs_net# 查看建立连接的端口sysdig-cfdcount_byfd.sport"evt.type=accept"-M10# 查看建立连接的端口sysdig-cfdbytes_byfd.sport# 查看建立连接的IPsysdig-cfdcount_byfd.cip"evt.type=accept"-M10# 查看建立连接的IPsysdig-cfdbytes_byfd.cip硬盘:# 查看进程磁盘I/O读写sysdig-ctopprocs_file# 查看进程打开的文件描述符数量sysdig-cfdcount_byproc.name"fd.type=file"-M10# 查看读写磁盘文件sysdig-ctopfiles_bytessysdig-ctopfiles_bytesproc.name=etcd# 查看/tmp目录读写磁盘活动文件sysdig-cfdbytes_byfd.filename"fd.directory=/tmp/"CPU:# 查看CPU使用率TOPsysdig-ctopprocs_cpu# 查看容器CPU使用率TOPsysdig-pc-ctopprocs_cpucontainer.name=websysdig-pc-ctopprocs_cpucontainer.id=web容器:# 查看机器上容器列表及资源使用情况csysdig–vcontainers# 查看容器资源使用TOPsysdig-ctopcontainers_cpu/topcontainers_net/topcontainers_file其他常用命令:sysdig-cnetstatsysdig-cpssysdig-clsof#查看所有打开的文件描述符
# 查看建立连接的端口sysdig-cfdcount_byfd.sport"evt.type=accept"-M10
# 查看建立连接的IPsysdig-cfdcount_byfd.cip"evt.type=accept"-M10
# 查看进程打开的文件描述符数量sysdig-cfdcount_byproc.name"fd.type=file"-M10
# 查看容器CPU使用率TOPsysdig-pc-ctopprocs_cpucontainer.name=websysdig-pc-ctopprocs_cpucontainer.id=web
# 查看容器资源使用TOPsysdig-ctopcontainers_cpu/topcontainers_net/topcontainers_file
csysdig#图形化查看 (比top多了FILE和NET2列,其它没啥变化。)# 查看机器上容器列表及资源使用情况csysdig–vcontainers
容器命令我这里有报错哎:。。。
sysdig-clsof#查看所有打开的文件描述符
2、监控容器运行时:Falco
Falco介绍
Falco 是一个 Linux 安全工具,它使用系统调用来保护和监控系统。
Falco最初是由Sysdig开发的,后来加入CNCF孵化器,成为首个加入CNCF的运行时安全项目。
Falco提供了一组默认规则,可以监控内核态的异常行为,例如:
- 对于系统目录/etc,/usr/bin,/usr/sbin的读写行为
- 文件所有权、访问权限的变更
- 从容器打开shell会话
- 容器生成新进程
- 特权容器启动
falco配置文件目录:/etc/falco
- falco.yaml falco配置与输出告警通知方式
- falco_rules.yaml 规则文件,默认已经定义很多威胁场景
- falco_rules.local.yaml 自定义扩展规则文件
- k8s_audit_rules.yaml K8s审计日志规则