李 岩,施少培,郭 弘
(司法鉴定科学研究院 上海市司法鉴定专业技术服务平台,上海200063)
云平台鉴定案件多为涉众类经济犯罪案件,主要类型有传销、非法集资、网络赌博等。随着信息技术的发展,此类案件逐步从线下转至线上,参与门槛日渐降低,呈现出空间虚拟化、形式隐蔽化、收益高额化、危害全面化、地域全球化等特点[1],而参与人员和涉案资金可达到以往线下案件的数百倍。
当前,国内云平台的迅猛发展使得建立和维护一个网站的财力和人力投入都大为降低。本研究过程中遇到的几例网络传销类案件都选择在云上提供服务,采用B/S或者C/S架构设计,数据保存在云上的RDS服务器,用户通过浏览器或者APP注册会员后参与。处理这类案件的环节主要有几个,一是从云平台调取数据,通常由公安、工商等行政机关完成,二是电子数据分析,通常交由鉴定机构进行处理。
以笔者办理的其中一例网络传销案件为例,该案件的送检数据是从阿里云调取的大小分别为80 GB和100GB的两个raw格式镜像文件。由于办案条件所限,其他材料仅提供了阿里云的《调取证据清单》,以及一些嫌疑人电脑、手机等检材中检出的网站宣传材料,缺少网站数据和架构的详细技术资料。委托鉴定的要求包括固定网站页面、会员情况、会员投资提现情况、产品销售情况、奖励规则等。由于涉及页面检验,必须要先把网站在本地进行仿真。在整个仿真检验过程中面临三个层面的解密:操作系统层面的登录密码、数据库层面的访问密码、WEB应用层面的登录密码。
对于网站系统的仿真,一种方式是利用原有的操作系统进行仿真,另一种方式是将网站目录和数据库迁移至检验环境中进行仿真。前者的优点在于最大程度保留了原网站的运行环境,仿真后进行调试的工作量相对较小;缺点在于需要破解操作系统登录密码。后者的优点在于直接绕过了系统登录密码,而且对于典型的环境类型,如LAMP(Linux+Apache+MySQL+Perl/PHP/Python)、Windows Server+IIS+SQL Server+JSP,可以事先准备按照各类环境模板配置好的虚拟机,在需要时直接从中选择;缺点是难以确定所有的配置,在仿真时需要较多调试工作,特别是多台服务器的联合仿真尤为困难。
选择使用原操作系统进行仿真时,需要对系统密码进行破解。对于Windows系统,在离线模式下读写SAM文件,采用散列破解或散列替换的方式获得或者改变账户的登录密码。目前已经有较多工具可以选用,比如集成了密码破解功能的Windows PE类启动盘,在PE模式下启动系统后使用其中的密码破解工具直接修改管理员密码,常见的商用电子数据仿真检验工具也都集成了屏蔽系统密码功能。对于Linux系统,在grub引导前修改引导参数,进入单用户模式,使用passwd命令更改密码;若不是使用grub引导,就需要使用启动光盘,在救援模式下挂载文件系统,编辑/etc/passwd以实现替换或去除密码。
虽然云平台底层或多或少都会有数据保护机制,但在平台即服务(PaaS)云模式或者软件即服务(SaaS)云模式中,数据往往是不加密的[2]。
但对于调取的云平台镜像,通常在调取时已经去除了文件系统级的加密,即其中的文件数据对于电子数据分析人员是透明的,包括保存有数据库连接信息的文件。因此,找到该文件即可获取连接数据库的类型、位置、版本、用户名和密码等信息。搜索该文件可以通过关注文件名包含“database”“db”“config”“conn”的文件或目录,或采用全盘搜索关键词进行定位。
结合检出的数据库数据,在原有环境或者搭建的环境下对数据库进行仿真,在数据库运行状态下使用获取的数据库用户名和密码进行连接,之后即可使用数据库管理工具进行数据分析。但是,通过上述方式获取到的数据库往往仅有一个用户,该用户可能不具有管理员权限。如果要访问数据库的所有数据,就需要进一步获取数据库具有管理员权限的用户。类似地,可以对管理员用户的密码进行重置或暴力破解管理员密码。
云平台网站系统中最为常见的LAMP架构使用MySQL数据库。在检验MySQL数据库时常用的做法是对管理员密码进行重置,具体方法的采用停止mysqld服务后加上“--skip_grant_tables”参数重启服务,之后更新user表中管理员用户的密码,最后执行flush privileges刷新权限,再次启动mysqld服务即可使用新密码登录数据库。
MySQL密码破解则是从user.MYD数据表文件中读取用户密码的哈希串,在MySQL 4.1版本之后哈希串本质上来源于密码的两次SHA1,一共41位[3]。获得该哈希串后使用hashcat/cain等工具进行暴力破解。
SQL Server的登录通常与Windows系统紧密结合,在原系统仿真完成后可以直接用Windows登录修改SA用户的密码。
SQL Server密码破解则通常采用暴力破解,容易找到现成的代码或工具。
其他类型的数据库较少在涉及云平台鉴定的案件中遇到,在此不做赘述。
WEB应用的登录密码一般是采用特定算法加密后将加密字符串保存在数据库的数据表中,加密算法在WEB应用程序中实现。最为简单的加密算法是使用一次哈希函数,但由于一次哈希的抗攻击性差,在注重安全性的网站中会选择更为强壮的加密算法,确保即使数据库数据泄露也不会直接泄露用户的密码。
登录验证的通常方式是对用户输入的密码采用同样的算法加密,将结果与数据库中存储的字符串进行对比,通过验证两者是否一致来判断用户是否输入了正确的密码。因此,当已知用户账户A的密码但不知道用户账户B的密码时,将数据库中B的密码字符串替换为A的密码字符串,即可实现用A的密码登录B的账户。密码替换的方法可以解决大部分情况下的网站登录问题。
一种特殊情况是加密算法中使用了“盐”,且不同用户使用不同“盐”。“盐”是一个字符串,明文保存在程序或者数据库中,与用户密码拼接后执行加密算法生成加密字符串。显而易见的是,在加了不同的“盐”后,相同的密码生成的加密字符串是不同的。这种情况下,破解登录密码需要从程序代码入手,分析出加密算法,正向实现密码到加密字符串的过程,或者逆向实现加密字符串到密码的过程,两者之一即可解决网站的登录问题。在编码实现时可以借助于程序代码本身或者一些公开的算法库。
在本文第一部分提到的案例中,通过X-Ways Forensics加载镜像进行检验发现,镜像为raw格式,无需经过特殊转换。两个镜像文件均为单分区镜像,在80GB镜像的Windows目录中检出操作系统,版本为Windows Server 2012;另一镜像中无操作系统,在 oolmysql-5.7.20-winx64data 目录下检出MySQL数据表文件,在 ool omcat1web****ROOT检出网站根目录。
查看网站目录下的WEB-INFclassesconfigjdbcjdbc.properties文件,找到数据库连接信息,如图 1所示,该 MySQL数据库 root用户的密码是12******xx。
图1 数据库连接信息
在VMware虚拟机中将两个镜像分别挂载为C盘和D盘进行仿真,使用Windows PE启动后修改密码。
进入操作系统后启动MySQL数据库服务和tomcat网站服务,使用图 1中的密码以root用户的身份连接数据库,查看保存管理员信息的Admin表,获得五个管理员账号及密码字符串,如图 2所示。其中的onePassword列即为账号登录密码的加密字符串。
图2 五个管理员账号及密码字符串
本案中未获得用户的明文密码,分析网站程序发现该网站使用JSP开发,部分算法使用java编写。密码加密相关算法的实现在WEB-INFclasseswebsiteutilsCryptUtil.class文件中找到。使用JDGUI对class文件进行逆向工程,反编译得到的java关键代码如图3所示。
图3 使用JD-GUI对class文件进行反编译得到java关键代码
检验发现,用户密码的加密使用了DES算法,密钥及IV是Qi****23,编码方式是UTF-8,加密方式是DES/CBC/PKCS5Padding。根据以上算法和参数,编写java程序实现解密过程[4],获得管理员登录密码。至此,使用管理员账户登录仿真网站后台,后续的检验可以顺利进行。
在云平台电子数据鉴定中处理解密问题时,密码绕过是较优的选择;代码逆向的技术难度较高,暴力破解的时间成本较高,在使用时应予以综合评估。