教你加密Root文件系統(tǒng)(圖)
互聯(lián)網 發(fā)布時間:2008-10-08 19:02:19 作者:佚名
我要評論

當你不能依靠物理安全來保證你文件的安全時,是時候采取額外的步驟加密文件系統(tǒng)了,雖然本文涉及到的是基于PowerPC的系統(tǒng),但原則上來說也適用于其他架構的系統(tǒng)。
在另一篇文章“實現(xiàn)加密的home目錄”中,我描寫了如何透明地加密home目錄,本文敘述另一個技術實現(xiàn)--
當你不能依靠物理安全來保證你文件的安全時,是時候采取額外的步驟加密文件系統(tǒng)了,雖然本文涉及到的是基于PowerPC的系統(tǒng),但原則上來說也適用于其他架構的系統(tǒng)。
在另一篇文章“實現(xiàn)加密的home目錄”中,我描寫了如何透明地加密home目錄,本文敘述另一個技術實現(xiàn)--加密的root文件系統(tǒng),我論述了GNU/Linux啟動過程和軟件需求,并提供了一些指令,對Open Firmware做了一下介紹,以及其他一些有關的考慮事項。我用于教學的系統(tǒng)是一臺基于PowerPC架構的新世界蘋果iBOOK電腦,運行Fedora Core 3預覽版,不考慮細節(jié),本文涉及到的概念和程序可以應用到任何設備、架構或操作系統(tǒng)。我提供的指令假設你有一個多余的USB閃存盤并且你系統(tǒng)的支持從USB設備啟動。
同時,我還假設讀者能輕松應用源代碼補丁并編譯程序,對于Fedora Core 3 Test 3版本,mkinitrd和啟動腳本軟件包需要打補丁以支持加密的root文件系統(tǒng),需要掌握基本的分區(qū)管理和創(chuàng)建文件系統(tǒng)的知識,執(zhí)行一個基本的Linux發(fā)行版安裝超出了本文要求的范疇。
在呈現(xiàn)有關的技術步驟之前,一個高層概念必須先討論:信任。信任與加密技術和認證總是糾纏在一起的,對任何有電子密鑰的設備都可以假設它是可信任的。例如:當自動提款機(ATM)與我的銀行賬號共用個人識別號(PIN)時,我會信任ATM不會將我的PIN與不適當的第三方進行共享。同樣,當我給我的計算機提供一個加密密鑰時,我假設這個密鑰不會與任何其他人進行共享,我會信任這臺計算機在我們之間保守秘密。
那么,你能信任你的計算機嗎?除非你無論到哪里都帶著它,否則你真的不能信任它,即使磁盤已經經過加密處理也不行。設想這樣一個情景:在你睡覺時,有人偷走了你的計算機,小偷將計算機中加密的內容做了一份拷貝,雖然沒有加密密鑰而對他來說毫無意義,但是他可以用更惡魔的內容替換筆記本電腦加密的內容,然后再將電腦放回去,當你第二天醒來時,計算機提示你輸入加密密碼,但是這時你提供的密鑰會傳輸給小偷,他得到密鑰后就有一份數據和密鑰的拷貝了,他就可以讀取你的文件了。
這個情景可能顯得比較牽強,但是它說明了一點,你不能信任你的筆記本電腦,始終保持你的眼睛你離開它很重要,因此,無論如何優(yōu)秀地實現(xiàn)你的加密系統(tǒng),要建立在信任的基礎前提條件下才行。
網絡確保我們可以信任計算機的啟動過程,我們需要將其從計算機中分隔出來,考慮這個問題:你攜帶你的汽車鑰匙而不是攜帶你的汽車。你的密鑰自身概念上與你的汽車鑰匙一樣。你可以更容易地保護你的密鑰,因此你不用隨時隨地都攜帶上你的計算機,我們將用這個密鑰提供啟動計算機需要的軟件,閃存盤將充當密鑰的角色,通過保護啟動系統(tǒng)最初的軟件,除加密密鑰外,我們可以有效地降低啟動過程被劫持的風險。
你需要連接你的計算機是如何啟動的,因為解鎖一個加密的root文件系統(tǒng)是對整體的引導過程有影響,目前穩(wěn)定的內核版本是2.6,可選擇使用initramfs來幫助啟動,在lwn.net上有一篇文檔“initramfs來了”, initramfs是一個cipo歸檔,內核知道如何解壓到基于RAM的磁盤上,這個解壓的文件系統(tǒng)包括一個傳統(tǒng)的載入內核掛載root文件系統(tǒng)的模塊的腳本,在我們的樣例中,這個腳本也用于解鎖加密的root文件系統(tǒng),關于這個主題更多的信息可以在文件buffer-format.txt和initrd.txt中找到,這兩個文件都在Linux內核源代碼發(fā)布包中。
對Linux有若干個文件系統(tǒng)加密接口是可用的,Jari Ruusu的Loop-AES就是這樣一個項目,有多個cryptoloop變種提供一個加密的loopback設備,本文集中講述最近2.6Linux內核提供的dm-crypt接口,這個接口目前已經被Fedora項目吸收,dm-crypt模塊由Fedora內核包提供,還需要一個靜態(tài)鏈接cryptsetup,這個實用程序簡化了dm-crypt設備的管理,最后,還需要parted和hfsutils來管理啟動文件系統(tǒng)。
不幸的是,F(xiàn)edora Core的anaconda安裝程序還不支持在盒子外安裝加密文件系統(tǒng),網絡繞過這個限制,你必須保留一個空閑分區(qū)安裝Fedora,格式化空閑分區(qū)為一個加密文件系統(tǒng),然后拷貝原始安裝數據到新的加密文件系統(tǒng)上,網絡簡化,我們假設Fedora已經安裝到兩個分區(qū)上:/dev/hda4,掛載到/home和/dev/hda5,掛載到/,因為/home下還沒有用戶目錄,直到Fedora安裝完畢,我們可以使用/dev/hda4作為我們的備用分區(qū),/dev/hda3作為swap分區(qū)。
安裝Fedroa Core 3,掛載/dev/hda4到/home,/dev/hda5掛載到/,不要添加非root用戶,因為/home稍后將被清除干凈,至此,你應該擁有一個全功能的Linux系統(tǒng)了。
在設置加密文件系統(tǒng)之前,你應該隨意分區(qū),這樣排除一個潛在關于磁盤內容的信息漏洞,圖1示范了一個抽象的半滿磁盤,它沒有恰當進行隨機排列,圖2示范了一個恰當隨機排列的磁盤,在格式化之前包含一個加密的文件系統(tǒng),注意,從圖1中可以獲取到一些關于它的內容的知識(如它們跨越了磁盤的二分之一),圖2提供了一個沒有那么豪華的對手,假如這樣,磁盤可以很容易被清空,分區(qū)隨機排列是通過用隨機數據重寫它的內容實現(xiàn)的:dd if=/dev/urandom of=/dev/hda4,這個過程可能要花很長的時間,因為創(chuàng)建隨機數據有些困難的。
圖1
圖2隨機排列的分區(qū)隱藏了使用量
要在/dev/hda4上創(chuàng)建一個加密的ext3文件系統(tǒng),使用下面的步驟:
1)確認aes,dm-mod,dm-crypt模塊已經載入內核
2)卸載將要托管加密root文件系統(tǒng)的分區(qū)/dev/hda4
#umount /dev/hda4
3)創(chuàng)建一個隨機256位加密密鑰并存儲在/etc/root-key
#dd if =/dev/urandom of=/etc/root-key bs=1c count=32
這個密鑰稍后將拷貝到閃存盤。
4)創(chuàng)建一個dm-crypt設備,使用前面創(chuàng)建的密鑰加密
#cryptsetup -d /etc/root-key create /dev/hda4
現(xiàn)在訪問/dev/mapper/root在/dev/hda4上提供了一個加密層,默認情況下,cryptsetup創(chuàng)建一個aes加密的dm-crypt設備并任務密鑰大小為256位。
5)在/dev/mapper/root上創(chuàng)建一個ext3文件系統(tǒng)
#mkfs.ext3 /dev/mapper/root
6)掛載新文件系統(tǒng)
#mkdir /mnt/encroot
#mount /dev/mapper/root /mnt/encroot
7)現(xiàn)在你已經有一個加密文件系統(tǒng)了,你必須用/dev/hda5(原始的root文件系統(tǒng))的內容來填充它
#cp -ax / /mnt/encroot
8)最后,在/mnt/encroot/crypttab中創(chuàng)建一個條目以便不同的實用程序知道文件系統(tǒng)是如何配置的:
root /dev/hda4 /etc/root-key cipher=aes
現(xiàn)在我們的加密文件系統(tǒng)已經準備好了,需要理解更多關于目標架構的啟動過程,通常,計算機有一個固件程序來掌管系統(tǒng)啟動的全過程,保護固件程序超出了本文的范疇,因此我們假設系統(tǒng)固件程序是可以信任的,大多數讀者可能對BIOS比較熟悉,它是PC平臺的啟動固件程序,我主要討論的是Open Firmware,它用于計算機制造廠商如蘋果,sun和IBM啟動系統(tǒng)。
NetBSD/macppc的安裝指令對Open Firmware做了一個充分的介紹,我們對使用Open Firmware命令行接口配置計算機從一個閃存盤啟動非常感興趣,Open Firmware允許你查看連接到計算機的設備和設置固件程序變量的值。
在一個新世界(G3或更新的)蘋果計算機初始化啟動過程中,可以通過暫停選擇性命令來訪問Open Firmware提示符。
變量boot-device用于確定系統(tǒng)將從哪個設備啟動,printenv命令允許查看當前的值:
> printenv
[...]
boot-devicehd:,\\:txbihd:,\\:txbi
這實際上意味著通過執(zhí)行在第一塊IDE磁盤上HFS類型txbi的文件來實現(xiàn)啟動的,第二:txbi前的字符作為解釋一個HFS文件類型的標志,否則,txbi可能被理解為文件路徑,假如這樣,標志hd實際上是更復雜的/pci@f4000000/ata-6@d/disk@0的一個別名,這個字符串通過子系統(tǒng)變量表現(xiàn)了路徑,你可以使用Open Firmware命令查看設備對應的別名。
網絡正確地設置boot-device,我們需要找出Open Firmware認出的我們閃存盤的名字,通過ls命令顯示閃存盤路徑,并打印出設備樹:
> dev / ls
[...]
/pci@f2000000
[...]
/usb@1b,1
[...]
/disk@1
[...]
現(xiàn)在我們知道了一點關于計算機固件程序的知識,我們必須花些時間研究固件初始化執(zhí)行程序:bootloader。通常,運行在蘋果PowerPC架構上的Linux系統(tǒng)使用一個叫做yaboot的程序來啟動系統(tǒng),yaboot與LILO或GRUB類似,它包含兩個關鍵程序:ofboot.b和yaboot。ofboot.b提供第一階段啟動過程,實際上,ofboot.b的工作決定了啟動什么操作系統(tǒng),例如:如果一臺電腦上同時安裝了Mac OS X和Linux系統(tǒng),ofboot.b執(zhí)行Mac OS X或Linux的bootloader,如果用戶選擇載入Linux,ofboot.b執(zhí)行yaboot,第二階段啟動過程,然后yaboot載入Linux內核和initrd。圖3提供了一個基于PowerPC架構的Linux如何使用一個加密的root文件系統(tǒng)啟動的實例。
圖3
用Open firmware啟動一個基于PowerPC系統(tǒng)的過程
我們的可移動啟動設備需要ofboot.b和yaboot程序,一個Linux內核和一個包括加密密鑰的initrd文件。蘋果目前基于PowerPC的架構預設它的啟動介質格式化為HFS。
1)使用parted程序在閃存盤上創(chuàng)建正確的可啟動的分區(qū)(我的是64MB大小,用設備節(jié)點/dev/sda訪問)
# parted /dev/sda
(parted) mklabel mac
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
(parted) mkpart primary hfs 0.031 62.500
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
2 0.031 62.500 untitled
(parted) set 2 boot on
(parted) name 2 Apple_Boot
(parted) quit
2)在啟動分區(qū)上創(chuàng)建HFS文件系統(tǒng)
# hformat /dev/sda2
3)通過修改/mnt/encroot/etc/yaboot.conf配置yaboot啟動恰當的設備,下面是一個最小配置例子:
boot=/dev/sda2
ofboot=/pci@f2000000/usb@1b,1/disk@1:2
partition=2
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
default=linux
image=/vmlinux
label=linux
root=/dev/hda4
initrd=/initrd.gz
read-only
值/pci@f2000000/usb@1b,1/disk@1:2來自我們先前檢查的Open Firmware設備樹,/pci@f2000000/usb@1b,1/disk@1是PCI總線f2000000上的第一塊USB磁盤,最有興趣的是:2意味著分區(qū)2
4)安裝啟動程序和內核到/dev/sda2:
# ybin --config /mnt/encroot/etc/yaboot.conf -v
# mount /dev/sda2 /media/usbstick
# cp /boot/vmlinux /media/usbstick
就此,initrd必須被安裝到閃存盤上,F(xiàn)edora提供了一個叫做mkinitrd的工具來創(chuàng)建initrd,然而,在寫本文的時候,mkinitrd還不支持加載一個加密的root文件系統(tǒng),補丁在https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=124789,一旦應用了補丁,mkinitrd就可以讀取/etc/crypttab并創(chuàng)建一個恰當的initrd了:
1. mkinitrd --authtype=paranoid -f /media/usbdisk/initrd.gz
2. umount /media/usbstick
文件/mnt/encroot/etc/fstab應該被更新反映出變化:
/dev/mapper/root / ext3 defaults 1 1
有加密的swap或完全沒有swap空間是一個加密文件系統(tǒng)的先決條件。原因可以在文章“實現(xiàn)加密的home目錄”和BugTraq郵件列表中的一篇“Mac OS X在磁盤上存儲登陸/密鑰鏈/密碼”中找到。當給啟動腳本軟件包應用了https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=127378的補丁后,F(xiàn)edora允許用戶使用一個隨機生成的會話密鑰加密他們的swap分區(qū),因為swap空間在重新啟動時通常不需要一致,當系統(tǒng)關閉時會話密鑰也不保存,要啟用加密的swap,完成下面的步驟:
1)添加下面的行到/mnt/encroot/etc/fstab,替換任何先前的swap記錄:
/dev/mapper/swap swap swap defaults 0 0
2)添加下面的行到/mnt/encroot/etc/crypttab告訴系統(tǒng)如何完成加密:
swap /dev/hda3 /dev/urandom swap
至此我們應該可以重新啟動系統(tǒng)并使用我們的加密文件系統(tǒng),再說一次,我們需要暫停啟動選項命令進入Open Firmware提示符。
正如上面說到的,閃存盤第二個分區(qū)路徑是/pci@f2000000/usb@1b,1/disk@1:2。了解了這一點,我們可以建立路徑/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b。在分區(qū)號和文件系統(tǒng)路徑之間的分隔符是‘,’,\ofboot.b是文件系統(tǒng)路徑,\與Unix的/類似。
> dir /pci@f2000000/usb@1b,1/disk@1:2,\
Untitled GMT File/Dir
Size/ date time TYPE Name
bytes 9/ 3/ 4 21:44:41 ???? ???? initrd.gz
2212815 8/28/ 4 12:24:21 tbxi UNIX ofboot.b
3060 9/ 3/ 4 2:21:20 ???? ???? vmlinux
141868 9/28/ 4 12:24:22 boot UNIX yaboot
914 9/28/ 4 12:24:22 conf UNIX yaboot.conf
這就確定了Open Firmware可以讀取啟動系統(tǒng)需要的文件,設置boot-device變量的值為/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b使得系統(tǒng)可以從閃存盤啟動:
setenv boot-device /pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b
一旦系統(tǒng)從加密root文件系統(tǒng)成功啟動,必須清除掉/dev/hda5上的所有數據,可以使用隨機排列root文件系統(tǒng)分區(qū)同樣的方法來實現(xiàn):
dd if=/dev/urandom of=/dev/hda5
你可能想對hda5重寫幾次,要想了解處理干凈一個磁盤,請查看美國安全部門編寫的“National Industrial Security Program Operating Manual”第八章。
根據一個安全處理原則,/dev/hda5可能被掛載為/home,/home文件系統(tǒng)也應該被加密,幸運的是,這是一個簡單的過程,因為系統(tǒng)不需要/home啟動,象創(chuàng)建root文件系統(tǒng)一樣創(chuàng)建/home文件系統(tǒng)
1)確認aes,dm-mod,dm-crypt模塊已經載入內核
2)卸載/dev/hda5
#umount /dev/hda5
3)創(chuàng)建一個隨機256位加密密鑰,存儲在/etc/home-key
#dd if=/dev/urandom of=/etc/home-key bs=1c count=32
4)創(chuàng)建一個dm-crypt設備,用剛剛生成的密鑰加密
#cryptsetup -d /etc/home-key create home /dev/hda5
5)在/dev/mapper/home上創(chuàng)建一個ext3文件系統(tǒng)
#mkfs.ext3 /dev/mapper/home
6)掛載新文件系統(tǒng)
#mount /dev/mapper/home /home
7)在/etc/crypttab中創(chuàng)建一個條目,讓各種實用程序都清楚文件系統(tǒng)是如何配置的
root /dev/hda5 /etc/home-key cipher=aes
8)最后,為/home更新/etc/fstab條目
/dev/mapper/home /home ext3 defaults 1 2
至此,可以添加非root系統(tǒng)賬號了,設置加密root文件系統(tǒng)的過程就結束了。
加密你所有數據可能很危險,如果加密密鑰丟失,你的數據就丟失了,就因為這個原因,備份你的包含有你的密鑰的閃存盤很重要,同樣,備份加密數據對應的明文也很重要,如果你保存有一張可啟動的緊急救援磁盤,重新考慮應該放哪些系統(tǒng)組件在上面或許很有意義,你的root和home文件系統(tǒng)、密鑰、parted、hfsutils、加密技術有關的內核模塊以及cryptsetup腳本的拷貝都應該放進去。
這個技術在保護你的數據方面究竟有什么實際好處?在《Secrets and Lies》這本書中,作者Bruce Schneier提出了一個有用的手段來評估這個技術,一個攻擊樹可以用于模型危險,圖4呈現(xiàn)了一個攻擊我們加密文件系統(tǒng)的樹型圖,值得注意的是這顆攻擊樹不是完整的,可能隨時間推移會發(fā)生改變。
圖4攻擊者如何讀取加密文件系統(tǒng)的數據
通過使用本文討論的技術和一點創(chuàng)新的想法,確保你磁盤上的數據對常見的偷竊行為更具抵抗性是可能的,跟蹤攻擊種類的發(fā)展比了解防御更重要,盡管還有其他的技術用于保護基于網絡的或其他類型的攻擊,但本文討論的技術對整個系統(tǒng)安全的目標具有重要意義。
在另一篇文章“實現(xiàn)加密的home目錄”中,我描寫了如何透明地加密home目錄,本文敘述另一個技術實現(xiàn)--加密的root文件系統(tǒng),我論述了GNU/Linux啟動過程和軟件需求,并提供了一些指令,對Open Firmware做了一下介紹,以及其他一些有關的考慮事項。我用于教學的系統(tǒng)是一臺基于PowerPC架構的新世界蘋果iBOOK電腦,運行Fedora Core 3預覽版,不考慮細節(jié),本文涉及到的概念和程序可以應用到任何設備、架構或操作系統(tǒng)。我提供的指令假設你有一個多余的USB閃存盤并且你系統(tǒng)的支持從USB設備啟動。
同時,我還假設讀者能輕松應用源代碼補丁并編譯程序,對于Fedora Core 3 Test 3版本,mkinitrd和啟動腳本軟件包需要打補丁以支持加密的root文件系統(tǒng),需要掌握基本的分區(qū)管理和創(chuàng)建文件系統(tǒng)的知識,執(zhí)行一個基本的Linux發(fā)行版安裝超出了本文要求的范疇。
在呈現(xiàn)有關的技術步驟之前,一個高層概念必須先討論:信任。信任與加密技術和認證總是糾纏在一起的,對任何有電子密鑰的設備都可以假設它是可信任的。例如:當自動提款機(ATM)與我的銀行賬號共用個人識別號(PIN)時,我會信任ATM不會將我的PIN與不適當的第三方進行共享。同樣,當我給我的計算機提供一個加密密鑰時,我假設這個密鑰不會與任何其他人進行共享,我會信任這臺計算機在我們之間保守秘密。
那么,你能信任你的計算機嗎?除非你無論到哪里都帶著它,否則你真的不能信任它,即使磁盤已經經過加密處理也不行。設想這樣一個情景:在你睡覺時,有人偷走了你的計算機,小偷將計算機中加密的內容做了一份拷貝,雖然沒有加密密鑰而對他來說毫無意義,但是他可以用更惡魔的內容替換筆記本電腦加密的內容,然后再將電腦放回去,當你第二天醒來時,計算機提示你輸入加密密碼,但是這時你提供的密鑰會傳輸給小偷,他得到密鑰后就有一份數據和密鑰的拷貝了,他就可以讀取你的文件了。
這個情景可能顯得比較牽強,但是它說明了一點,你不能信任你的筆記本電腦,始終保持你的眼睛你離開它很重要,因此,無論如何優(yōu)秀地實現(xiàn)你的加密系統(tǒng),要建立在信任的基礎前提條件下才行。
網絡確保我們可以信任計算機的啟動過程,我們需要將其從計算機中分隔出來,考慮這個問題:你攜帶你的汽車鑰匙而不是攜帶你的汽車。你的密鑰自身概念上與你的汽車鑰匙一樣。你可以更容易地保護你的密鑰,因此你不用隨時隨地都攜帶上你的計算機,我們將用這個密鑰提供啟動計算機需要的軟件,閃存盤將充當密鑰的角色,通過保護啟動系統(tǒng)最初的軟件,除加密密鑰外,我們可以有效地降低啟動過程被劫持的風險。
你需要連接你的計算機是如何啟動的,因為解鎖一個加密的root文件系統(tǒng)是對整體的引導過程有影響,目前穩(wěn)定的內核版本是2.6,可選擇使用initramfs來幫助啟動,在lwn.net上有一篇文檔“initramfs來了”, initramfs是一個cipo歸檔,內核知道如何解壓到基于RAM的磁盤上,這個解壓的文件系統(tǒng)包括一個傳統(tǒng)的載入內核掛載root文件系統(tǒng)的模塊的腳本,在我們的樣例中,這個腳本也用于解鎖加密的root文件系統(tǒng),關于這個主題更多的信息可以在文件buffer-format.txt和initrd.txt中找到,這兩個文件都在Linux內核源代碼發(fā)布包中。
對Linux有若干個文件系統(tǒng)加密接口是可用的,Jari Ruusu的Loop-AES就是這樣一個項目,有多個cryptoloop變種提供一個加密的loopback設備,本文集中講述最近2.6Linux內核提供的dm-crypt接口,這個接口目前已經被Fedora項目吸收,dm-crypt模塊由Fedora內核包提供,還需要一個靜態(tài)鏈接cryptsetup,這個實用程序簡化了dm-crypt設備的管理,最后,還需要parted和hfsutils來管理啟動文件系統(tǒng)。
不幸的是,F(xiàn)edora Core的anaconda安裝程序還不支持在盒子外安裝加密文件系統(tǒng),網絡繞過這個限制,你必須保留一個空閑分區(qū)安裝Fedora,格式化空閑分區(qū)為一個加密文件系統(tǒng),然后拷貝原始安裝數據到新的加密文件系統(tǒng)上,網絡簡化,我們假設Fedora已經安裝到兩個分區(qū)上:/dev/hda4,掛載到/home和/dev/hda5,掛載到/,因為/home下還沒有用戶目錄,直到Fedora安裝完畢,我們可以使用/dev/hda4作為我們的備用分區(qū),/dev/hda3作為swap分區(qū)。
安裝Fedroa Core 3,掛載/dev/hda4到/home,/dev/hda5掛載到/,不要添加非root用戶,因為/home稍后將被清除干凈,至此,你應該擁有一個全功能的Linux系統(tǒng)了。
在設置加密文件系統(tǒng)之前,你應該隨意分區(qū),這樣排除一個潛在關于磁盤內容的信息漏洞,圖1示范了一個抽象的半滿磁盤,它沒有恰當進行隨機排列,圖2示范了一個恰當隨機排列的磁盤,在格式化之前包含一個加密的文件系統(tǒng),注意,從圖1中可以獲取到一些關于它的內容的知識(如它們跨越了磁盤的二分之一),圖2提供了一個沒有那么豪華的對手,假如這樣,磁盤可以很容易被清空,分區(qū)隨機排列是通過用隨機數據重寫它的內容實現(xiàn)的:dd if=/dev/urandom of=/dev/hda4,這個過程可能要花很長的時間,因為創(chuàng)建隨機數據有些困難的。

