zoukankan      html  css  js  c++  java
  • 【转】webshell检测——使用auditd进行system调用审计

    本文档将介绍:如何通过Linux审计系统auditd监测WebShell执行系统命令的行为。

    测试环境:CentOS7.0_x64

    auditd简介

    Linux审计系统提供了一种跟踪系统上与安全相关的信息的方法。基于预先配置的规则,审核生成日志条目以记录尽可能多的关于系统上发生的事件信息。

    auditd(或auditd守护进程)是Linux系统中重要的内核审计组件,其负责将审计记录写入磁盘。使用auditd可以实现如下场景的审计监控:

    • 监控文件访问

    • 监控系统调用

    • 记录用户命令执行

    • 记录安全事件

    • 执行审计搜索

    • 统计概要报表

    • 监控网络访问

    Linux审计系统架构如下图所示:

    jinglingshu_2017-10-11_13-43-071

    通常我们使用auditctl用来查看和控制auditd的审计行为,获取审计日志,添加或删除审计规则。如果你希望审计配置在系统重启后仍然有效,请通过系统文件/etc/audit/audit.rules进行持久化配置。

    配置auditd实现进程审计监控

    以root身份执行如下命令,可实现对执行系统命令这一个SYSCALL行为的监控审计。

    # auditctl -D # 用于测试,清除已有规则

    # auditctl -a always,exit -F arch=b64 -S execve -k rule01_exec_command

    上述命令在系统审计规则中增加了一条命令执行监控规则,并且定义规则名为rule01_exec_command。

    查看auditd的日志文件/var/log/audit/audit.log,可以看到该配置命令本身也产生了日志:

    jinglingshu_2017-10-11_13-43-07

    其中1506925689.197为审计日志的时间戳,对应2017/10/214:28:09698444为日志消息ID。

    完成上述配置后,我们就可以对操作系统命令执行进行有效审计啦!

    WebShell执行系统命令的监测

    1

    部署和执行WebShell

    在网站目录/opt/www/php/部署WebShell程序shell.php,访问地址为https://example.com/shell.php。模拟黑客向该WebShell程序发起一次请求,执行系统命令:cat /etc/passwd。WebShell成功之行命令后,返回结果如下图所示:

    jinglingshu_2017-10-11_13-43-07

    2

    查看和分析auditd审计日志

    执行命令tail -f /var/log/audit/audit.log,同步查看auditd审计日志。有两组msg日志,消息id分别是:698520和698521。我们重点分析698520,先看日志内容:

    jinglingshu_2017-10-11_13-43-081

    上述5条消息同属于一组日志,来自规则rule01_exec_command,类型分别是:SYSCALL、EXECVE、CWD、PATH、PATH。其中,前三条日志有极高的价值。

    • type=SYSCALL:日志规则“rule01_exec_command”被触发,uid=996的用户,通过父进程ppid=18259,调用/usr/bin/bash,执行了命令sh,进程pid=13545。

    • type=SYSCALLtype=EXECVE都能看到执行的程序名称和参数

    • type=CWD则说明了,命令执行所在的目录cwd=”/opt/www/php”

    请注意EXECVE中出现的十六进制字符串a2=636174202F6574632F706173737764,实际为命令执行的参数。很可能,审计系统为了尽快完成日志记录,未对字符串进行翻译。将其转换后,对应的ASCII字符串是:cat /etc/passwd

    jinglingshu_2017-10-11_13-43-08

    第二组日志如下,主要是针对命令cat /etc/passwd的审计。基本逻辑如上,不再赘述。

    jinglingshu_2017-10-11_13-43-072

    3

    深入分析进程及文件关系

    查看当前操作系统中Web系统nginx、php-fpm相关的进程信息,如下:

    jinglingshu_2017-10-11_13-43-09

    注意,php-fpm: pool www就是执行WebShell命令的工作进程!

    结合Web日志的内容和时间信息,我们很容易定位到WebShell的路径为操作系统文件/var/www/php/shell.php

    jinglingshu_2017-10-11_13-43-091

    4

    梳理小结

    经过对auditd日志分析,并结合操作系统进程信息、Nginx日志,可对本次WebShell执行系统命令的行为进行回溯,细节如下:

    http://example.com/shell.php?cmd=cat /etc/passwd该Url触发了Nginx服务器对php-fpm的调用。对应的文件在Web目录/opt/www/php

    WebShell执行系统命令过程中的进程调用关系如下:

    jinglingshu_2017-10-11_13-43-082

    总结&思考

    至此,我们完成了基于auditd实现的WebShell执行系统命令的审计监控,希望对大家有帮助。当然,本文只是针对某个技术点应用的概念验证,如果你希望将其产品化实现,可能还需要考虑如下问题:

    • 实时收集操作系统进程和进程PID等信息

    • 主动识别Web进程和Web目录信息

    • 对audit.log日志文件进行采集,发送到远程服务器进行收集

    • 采集和关联分析Web访问日志

    • 部署自研或第三方日志管理系统对进程信息进行分析

    • 深入学习和理解auditd的运行机制和参数配置

    • 合理配置auditd的运行参数,准确评估审计功能对系统性能的影响

    • Windows平台是否有同样的检测机制?

    基于auditd的审计信息对于关键任务环境来说是至关重要的,可以用于确定安全策略的违反和审计用户操作行为。审计本身不会为您的系统提供额外的安全性;但它可以用于发现违背安全策略的行为。

    auditd的功能很强大,本文只是从一个很小的功能模块进行安全应用探索,更多功能和应用场景期待各位同行的发挥!有时候,立足系统自身,也能有不错的收获。

    1

    关于SYSCALL

    上述配置命令中使用 -S execve实现了对命令执行这一SYSCALL的监控,也可以使用 -S 59作为参数实现。执行系统命令ausyscall –dump可以查看auditd支持的所有SYSCALL选项。

  • 相关阅读:
    SpringBoot Lombok使用详解1(基本介绍、安装配置、var和val)
    SpringBoot 实现文件上传2(多文件上传、常用上传参数配置)
    SpringBoot 解决跨域请求问题(No 'AccessControlAllowOrigin' header is...)
    SpringBoot 实现静态资源的访问(附:修改过滤规则、静态资源位置)
    SpringBoot 获取Get请求参数详解(附样例:非空、默认值、数组、对象)
    SpringBoot 实现文件上传1(单文件上传、常用上传参数配置)
    SpringBoot 获取POST请求参数详解(附样例:表单数据、json、数组、对象)
    SpringBoot @ControllerAdvice的使用详解3(请求参数预处理 @InitBinder)
    SpringBoot @ControllerAdvice的使用详解1(全局异常处理 @ExceptionHandler)
    解决自动禁用Flash打开摄像头询问
  • 原文地址:https://www.cnblogs.com/bonelee/p/7803377.html
Copyright © 2011-2022 走看看