版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第12章电子数据取证综合案例分析12.1案情简介12.2案件的证据固定12.3数据分析过程12.4分析漏洞原因12.5调查结果与评价
12.1案情简介
12.1.1主要案情
2015年6月9日,P2P金融网站的网站管理人员接到用户投诉,称其账户中的资金不翼而飞。管理员开始误以为是系统错误,经尝试排查后未发现明显异常,在排查过程中又接到多名用户投诉,同样声称其账户中的资金不知去向。管理员此刻才意识到系统可能被黑客入侵,于是立即停止运行服务器中的Web服务和数据库服务,向警方报案以确定攻击者、攻击方法、攻击来源、攻击时间等。
12.1.2取证要求
委托方提取委托要求如下:
(1)对被攻击服务器中的网站、数据库、日志等涉案相关数据进行证据固定。
(2)对上述证据固定结果进行分析,提取攻击者IP、攻击时间、攻击方法。
(3)提取攻击者使用的银行卡、身份证等信息并分析攻击者转移资金的方法。
(4)对攻击者的攻击行为进行分析,找出攻击者使用的漏洞,并分析漏洞形成原因。
12.1.3主要难点问题
近年来,随着司法机关对黑客类案件打击力度的不断增强,恶意的网站攻击者对打击手段也有所了解,具有了一定的反侦察意识。黑客在作案时经常使用代理服务器进行过渡,以隐藏自己的真实IP地址。同时,在进行这类金融类犯罪时,会有一个长期潜伏和准备的过程,尽可能地隐藏自己在被入侵系统中的存在感,减少对系统环境的破坏或修改,从而避免引起系统管理员的察觉。这种作案方式往往会导致更大的损失,与以破坏系统为目的的入侵类案件的手法有明显区别。
12.2案件的证据固定
根据委托人的要求、案件类型及与委托方详细的沟通后,初步达成以下取证与分析步骤:
(1)了解被入侵服务器的相关参数及运行状态。
(2)根据服务器的具体状况选择合适的证据固定工具,制订证据固定计划。
(3)根据证据固定计划对被入侵服务器中所有涉案数据进行证据固定操作。
(4)对证据固定结果进行分析,提取入侵时间、地点、IP、工具、方法等相关信息。
(5)出具应急响应报告、计算机司法鉴定报告,对可能存在的系统漏洞提供合理修补建议。
12.2.1了解被入侵服务器的相关参数及运行状态
在正式取证之前,需要对目标服务器进行一个大概了解,并根据目标服务器的情况制订证据固定计划。对被入侵服务器情况介绍如下:
(1)被入侵服务器属于阿里云服务器,委托方提供了该服务器的IP地址、连接用户名及密码。
(2)被入侵服务器操作系统是Linux,可直接使用SSH客户端远程登录。
(3)被入侵服务器Web服务是Apache,使用的编程语言为PHP。
(4)被入侵服务器后端数据库是MySQL。
12.2.2制订证据固定计划
对服务器的远程证据固定大致包括以下3个步骤:
(1)收集被入侵服务器的系统信息,包括进程、端口、历史命令执行记录、系统日志、磁盘、内存等信息。
(2)提取被入侵服务器Web应用配置和相关数据。
(3)提取被入侵服务器数据库配置和相关数据。
12.2.3选择证据固定工具
本案涉及Linux服务器的远程数据固定,选择的工具包括屏幕录像工具、远程SSH连接工具、远程文件下载工具、服务器系统信息提取工具等。
选择使用系统提供的工具来完成对Linux操作系统基本信息、进程、网络、端口等信息的提取,包括登录日志提取工具last、网络配置管理工具ifconfig、网络数据抓包工具tcpdump、网络端口信息工具netstat等。此外,用到的工具还包括以下几种:
(1)屏幕录像软件FSCapture。屏幕录像的好处是交互性更好,后续屏幕展示的清晰度要远高于数码摄像机。
(2)远程连接工具或软件PuTTY。PuTTY是Windows桌面环境中连接类Linux终端服务的首选工具之一。
(3)远程文件下载工具WinScp。使用WinScp可通过SSH协议直接操作远程Linux服务器中的文件,进行上传、下载、增加、删除等操作,使用方便、直观,易操作。
(4)
MySQL数据库的固定工具MySqldump。MySqldump是MySQL数据库系统中自带的数据库转储工具。
12.2.4连接到远程服务器
此处选择的连接工具是PuTTY,从上下载程序安装包,安装包MD5值为983d8c71dd6eeed78012112b85734318。
运行安装完成的PuTTY工具,弹出的配置对话框如图12-1所示。
图12-1配置对话框
设置远程服务器的IP地址,单击“Open”按钮进入登录界面,输入用户名及对应的密码,即可进入系统。
启动屏幕录像软件FSCapture,勾选“FullScreen”单选按钮,再单击“Record”按钮,如图12-2所示。
图12-2屏幕录像软件FSCapture
远程固定正式开始前需进行时间校准,启动浏览器,访问网络授时网站http://time.,该网站中会动态显示当前北京标准时间,如图12-3所示。
图12-3网络授时网站
12.2.5固定所有用户历史执行记录
Linux操作系统有一个特性,即默认会将用户在终端环境下执行过的命令记录全部存储在该用户对应的用户数据目录的特定文件中,如.bash_history文件。该文件是一个纯文本文件,可使用文本编辑器工具打开、查找、分析。文件名的第1个字符“.”表明这是一个默认被系统隐藏的特殊文件,使用ls命令列出目录中所有文件时,默认不会列出使用“.”开头的文件,除非使用的是“-a”选项(该选项的作用是列出指定目录中所有文件及目录,包括默认不显示的系统文件、特殊文件)。
.bash_history可以通过$HISTSIZE环境变量设置保存记录数的大小,根据Linux发行版的不同其大小设置不一样,其中CentOS的默认设置是1000条记录,所以在超过1000条记录时就会发生记录被覆盖的情况。通常情况下,调查人员在执行证据固定过程中会优先固定那些易失性数据及可能存在被修改可能的数据。
远程服务器一直处于运行状态,即系统处于不断变化的过程中,而且对证据的固定过程本身也会引起服务器的状态变化和内存数据的修改。RFC3227中列出了各种动态信息的级别以及获取的优先级。
在本案例中,就应该在减少对原始数据破坏的情况下,优先获取服务器中可能会变化的动态数据,同时做好数据的完整性校验,调查人员在现场的所有操作要经得起后续的证据审核。
12.2.6固定系统时间
对象系统的时间可能会与当前位置的标准时间存在一定误差,尤其是那些比较老的系统或者管理员没有开启时间同步功能的系统,几分、几秒的误差就可能会给后续的调查分析带来很多麻烦,所以调查人员在开始就应该注意记录和校准该误差。
在固定开始时记录固定开始时间,在固定结束时记录固定结束时间是一个好习惯。本书作者在实际案例中一般都会在固定开始时执行语句“date>date_start.log”,将当前系统时间直接保存到date_start.log文件中;在固定结束后再执行语句“date>date_end.log”,将固定结束时间保存至data_end.log文件中。这样在后期撰写证据固定与分析报告时会直接引用这两个时间值,以免后面记忆混乱。
在固定系统时间的同时需要记录当前时区的标准时间与服务器时间的误差并记录在文件或某个日志中。提取当前时区标准时间一般有两个办法:一是直接访问授时服务器域名,如果没有条件直接访问授时服务器,则可以通过手机拨打时间查询电话号码12117,通过语音方式获取当前时区比较精准的时间。将获取结果与服务器时间进行比较并记录下两者之间的误差值。
12.2.7固定进程信息
系统进程信息属于易失信息的一种,在黑客入侵类案件的分析中尤其重要。Linux操作系统中提取进程信息可通过ps命令完成。执行指令“psaux>ps.log”,可将当前系统启动的进程列表信息保存到ps.log文件中,如图12-4所示。
图12-4当前系统启动的进程列表信息
12.2.8固定网络连接信息
网络连接信息属于易失性信息的一种,对于黑客入侵类案件同样重要。在Linux操作系统中可通过内置命令netstat提取网络连接信息,需要注意的是,在Centos7.0后的版本中netstat被ss命令所取代,不过两者使用的参数是类似的。执行指令“netstat-apn>netstat.log”,可将当前系统中进程正在连接或监听的网络端口列表保存到netstat.log文件中,如图12-5所示。
图12-5当前系统中进程正在连接或监听的网络端口列表
12.2.9固定磁盘信息
提取目标系统中的磁盘信息可帮助调查人员快速了解目标系统中的数据量,同时对系统数据的大致分布做出分析工作量预估和数据分布的初步推测,哪个分区保存的是应用数据、哪个分区保存的是数据库、哪个分区保存的是日志等。在Linux操作系统中可通过执行指令“df-h>df.log”提取系统中可使用的分区信息,如图12-6所示。
图12-6系统中可使用的分区信息
执行指令“fdisk-l>fdisk.log”可提取当前系统中的磁盘、各分区大小、开始扇区、结束扇区等信息,如图12-7所示。
图12-7当前系统中的磁盘、各分区大小、开始扇区、结束扇区等信息
执行指令“mount>mount.log”可提取系统中文件系统加载点信息,如图12-8所示。
图12-8系统中文件系统加载点信息
12.2.10固定网卡信息
在Linux操作系统中可通过执行指令“ifconfig>ifconfig.log”提取目标系统的网卡、IP地址绑定等信息。
在一些案例中存在一台服务器绑定多个IP地址的情况,使用多个IP地址主要用于分流或防止某个IP出现故障导致服务器无法提供正常服务的现象的产生,而备用IP地址可继续提供服务。多个IP也可以将不同类型的数据发送到不同的通道,达到有效区别不同类型数据、提高网络性能的目的。
12.2.11固定用户信息
Linux操作系统中用户信息、登录密码相关的数据保存在 /etc/passwd和/etc/shadow文件中,这两个文件都是文本文件。其中,shadow文件内容结构如图12-9所示。
图12-9
shadow文件内容结构
该文件中第1列保存用户ID,第2列是加密后的密码。关于第2列,如果:
(1)该列留空,即“::”,则表示该用户没有密码。
(2)该列为“!”或“*”,则表示该用户无法使用密码登录,但是其他的登录方式是不受限制的,如SSH公钥认证方式、su方式。
(3)该列以“!”或“!!”开头,则表示该用户被锁定。
(4)该列为“!!”,即“:!!:”,则表示该用户从来没有设置过密码。
(5)格式为“$id$salt$hashed”,则表示该用户设置了登录密码。其中,“$id$”的id表示密码的加密算法,“$1$”表示使用MD5算法,“$2a$”表示使用Blowfish算法,“$2y$”是另一算法长度的Blowfish,“$5$”表示SHA-256算法,而“$6$”表示SHA-512算法。
12.2.12固定用户登录日志信息
用户登录日志在黑客类案件中有着举足轻重的作用。Linux操作系统对于用户“成功”“失败”登录状态的日志分别使用了不同的文件来保存。成功登录日志记录保存在/var/log/wtmp文件中,该文件属于二进制结构特殊文件,文件头及部分内容如图12-10所示。
图12-10
wtmp文件的文件头及部分内容
wtmp文件中的内容可通过执行last指令查看,在目标系统中执行“last>last.log”,可以将系统中用户成功登录的日志保存到last.log文件中,部分登录记录如图12-11所示。
图12-11部分登录记录
12.2.13固定Apache应用数据
在Linux操作系统中,Apache是常用的Web服务器之一,经常以httpd服务的形式运行。通过“servicehttpdstart”或“servicehttpdstop”命令可以启动或关闭服务。
默认情况下Apache的安装路径为 /usr/,Apache服务配置文件默认保存在 /etc/httpd/conf目录中。配置文件中的DocumentRoot参数定义了Web目录的根路径,如图12-12所示。
图12-12目标网站的日志保存在logs/jiudai-access.log文件中
12.2.14固定Apache日志
Apache服务配置文件http.conf中,LogPath属性定义了Web服务器访问日志默认保存路径,该日志文件路径也可以由虚拟主机配置文件中的CustomLog参数指定,如图12-13所示。
图12-13
CustomLog参数
12.2.15固定数据库
在复杂的Web应用中,后端可能会通过数据库服务持久化保存应用数据。具体的数据库选择并不统一,在证据固定时期,调查人员可以根据Web应用中的配置文件找到数据库服务器的IP地址、用户名、密码等信息。
在本案例中,调查人员通过分析Web应用中的数据库配置文件dbconfig.php,确认后台数据库为MySQL,数据库服务器的IP地址为localhost,连接的用户名为dw@h#53X#$,连接密码为re26~D5j@@。配置文件中的参数如图12-14所示。
图12-14数据库配置文件中的参数
对数据库的证据固定有多种方法可选:
①直接复制数据库存储文件;
②将数据库中所有表中的数据导出保存为.csv文件;
③将数据库中所有数据及表结构转储为.sql文件。这几种固定方式各有优缺点。
直接复制数据库存储文件通常适用于用户量不大、读写操作不是特别频繁、可以短暂停止数据库服务的情形。这种证据固定方式对数据库文件的同步性要求比较高。如果数据库在没有被停止的情况下复制文件,数据库产生的写操作可能导致数据库文件中部分数据不同步,后期搭建运行环境时会经常遇到检查环境与运行环境不一、数据库主库文件与日志文件不同步等无法还原的情形。所以这种方法虽然简单,对调查人员技术要求不高,但是并不推荐。
12.2.16固定数据库日志
MySQL数据库中常用的日志有Binlog、generallog、慢查询日志等几种类型。
(1)
Binlog日志记录了数据库上的所有改变,并以二进制的形式保存在磁盘中。通过该文件可将数据库任意恢复到某个时间点。Binlog日志文件默认保存在数据库的数据目录中,在对数据安全性要求较高的业务应用中需开启Binlog日志。通过登录MySQL数据库并执行“showvariableslike'Binlog'”语句查询该日志功能是否开启。可以通过执行“setglobalvariablesBinlog=on”语句开启Binlog日志功能,通过执行“setglobalvariablesBinlog=off”语句关闭Binlog日志功能。
(2)
generallog保存所有数据库中执行的SQL语句,包括对数据库的查询、增加、修改、删除等操作。这种记录对数据库的审核、调优以及取证分析比较有用,但是开启generallog对数据库的性能影响比较大。generallog查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
(3)慢查询日志用来记录数据库运行中响应时间超过阈值的语句,具体是指运行时间超过“long_query_time”值的SQL语句。long_query_time的默认值为10,表示运行10 s以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置该参数。如果不是调优需要,一般不建议开启该服务,因为慢查询日志或多或少会影响数据库的性能。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。
12.3数据分析过程
12.3.1进程分析系统进程列表中列出了当前系统所有进程的信息,包括进程ID、父进程ID、可执行程序全路径、启动时间等信息。进程分析的分析目标是不仅要得到当前系统应用、服务等系统状况,还要分析当前进程列表中是否有一些不常见的、异常的进程。然而并没有什么工具可以辅助调查人员来确认哪个进程是可疑进程,哪个进程具有异常操作,该分析过程基本依赖调查人员的经验。本案例中现场提取的进程列表部分截图如图12-15所示。图12-15现场提取的进程列表部分截图
对该进程列表中的主要进程做以下简单描述:
(1)
/sbin/init:该程序是系统中所有程序的父进程。该进程的PID总是1,负责启动组成Linux操作系统的其他进程。
(2)
httpd:Apache服务的进程。
(3)
mysqld:MySQL数据库系统的后台服务进程。
(4)
crond:定期执行指定命令的守护进程,可以通过crontab进行设置。crontab是一个命令,常见于UNIX和类UNIX的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于crontab配置文件中,以供后续程序读取和执行。
在Linux操作系统中,定时任务一般可以分为以下3种:
① at:适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。
②
crontab:需要启动一个crond服务才可以,crond服务通过crontab命令实现。
③
anacron:无法周期性执行,只能以天为周期。但其有一个特点,即在关机状态下未执行的任务在下次开机时可以补上执行。
(5)
watchdog:系统服务运营商提供的安全插件。
(6)
ksoftirqd:系统软件中断处理线程,属于系统正常运行所必需的线程。
从进程列表中反映的状态看,检材服务器并不存在被入侵后植入的可疑进程。
12.3.2分析网络连接
从检材服务器中提取到的网络连接信息列表如图12-16所示。从图12-16所示的网络连接信息可以发现,系统中主要提供了Apache、MySQL数据库、sshd登录等服务,未发现异常的网络连接端口,未发现系统明显的主动连接外部服务器的异常流量。
图12-16网络连接信息列表
12.3.3分析启动项
Linux下的任务调度分为两类,系统任务调度和用户任务调度。前者是系统周期性要执行的工作,后者是用户定期要执行的工作。通过启动项分析发现,从检材中提取到的crontab启动程序列表为空,表明未分析异常启动进程项。
12.3.4分析登录日志
从检材中提取到的登录信息共102条,部分登录信息如表12-1所示。
对表12-1所示列表中登录记录符合案发时间段的所有IP进行提取并去重,结果共涉及10个IP地址。经与受害单位服务器管理人员核对,上述IP登录地址均属于公司维护人员常用IP,并未发现其他异常登录地址。
12.3.5分析错误登录日志
错误登录日志用于记录所有用户的未正确输入用户名、密码情况等。从该记录文件中提取到的错误登录日志共3389条。对所有错误登录日志进行汇总并统计,提取所有错误登录记录的IP地址,部分IP列表如表12-2所示
对所有尝试使用错误用户名及密码登录的IP地址去重并统计后,共提取到33个独立IP访问记录,如表12-3所示。
使用上述错误登录IP地址作为关键词检测服务器正常登录日志中是否有来自上述IP地址的成功登录IP。经检测,从检材服务器的成功登录日志中未检测出包含上述尝试密码破解的错误登录IP地址的成功登录记录。这表明虽然有黑客尝试入侵目标服务器,但由于目标服务器用户名、密码并不属于弱密码,因此黑客并没有成功破解出正确的登录密码。
12.3.6分析Web
在涉及服务器入侵的案件中,Web分析总是整个调查取证过程中的“重头戏”。对于一般的黑客来说,找一个Web漏洞所花费的精力、时间、成本比挖出一个系统漏洞要容易得多。在本书作者参与调查的大部分黑客入侵类案件中,有很大一部分是从Web漏洞或WebShell的查找开始的。
分析Web中是否存在异常的WebShell文件,常用方法如下:
(1)通过安全软件快速扫描整个Web目录。通常来讲,使用Web安全软件比调查人员手工分析或通过经验来查找可疑文件要更高效、简洁,适用性强,误报少;且这种方法不限于调查人员的调查经验,对于初次涉及案件调查的调查人员或对黑客调查类案件并不熟悉的调查人员来说是一种“速效救心丸”。
(2)如果调查人员比较深入了解了案件的前因后果,那么也可以通过关键词、时间排除法等快速定位可疑文件。例如,管理员确定目标Web目录中的所有文件在最近一个月内根本没有更改过,那么可以通过文件的时间信息快速提取检材中最近一个月内被创建或修改过的可执行程序“find.-name"*.php"
-a-ctime-30”,如果的确能找到一个月内被修改或创建的 .php文件,则可再通过分析目标.php文件的功能代码,确定该文件是否具有恶意或可疑功能;也可通过WebShell中常用的关键词直接搜索整个Web目录中的所有文件,如execute、@eval($_GET、@system($_POST、assert($_REQUEST、file_get_contents,可以直接使用grep指令搜索上述关键词;甚至可以结合文件的创建时间、修改时间信息进一步进行更复杂的可疑文件搜索。
在该案例中,本书作者直接使用安全软件D盾对目标Web目录中所有文件进行了扫描。不负所望,结果从该目录中提取到了一个可疑文件uploaddyp2p.php.bmp,对该文件进行扫描的结果如图12-17所示。
图12-17使用安全软件D盾对目标Web目录中所有文件进行扫描
该文件大小为2KB,MD5值为460133aa42302c0e78656266959e7057。该文件部分代码内容分别如图12-18和图12-19所示。
图12-18文件部分代码内容(1)图12-19文件部分代码内容(2)
注意,上述代码中功能代码“@assert”(断言)的主要作用是:在编写代码时,人们总是会做出一些假设,断言就是用于在代码中捕捉这些假设的,可以将断言看作异常处理的一种高级形式。程序员断言在程序中的某个特定点的表达式值为真。如果该表达式为假,就中断操作,即要判断该断言的真假,必须执行“@assert”后的代码,即“base64_decode”函数解码后的程序。该程序的内容又来源于客户端提交的参数h3len中的内容,即如果客户端程序通过参数h3len提交了一些影响检材服务器安全性、稳定性的指令,则该程序也不做任何检查就将客户端提交的程序完全执行。
虽然该木马文件无法给分析员提供直接帮助,确认并定位可疑黑客的位置,但可以通过该文件的属性信息进行以下扩展分析:
(1)以提取到的文件的创建、修改时间作为一个坐标来查找那个时间前后的可疑文件。
(2)虽然该文件无法执行,但可以通过提取到的Web访问日志分析是哪个用户上传了该文件或第1个成功访问该文件的用户,这些用户最为可疑。
在该案例中,调查人员充分利用了上述可疑文件的时间特征,以图片文件的创建时间为线索,执行指令“find.Typef-a–name"*.php"-aneweruploadyp2p.php.bmp”后,找到了在该图片文件被创建成功后唯一的扩展名为 .php的可执行文件adminer.php。该文件部分内容如图12-20所示。
图12-20
adminer.php文件部分内容
在鉴定计算机中安装 .php运行环境,并将程序文件adminer.php复制到鉴定计算机中安装的Apache的Web目录c:\xampp\apache\htdoc下,并通过Web浏览器直接访问该页面的URL地址/adminer.php,如图12-21所示。
图12-21通过Web浏览器直接访问该页面的URL地址
从图12-21中的选择参数的内容来看,该程序的功能属于数据库管理类的程序,需要提供目标服务器的登录IP地址、用户名、密码信息才可以登录。这里调查人员进行测试时,使用鉴定计算机中临时搭建的MySQL数据库用户名root、密码root直接成功登录鉴定计算机中的MySQL数据库并可对鉴定计算机中MySQL数据库的内容进行直接管理(如增加、修改、删除、查询等),部分内容如图12-22所示。
图12-22
MySQL数据库的部分内容
综上所述,程序文件adminer.php是一个完全具备数据库操作功能的管理软件。该软件属于开源、免费的数据库管理程序。该程序本身并不具备任何恶意功能,所以即使使用安全软件对该程序进行安全检测也不会检测出其恶意行为,因为其本身仅仅是作为数据库管理程序在使用。从被入侵服务器的系统管理员处得知该程序不属于管理人员自己主动在服务器中使用的数据库管理软件,明显该程序是由黑客上传并使用的。
既然可以确认是黑客上传了该数据库管理软件,调查人员的下一步操作就是分析该数据库管理软件对当前被入侵系统的影响,如该软件在当前被入侵的系统中可以完成哪部分功能以及上传者,访问者有哪些人,他们进行了哪些访问、从哪里访问、什么时间进行了访问,访问是否成功,访问该程序的主要目的是什么。带着上述一系列疑问,作者等进行了更深入的了解与分析。
12.3.7分析Web日志
本小节主要分析目标是对检材服务器中提取到的82个Web日志文件进行分析,并尝试从日志中回答12.3.6小节提出的几个问题:数据库管理程序adminer.php的上传者、访问者有哪些人,他们进行了哪些访问、从哪里访问、什么时间进行了访问,访问是否成功,访问该程序的主要目的是什么。部分日志文件列表如图12-23所示。
图12-23部分日志文件列表
首先,第一个明确的目标是提取所有访问过数据库管理程序文件adminer.php的记录。
对于纯关键词搜索的功能来说,Linux操作系统中自带的grep指令可以完全满足要求。执行指令“grep–ai"adminer.php"
access_log*”,从上述所有日志文件中提取到访问adminer.php文件的记录共590条(将上述所有访问记录保存到adminer.php.log文件中),其中部分日志记录内容如图12-24所示。
图12-24部分日志记录内容
目标服务器记录的Web日志格式主要组成部分包括客户端访问IP地址、访问时间、访问使用的方法及URL地址、返回访问结果状态、返回的页面数据的大小、访问前来源URL地址、客户端的浏览器型号、版本号等(从左至右)。
从上述590条访问日志中提取到多个客户端信息为compatible;MSIE6.0;WindowsNT5.1;Alibaba.Security.Heimdall.240968,即阿里云服务商的Heimdall扫描器的扫描记录。上述安全扫描器的扫描记录对于调查人员的分析是无意义的,所以需要对提取到的590条访问adminer.php文件的记录中所有来源于阿里云Heimdall扫描器的扫描记录进行排除。执行指令“grep-v'Alibaba'../adminer.php.log>../adminer_exclude_Alibaba.log”,可达到排除扫描器扫描结果的操作。排除阿里云安全扫描器后共提取到319条访问adminer.php文件的记录。
对上述日志的解析如下:
该条日志的访问时间为31/May/2015:17:16:32+0800,IP地址为7,URL地址为/modules/admin/adminer.php?username=cjd%7E777%5E&db=changjiudai&edit=dw_account_cash&where%5Bid%5D=13238,访问方法为GET,该页面的访问返回状态是200,表明访问正常。
如何理解该条日志中客户端访问的URL地址/modules/admin/adminer.php?username=cjd%7E777%5E&db=changjiudai&edit=dw_account_cash&where%5Bid%5D=13238?可以认为该URL地址由以下几个部分组成,首先访问的网页是/modules/admin/adminer.php,在该网页后由问号“?”将目标页面与访问时传递给该页面的参数进行区分。问号“?”后的所有数据由参数及该参数对应的值组成。等号“=”前表示提交给目标页面的参数名,等号“=”后表示该参数对应的值。将该URL地址直接在Web浏览器中打开,查看该URL地址对应的返回结果,省去了静态分析代码的过程。该URL地址对应的返回结果如图12-25所示。
图12-25
URL地址对应的返回结果
从图12-25中可知,该URL地址对应编辑数据库changjiudai中的dw_account_cash表中的id号为13238的用户账户信息。该表中表名对应URL地址中的参数edit,用户id对应URL地址中的参数where[id]的值。从上述日志分析结果可知,通过访问文件adminer.php可以完全操控被入侵服务器中的MySQL数据库中的数据。因此,通过分析Web日志中adminer.php的访问记录可以得知入侵者对检材服务器的数据库进行过哪些操作。
执行指令“grep-E-i–o"user_id%5d=[0-9]{1,8}"adminer.Php.exclude.alibaba.log”,从390条adminer.php文件的访问记录中提取到涉及4个用户id的修改记录,即1392、1679、2613、6248,如图12-26所示。
图12-26提取到涉及4个用户id的修改记录
执行指令“cut-d:-f2adminer.php.exclude.alibaba.log|cut-d''-f1|sort|uniq-c|sort-r”,对上述所有390条访问记录中的IP地址进行提取并统计各个IP地址的访问次数,如图12-27所示。
图12-27提取并统计各个IP地址的访问次数
通过网络分析上述所有访问过adminer.php文件的IP地址归属地,如图12-28所示。
图12-28分析IP地址归属地
根据与管理员的沟通得知,上述3条访问记录属于服务器管理员发现服务器异常后的访问记录,其中第1条访问记录的返回状态代码为404,表明该记录产生时该文件已不存在。对另外两条访问记录分析其访问代码后未发现服务器数据有实质性破坏,因此可以排除上述两个IP地址的可疑性。
余下10个IP地址的访问记录如图12-29所示。
图12-29余下10个IP地址的访问记录
将上述10个IP地址作为关键词对所有Web日志进行搜索,提取上述10个IP地址的所有访问记录,通过执行指令“find./log/-typef|xargs-I{}grep-a-i-fadminer_uniq_ip.txt{}>adminer_uniq_ip_all_.log”完成。从上述所有Web访问记录中提取到10个入侵者IP的所有访问记录共1008条,大小为245KB,将它们保存到adminer_uniq_ip_all_.log文件中。
从上述提取到的1008条访问记录中分析所有访问记录的时间信息,如图12-30所示。
图12-30分析所有上述访问记录的时间信息
对前面的分析结果进行阶段性的总结:
(1)检材服务器的Web目录中存在一个可以完全操控数据库能力的文件adminer.php,该文件并非由服务器管理员上传,推测其由入侵者上传并使用。
(2)检材adminer.php具备完全操控MySQL数据库的能力,入侵者通过该文件可以直接修改服务器中的用户信息,包括身份证号、银行卡号、提取金额、账户余额等任意数据。
(3)共提取到4条用户数据操作记录。
(4)共提取到的10个可疑IP地址,全部位于日本、中国香港,猜测其可能是VPN。
(5)入侵者对服务器中的数据进行修改的时间为2015年3月30日、2015年4月1日、2015年4月2日、2015年5月31日。
12.3.8分析数据库
根据12.3.7小节中提取到的4个存在被修改用户信息的用户id,在数据库中执行指令“selecta.user_id,a.username,a.card_id,a.realname,b.account,b.branch,d.total,d.use_money,d.no_use_moneyfromdw_userasaLEFTJOINdw_account_bankasbona.user_id=b.user_idleftjoindw_accountasdona.user_id=d.user_idwherea.user_id=1392ora.user_id=1679ora.user_id=2613ora.user_id=6248”后,提取到这4个用户的基本信息,如图12-31所示。
图12-31提取到的4个用户的基本信息
执行指令“selectuser_id,total,money,use_money,no_use_money,remark,FROM_UNIXTIME(addtime,"%Y-%m-%d")fromdw_account_logwhereuser_id=6248andtype='cash_frost'”,从数据库的应用日志表dw_account_log中提取所有涉及上述4个用户的提现操作记录,分别如图12-32~图12-35所示。
图12-33提取所有涉及用户id为2613的提现操作记录图12-32提取所有涉及用户id为6248的提现操作记录图12-34提取所有涉及用户id为1392的提现操作记录图12-35提取所有涉及用户id为1679的提现操作记录
在数据库中执行指令“selectuser_id,total,money,use_money,no_use_money,remark,FROM_UNIXTIME(addtime,"%Y-%m-%d"),addipfromdw_account_logwhereuser_idin(6248,2613,1392,1679)andtype='cash_frost'”,提取上述4个涉案用户的提取操作IP地址信息,分别如图12-36~图12-39所示。
图12-36提取涉及用户id为6248的提取操作IP地址信息图12-37提取涉及用户id为2613的提取操作IP地址信息图12-38提取涉及用户id为1392的提取操作IP地址信息图12-39提取涉及用户id为1679的提取操作IP地址信息
对上述分析结果再进行阶段性的总结:
(1)检材数据库中的确存在4条涉嫌篡改用户提现记录的数据。
(2)上述4条提现记录日期与Apache日志中的adminer.php访问时间基本吻合。
(3)上述4条提现记录的IP地址与adminer.php访问IP吻合。
(4)入侵者可以通过adminer.php完全操纵目标服务器中的数据,所以dw_account_log表中的数据并不十分可信。
12.3.9数据库Binlog日志转换
通过前面的分析结果知道了入侵者IP、可能的入侵时间、涉及受害者的用户id信息,但还无法从日志中分析出入侵者是如何实现提现到自己的账户并将钱转走的,以及入侵者修改了系统中的哪些数据。
调查人员从检材服务器中提取了MySQL数据库的底层Binlog日志。该日志文件的作用是保存所有对数据库修改、增加、删除的记录。MySQL数据库的Binlog日志属于二进制文件,无法直接使用文本编辑器打开它。使用MySQL自带工具mysqlbinlog.exe可以将Binlog日志文件转换为 .sql纯文本文件。执行下列指令:
Binlog日志文件被转换为all_Binlog.sql纯文本文件,该文件总大小为3.19GB,文件内容如图12-40所示。
图12-40
all_Binlog.sql文件内容
12.3.10用户id为2613的用户操作日志分析
执行指令“grep-C5-a-i-E”user_id=\‘2613\’|user_id=2613“
all_Binlog.sql>2613.log”,查询所有Binlog操作日志中user_id=2613的操作记录并保存到2613.log文件中。
从该日志文件中提取到一条2015年3月30日凌晨2点35分28秒的操作记录,该记录更新了用户id为2613的用户信息,更新用户名为康、身份证号码为630104********2543,代码如下:
2015年3月30日凌晨2点37分08秒,用户提现申请记录表dw_account_cash中更新了一条该用户的提现记录,提现的银行卡号为621700001004806****,开户行地址为北京丰台万年花城支行,代码如下:
2015年3月30日凌晨2点38分33秒,用户操作记录日志表dw_account_log中的用户操作记录被删除,该删除操作仅删除了用户id为2613且日志id大于81869的操作记录,推测此操作是入侵者为了隐藏自身的提现操作而进行的,代码如下:
2015年3月30日凌晨2点39分24秒,该用户的账户余额减少了101675元,代码如下:
2015年3月30日上午9点58分,该用户的账户余额中的钱被成功扣除,代码如下:
2015年4月1日17点57分05秒,该用户的用户信息被再次更新,其用户名被更新为吴*,身份证号码变更为310227********0029,代码如下:
2015年4月1日17点57分45秒,该用户的银行卡信息再次被更新,银行卡号被更改为984301010228****,开户行地址被更改为松江区乐都路支行,代码如下:
上述更新操作发生后没有产生提现记录。
2015年5月31日21点00分09秒,该用户信息又被再次更新,用户名被更改为吴**,身份证号被更改为510211********1210,更新时使用的IP地址为86,代码如下:
2015年5月31日21点02分20秒,该用户提现记录表中被插入了一条提现记录,提现银行卡号为621226211100345****,提取银行卡开户行地址为玉林博白支行营业室,提现时使用的IP地址为45,代码如下:
2015年6月1日上午9点29分13秒,该用户账户日志中被插入一条提现失败记录,该异常操作被管理员发现并终止了入侵者的提现行为,代码如下:
12.3.11用户id为1679用户操作日志分析
2015年3月30日凌晨2点51分29秒,用户id为1679的用户信息被更新,用户名被更新为吴**,身份证号被更新为510211********1210,更新时使用的IP地址为106.120.233.122,代码如下:
2015年3月30日上午8点14分14秒,一条用户提现记录被插入数据库中,提现IP地址为84,银行卡号为621226211100345****,提现金额为59044,代码如下:
2015年3月30日上午9点58分51秒,一条提现成功记录被插入数据库中,提现金额为59044,代码如下:
2015年4月1日17点58分06秒,该用户信息再次被更新,用户名变更为陈 *,代码如下:
2015年4月1日17点58分35秒,该用户银行卡信息被连续两次更新,代码如下:
12.3.12数据库日志分析汇总
本案例数据库日志分析汇总如下:
(1)嫌疑人先通过修改数据库中的用户信息、提款人银行卡信息,再通过系统提现功能将钱转入嫌疑人设定的银行卡中。
上述作案过程中涉及的银行卡号码有5个。
(2)因为嫌疑人存在删除用户操作日志表的行为,所以当前数据库中dw_account_log表中的记录并不完整,不能作为完全判断的依据。
(3)嫌疑人提款申请有成功记录。
(4)入侵者在案件中使用了以下5个银行卡号及身份证信息,如图12-41所示。
图12-41入侵者使用的5个银行卡号及身份证信息
12.4分析漏洞原因
通过前述入侵过程分析基本清楚了入侵者IP、时间、方法、所涉及的提现金额、银行卡号、身份证号码等信息,但对于入侵者如何上传adminer.php文件、使用了什么样的系统漏洞等问题一无所知。
要分析系统漏洞形成原因,没有一个简单的办法或工具能够让调查人员直接回溯整个入侵过程,只能根据已有的数据、日志、数据库等信息先进行大范围的猜测,再逐步验证自己猜测的结果是否准确。
在综合分析了日志文件、数据库文件后,调查人员觉得入侵者从Web入侵的可能性最大,入侵者可能使用了某个未知的Web漏洞上传了可疑文件uploaddyp2p.php.bmp。虽然该文件不具备可执行权限或功能,但却给调查人员指明了一个方向,即入侵者上传的入侵路径一定与该文件相关。
经分析,发现了一个比较让人费解的问题,如图12-42所示。
图12-42
uploaddyp2p.php.bmp
从图12-42中发现有很多数据被POST给可疑文件uploaddyp2p.php.bmp。.bmp文件不具备执行权限,向该文件POST数据本身就是一个十分异常的现象。日志中显示这些文件访问返回状态是200,表明文件已存在,但该文件在前面的访问结果状态一般都是404,表明该文件并不存在。在404状态与200状态之间Web日志发现都会存在一个神秘的POST请求操作,其代码如下:
该请求操作访问的页面为/plugins/avatar/index.php,这个访问请求到底具备何种功能?根据目前的资料来说调查人员一无所知,对此可以用以下两种方法分析该文件的功能:
(1)直接阅读代码,分析该URL地址后的各项参数,阅读index.php代码,对照分析引入上述参数后index.php的程序流程。
(2)通过一个仿真环境直接访问该URL地址,看看用同样的URL地址访问同样的页面会返回什么样的结果。显然后一种方法比直接阅读代码要更快速、简洁。
调查人员利用xampp工具包提供的Apache、MySQL、PHP环境将被入侵服务器的Web网站直接在本地进行还原(还原过程省略)。
启用Web浏览器,访问该URL地址(/plugins/avatar/index.php?m=user&inajax=1&a=uploadavatar&appid=1&input=3de3YQ0i5kzSE5qjNPJTZFwz1WS4BgxZIiYzEHtC1PL4ZTTw%2BYC4yz5ge7whH%2FPIZjLQx7JUMXVDJKxpjyVfRTQjRpk&agent=111&avatartype=virtual),返回结果如图12-43所示。
图12-43访问该URL地址返回结果
结果返回了一个值 -3,这个返回值代表什么意思呢?接下来阅读目标页面/plugins/avatar/index.php的源代码,找到相关函数,如图12-44所示。
图12-44
index.php的源代码
该页面的代码开头导入了页面avatar.class.php,并生成了一个新的Avatar类的对象。在该页面中提取参数a对应的值(从URL地址中提取参数a的值为uploadavatar)并判断Avatar对象中是否存在参数a对应的方法uploadavatar。如果存在该方法,则将URL地址后的参数进行序列化并调用该方法,调用方法名为字符串“on”+“uploadavatar”,即调用onuploadavatar函数。
在代码页面avatar.Class.php中提取onuploadavatar函数,如图12-45所示。
图12-45提取onuploadavatar函数
图12-45所示代码明确显示该函数中检测参数Filedata是否为空,如果为空则返回 -3。这里找到了错误原因,即访问该URL地址缺少了提交一个参数名为Filedata的数据,该数据对应的是一个文件。
如何提交一个文件给这个页面文件呢?可以利用curl工具访问并上传数据,也可以使用以下指令上传文件:
curl-F"Filedata=@1.bmp"":8087/changjiudai/plugins/avatar/index.php?m=user&inajax=1&a=uploadavatar&appid=1&input=3de3YQ0i5kzSE5qjNPJTZFwz1WS4BgxZIiYzEHtC1PL4ZTTw%2BYC4yz5ge7whH%2FPIZjLQx7JUMXVDJKxpjyVfRTQjRpk&agent=111&avatartype=virtual"
执行该指令后,在Web目录中生成了一个文件uploaddyp2p.php.bmp,如图12-46所示。
图12-46
Web目录
uploaddyp2p.php.bmp就是前面章节中被检测出存在一句话后门的可疑文件。既然通过上述方法可以直接在被入侵服务器中生成一个 .bmp文件,那是否可以同样生成一个 .php文件?如果确认可以生成,那么也可以推测入侵者同样也可以生成这样一个文件。但调查人员对uploaddyp2p.php.bmp文件的产生规则并不了解,只好继续分析onuploadavatar函数,如图12-47所示。
图12-47分析onuploadavatar函数
在存在上述代码的页面文件avatar.php中提取到一个函数uc_authcode,如图12-48所示。
图12-48uc_authcode函数
该函数的第二个参数operation有一个默认值DECODE,即如果调用该函数时不对参数operation赋值,则该值默认是DECODE;该函数第3个参数key的默认值为空。在该函数调用的注释中提取到一个AVATAR_KEY,这个值为deck,且在页面文件avatar.php中提取到一个调用uc_authcode函数的语句,调用语句使用的参数key的值就是deck,如图12-49所示。
图12-49调用函数uc_authcode的语句
根据上述代码调用规则写一段解密代码,如下:
执行上述代码文件,运行结果如图12-50所示。
图12-50运行结果
回头再看一下这个URL地址:changjiudai/plugins/avatar/index.php?m=user&inajax=1&a=uploadavatar&appid=1&input=3de3YQ0i5kzSE5qjNPJTZFwz1WS4BgxZIiYzEHtC1PL4ZTTw%2BYC4yz5ge7whH%2FPIZjLQx7JUMXVDJKxpjyVfRTQjRpk&agent=111&avatartype=virtual。该URL地址是从Web日志文件中提取的,从这种日志文件中提取到的日志URL地址都经过了urlencode编码,以防止一些特殊字符、中文无法上传。
从加密字符串中也提取到了这样的字符%2B、%2F,显然这两个字符的原意并非如此。要解决urlencode的问题很简单,即在将解密代码中的字符串提交给解密函数前,使用urldecode函数对URL地址中被urldecode编码过的字符进行还原操作即可。重新修改解密代码,如下:
上述代码的运行结果如图12-51所示。
图12-51运行结果
经过上述解密过程分析,了解了加密字符串的意义。下面的操作是尝试通过向服务器提交一个真正存在的文件,观察该提交过程的返回结果。因为调查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人口普查工作人员回避制度
- 五金厂的安全生产隐患排查制度
- 使用语言文字奖惩制度
- 门窗客诉奖惩制度模板
- 乐陵诚信文化建设制度
- 社区网格化积分奖惩制度
- 安全管理奖惩制度模板
- 公司车间员工奖惩制度
- 郑州嘉锦酒店奖惩制度
- 舞钢文明单位奖惩制度
- JG/T 472-2015钢纤维混凝土
- 电工技能比武试题及答案
- 糖厂技术改造工程施工组织设计方案
- 医院三合理一规范培训
- (人教2024版)英语七年级下册全册词形转换高清打印(默写版+背诵版)
- 加油站安全管理提升计划
- 1.3 学会自我保护 (教学课件)2024-2025学年道德与法治 七年级下册 统编版
- 五年级下册道德与法治第一单元《我们一家人》大单元整体教学设计
- 中宣部直属单位2025年度公开招聘工作人员历年高频重点提升(共500题)附带答案详解
- 更换引流袋技术操作
- 职业学校《影视后期特效制作》课程标准
评论
0/150
提交评论