使用luks全盘加密的Linux系统怎么防止攻击?
由于市面上没有现成的工具能够执行这种攻击,所以我们自己制作了工具,并把它命名为EvilAbigail。Evil maid攻击可以针对任何操作系统。此次的研究我们针对的是使用LUKS全盘加密的Linux系统。
一般来说,当Linux系统使用了全盘加密后,会由一小块分区还是没有加密,这个区域就是用来解密和引导加密磁盘的。这个分区会挂载在/boot,并且包含内核和初始RAM磁盘(initrd)。虽然攻击内核或者bootloader也是可行的,但是我们还是针对initrd进行了攻击。
initrd是指一个临时文件系统,它在启动阶段被Linux内核调用。initrd主要用于当root文件系统被挂载之前,进行准备工作。initrd 中包含了是解密和挂载root文件系统所需要的目录和可执行程序的最小集合。一旦initrd任务完成,它就会执行pivot_root,从而将initrd根文件系统卸载掉,并挂载真正的根文件系统。
一般来说,initrd是一个通过gzip压缩的cpio镜像。我们测试的基于Debian的操作系统是这样,但基于RedHat的操作系统 (Fedora, RHEL, CentOS)现在使用的是dracut,包含一个未压缩的cpio镜像。基于Debian的initrds 会用ash shell脚本执行启动,而dracut则会用systemd和它所关联的配置方法。
为了执行我们的攻击,我们选择使用一个基于LD_PRELOAD的bootkit,但是其实也可以注入恶意的内核或可执行文件中。我们使用LD_PRELOAD的主要目标是对刚刚解密完成的root文件系统中的第一个可执行文件注入一个共享对象。第一个可执行文件通常是/sbin/init,PID一般会是1。进行攻击最简单的方法就是修改init脚本,导出这个环境变量,这样执行pivot_root的时候环境变量就设置好了。因为当文件系统更改的时候还得在合适的时候(解密之后)把共享对象复制到新系统中。把以下这两行放入initrd的init脚本中,插在切换文件系统之前:
cp /hack.so /${rootmnt}/hack.so
export LD_PRELOAD=/hack.so
之所以这样可行是因为真正的root文件系统是在临时root文件系统下解密挂载的,这先于pivot,并且rootmnt变量是用挂载点位置填充的。但是,在这之前需要把目标文件系统重新挂载成读写,因为默认是只读的。在我们的例子中我们对init脚本进行了修改,修改了脚本分析内核命令行的地方,因此无论提供的参数是什么,root文件系统都是读写方式挂载。另一种方法是在注入的命令中添加mount -o remount,rw /${rootmnt}。
不过基于dracut的initrds中不存在注入点,因为init的可执行文件是个二进制文件而非shell脚本。这就给我们带来了三个问题,只有克服了这三个问题我们才能够注入到pid 1进程中。
三个问题
第一个问题是有关复制我们的二进制文件到解密的root文件系统中。这个问题是三个问题中最好解决的一个。我们可以加两个ExecPre指令到负责pivote文件系统的systemd服务文件中。这基本就相当于前面提到的插入脚本的方法。第一个命令会以读写方式重新挂载root文件系统,第二个执行复制操作。
第二个问题有关LD_PRELOAD。因为我们不是在修改shell脚本,我们不能把环境变量传递给这个进程(因为它是由内核调用的),因此加载我们的共享对象就有点棘手了。最简单的办法就是,先把init二进制文件移动到另一个位置,然后在它原来的位置插入我们自己的shell脚本,最后再执行原来的二进制文件。我们只需要两行代码,第一行导出LD_PRELOAD,第二行执行原来的systemd二进制文件。请注意,这样注入的是initrd中的pid 1进程,而不是最终root文件系统的pid 1。
第三个问题就是,在调用switch-root命令之前,systemd会用clearenv()函数清除所有环境变量。因为这个函数是标准库的一部分,我们就可以重写这个函数,让被注入的进程会调用我们的函数而不是原来的函数。我们不关心真正清除环境变量,我们写的clearenv()函数会清除所有环境变量,然后把我们的LD_PRELOAD变量注入到环境中。由于clearenv()只会被调用一次,我们的修改不会导致任何副作用。
解决了以上这三个问题之后,我们的共享对新就会被复制到加密的root文件系统中,我们的LD_PRELOAD会被注入到目标文件系统的pid 1进程中。接下来我们就可以获取用于解密的用户密码。
对于Debian的initrds,可执行文件会要求用户输入密码,然后解密、挂载root文件系统。我们可以把我们的脚本注入到pipeline进程中从而获取密码。
至于systemd,它会通过Unix domain sockets使用一种更复杂的进程间通信。我们选择攻击文件系统的挂载,而非这个进程。这又是一个库函数,它在动态加载库中,从systemd里调用,所以我们可以hook这个函数。解密硬盘的函数叫做crypt_activate_by_passphrase。这个函数会把密码作为char数组。通过hook这个函数,我们可以获取到密码。我们要包裹这个原来的函数,所以我们用dlsym打开真正的函数,并且调用它。不过在此之前我们会保存密码以便以后取回。
为了“保存”密码,我们简单地把密码加到我们之后要复制到root文件系统的共享对象中。之所以选择这种方法是因为我们已经知道这个文件存在,并且会被复制过去。采用这种方法还会减少我们接触到的磁盘文件的数量。为了获取密码,我们之后会读取我们自己文件末尾(通过LD_PRELOAD变量定位),然后把它设置为我们的反弹shell中PASSWORD环境变量的值,因此(以meterpreter为例)通过‘getenv PASSWORD’命令可以获取用于解密磁盘的密码。由于我们所有的目标主机都默认安装了python,所以我们就使用了python meterpreter反弹shell。
解决方案
解决这种问题有很多方法。但是即使使用了这些解决方法,如果攻击者能够物理接触计算机,并且有足够的时间重刷BIOS/UEFI,那也是防不住的。
第一种方法是把bootloader、内核和initrd放在外置的U盘上,然后从U盘上启动从而替代/boot分区。但对用户来说这个方法很糟糕,因为他们离开笔记本的时候要记得拔掉U盘,如果没有卸载的话还要安全卸载/boot分区。更新的时候也很麻烦,要插上U盘才能更新initrd/内核。
另一种方案则是彻底关闭从外置媒体启动系统。这样就不存在自动化攻击的可能性了,但是某些情况下,如对于包含shell的Debian initrds,还是可以从initrd人工挂载和修改initrd的。这可以通过自动键盘式设备完成,这样就绕过了无法通过外置媒体启动系统的限制。
另外,还可以开启BIOS启动密码,这样没有密码的人就无法启动计算机了。
不过如果攻击者有足够的时间把硬盘拆下,然后用他们自己的笔记本启动硬盘的话,后两种方案也不管用了。
最后,最安全的方案就是将SecureBoot拓展到initrd。SecureBoot可以验证bootloader和内核,如果能够验证经过签名的initrd的话,要不留痕迹地在/boot分区修改任何东西都会很困难。但是如果攻击者可以通过刷BIOS/UEFI关闭secureboot的话,这种方案也没用了。
防止这类攻击最好的方法就是不要让你的设备落入攻击者们的手中,我们的PoC攻击可以在2分钟内攻陷所有的目标主机,但在现实世界中,攻击者也可以做出攻击特定目标的payload,这样的payload只用几秒就可以攻击设备。
以上就是本文的全部内容,希望对大家的学习有所帮助。
html如何加密解密?html加密解密有哪些方法?
二:转义字符 " "的妙用 三:使用Microsoft出品的脚本编码器Script Encoder来进行编码 (自创简单解码) 四:任意添加NUL空字符(十六进制00H) (自创) 五:无用内容混乱以及换行空格TAB大法 六:自写解密
详情2018-01-03 10:53:47责编:llp 来源:驱动管家ie浏览器出现0day漏洞怎么办?修复0day漏洞的方法
日前有安全机构曝光了IE浏览器的一个0day漏洞,利用这个0day漏洞(CVE-2012-4681)攻击者可以绕过Windows的ASLR(地址空间布局随机化)防护机制,访问用户曾访问过的计算机上所有文件。Windows XP、Vista和Windo
详情2018-01-04 15:37:50责编:llp 来源:驱动管家u盘加密被破解的原理 为什么u盘加密简单被破解?
使用U盘、移动硬盘加密工具加密文件夹后,我用文件嗅探器工具也看不到加密后真实的文件,当用金山毒霸扫描发现,好像这些文件被隐藏保存在 Thumbs dn 7 中(其中那个7 中的7有时是其他的数字),但是我直接这样
详情2018-01-05 19:32:16责编:llp 来源:驱动管家网吧破解怎么做?怎么破解网吧?
解万象秘笈 一 用Alt Ctrl Del组合键(万象) 开机后,当出现蓝背景时,立即按组合键,弹出“关闭程序”对话框,若里面有“client”后则立即关闭,当发现“未知”程序时也要关闭,因为万象会启动两次。万象被结束了,
详情2018-01-05 09:14:06责编:llp 来源:驱动管家pcanywhere远程连接的密码文件怎么得到?
问题的关键就是要得到PCAnyWhere的密码文件(* CIF),然后使用PCanyWhere密码查看工具
详情2018-01-07 18:08:16责编:llp 来源:驱动管家使用加密狗进行硬件保护的方法 加密狗怎么保护软件?
现在的解密技术排除法律和道德因素,就从学术角度来说是门科学。它与加密技术一样是相辅相成不断提高。 以下就针对使用加密狗(加密锁)进行硬件保护谈谈几点心得: 针对于使用加密狗的解密有什么方法? 1、硬件复制 复制硬件,即解密者复制Sentinel
详情2018-01-03 17:53:52责编:llp 来源:驱动管家木马免杀有哪些绝招?木马免杀的五大绝招
常用的木马免杀方法绝招一:快速搞定瑞星文件查杀操作步骤: 第一步:用OD载入,来到程序的入口点。 第二步:把入口点的第一句PUSH EBP 改成POP EBP 然后保存就可以躲过瑞 星的表面查杀。绝招二:快速定位
详情2018-01-07 09:11:57责编:llp 来源:驱动管家dns欺骗是什么?dns欺骗有什么条件和限制?
定义: DNS欺骗就是攻击者冒充域名服务器的一种欺骗行为。原理:如果可以冒充域名服务器,然后把查询的IP地址设为攻击者的IP地址,这样的话,用户上网就只能看到攻击者的主页,而不是用户想要取得的网站的主页了,这就是DNS欺骗的基本原理。DNS欺骗其实并不是真的“
详情2018-01-02 16:11:39责编:llp 来源:驱动管家2016年木马病毒查杀软件的排行榜
现在的电脑杀毒软件种类很多,在选择的时候,很多人并不知道如何去进行选,按照什么标准来进行选择,其实在选择杀毒软件首先要看杀毒能力,其次可以根据杀毒软件的功能来进行判定排名,下面就和大家一起来分析一
详情2018-01-05 13:58:41责编:llp 来源:驱动管家u盘病毒的分析 u盘病毒的应对策略
分析: U盘对病毒的传播要借助autorun inf文件的帮助,病毒首先把自身复制到u盘,然后创建一个autorun inf,在你双击u盘时,会根据autorun inf中的设置去运行u盘中的病毒,我们只要可以阻止autorun inf文件的创建
详情2018-01-06 14:21:52责编:llp 来源:驱动管家
- 圣诞节有多少人在朋友圈求圣诞帽?那么微信头像怎么加圣诞帽呢?
- 数据恢复软件怎么选?Easyrecovery好用吗?
- hp激光打印机这样换墨盒最简单快捷
- 映泰主板好不好?看下映泰主板的评测结果就知道了
- 电脑文件夹图标怎么设置成透明文件夹
- 小米mix2发布会直播的网站有哪些?
- 中了勒索病毒之后如何清除?中了勒索病毒文件恢复方法是什么?
- 电子邮件怎么加密?电子邮件有哪些加密方法?
- 设备管理器打不开怎么办?设备管理器怎么打开
- 微信小店要怎么申请开通?微信公众号申请开微信小店的办法?
- 关于电脑显示器刷新率应该如何设置呢
- 微星主板怎么样?微星X370主板的一些介绍
- 电脑声音图标不见了可以这样找回
- iphone5s花屏可以挽救吗?iphone5s花屏怎么补救?
- 在QQ群匿名之后身份要怎么改?怎样设置QQ群匿名聊天的身份?
- cmos的密码怎么破解?cmos破解密码的方法
- 电脑系统无法创建新的系统分区还可以这样解决
- qq截图不能用快捷键是怎么回事?qq截图快捷键失效原因
- 怎么看主板型号?这几个方法可以帮到你
- 买微星游戏笔记本之前先来了解下这些问题