圖1

圖2隨機排列的分區(qū)隱藏了使用量
要在/dev/hda4上創(chuàng)建一個加密的ext3文件系統(tǒng),使用下面的步驟:
1)確認aes,dm-mod,dm-crypt模塊已經載入內核
2)卸載將要托管加密root文件系統(tǒng)的分區(qū)/dev/hda4
#umount /dev/hda4
3)創(chuàng)建一個隨機256位加密密鑰并存儲在/etc/root-key
#dd if =/dev/urandom of=/etc/root-key bs=1c count=32
這個密鑰稍后將拷貝到閃存盤。
4)創(chuàng)建一個dm-crypt設備,使用前面創(chuàng)建的密鑰加密
#cryptsetup -d /etc/root-key create /dev/hda4
現(xiàn)在訪問/dev/mapper/root在/dev/hda4上提供了一個加密層,默認情況下,cryptsetup創(chuàng)建一個aes加密的dm-crypt設備并任務密鑰大小為256位。
5)在/dev/mapper/root上創(chuàng)建一個ext3文件系統(tǒng)
#mkfs.ext3 /dev/mapper/root
6)掛載新文件系統(tǒng)
#mkdir /mnt/encroot
#mount /dev/mapper/root /mnt/encroot
7)現(xiàn)在你已經有一個加密文件系統(tǒng)了,你必須用/dev/hda5(原始的root文件系統(tǒng))的內容來填充它
#cp -ax / /mnt/encroot
8)最后,在/mnt/encroot/crypttab中創(chuàng)建一個條目以便不同的實用程序知道文件系統(tǒng)是如何配置的:
root /dev/hda4 /etc/root-key cipher=aes
現(xiàn)在我們的加密文件系統(tǒng)已經準備好了,需要理解更多關于目標架構的啟動過程,通常,計算機有一個固件程序來掌管系統(tǒng)啟動的全過程,保護固件程序超出了本文的范疇,因此我們假設系統(tǒng)固件程序是可以信任的,大多數讀者可能對BIOS比較熟悉,它是PC平臺的啟動固件程序,我主要討論的是Open Firmware,它用于計算機制造廠商如蘋果,sun和IBM啟動系統(tǒng)。
NetBSD/macppc的安裝指令對Open Firmware做了一個充分的介紹,我們對使用Open Firmware命令行接口配置計算機從一個閃存盤啟動非常感興趣,Open Firmware允許你查看連接到計算機的設備和設置固件程序變量的值。
在一個新世界(G3或更新的)蘋果計算機初始化啟動過程中,可以通過暫停選擇性命令來訪問Open Firmware提示符。
變量boot-device用于確定系統(tǒng)將從哪個設備啟動,printenv命令允許查看當前的值:
> printenv
[...]
boot-devicehd:,\\:txbihd:,\\:txbi
這實際上意味著通過執(zhí)行在第一塊IDE磁盤上HFS類型txbi的文件來實現(xiàn)啟動的,第二:txbi前的字符作為解釋一個HFS文件類型的標志,否則,txbi可能被理解為文件路徑,假如這樣,標志hd實際上是更復雜的/pci@f4000000/ata-6@d/disk@0的一個別名,這個字符串通過子系統(tǒng)變量表現(xiàn)了路徑,你可以使用Open Firmware命令查看設備對應的別名。
網絡正確地設置boot-device,我們需要找出Open Firmware認出的我們閃存盤的名字,通過ls命令顯示閃存盤路徑,并打印出設備樹:
> dev / ls
[...]
/pci@f2000000
[...]
/usb@1b,1
[...]
/disk@1
[...]
現(xiàn)在我們知道了一點關于計算機固件程序的知識,我們必須花些時間研究固件初始化執(zhí)行程序:bootloader。通常,運行在蘋果PowerPC架構上的Linux系統(tǒng)使用一個叫做yaboot的程序來啟動系統(tǒng),yaboot與LILO或GRUB類似,它包含兩個關鍵程序:ofboot.b和yaboot。ofboot.b提供第一階段啟動過程,實際上,ofboot.b的工作決定了啟動什么操作系統(tǒng),例如:如果一臺電腦上同時安裝了Mac OS X和Linux系統(tǒng),ofboot.b執(zhí)行Mac OS X或Linux的bootloader,如果用戶選擇載入Linux,ofboot.b執(zhí)行yaboot,第二階段啟動過程,然后yaboot載入Linux內核和initrd。圖3提供了一個基于PowerPC架構的Linux如何使用一個加密的root文件系統(tǒng)啟動的實例。

