作者:Saviour
这个APT源污染,需要同步下载大量的源服务器文件,我下完之后大约220多G。
系统:Ubuntu 16.04 LTS
硬盘:500G
软件:apt-mirror
路径:/service/ubuntu/mirror
木马:sudo apt-get install slurm
为了测试我们将原版的slurm修改为我们测试之后的版本,用自定义好的测试文件将原版的slurm进行替换;
按照如下命令进行操作,如图:
提示:将生成好的测试文件替换后,执行md5sum slurm计算md5值,将原先的slurm值替换掉,然后再使用dpkg打包deb
这个也是一个非常漫长的过程,需要同步APT源到本地,大约200多G。
同步完成之后,使用Apache搭建网站,并开启列目录功能,按照如下内容进行配置:
进行APT源测试,执行sudo apt-get update,同步本地APT源,看是否正常。
这个阶段将分析APT源软件的安装方式,研究一个完整的APT软件安装过程及过程中调用的文件,并试图将调用的文件内容进行特定修改,看APT是否能再次执行成功。
首先我们执行sudo apt-get install slurm进行原版软件安装,然后分析Apache访问日志,默认网站日志路劲:/etc/apache2/access.log
通过查看APT源网站访问,发现在初始APT源安装软件的时候,APT下载过InRelease、Packages.xz等文件;
InRelease文件是一个gpg明文签名文件,里面包含了Packages.xz等md5、sha1、sha256、文件大小等校验值。
Packages.xz等文件(包括其他Packages开头文件),里面包含了其对应pool目录下的deb文件md5、sha1、sha256、文件大小等校验值。
通过对gpg进行了解,发现gpg可以进行签名伪造,比如ubuntu官方的签名邮箱为[email protected],那么我们也可以使用官方签名的邮箱重新进行申请,获得一个签名key。
由于默认官方对Release文件进行了签名,那么我们在修改Release文件后必须对他进行重新签名,生成我们自己的Release文件(不然会在APT更新时报错)。
这次实验会用到的gpg命令如下:
gpg命令解析
gpg --gen-key 创建一个key
gpg --list-keys 查看key列表
gpg --armor --output public-key.txt --export [用户ID] 导出公钥
gpg --armor --output private-key.txt --export-secret-keys 导出私钥
gpg --keyserver hkp://keys.gnupg.net --send-keys [用户ID] 上传公钥到服务器
gpg --fingerprint [用户ID] 验证公钥
gpg --clearsign test.txt 明文签名文件
我使用的是Git Windows客户端进行gpg key 生成,然后将生成的key导入ubuntu中
默认Windows gpg密钥生成路径为:C:\Users[用户名].gnupg
将.gnupg文件夹导入ubuntu用户目录下,路仅为:/home/[用户名]
将我们重打包的slurm deb文件,md5、sha1、sha256、大小等信息收集起来,这里我们需要改两个文件,一个是Packages.xz、一个是InRealse文件,步骤如下:
将slurm文件md5、sha1、sha256、大小写入Packages.xz解压后文件对应的字段中
改完slurm文件后,对Packages进行xz压缩,重新计算Packages.xz的md5、sha1、sha256、文件大小值,将获得的值写入Release文件对应的字段中。
改完后我们使用刚注册好的gpg key对Release文件进行明文签名,生成Release.asc文件
修改完成后,将生成的Release.asc改名为InRelease,并覆盖原先的InRelease文件,执行sudo apt-get update,看是否更新正常,如果报错请导入证书文件,如果报hash不匹配,有可能是你的Release里面的值或文件大小填写错误,填写正确后重新对Release文件进行签名即可,并进行覆盖,重新执行sudo apt-get update,无误后进行本次的最后一步sudo apt-get install slurm。
导入证书:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [证书公钥ID]
成功结果:
APT成功安装了我们自定义的APT源deb文件,这就意味着,此刻如果我安装的是一个被替换过之后的恶意文件,那么我的主机就被成功入侵了,由于有些用户喜欢使用root用户执行的apt命令,那么就导致恶意文件会以最高权限运行,导致服务器彻底沦陷。
实验目的:
1、 APT源是可以篡改的。 2、 警惕不明的第三方源; 3、 官方源也未必完全可信;
实验说明:
此次实验不完全针对APT问题,也不排除YUM源等也存在此问题。