Linux分區加密

基礎知識

  • Initrd(Initial RamDisk)

    • Initrd是在Linux內核加載后,系統引導過程中掛載的一個臨時根文件系統。
    • 使用Initrd的啟動過程分兩步:
      • 掛載Initrd
      • 掛載rootfs
    • Initrd的組成部分
      • /bin 一些必要的命令:busybox cat echo mount lsmod depmod insmod cryptsetup ...
      • /dev 一些必要的字符設備文件:console null zero tty0 ...
      • /lib 一些必要的動態鏈接庫和內核模塊:libc.so libblkid.so libuuid.so libcryptsetup.so e1000.ko xen-blkfront.ko ...
      • init 掛載Initrd后執行的shell腳本:
        • 從grub的CMDLINE獲取rootfs所在分區及其他引導選項
        • 加載內核模塊
        • 掛載rootfs(解密)
        • switch_root
    • Initrd 非必須,很多情況下可以只使用內核便進入系統。但對于存在某些重要分區,需要在Initrd中進行操作(例如解密)的情況,Initrd就是必須的
    • 文件格式:通常是一個經過gzip壓縮的cpio歸檔格式(早期的Initrd是loop設備,可以掛載之后查看文件內容)
  • 對稱加密

    • 特點:對源文件的加密和對加密文件的解密采用同一份密鑰
    • 優勢:計算量小、算法公開、速度快、效率高
    • 劣勢:密鑰的保存與傳輸成了安全性的重要考量、密鑰數量巨大時難以管理
    • 常見的對稱加密算法:RC2、RC4、AES等
    • RC4
      • Ron Rivest在1987年設計,但RSA并未真正發表過RC4
      • RC4后來被證明容易被破解,因此慢慢從SSL/TSL等眾多舞臺中退出
      • 原理:主要是利用xor實現加密、解密使用同一份密鑰

device mapper

  • device mapper是一種linux內核提供的、用于建立物理塊設備和虛擬塊設備之間映射關系的框架

  • 基于device mapper的應用

    • 邏輯卷管理(LVM)
    • dm-crypt/cryptsetup
    • TrueCrypt
    • Docker
  • 創建或管理mappered device的兩種方法(libdevmapper.so)

    • 通過設備節點/dev/mapper/control
    • 通過shell的dmsetup命令

dm-crypt/cryptsetup

  • dm-crypt基于Linux內核提供的crypto API,從2.5.45版本開始引入,是Linux內核提供的磁盤加密功能(內核態)。為了在用戶態能夠使用dm-crypt提供的功能,編譯內核時需要打開以下三個選項:

    • CONFIG_DM_CRYPT
    • CONFIG_BLK_DEV_DM
    • CONFIG_CRYPTO_XTS
  • cryptsetup是提供用戶使用的命令行工具(用戶態),有些發行版可能需要單獨安裝

    • gentoo: emerge cryptsetup
    • debian/ubuntu: apt-get install cryptsetup
    • centos/fedora: yum install cryptsetup
    • ...
  • cryptsetup的優缺點

    • 優勢:
      • 與LVM都基于device mapper機制,無縫銜接
      • 眾多發行版均已內置,無需額外安裝
      • 支持多種加密格式,如LUKS、TCRYPT等
    • 缺點:
      • 不能對系統中已有的數據加密,必須創建加密的分區
      • 一旦忘記密碼或丟失密鑰文件,數據將永遠丟失
  • LUKS on cryptsetup

# First, partition
Device          Size        Id            Type
/dev/xvda1      3M          83            Linux
/dev/xvda2      300M        83            Linux
/dev/xvda3      2G          82      Linux swap / Solaris
/dev/xvda4      37.7G       83            Linux
# Second, encrypt using LUKS format
# Usage: cryptsetup [option] luksFormat <device> [key file]
# Example:
cryptsetup -q luksFormat /dev/xvda4 .key
# Third, open LUKS format disk
# Usage: cryptsetup [option] luksOpen <device> <name>
# Example:
cryptsetup -d .key luksOpen /dev/xvda4 root
# Fourth, make file system
# Now, using /dev/mapper/root instead of /dev/xvda4
mkfs.ext3 /dev/mapper/root
# Fifth, mount file system
mount /dev/mapper/root /mnt/gentoo

$df -h
Filesystem              Size        Mounted on
/dev/mapper/root        37.7G       /mnt/gentoo

$blkid
# different block device, different UUID
/dev/xvda4: UUID="..." TYPE="crypto_LUKS" PARTUUID="..."
/dev/mapper/root: UUID="..." TYPE="ext3"

# Umount LUKS partition
umount /dev/xvda4
# Close LUKS partition
# Uasge: crypt luksClose <name>
cryptsetup luksClose root
  • 加密原理

    • LUKS格式的加密盤不能直接掛載
    • 密碼錯誤或密鑰文件不正確時,luksOpen會失敗
  • 密鑰文件

    • 可以使用一個填充任意字符串的文件作為密鑰文件
    • 使用dd隨機生成的密鑰文件安全性更高
      dd if=/dev/urandom of=.key bs=1 count=32

系統加密的例子

  • cryptsetup對rootfs分區進行加密

  • 定制Initrd

    • 使用linux內核提供的工具gen_init_cpio生成
    • 將rootfs的秘鑰文件包含在Initrd中
    • Initrd中自定義init腳本,完成rootfs的解密和掛載操作
  • 對boot分區中的Initrd文件加密

    • 采用分區加密時,boot分區不能加密,因此使系統的Initrd文件暴露給入侵者。一旦Initrd被解包,rootfs的秘鑰就被知曉了
    • 使用對稱加密方法對Initrd進行加密,實現簡單,又加大了破解Initrd的難度,使系統文件處于較安全的狀態
$./gen_init_cpio
Usage:
        ./gen_init_cpio <cpio_list>

<cpio_list> is a file containing newline separated entries that
describe the files to be included in the initramfs archive:

# a comment
file <name> <location> <mode> <uid> <gid> [<hard links>]
dir <name> <mode> <uid> <gid>
nod <name> <mode> <uid> <gid> <dev_type> <maj> <min>
slink <name> <target> <mode> <uid> <gid>
pipe <name> <mode> <uid> <gid>
sock <name> <mode> <uid> <gid>

<name>       name of the file/dir/nod/etc in the archive
<location>   location of the file in the current filesystem
             expands shell variables quoted with ${}
<target>     link target
<mode>       mode/permissions of the file
<uid>        user id (0=root)
<gid>        group id (0=root)
<dev_type>   device type (b=block, c=character)
<maj>        major number of nod
<min>        minor number of nod
<hard links> space separated list of other links to file

example:
# A simple initramfs
dir /dev 0755 0 0
nod /dev/console 0600 0 0 c 5 1
dir /root 0700 0 0
dir /sbin 0755 0 0
file /sbin/kinit /usr/src/klibc/kinit/kinit 0755 0 0

參考鏈接

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容