您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    审计 Linux 系统的操作行为的 5 种方案比照
    时间:2020-11-20 12:01 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    审计 Linux 系统的操作行为的 5 种方案比照

    很多时分我们为了安全审计或许缺点跟踪排错,能够会记载剖析主机系统的操作行为。比如在系统中新增了一个用户,修正了一个文件名,或许执行了一些命令等等,实际上记载的越详细, 越有利于审计和排错的目的。不过过剩的记载也会为剖析带来不少费事, 尤其是将很多主机的记载行为发送到固定的远程主机中,数据越多,剖析的成本便越大。

    实践上,绝大少数的系统行为都是重复多余的,比如 cron 义务方案,我们信任的顺序等, 这些都会产生少量的记载,但很少用于审计剖析。基于这个需求,我们在审计系统操作行为的时分,至少应该添加一些过滤规则,避免记载过多的无用信息,比如重复的 cron 义务操作,同时也要避免记载一些敏感信息,比如带密码的命令行操作。满足这些需求后,我们在审计系统操作行为的时分应该遵照以下准绳:

    疏忽 cron,daemon 产生的记载;

    疏忽带密码的敏感命令行或脚本操作记载;

    疏忽监控用户(比如 nagios,zabbix,promethus 等)产生的记载;

    疏忽频繁产生日志的操作行为;

    第二点为可选项,在以明文方式传输到远程日志效劳器的时分,我们建议疏忽记载。第四点则需求着重强调,比如我们记载一台 web 主机中的一切 connect,accept 网络系统调用操作,虽然可以据此剖析该主机一切的网络拜访央求,到达安全或许缺点定位的目的,但是这两个系统调用能够在短时间内产生少量的日志,对 kernel 和网络日志传输都会产生不小的压力,这种易如反掌似的审计方式我们不引荐直接在线上主机中运用,建议仅在需求定位成绩的时分启用。

    下面我们主要引见有哪几种方式可以完成系统操作的审计:

    history 记载方式

    定制 bash 记载方式

    snoopy 记载方式

    auditd 记载方式

    eBPF 记载方式

    history 记载方式

    history 方式 很传统也很复杂,本质上是将历史的命令发送到 syslog 日志中,可以用来复杂记载用户的命令操作历史。但是这种方式有几个重要的缺陷,并不适宜审计的目的:

    容易被修正,被绕过;

    记载太复杂,没有上下文信息(比如 pid, uid, sid 等);

    无法记载 shell 脚本内的操作;

    无法记载非登录的操作;

    难以完成过滤规则;

    定制 bash 记载方式

    定制 bash 方式 比较冷门,本质上是为 bash 源顺序添加审计日志的功用,开发者可以据此添加一些操作命令的上下文信息,不过很难记载子进程的信息,其缺陷和上述的 history 方式相似:

    容易被绕过,用户可以运用 csh,zsh 等;

    无法记载 shell 脚本内的操作;

    过滤规则能够单一;

    能够需求不停的更新 bash 版本,任务量大,否则容易被发行版交流 ;

    snoopy 记载方式

    snoopy 方式相对新颖,本质上是封装了 execv,execve 系统调用,以系统预加载(preload)的方式完成记载一切的命令操作。更多引见可以参考以前的文章 snoopy 如何记载系统执行过的命令。目前大部分系统执行命令时都经过 execv,execve 系统调用执行,这点就和会话有关,简直一切的状况下,只需经过这两个系统调用执行命令,就会将操作行为记载上去,从目前的最新版本(2.4.8)来看,snoopy 有几个优点:

    难以绕过,只需设置了 PRELOAD,就一定会记载;

    无论能否存在 tty 会话,都会记载 execv,execve 相关的命令行操作,包含详细的进程上下文信息;

    可以记载 shell 脚本外部的操作行为,脚本内的命令行操作大部分都会调用 execv,execve;

    可以记载操作行为的参数, 比如指定了用户名,密码等;

    过滤规则丰厚,可以疏忽指定 daemon,uid,也可以仅记载指定的 uid;

    如下日志示例:

    Oct 27 11:34:31 cz-t1 snoopy[24814]: [time_ms:778 login:cz uid:0 pid:24814 ppid:24676 sid:24579 tty:/dev/pts/0 cwd:/root filename:/bin/uptime username:root]: uptime -p 

    上述日志显示 root 用户执行了 uptime 命令,参数包含 -p 对应的进程上下文信息都比较全,不过 snoopy 的缺陷也比较清楚,主要包含以下几点:

    仅支持 execv,execve 相关系统调用的操作;

    不设置规则能够产生的日志过多,对日志搜集系统形成很大的担负;

    暂不支持过滤敏感信息规则;

    在实践的运用中,snoopy 记载方式可以很详细的记载一切的命令操作信息,协助我们定位很多疑问成绩。不过我们也需求经过过滤规则来避免产生过多的信息,snoopy 的过滤规则可以满足以下需求:

    疏忽 cron,daemon 产生的记载;

    疏忽监控用户(比如 nagios,zabbix,promethus 等) 产生的记载;

    比如以下配置,即可疏忽 crond,my-daemon 守护进程,疏忽 zabbix 用户:

    # zabbix uid 为 992 

     

    filter_chain = exclude_uid:992;exclude_spawns_of:crond,my-daemon 

    备注:过滤规则在(filtering.c - snoopy_filtering_check_chain)函数完成,由 log.c - snoopy_log_syscall_exec 函数调用,过滤规则为预先行为,即在打印日志的时分判别能否满足过滤规则,并非事前行为。

    另外,我们在 snoopy 的基础上添加了 exclude_comm 过滤规则,我们可以疏忽记载指定的命令,比如以下:

    filter_chain = exclude_uid:992;exclude_comm:mysql,mongo,redis-cli 

    (责任编辑:admin)