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

测试环境:CentOS7.0_x64

auditd简介

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

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

• 监控文件访问

• 监控系统调用

• 记录用户命令执行

• 记录安全事件

• 执行审计搜索

• 统计概要报表

• 监控网络访问

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

通常我们使用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,可以看到该配置命令本身也产生了日志:

其中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成功之行命令后,返回结果如下图所示:

2

查看和分析auditd审计日志

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

上述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

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

3

深入分析进程及文件关系

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

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

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

4

梳理小结

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

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

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

总结&思考

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

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

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

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

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

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

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

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

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

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

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

1

关于SYSCALL

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

【转】webshell检测——使用auditd进行system调用审计的更多相关文章

  1. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用

    catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...

  2. webshell检测方法归纳

    背景 webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门.黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB ...

  3. [Python陷阱]os.system调用shell脚本获取返回值

    当前有shell个脚本/tmp/test.sh,内容如下: #!/bin/bashexit 11 使用Python的os.system调用,获取返回值是: >>> ret=os.sy ...

  4. 入侵感知系列之webshell检测思路

    Webshell检测   背景: 在B/S架构为主流的当下,web安全成了攻防领域的主战场,其中上传webshell是所有web黑客入侵后一定会做的事,所以检测网站中是否有webshell程序是判断被 ...

  5. 在awk中通过system调用sql语句来说明引号的使用

    一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... ... ...

  6. 11. 几点基于Web日志的Webshell检测思路

    摘要: Web日志记录了网站被访问的情况,在Web安全的应用中,Web日志常被用来进行攻击事件的回溯和取证.Webshell大多由网页脚本语言编写,常被入侵者用作对网站服务器操作的后门程序,网站被植入 ...

  7. system调用命令行命令而不显示命令行窗口

    system调用命令行命令而不显示命令行窗口 通常用system调用命令行命令时都会弹出黑底白字的命令行窗口,下面的代码可以不显示弹出的命令行窗口. 代码如下 #pragma comment( lin ...

  8. “伏魔”赏金 | WebShell检测之「模拟污点引擎」首次公测,邀你来战!

    安全是一个动态的过程,攻防对抗如同在赛博世界里降妖伏魔,其要义是:取彼之长,补己之短.--伏魔引擎的诞生 伏魔引擎挑战赛 注册时间: 2022.01.10 00:00:00 - 2022.01.24 ...

  9. php通过system()调用Linux命令问题

    最近在做php和linux crontab的联调,发现php在linux下的权限问题需要引起注意,调试问题的过程中发现有许多问题前人说的比较零散,我在这里汇总,顺带抛砖引玉一下. 1.$result= ...

随机推荐

  1. maven小知识点

    Maven 使用惯例优于配置的原则 .它要求在没有定制之前,所有的项目都有如下的结构: 一个 maven 项目在默认情况下会产生 JAR 文件,另外 ,编译后 的 classes 会放在 basedi ...

  2. dubbo知识点理解

    1.分布式服务架构关键在于:用于提高业务复用及整合的 分布式服务框架(RPC) 是关键.注册中心是关键,提供业务复用和整合. 2.dubbo在消费方,获取服务列表后提供软负载均衡.dubbo在消费方提 ...

  3. POJ 2447

    挺水的一题.其实只要理解了RSA算法,就知道要使用大整数分解的方法来直接模拟了. 不过,要注意两个INT64的数相乘来超范围 #include <iostream> #include &l ...

  4. Codeforces 659F Polycarp and Hay 并查集

    链接 Codeforces 659F Polycarp and Hay 题意 一个矩阵,减小一些数字的大小使得构成一个连通块的和恰好等于k,要求连通块中至少保持一个不变 思路 将数值从小到大排序,按顺 ...

  5. Android 常用系统服务

    WindowManager:WindowManager服务是全局的唯一的.它会将用户在屏幕上的操作发送给界面上的各个Window,Activity会将顶层控件注册到WindowManager中.Win ...

  6. Gulp 相关

    获取执行在文件列表: http://www.thinksaas.cn/ask/question/21950/ 用through2这个插件. var through = require('through ...

  7. (转载)[Android开发]zxing扫描结果乱码

    ZXing扫描二维码出现中文乱码的问题最近项目的功能需要用到扫描二维码.就参考了google的开源项目ZXing..功能完成后..发现扫条形码没有问题..但是扫描二维码的时候却有一部分是乱码..或者不 ...

  8. 《汇编语言(第三版)》pushf 和 popf 指令,以及标志寄存器在 Debug 中的表示

    pushf 和 popf pushf 的功能是将标志寄存器的值压栈,而 popf 是从栈中弹出数据,输入标志寄存器. pushf 和 popf,为直接访问寄存器提供了方法. 格式 pushf popf ...

  9. 51nod 1098 最小方差 排序+前缀和+期望方差公式

    题目: 题目要我们,在m个数中,选取n个数,求出这n个数的方差,求方差的最小值. 1.我们知道,方差是描述稳定程度的,所以肯定是着n个数越密集,方差越小. 所以我们给这m个数排个序,从连续的n个数中找 ...

  10. hiho151周*

    题目链接 题目大意:依次在给定的三维坐标上垒方块,对于一个新的坐标需满足两个条件 1:六个方向有相邻的方块或者z==1[题目说明了初始状态是:所有z==0的位置都有方块] 2:该位置存在一条到无穷远处 ...