圖3
用Open firmware啟動一個基于PowerPC系統(tǒng)的過程
我們的可移動啟動設備需要ofboot.b和yaboot程序,一個Linux內核和一個包括加密密鑰的initrd文件。蘋果目前基于PowerPC的架構預設它的啟動介質格式化為HFS。
1)使用parted程序在閃存盤上創(chuàng)建正確的可啟動的分區(qū)(我的是64MB大小,用設備節(jié)點/dev/sda訪問)
# parted /dev/sda
(parted) mklabel mac
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
(parted) mkpart primary hfs 0.031 62.500
(parted) print
Disk geometry for /dev/sda: 0.000-62.500 megabytes
Disk label type: mac
Minor Start End Filesystem Name Flags
1 0.000 0.031 Apple
2 0.031 62.500 untitled
(parted) set 2 boot on
(parted) name 2 Apple_Boot
(parted) quit
2)在啟動分區(qū)上創(chuàng)建HFS文件系統(tǒng)
# hformat /dev/sda2
3)通過修改/mnt/encroot/etc/yaboot.conf配置yaboot啟動恰當的設備,下面是一個最小配置例子:
boot=/dev/sda2
ofboot=/pci@f2000000/usb@1b,1/disk@1:2
partition=2
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
default=linux
image=/vmlinux
label=linux
root=/dev/hda4
initrd=/initrd.gz
read-only
值/pci@f2000000/usb@1b,1/disk@1:2來自我們先前檢查的Open Firmware設備樹,/pci@f2000000/usb@1b,1/disk@1是PCI總線f2000000上的第一塊USB磁盤,最有興趣的是:2意味著分區(qū)2
4)安裝啟動程序和內核到/dev/sda2:
# ybin --config /mnt/encroot/etc/yaboot.conf -v
# mount /dev/sda2 /media/usbstick
# cp /boot/vmlinux /media/usbstick
就此,initrd必須被安裝到閃存盤上,F(xiàn)edora提供了一個叫做mkinitrd的工具來創(chuàng)建initrd,然而,在寫本文的時候,mkinitrd還不支持加載一個加密的root文件系統(tǒng),補丁在https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=124789,一旦應用了補丁,mkinitrd就可以讀取/etc/crypttab并創(chuàng)建一個恰當的initrd了:
1. mkinitrd --authtype=paranoid -f /media/usbdisk/initrd.gz
2. umount /media/usbstick
文件/mnt/encroot/etc/fstab應該被更新反映出變化:
/dev/mapper/root / ext3 defaults 1 1
有加密的swap或完全沒有swap空間是一個加密文件系統(tǒng)的先決條件。原因可以在文章“實現(xiàn)加密的home目錄”和BugTraq郵件列表中的一篇“Mac OS X在磁盤上存儲登陸/密鑰鏈/密碼”中找到。當給啟動腳本軟件包應用了https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=127378的補丁后,F(xiàn)edora允許用戶使用一個隨機生成的會話密鑰加密他們的swap分區(qū),因為swap空間在重新啟動時通常不需要一致,當系統(tǒng)關閉時會話密鑰也不保存,要啟用加密的swap,完成下面的步驟:
1)添加下面的行到/mnt/encroot/etc/fstab,替換任何先前的swap記錄:
/dev/mapper/swap swap swap defaults 0 0
2)添加下面的行到/mnt/encroot/etc/crypttab告訴系統(tǒng)如何完成加密:
swap /dev/hda3 /dev/urandom swap
至此我們應該可以重新啟動系統(tǒng)并使用我們的加密文件系統(tǒng),再說一次,我們需要暫停啟動選項命令進入Open Firmware提示符。
正如上面說到的,閃存盤第二個分區(qū)路徑是/pci@f2000000/usb@1b,1/disk@1:2。了解了這一點,我們可以建立路徑/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b。在分區(qū)號和文件系統(tǒng)路徑之間的分隔符是‘,’,\ofboot.b是文件系統(tǒng)路徑,\與Unix的/類似。
> dir /pci@f2000000/usb@1b,1/disk@1:2,\
Untitled GMT File/Dir
Size/ date time TYPE Name
bytes 9/ 3/ 4 21:44:41 ???? ???? initrd.gz
2212815 8/28/ 4 12:24:21 tbxi UNIX ofboot.b
3060 9/ 3/ 4 2:21:20 ???? ???? vmlinux
141868 9/28/ 4 12:24:22 boot UNIX yaboot
914 9/28/ 4 12:24:22 conf UNIX yaboot.conf
這就確定了Open Firmware可以讀取啟動系統(tǒng)需要的文件,設置boot-device變量的值為/pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b使得系統(tǒng)可以從閃存盤啟動:
setenv boot-device /pci@f2000000/usb@1b,1/disk@1:2,\ofboot.b
一旦系統(tǒng)從加密root文件系統(tǒng)成功啟動,必須清除掉/dev/hda5上的所有數據,可以使用隨機排列root文件系統(tǒng)分區(qū)同樣的方法來實現(xiàn):
dd if=/dev/urandom of=/dev/hda5
你可能想對hda5重寫幾次,要想了解處理干凈一個磁盤,請查看美國安全部門編寫的“National Industrial Security Program Operating Manual”第八章。
根據一個安全處理原則,/dev/hda5可能被掛載為/home,/home文件系統(tǒng)也應該被加密,幸運的是,這是一個簡單的過程,因為系統(tǒng)不需要/home啟動,象創(chuàng)建root文件系統(tǒng)一樣創(chuàng)建/home文件系統(tǒng)
1)確認aes,dm-mod,dm-crypt模塊已經載入內核
2)卸載/dev/hda5
#umount /dev/hda5
3)創(chuàng)建一個隨機256位加密密鑰,存儲在/etc/home-key
#dd if=/dev/urandom of=/etc/home-key bs=1c count=32
4)創(chuàng)建一個dm-crypt設備,用剛剛生成的密鑰加密
#cryptsetup -d /etc/home-key create home /dev/hda5
5)在/dev/mapper/home上創(chuàng)建一個ext3文件系統(tǒng)
#mkfs.ext3 /dev/mapper/home
6)掛載新文件系統(tǒng)
#mount /dev/mapper/home /home
7)在/etc/crypttab中創(chuàng)建一個條目,讓各種實用程序都清楚文件系統(tǒng)是如何配置的
root /dev/hda5 /etc/home-key cipher=aes
8)最后,為/home更新/etc/fstab條目
/dev/mapper/home /home ext3 defaults 1 2
至此,可以添加非root系統(tǒng)賬號了,設置加密root文件系統(tǒng)的過程就結束了。
加密你所有數據可能很危險,如果加密密鑰丟失,你的數據就丟失了,就因為這個原因,備份你的包含有你的密鑰的閃存盤很重要,同樣,備份加密數據對應的明文也很重要,如果你保存有一張可啟動的緊急救援磁盤,重新考慮應該放哪些系統(tǒng)組件在上面或許很有意義,你的root和home文件系統(tǒng)、密鑰、parted、hfsutils、加密技術有關的內核模塊以及cryptsetup腳本的拷貝都應該放進去。
這個技術在保護你的數據方面究竟有什么實際好處?在《Secrets and Lies》這本書中,作者Bruce Schneier提出了一個有用的手段來評估這個技術,一個攻擊樹可以用于模型危險,圖4呈現(xiàn)了一個攻擊我們加密文件系統(tǒng)的樹型圖,值得注意的是這顆攻擊樹不是完整的,可能隨時間推移會發(fā)生改變。

