红联Linux门户
Linux帮助

警惕Ubuntu APT源污染

发布时间:2017-04-12 10:45:29来源:secbug.cn微信号:secbugs作者:Saviour
这个APT源污染,需要同步下载大量的源服务器文件,我下完之后大约220多G。
 
系统:Ubuntu 16.04 LTS  
硬盘:500G  
软件:apt-mirror  
路径:/service/ubuntu/mirror  
木马:sudo apt-get install slurm
 
第一个阶段:
为了测试我们将原版的slurm修改为我们测试之后的版本,用自定义好的测试文件将原版的slurm进行替换;
按照如下命令进行操作,如图:
警惕Ubuntu APT源污染
图一(解压缩slurm deb包)
提示:将生成好的测试文件替换后,执行md5sum slurm计算md5值,将原先的slurm值替换掉,然后再使用dpkg打包deb
警惕Ubuntu APT源污染
图二(计算替换后的slurm MD5值)
警惕Ubuntu APT源污染
图三(替换DEBIAN目录下md5sum文件中的slurm值)
警惕Ubuntu APT源污染
图四(dpkg进行slurm重打包 )
警惕Ubuntu APT源污染
图五(将生成好的slurm包进行本地安装测试)
 
第二个阶段:
这个也是一个非常漫长的过程,需要同步APT源到本地,大约200多G。
同步完成之后,使用Apache搭建网站,并开启列目录功能,按照如下内容进行配置:
警惕Ubuntu APT源污染
图六(修改配置文件,设置网站目录,并开启列目录功能)
警惕Ubuntu APT源污染
图七(开启之后的APT源列目录)
进行APT源测试,执行sudo apt-get update,同步本地APT源,看是否正常。
警惕Ubuntu APT源污染
图八(同步本地APT源)
警惕Ubuntu APT源污染
图九(同步本地APT源成功,无报错)
警惕Ubuntu APT源污染
图十(测试通过本地APT源进行安装软件成功)
 
第三个阶段:
这个阶段将分析APT源软件的安装方式,研究一个完整的APT软件安装过程及过程中调用的文件,并试图将调用的文件内容进行特定修改,看APT是否能再次执行成功。
首先我们执行sudo apt-get install slurm进行原版软件安装,然后分析Apache访问日志,默认网站日志路劲:/etc/apache2/access.log
通过查看APT源网站访问,发现在初始APT源安装软件的时候,APT下载过InRelease、Packages.xz等文件;
警惕Ubuntu APT源污染
图十一(APT访问InRelease签名文件)
警惕Ubuntu APT源污染
图十二(APT访问Packages.xz文件)
InRelease文件是一个gpg明文签名文件,里面包含了Packages.xz等md5、sha1、sha256、文件大小等校验值。
警惕Ubuntu APT源污染
图十三(InRealse文件)
Packages.xz等文件(包括其他Packages开头文件),里面包含了其对应pool目录下的deb文件md5、sha1、sha256、文件大小等校验值。
警惕Ubuntu APT源污染
图十四(Packages.xz文件)
通过对gpg进行了解,发现gpg可以进行签名伪造,比如ubuntu官方的签名邮箱为mirror@ubuntu.com,那么我们也可以使用官方签名的邮箱重新进行申请,获得一个签名key。
警惕Ubuntu APT源污染
图十五(gpg 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中
警惕Ubuntu APT源污染
图十六(gpg密钥生成)
默认Windows gpg密钥生成路径为:C:\Users[用户名].gnupg
警惕Ubuntu APT源污染
图十七(gpg密钥Windows目录)
将.gnupg文件夹导入ubuntu用户目录下,路仅为:/home/[用户名]
警惕Ubuntu APT源污染
图十八(gpg密钥ubuntu目录)
 
第四个阶段:
将我们重打包的slurm deb文件,md5、sha1、sha256、大小等信息收集起来,这里我们需要改两个文件,一个是Packages.xz、一个是InRealse文件,步骤如下:
将slurm文件md5、sha1、sha256、大小写入Packages.xz解压后文件对应的字段中
警惕Ubuntu APT源污染
图十九(修改slurm对应的值)
改完slurm文件后,对Packages进行xz压缩,重新计算Packages.xz的md5、sha1、sha256、文件大小值,将获得的值写入Release文件对应的字段中。
警惕Ubuntu APT源污染
图二十(修改Release对应的md5值)
警惕Ubuntu APT源污染
图二十一(修改Release对应的sha1值)
警惕Ubuntu APT源污染
图二十二(修改Release对应的sha256值)
改完后我们使用刚注册好的gpg key对Release文件进行明文签名,生成Release.asc文件
警惕Ubuntu APT源污染
图二十三(对Release文件进行签名)
警惕Ubuntu APT源污染
图二十四(签名后的Release文件)
 
最后阶段:
修改完成后,将生成的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命令,那么就导致恶意文件会以最高权限运行,导致服务器彻底沦陷。
警惕Ubuntu APT源污染
图二十五(自定义slurm文件成功被安装)
 
实验目的:
1、APT源是可以篡改的。
2、警惕不明的第三方源;
3、官方源也未必完全可信;
 
实验说明:
此次实验不完全针对APT问题,也不排除YUM源等也存在此问题。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/29936.html