应急取证之日志分析

本文详细介绍了Linux系统中的日志管理,重点讲解了Grep(文本搜索)、Sed(流式编辑器)、Awk(文本处理)和Find(文件查找)命令在日志分析中的应用,以及ApexSQLLog和Python在MySQL日志分析中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【----------------------------------------网络安全应急取证技术的学习笔记--------------------------------------】

一般需要重点观察的日志类别:系统日志、应用日志、历时操作日志和安全设备日志等。

常见的Linux日志的位置:

(1)/var/log/boot.log  :系统开机引导日志

(2)/var/log/messages  :进程日志汇总,包括系统整体日志

(3)/var/log/secure  :与安全相关的日志

(4)/var/log/httpd  :Apache服务日志

(5)/var/log/httpd/access.log  :Apache服务Web访问日志

(6)/var/log/httpd/access.err  :Apache服务Web访问错误日志

(7)/var/log/mysql  :MySQL服务日志

(8)/var/log/xferlog  :FTP服务日志

(9)~/.bash_history  :用户Bash命令日志

Linux日志分析命令——Grep

Grep是一个文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来,例如:

(1)grep match_pattern filename  在任何文件中搜索内容(以ASCII码解析)

(2)grep match_pattern*.txt  在所有文本中搜索内容

(3)grep"match_pattern"file1 file2 file3 ...     在多个文件中搜索

(4)grep"match_patten"filename --color=auto   标记匹配颜色

(5)grep -v"match_patten"filename  输出除符合条件的行之外的所有行

(6)grep -E"[1-9]+"filename  使用正则表达式进行搜索

(7)grep -c"text"filename  统计数量

(8)grep -n"text"filename  打印行号

(9)grep "text".  -r filpath  递归搜索当前目录下的所有文本

(10)grep "main()". -r include *.{php,html}  只在目录中所有的.php和.html文件中递归搜索字符"main()"

(11)grep "main()". -r --exclude "README"  在搜索结果中排除所有README文件

(12)grep "main()". -r --exclude-from filelist  在搜索结果中排除filelist文件列表里的文件,忽略大小写

综合应用示例:grep"404"access.log | cut -d -f 7 | sort | uniq -c | sort -nr  在一个web服务器的access.log文件中出现的404错误的次数,并按照出现次数降序排列。

命令的含义如下:

  • grep "404" access.log:搜索包含"404"的行。

  • cut -d ' ' -f 7:使用空格作为分隔符,选择第7列。

  • sort:对选取的数据进行排序。

  • uniq -c:合并重复的行并计数。

  • sort -nr:以数值形式逆序排序。

可以直接在命令行中运行,前提是你有对应的日志文件和权限。

Linux日志分析命令——Sed 

Sed是一个流式编辑器,主要功能是过滤和转换文本。它可以配合正则表达式。

流式编辑器,Sed是逐行地读取文本,在文本行中应用指定的命令,默认输出到stdout。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用Sed命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容输出到屏幕。接着处理下一行,不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

(1)替换操作命令—s

① sed 's/GET/POST/' access.log   替换文本中的字符串,将“GET”替换成“POST”

② sed -n 's/test/TEST/p' file   -n选项和p命令一起使用,表示只打印那些发生替换的行

③ sed -i 's/book/books/g'file  直接对源文件进行编辑替换

④ sed 's/book/books/2g' file  从第二行开始匹配替换

(2)删除操作命令—d

① sed '/^$/d' file  删除空白符

② sed '2d' file  删除文件的第二行

③ sed '2,$d' file  删除文件从第二行到末尾的所有行

④ sed '$d' file  删除文件最后一行

⑤ sed '/^test/d' file  删除文件中所有开头是“test” 的行

(3)sed元字符集

①  ^:匹配行开始,如“/^sed/”匹配所有以“sed”开头的行

②  $:匹配行结束,如“/sed$/”匹配所有以“sed”结尾的行

③  .:匹配一个非换行符的任意字符,如“/s.d/”匹配“s”后接一个任意字符,最后是“d”

④  *:匹配0个或多个字符,如“/*sed/”匹配所有模板是一个或多个空格后紧跟“sed”的行

⑤  []:匹配一个指定范围内的字符,如“/[ss]ed/” 匹配 “sed”和“Sed”

⑥  &:保存搜索字符用来替换其他字符,如“s/love/**&**/” ,“love”替换成“**love**”

⑦  x\{m\}:重复字符“x” m次,如/0\{5\}/匹配包含5个“0”的行

⑧ x\{m,\}:重复字符“x” 至少m次,如“/0\{5,\}/”匹配至少有5个“0”的行

⑨  x\{m,n\}:重复字符“x”至少m次,不多于n次,如“/0\{5,10\}/”匹配有5~10个“0”的行

Linux日志分析命令——Awk

Awk,是把文件逐行地读入,以空格为默认分隔符将每行切片,在对切开的部分进行各种分析处理。支持用户自定义函数和动态正则表达式等功能。在命令行中使用,更多的是作为脚本来使用。

