0×00:

最近工作中学习了一个比较实用的系统服务:audit。下面进行一些使用介绍。

audit 是Linux audit Subsystem 的简称。这一服务的主要作用是记录系统调用和文件访问。auditd 是audit 系统的守护进程,作用是将audit 记录的信息写到磁盘上。合理配置audit 日志审计规则,对安全运维大有帮助。当系统被入侵后,可以通过查看audit.log 追根溯源,找到系统的漏洞所在。

0×01:audit安装及启动

debian   apt-get install auditd

centOS   yum install audit

源码下载: http://people.redhat.com/sgrubb/audit/

启动服务:root@kali:~# service auditd start

服务启动后,/var/log/audit 目录被创建,并生成audit.log 。为了安全,此目录只对root 用户可读。

进入audit 日志目录,可以看到一条DAEMON_START ,记录了audit服务启动信息:

root@kali:/var/log/audit# cat audit.log

type=DAEMON_START msg=audit(1413124246.270:9427): auditd start, ver=1.7.18 format=raw kernel=3.12-kali1-amd64 auid=0 pid=1986 res=success

type=CONFIG_CHANGE msg=audit(1413124246.374:2): audit_backlog_limit=320 old=64 auid=0 ses=3 res=1

audit 默认含有若干管理工具,常用的有下面三个:

auditctl:控制audit系统,它控制着生成日志的各种变量,以及内核审计的各种接口,还有决定跟踪哪些事件的规则。

aureport:能够从审计日志里面提取并产生一个个性化的报告,这些日志报告很容易被脚本化,并能应用于各种应用程序之中。

ausearch:用于查询审计后台的日志,它能基于不同搜索规则的事件查询审计日志。

个人认为ausearch 比较实用,后面有使用介绍。

0×02:audit 配置

audit安装后,会生成2个文件:

/etc/audit/audit.conf 守护程序的默认配置文件

/etc/audit/audit.rules 守护程序默认的规则文件

auditd.conf 的配置需要根据实际情况,一般使用默认配置即可,学习每个配置参数的含义可以:

#man auditd.conf

我系统中的默认配置:#

# This file controls the configuration of the audit daemon

#

log_file = /var/log/audit/audit.log

log_format = RAW

log_group = root

priority_boost = 4

flush = INCREMENTAL

freq = 20

num_logs = 4

disp_qos = lossy

dispatcher = /sbin/audispd

name_format = NONE

##name = mydomain

max_log_file = 5

max_log_file_action = KEEP_LOGS

space_left = 75

space_left_action = SYSLOG

action_mail_acct = root

admin_space_left = 50

admin_space_left_action = SUSPEND

disk_full_action = SUSPEND

disk_error_action = SUSPEND

##tcp_listen_port =

tcp_listen_queue = 5

tcp_max_per_addr = 1

##tcp_client_ports = 1024-65535

tcp_client_max_idle = 0

enable_krb5 = no

krb5_principal = auditd

##krb5_key_file = /etc/audit/audit.key

这里只介绍几个需要注意的参数:

max_log_file_action 建议设置为 ROTATE,这时日志大小跟num_logs(log文件数) 和 max_log_file (单个文件大小)有关,两者相乘就是最大可存储的日志量。而设置成 keep_logs 会保留从设置之日起所有的日志文件,如果硬盘够大可以这么干。

flush建议设为 INCREMENTAL,此时freq 参数生效, freq 会通知 audit daemon 每多少秒向内核请求将数据写入磁盘;如果是在安全要求十分高的场合下,flush可以设置为 data 或者 sync,二者都是将数据同步写入磁盘,不同点是后者在写入数据的同时还写入元数据(metadata)。

audit.rules 同样可以:

#man audit.rules

每个选项更详细的解释可以:

#man auditctl

下面是个audit.rules 的例子:

# This file contains the auditctl rules that are loaded

# whenever the audit daemon is started via the initscripts.

# The rules are simply the parameters that would be passed

# to auditctl.

# First rule - delete all

-D

# Increase the buffers to survive stress events.

# Make this bigger for busy systems

-b 1024

# Feel free to add below this line. See auditctl man page

-w /home/wwwroot/default -p wa -k aqb_sec

-a exit,always -F uid=3307 -F arch=b64 -S execve

-a exit,always -F uid=3309 -F arch=b64 -S execve

-a exit,always -F uid=3307 -F arch=b64 -S write

-w:配置一个监控目录

/home/wwwroot/default : 具体需要监控的目录,这里监控了web 文件夹

