CryptDB使用教程及漏洞利用
Introduction
本文介绍华南理工大学软件学院《数据库开发实训》的一个可选课题:CryptDB漏洞利用。
任务目标:
- 追踪CryptDB漏洞相关论文
- 详细介绍CryptDB漏洞与攻击方案,并演示之
环境要求:
- Ubuntu 12.04 LTS(可以从这里下载)。 笔者曾经在Ubuntu 19.04尝试过,并不能装
- 未在其他linux发行版下做过测试,debian系linux理论上应该都可行
- 攻击方案编程环境不作限制
CryptDB Installation
安装ubuntu 12.04 LTS映像,安装完成后进行软件源的设置。
1 sudo gedit /etc/apt/sources.list
删除(也可以备份)所有内容后粘贴以下内容,若不稳定可以自己找:

#网易 deb http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb-src http://mirrors.163.com/ubuntu/ precise main universe restricted multiverse deb http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-security universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-proposed universe main multiverse restricted deb http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-backports universe main multiverse restricted deb-src http://mirrors.163.com/ubuntu/ precise-updates universe main multiverse restricted #中国科技大学 deb http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse deb http://debian.ustc.edu.cn/ubuntu/ precise-backports restricted universe multiverse deb http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse deb http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse deb http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse deb-src http://debian.ustc.edu.cn/ubuntu/ precise main restricted universe multiverse deb-src http://debian.ustc.edu.cn/ubuntu/ precise-backports main restricted universe multiverse deb-src http://debian.ustc.edu.cn/ubuntu/ precise-proposed main restricted universe multiverse deb-src http://debian.ustc.edu.cn/ubuntu/ precise-security main restricted universe multiverse deb-src http://debian.ustc.edu.cn/ubuntu/ precise-updates main restricted universe multiverse
若安装中文输入法,可以看这里
安装必要的软件包,并在项目的git页面clone代码。为了方便,这里我们把代码clone到~下:
1 sudo apt-get update 2 sudo apt-get install git ruby lua5.1 3 cd ~ 4 git clone https://github.com/CryptDB/cryptdb.git
利用脚本安装CryptDB(脚本会自动安装一切依赖软件,包括mysql):
1 cd cryptdb 2 sudo ./scripts/install.rb ~/cryptdb
在安装mysql时会提示设置root登录口令,最好设置为"letmein"。因为之后启动代理服务时默认口令是letmein(也可以自行修改)。
执行完毕后要进行环境变量的设置:
1 sudo su (必需要有这句话!) 2 sudo vim ~/.bashrc 3 # 在文件最后一行加上下面这句,your_account_name替换为你的账户名 4 export EDBDIR=/home/your_account_name/cryptdb
接下来要启动mysql-proxy服务:
1 sudo su (如果上面获取过root权限则不需要) 2 cd /home/your_account_name/cryptdb/bins/proxy-bin/bin/ 3 ./mysql-proxy --plugins=proxy 4 --event-threads=4 5 --max-open-files=1024 6 --proxy-lua-script=$EDBDIR/mysqlproxy/wrapper.lua 7 --proxy-address=127.0.0.1:3307 8 --proxy-backend-addresses=127.0.0.1:3306
在$EDBDIR/mysqlproxy/wrapper.lua中存放着数据库代理的相关设置,上文提到的letmein口令被明文存放其中,可根据实际情况修改。
至此,CryptDB安装工作结束。接下来进行CryptDB的功能测试。
启动新的terminal,连接到mysql:
1 mysql -u root -pletmein -h 127.0.0.1 -P 3307
再启动一个新的terminal,连接到mysql:
1 mysql -u root -pletmein -h 127.0.0.1 -P 3306
其中,使用3307端口的进程模拟客户(或应用)所在进程,使用3306端口的进程模拟数据库管理员所在进程。
接下来进行CryptDB功能测试。在端口为3307的terminal中输入以下命令(不要退出mysql,之后的3306端口terminal同理):
1 create database cryptdbtest; 2 use cryptdbtest; 3 create table user(id int, name varchar(10)); 4 insert into user values(2,"tom");
结果如下图所示:
然后通过3307端口查看数据库表数据:
1 select * from user;
可以看到3307通过mysql-proxy代理是可以看到明文数据的,即使表名被加密过,但使用明文的表名依然能查询得到明文的数据。
通过3306端口查看数据库表数据:
通过3306端口可以看到未加密的数据库名称,但表名和数据全部被加密,也无法使用明文表名。
测试到此结束。
CryptDB Principle Analysis
我们首先了解一下CryptDB的结构。
CryptDB包含两部分:一个数据库代理和一个未经修改的DBMS。CryptDB使用用户定义的函数(UDF)在DBMS中进行加密操作。矩形和圆角矩形代表过程和数据,阴影代表CryptDB添加的组件。虚线隔离了用户计算机、应用程序服务器以及运行CryptDB数据库代理和DBMS的服务器。
CryptDB被设计以应对两种威胁(见图):
- Thread 1:具有高权限的管理员在数据库数据未经加密时,可能试图获得或泄露数据库数据
- Thread 2:入侵者利用软件漏洞攻击软件及访问数据库数据
第一类威胁危险性没有第二类威胁大。攻击者一般只获取数据信息,但没有能力去修改数据。
对于第一类威胁,CryptDB的做法是:利用数据库代理(在CryptDB中,称为mysql-proxy)截取所有传入的SQL语句并对语句中的关键字段进行加密,同时确保符合SQL语句的语法要求,然后再将加密后的SQL请求发送给mysql-server;mysql-server负责处理SQL语句,并返回加密的处理结果给mysql-proxy;最后返回的处理结果在mysql-proxy处解密,返回给客户端。CryptDB的存在,使得数据库管理员在没有解密密钥的情况下,无法获知加密之后的数据。这种加密方式称为同态加密。
对于第二类威胁,CryptDB的保密制度指定了链式加密的规则:将加密密钥和用户密码捆绑。这使得数据项只有使用相应的用户的密码登录才可以进行解密。这种做法使得即使服务器被攻破,整个系统被入侵者控制的情况下,只要用户没有登录,攻击者也无法解密用户的数据。
(待续)
Reference
[1] Akin, I. H., & Sunar, B. (2014). On the Difficulty of Securing Web Applications Using CryptDB. international conference on big data and cloud computing, 745-752.
[2] Popa, R. A., Redfield, C. M., Zeldovich, N., & Balakrishnan, H. (2011). CryptDB: protecting confidentiality with encrypted query processing. symposium on operating systems principles.
[3] Zeng, B. (2019). 《极简密码学》.
原文:https://www.cnblogs.com/JHSeng/p/11141300.html