三、分析取证
3.1 系统日志分析
Windows系统日志是记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件。用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。Windows主要有以下三类日志记录系统事件:应用程序日志、系统日志和安全日志。系统和应用程序日志存储着故障排除信息,对于系统管理员更为有用。安全日志记录着事件审计信息,包括用户验证(登录、远程访问等)和特定用户在认证后对系统做了什么,对于调查人员而言,更有帮助。
3.1.1 系统日志分析
记录操作系统组件产生的事件,主要包括驱动程序、系统组件和应用软件的崩溃以及数据丢失错误等。系统日志中记录的时间类型由Windows NT/2000操作系统预先定义。
- 默认位置: %SystemRoot%\System32\Winevt\Logs\System.evtx
3.1.2 应用程序日志分析
包含由应用程序或系统程序记录的事件,主要记录程序运行方面的事件,例如数据库程序可以在应用程序日志中记录文件错误,程序开发人员可以自行决定监视哪些事件。如果某个应用程序出现崩溃情况,那么我们可以从程序事件日志中找到相应的记录,也许会有助于你解决问题。
- 位置:%SystemRoot%\System32\Winevt\Logs\Application.evtx
3.1.3 安全日志分析
记录系统的安全审计事件,包含各种类型的登录日志、对象访问日志、进程追踪日志、特权使用、帐号管理、策略变更、系统事件。安全日志也是调查取证中最常用到的日志。默认设置下,安全性日志是关闭的,管理员可以使用组策略来启动安全性日志,或者在注册表中设置审核策略,以便当安全性日志满后使系统停止响应。
- 默认位置:%SystemRoot%\System32\Winevt\Logs\Security.evtx
4624,表示成功登陆的用户,用来筛选该系统的用户登陆成功情况。
4625,表示登陆失败的用户,用来判断RDP爆破的情况。
4634,表示注销成功
4647,用户启动的注销
4672,表示授予了特殊权限,使用超级用户(如管理员)进行登录
4720,4722,4723,4724,4725,4726,4738,4740,事件ID表示当用户帐号发生创建,删除,改变密码时的事件记录。
4727,4737,4739,4762,表示当用户组发生添加、删除时或组内添加成员时生成该事件。
4698、4699、4700、4701、4702,计划任务事件——ID:4698:计划任务已创建,4700:计划任务已启用,4701:计划任务已停用,4702:计划任务已变更
4688、4689,进程创建及终止记录,
4776,凭证验证记录
3.2 应用日志分析
3.2.1 WEB应用日志分析
在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。
第一种:确定入侵的时间范围,以此为线索,查找这个时间范围内可疑的日志,进一步排查,最终确定攻击者,还原攻击过程。
第二种:攻击者在入侵网站后,通常会留下后门维持权限,以方便再次访问,我们可以找到该文件,并以此为线索来展开分析。
- Window下,推荐用 EmEditor 进行日志分析,支持大文本,搜索效率还不错。
- Linux下,使用Shell命令组合查询分析。
- Shell+Linux命令实现日志分析,一般结合grep、awk等命令等实现了几个常用的日志分析统计技巧。
Apache日志分析技巧:
1、列出当天访问次数最多的IP命令:
cut -d- -f 1 log_file|uniq -c | sort -rn | head -20
2、查看当天有多少个IP访问:
awk '{print $1}' log_file|sort|uniq|wc -l
3、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l
4、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file
5、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n
6、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'
7、去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l
8、查看2018年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2018:14 | awk '{print $2}'| sort | uniq | wc -l
# IP 统计:
grep '23/May/2019' /www/logs/access.2019-02-23.log | awk '{print $1}' | awk -F'.' '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -r -n | head -n 10
2206 219.136.134.13
1497 182.34.15.248
1431 211.140.143.100
1431 119.145.149.106
# HTTP Status:
cat /www/logs/access.2021-02-23.log |awk '{print $9}'|sort|uniq -c|sort -rn|more
5056585 304
1125579 200
7602 400
5 301
IP,URL 抽取:
# tail -f /www/logs/access.2019-02-23.log | grep '/test.html' | awk '{print $1" "$7}'
***其余可参考
Shell+Linux命令实现日志分析_linux shell_脚本之家
运维必备技能 WEB 日志分析-腾讯云开发者社区-腾讯云
3.2.2 数据库日志分析
常见的数据库攻击包括弱口令、SQL注入、提升权限、窃取备份等。对数据库日志进行分析,可以发现攻击行为,进一步还原攻击场景及追溯攻击源。
- redo log是一种基于磁盘的数据结构,用来在MySQL宕机情况下将不完整的事务执行数据纠正,redo日志记录事务执行后的状态。#redo log就是为了恢复更新了内存但是由于宕机等原因没有刷入磁盘中的那部分数据。
- undo log主要用来回滚到某一个版本,是一种逻辑日志。undo log记录的是修改之前的数据,比如:当delete一条记录时,undolog中会记录一条对应的insert记录,从而保证能恢复到数据修改之前。在执行事务回滚的时候,就可以通过undo log中的记录内容并以此进行回滚。
- bin log日志是用来记录MySQL中增删改时的记录日志。简单来讲,就是当你的一条sql操作对数据库中的内容进行了更新,就会增加一条bin log日志。查询操作不会记录到bin log中。
- error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。
- slow query log慢查询日志用来记录执行时间超过指定阈值的SQL语句,慢查询日志往往用于优化生产环境的SQL语句。可以通过以下语句查看慢查询日志是否开启以及日志的位置。分析慢查询日志一般会用专门的日志分析工具。找出慢SQL后可以通过explain关键字进行SQL分析,找出慢的原因。
- general log 记录了客户端连接信息以及执行的SQL语句信息,通过MySQL的命令 show variables like '%general_log%';
1、查看log配置信息 show variables like '%general%'; 2、开启日志 SET GLOBAL general_log = 'On'; 3、指定日志文件路径 #SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log'; |
比如,当我访问/test.php?id=1,此时我们得到这样的日志:
190604 14:46:14 14 Connect root@localhost on 14 Init DB test 14 Query SELECT * FROM admin WHERE id = 1 14 Quit |
日志解释:
第一列:Time,时间列,前面一个是日期,后面一个是小时和分钟,有一些不显示的原因是因为这些sql语句几乎是同时执行的,所以就不另外记录时间了。 第二列:Id,就是show processlist出来的第一列的线程ID,对于长连接和一些比较耗时的sql语句,你可以精确找出究竟是那一条那一个线程在运行。 第三列:Command,操作类型,比如Connect就是连接数据库,Query就是查询数据库(增删查改都显示为查询),可以特定过虑一些操作。 第四列:Argument,详细信息,例如 Connect root@localhost on 意思就是连接数据库,如此类推,接下面的连上数据库之后,做了什么查询的操作。 |
利用shell命令进行简单的分析:
#有哪些IP在爆破? grep "Access denied" mysql.log |cut -d "'" -f4|uniq -c|sort -nr 27 192.168.204.1 #爆破用户名字典都有哪些? grep "Access denied" mysql.log |cut -d "'" -f2|uniq -c|sort -nr 13 mysql 12 root 1 root 1 mysql |
3.2.3 FTP日志分析
FTP是老牌的文件传输协议,在网络中应用非常广泛。本节就Vsftp服务器的日志进行重点讨论,在本书的FTP多级跳案例中就会涉及到本节学到的知识。在Redhat Linux系统下Vsftp的配置文件在/etc/vsftp/vsftp.conf文件中。默认情况下,Vsftp不单独记录日志,也就是说不会输出到一个单独的文件中存储,而是统一存放到/var/log/messages文件中。WINDOWS,安全日志中
#Software:MicrosoftInternetInformationServices5.0(微软IIS5.0) #Version:1.0(版本1.0) #Date:200906190315(服务启动时间日期) #Fields:timecipcsmethodcsuristemscstatus 0315 127.0.0.1[1]USERadministator331(IP地址为127.0.0.1用户名为 administator试图登录) 0318 127.0.0.1[1]PASS–530(登录失败) 032:04 127.0.0.1[1]USERnt331(IP地址为127.0.0.1用户名为nt的用户试图登录) 0324 127.0.0.1[1]PASS–230(登录成功) 0321 127.0.0.1[1]MKDnt550(新建目录失败) 0325 127.0.0.1[1]QUIT–550(退出FTP程序) |
3.3 活动轨迹分析
3.3.1 %UserProfile%\Recent
%UserProfile%\Recent打开最近打开的文件记录
3.3.2 Windows\Prefetch
最近打开程序分析:
3.3.3 LastActivityView
行EXE文件 。EXE文件由用户直接运行,或通过其他软件/服务在后台运行。
选择文件打开/保存对话框的 标准保存/打开对话框的Windows的用户选择指定的文件名。
打开文件或文件夹: 用户打开指定的文件从Windows资源管理器或从其它软件。
在资源管理器中查看文件夹: 用户指定的文件夹在Windows资源管理器中查看。
软件安装 指定的软件已经安装或更新。
系统启动: 电脑已启动。
系统关机: 该系统已被关闭,由用户直接或通过一个软件,开始重新启动。
恢复从睡眠: 计算机已经从睡眠模式恢复。
网络连接: 网络连接,此前断开。
网络已断开 网络已断开
软件崩溃: 指定的软件已经崩溃了。
软件停止响应(挂起): 指定软件停止响应。
蓝色屏幕: 蓝色屏幕事件已经发生在系统上。
用户登录: 用户登录到系统。
用户退出 登录的用户从系统中注销。这甚至可能造成一个软件,开始重新启动。
还原点创建 还原点已创建的Windows操作系统。
Windows安装程序开始
Windows安装程序结束
3.4 恶意文件分析
3.4.1 恶意文件时间要素
创建时间、修改时间、访问时间查询:可通过工具修改
3.4.2 同一时间范围内创建/修改/访问的文件
- 利用 Registry Workshop 注册表编辑器的搜索功能,可以找到最后写入时间区间的文件。
- 利用计算机自带文件搜索功能,指定修改时间进行搜索。
3.4.3 恶意文件行为分析
恶意文件类型、外联行为、感染行为、攻击行为等。
3.5 合理应用各类工具
3.5.1 Log Parser
Log Parser(是微软公司出品的日志分析工具,它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分隔符)文件,以及操作系统的事件日志、注册表、文件系统、Active Directory。它可以像使用 SQL 语句一样查询分析这些数据,甚至可以把分析结果以各种图表的形式展现出来。
取了自己写的一部分出来,其中有部分内容截图因复制问题,就不放了。
欢迎大佬进行补充,协助小弟完善学习。