【----------------------------------------网络安全应急取证技术的学习笔记--------------------------------------】
一般需要重点观察的日志类别:系统日志、应用日志、历时操作日志和安全设备日志等。
常见的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脚本做日志分析。