-p: 操作权限过滤

rwax:具体操作权限。r=读操作,w=写操作,x=执行,a=更改属性

-k:一旦规则触发,为当前记录打一个标签

aqb_sec :规则触发以后,会在记录最后打上 aqb_sec 标签,有助于日志审计

监控系统调用的规则:

规则格式:

-a action,list -S syscall -F field=value -k keyname

规则实例:

-a exit,always -F uid=3307 -F arch=b64 -S execve

action 选项包括:  task,  entry,  exit,  user, exclude

task:仅在fork或复制系统调用时监测,实际很少用到

entry和exit :entry 运行在系统调用进入时,exit 运行在退出时,exit 的适用范围更广,一般会配置这个选项。

user:用于过滤一些在用户控件起源的事件,适用于uid,pid,auid,pid字段

exclude:用来排除某些事件

action 选项后的list 选项有always和never ,一般填always ,表示记录一条事件。action和list 用逗号隔开。

-F 选项表示一个规则域,每一个种类的过滤规则都要以-F 开始。比如实例里 -F uid=3307 -F arch=b64  表示检测uid 为3307 的用户的操作,系统类型为64位。如果是 -F auid=3307 则表示系统源用户uid 为3307 ,适用于通过sudo或su 转换系统角色后的操作。

-S :系统调用选项。具体系统调用名这里就不过多介绍了。常见的有 execve、write、fork等。

以上解释均为个人根据系统手册按理解翻译过来的,更详尽的解释可以直接用man 命令查看系统手册。

0×03:日志查看

下面看一下配好规则以后audit 的日志记录情况。

如下日志记录了从用户登陆,到修改web 目录文件的过程(点击查看大图,下同):

修改文件的部分操作:

用上面提到的 ausearch 命令查看日志会更直观,结合-k 选项查看:

#ausearch -k aqb_sec

每一步操作都以四个减号分割:

这里的时间戳都已转化为可读模式。

以一条日志为例,解释下日志所记录的内容:

type=SYSCALL :事件类型,其他常见类型包括:PATH,CWD,LOGIN

msg=audit(1413946191.524:56366):  : 记录了时间戳和一个唯一的audit 事件id

arch=c000003e :表示系统架构 x86_64

syscall=93 :系统调用号

success=yes :执行成功

exit=0 :当值为0时表示记录成功

a0=3 a1=0 a2=0 a3=0 items=1 :系统调用信息,具体含义没深入研究

ppid=22987 :父进程pid

pid=23046 :进程pid

auid=0 uid=0 :源uid 和uid,这里是root

gid=0 :group id

euid=0 :有效user id

suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 :file system uid,有效group id 等等各种。总之记录的用户信息很全,由于使用了root,所以所有值都为0 了。

tty=pts1 :使用的终端

ses=902 :没查到- -!

comm=”vi”: 系统命令

exe=”/usr/bin/vim.basic” :命令路径

key=”aqb_sec” :标签

其他的日志内容都类似,需要具体情况具体分析,总之内容丰富。

分享个tip:经常在应急时发现有网站被挂黑链,一般批量生成黑链的代码都是拿到网站webshell 以后再添加的,这些代码要么比较难找特征,要么就是经过层层加密,总之即使找到webshell,也很难找到这些代码 。不过这些代码一般会通过crontab 定时生成黑链代码,直接ausearch -c crontab 就能把相关日志找出来,具体代码文件也就不难找到了。

0×04:时间戳转换

使用ausearch 查看日志有一个好处是每一步操作时的时间戳都会被转换成可读模式,但是当日志量比较大想要借助管道命令查询信息时,就无法显示可读的时间了,这时可以写一个脚本将日志的时间戳批量转换一下。

通过命令转换成普通格式:root@kali:/tmp/audit$ date -d @1412971320.112

Fri Oct 10 16:02:00 EDT 2014

shell 脚本read_audit.sh:

#!/bin/bash

FILE=/var/log/audit/audit.log

cat $FILE |while read LINE

do

Udate=`echo $LINE|awk -F'[(.]+' '{print $2}'`

Cdate=`date -d @$Udate`

echo $LINE|sed "s/[0-9]\{10\}/$Cdate/" >> read.audit.log

done

转换后的格式:

参考文章:

http://thomasknowles.blogspot.ca/2011/03/linux-file-access-auditing.html

http://www.cyberciti.biz/tips/linux-audit-files-to-see-who-made-changes-to-a-file.html

http://os.51cto.com/art/201205/337496_all.htm