Awk有很多内建的功能,如数组、函数等,比较灵活。

(1)Awk的操作和模式

Awk脚本是由模式和操作组成的。

模式:①/正则表达式/:使用通配符的扩展集

           ②关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试

           ③模式匹配表达式:使用运算符“~”(匹配)和“~!”(不匹配)进行操作

           ④BEGIN语句块、pattern语句块、END语句块

操作由一个或多个命令、函数、表达式组成,其间由换行符或分号隔开,并位于大括号内,主要部分是变量或数组赋值、输出命令、内置函数、控制流语句

(2)Awk脚本基本结构

awk 'BEGIN{ print "start" } pattern{ commands } END{ print "end" }' file

Awk脚本通常由BEGIN语句块、能够使用模式匹配的通用语句块和END语句三个部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号和双引号括起来的。

(3)Awk的工作原理 

首先,执行BEGIN{ commands }语句块中的语句。其次,从文件或标准输入(stdin)中读取一行,然后执行pattern{ commands }语句块,逐行扫描文件,从第一行到最后一行重复这个过程,直到文件读取完毕。最后,当读至输入流末尾时,执行END{ commands }语句块。

BEGIN语句块在Awk开始从输入流中读取行之前被执行,这是一个可选的语句块,如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块在Awk从输入流中读取完所有的行之后即被执行,如打印所有行的分析结果这类信息汇总都是在END语句块中完成的, 它也是一个可选的语句块。

pattern语句块中的通用命令是最重要的部分,也是可选。如果没有提供pattern语句块,则默认执行{print},即打印读取到的每一行,Awk读取的每一行都会执行该语句块。

使用Awk分析Web日志文件的例子:

①  awk '{print $1}' access.log    访问IP地址

②  awk -F\ '{print $2}' access.log  访问页面

③  awk -F\ ''{print $6} access.log | sort | uniq -c | sort -fr   浏览器UA头统计

④  awk '{print $9}' access.log | sort | uniq -c | sort    响应状态码统计

⑤ awk '{print $7}' access.log | sort | uniq -c | sort -nr   请求页面统计

⑥ cat access.log | awk '{print $1}' |sort |uniq -c | sort -rn | head -n 25   访问IP地址前25统计

⑦  grep "404" access.log | cut -d ' ' -f 7 | sort | uniq -c | sort -nr   404页面统计

⑧  cat access.log | cut -d ' ' -f 1 | sort | uniq -c | sort -nr    访问最多的IP地址统计

⑨  tail -10000 access.log| awk '{print $1}' | sort | uniq -c |sort -n   最近10000个访问的IP统计

⑩  awk '{print $4}' access.log | cut -d ' ' -f1 | uniq -c    每天的访问量统计

Liunx日志分析命令——Find

Find命令是用来在指定目录下查找文件的。示例:

(1)find /home -name "*.txt"   在home目录下查找以“.txt”结尾的文件

(2)find /home -iname "*.txt"   在home目录下查找以“.txt”结尾的文件,但是忽略文件名大小写

(3)find /home ! -name "*.txt"   找出/home目录下不是以“.txt”结尾的文件

(4)find . -name "*.txt" -o -name "*.pdf"   同时查找以“.txt”或“.pdf”结尾的文件

(5)find /usr/ -path "*local*"   匹配路径或文件名

(6)find . -regex ".*\ (\.txt\|\.pdf\) $"   基于正则表达式的文件名搜索

(7)find .  -type   类型参数    :根据类型进行搜索(f为普通文件,d为目录,I为符号链接,c为字符设备等)

(8)find . -maxdepth 3 -type f   最大深度为3

(9)find . -type f -size 文件大小单元    : 根据文件大小进行搜索

(10)find . -type f -name "*.txt" -delete   删除匹配到的文件

(11)find . -type f -perm 777    根据权限进行搜索

(12)find . -type f -user tom   根据文件拥有人进行搜索

Find可根据文件的时间戳来进行搜索,在被入侵过的机器中,被改动或创建的文件,时间戳总是和其他文件的时间戳不一样。UNIX/Linux 文件系统中每个文件都有以下三种是时间戳:

(1)访问时间(-atime/天,-amin/分钟):用户最近一次访问时间

(2)修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间

(3)变化时间(-ctime/天,-cmin/分钟):文件数据元(如权限等)最后一次修改时间

Find根据时间戳来寻找文件,具体示例:

(1)find . -type f -atime -7     最近7天内被访问的文件

(2)find . -type f -atime 7      7天前被访问过的文件

(3)find . -type f -mtime -3    最近3天内改动过的文件

日志分析工具——ApexSQL Log

ApexSQL Log是一个MySQL事务日志阅读器。可以读取联机事务日志、分离的事务日志和事务日志备份文件,包括本地的和远程的。如有需要,它也会读取数据库备份来获取足够的的信息以帮助进行成功构建。还可以重播对于数据库数据和对象的更改,包括在ApexSQL Log安装之前已经发生的更改。

日志分析工具——Python

用python定制特定的脚本,利用python脚本做日志分析。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值