圖4攻擊者如何讀取加密文件系統(tǒng)的數據
通過使用本文討論的技術和一點創(chuàng)新的想法,確保你磁盤上的數據對常見的偷竊行為更具抵抗性是可能的,跟蹤攻擊種類的發(fā)展比了解防御更重要,盡管還有其他的技術用于保護基于網絡的或其他類型的攻擊,但本文討論的技術對整個系統(tǒng)安全的目標具有重要意義。
相關文章
- “CMOS密碼”就是通常所說的“開機密碼”,主要是為了防止別人使用自已的計算機,設置的一個屏障2023-08-01
QQScreenShot之逆向并提取QQ截圖--OCR和其他功能
上一篇文章逆向并提取QQ截圖沒有提取OCR功能, 再次逆向我發(fā)現(xiàn)是可以本地調用QQ的OCR的,但翻譯按鈕確實沒啥用, 于是Patch了翻譯按鈕事件, 改為了將截圖用百度以圖搜圖搜索.2023-02-04- QQ截圖是我用過的最好用的截圖工具, 由于基本不在電腦上登QQ了, 于是就想將其提取出獨立版目前除了屏幕錄制功能其他都逆出來了, 在此分享一下2023-02-04
非系統(tǒng)分區(qū)使用BitLocker加密導致軟件無法安裝的解決方法
很多電腦用戶在考慮自己電腦磁盤分區(qū)安全時會采用 Windows 自帶的 BitLocker 加密工具對電腦磁盤分區(qū)進行加密。但有些人加密后就會忘記自己設置的密碼從而導致在安裝其它軟2020-11-25防止離職員工帶走客戶、防止內部員工泄密、避免華為員工泄密事件的發(fā)生
這篇文章為大家詳細介紹了如何才能防止離職員工帶走客戶、防止內部員工泄密、避免華為員工泄密事件的發(fā)生,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-27徹底防止計算機泄密、重要涉密人員離職泄密、涉密人員離崗離職前防范舉
近些年企業(yè)商業(yè)機密泄漏的事件屢有發(fā)生,這篇文章主要教大家如何徹底防止計算機泄密、重要涉密人員離職泄密、告訴大家涉密人員離崗離職前的防范舉措,具有一定的參考價值,2017-06-27- 最近有電腦用戶反應量子計算機可以破解下載的所有的加密算法嗎?其實也不是不可以,下面虛擬就為大家講解買臺量子計算機,如何分分鐘破解加密算法2016-09-26
怎么破解Webshell密碼 Burpsuite破解Webshell密碼圖文教程
webshell是以asp、php、jsp或者cgi等網頁文件形式存在的一種命令執(zhí)行環(huán)境,一種網頁后門。黑客通常會通過它控制別人網絡服務器,那么怎么破解webshell密碼呢?一起來看看吧2016-09-19- 本文討論了針對Linux系統(tǒng)全盤加密的冷啟動攻擊,大家都認為這種攻擊是可行的,但執(zhí)行這么一次攻擊有多難?攻擊的可行性有多少呢?需要的朋友可以參考下2015-12-28
防止泄露公司機密、企業(yè)數據防泄密軟件排名、電腦文件加密軟件排行
面對日漸嚴重的內部泄密事件,我們如何守護企業(yè)的核心信息,如何防止內部泄密也就成了擺在各個企業(yè)領導面前的一大問題。其實,針對內網安全,防止內部信息泄漏早已有了比較2015-12-17