http://jaseywang.me/2011/04/27/audit/

http://jaseywang.me/2011/04/25/config-for-auditd-conf/

http://leemon.blog.51cto.com/1903784/1256716

linux audit 源码分析,audit初探相关推荐

  1. linux内存源码分析 - 内存压缩(同步关系)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 最近在看内存回收,内存回收在进行同步的一些情况非常复杂,然后就想,不会内存压缩的页面迁移过程中的同步关系也 ...

  2. Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】...

    原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.c ...

  3. Linux内核源码分析—从用户空间复制数据到内核空间

    Linux内核源码分析-从用户空间复制数据到内核空间 本文主要参考<深入理解Linux内核>,结合2.6.11.1版的内核代码,分析从用户空间复制数据到内核空间函数. 1.不描述内核同步. ...

  4. 一文给你解决linux内存源码分析- SLUB分配器概述(超详细)

    SLUB和SLAB的区别 首先为什么要说slub分配器,内核里小内存分配一共有三种,SLAB/SLUB/SLOB,slub分配器是slab分配器的进化版,而slob是一种精简的小内存分配算法,主要用于 ...

  5. Linux内核源码分析《进程管理》

    Linux内核源码分析<进程管理> 前言 1. Linux 内核源码分析架构 2. 进程原理分析 2.1 进程基础知识 2.2 Linux进程四要素 2.3 进程描述符 task_stru ...

  6. Linux内核源码分析之内存管理

    本文站的角度更底层,基本都是从Linux内核出发,会更深入.所以当你都读完,然后再次审视这些功能的实现和设计时,我相信你会有种豁然开朗的感觉. 1.页 内核把物理页作为内存管理的基本单元. 尽管处理器 ...

  7. Linux内核源码分析方法—程序员进阶必备

    一.内核源码之我见 Linux内核代码的庞大令不少人"望而生畏",也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是 ...

  8. 【技术分享篇】Linux内核——手把手带你实现一个Linux内核文件系统丨Linux内核源码分析

    手把手带你实现一个Linux内核文件系统 1. 内核文件系统架构分析 2. 行行珠玑,代码实现 [技术分享篇]Linux内核--手把手带你实现一个Linux内核文件系统丨Linux内核源码分析 更多L ...

  9. iostat IO统计原理linux内核源码分析----基于单通道SATA盘

    iostat IO统计原理linux内核源码分析----基于单通道SATA盘 先上一个IO发送submit_bio流程图,本文基本就是围绕该流程讲解. 内核版本 3.10.96 详细的源码注释:htt ...

  10. Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】...

    原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinauni ...

最新文章

  1. ECMAScript Query实例
  2. restful url 设计规范_RESTful API接口设计规范
  3. php i o优化,PHP之高性能I/O框架:Libevent(一)
  4. 网络营销专员浅析在网络营销中网站关键词对网站流量获取有何影响?
  5. java and asp.net
  6. NLP高阶实战必读:一文走遍完整自然语言处理流程
  7. Learning Perl 2
  8. javaweb实训第五天下午——xml配置文件约束报错问题
  9. 帆软FineMobile 自适应
  10. html5页面资源预加载(Link prefetch)
  11. ubuntuv20启动界面美化_小米任务栏美化软件下载-小米任务栏美化官方版软件下载v1.0...
  12. Docker引擎客户端工具docker的总结
  13. 手机拍照怎么识别文字
  14. 手机及电脑的护眼模式开启
  15. m3u8文件里只有js链接,没有ts链接,和key文件的一点记录
  16. 【小程序】地图的基本使用
  17. 【基础】存储过程IN、OUT、INOUT参数模式
  18. 转:医院网络营销存在的弊端
  19. 当当网页制作html代码,网页制作语言:HTML
  20. UI交互设计好学吗?如何成为优秀设计师

热门文章

  1. transition 用法
  2. i9 9900es版,QQC0满载功耗测试
  3. sql优化之b+树锁引实战
  4. unity3D 音效的设置 音效的开关 制作声音的开关按钮
  5. 计算机右键菜单太多,鼠标右键菜单选项太多:清理多余菜单选项的方法
  6. 机动车尾气排放模型综述
  7. Android CoordinatorLayout之自定义Behavior
  8. linux关机会自动重启,linux——如何在linux下让系统定时自动重启(关机)
  9. 中国大数据技术大会(BDTC 2022)企业数据智能专题论坛,7月17日淄博见
  10. 一直激励我的一个故事--驴子的故事