V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Cify
V2EX  ›  程序员

Linux 下有类似 windows 磁盘加密工具 bitlocker 吗?

  •  
  •   Cify · 2022-09-25 02:25:07 +08:00 · 4920 次点击
    这是一个创建于 826 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有几台服务器需要托管到 IDC,担心 IDC 人用单用户模式进去修改资料, 打算用类似 bitlocker 方式来加密磁盘, 请问有类似的工具吗?

    47 条回复    2022-09-26 12:02:02 +08:00
    eason1874
        1
    eason1874  
       2022-09-25 02:59:36 +08:00
    现在 Linux 发行版都自带全盘加密吧,安装时开启就可以,开启全盘加密后要给服务器另外安装远程控制卡,否则只是重启你都得跑去机房输入密码,不输入密码进不了系统。单独给某个硬盘或者文件系统加密可以用 dm-crypt

    数据特别重要的话,还要给机箱安装个拆机检测硬件,忘了叫啥,拆了有电信号给到主板,然后系统就可以记录拆机行为,并且自动关机,防止被人偷接设备检测内存什么的
    geekvcn
        2
    geekvcn  
       2022-09-25 02:59:54 +08:00 via iPhone
    Cify
        3
    Cify  
    OP
       2022-09-25 03:02:09 +08:00
    @eason1874 这个一般服务器都有远程 consolo 口, 单独买个 ip 接入即可. 还有个问题, 加密后启用了 syncthing 类似的同步, 同步到目的地文件是加密还是不加密的?
    eason1874
        4
    eason1874  
       2022-09-25 03:06:24 +08:00
    @Cify 全盘加密,块级加密,跟 BitLocker 一样,属于透明加密,对 Syncthing 来说跟没加密的时候是一样的,所以同步过去是不加密的
    Jirajine
        5
    Jirajine  
       2022-09-25 03:22:07 +08:00
    @eason1874 也可以在 initrd 里配置启动时通过 ssh 输入密码解密磁盘,不需要控制卡和输入设备。
    ryd994
        6
    ryd994  
       2022-09-25 03:26:36 +08:00 via Android
    @eason1874 可以只加密数据盘,系统盘会正常启动,然后你可以 ssh 上去输密码挂载数据盘

    intrusion detector 。如果被开箱可以配置发邮件之类的。更高安全的系统是连到 BIOS 里。从原厂直接锁定 secure boot key 之类的配置。任何人开箱,系统自动报废 TPM 。硬件之后可以继续用,但无法再储存敏感信息。


    @Cify 这些都是全盘加密。加密盘挂载时需要输密码。挂载后加密盘就正常用,写入 /读取文件会自动加密解密。所以如果你同步到其他电脑的非加密盘,那就没加密。传输过程也不加密。
    Cify
        7
    Cify  
    OP
       2022-09-25 03:32:56 +08:00
    @ryd994 可以只加密数据盘,系统盘会正常启动,然后你可以 ssh 上去输密码挂载数据盘.

    这个好像是不错的低成本的方案, 请问有文档可以阅读吗?

    这些都是全盘加密。加密盘挂载时需要输密码。挂载后加密盘就正常用,写入 /读取文件会自动加密解密。所以如果你同步到其他电脑的非加密盘,那就没加密。传输过程也不加密。

    如果传输过程中不加密的话, 中间人攻击就可以截取数据了?
    Cify
        8
    Cify  
    OP
       2022-09-25 03:38:32 +08:00
    @ryd994 其实我正好想请教下如何我托管几台机器, 某些数据我想单向同步到我自己家中的 NAS 上, 所以打算想用 syncthing 这个方案, 如果传输数据有中间人攻击的话, 是否有更合适的低成本方案?
    eason1874
        9
    eason1874  
       2022-09-25 04:19:28 +08:00
    @Jirajine #5 这么说 initrd 要好用些

    @ryd994 #6
    @Cify #7 系统盘不加密,只数据盘加密,不够安全的,因为能改你系统盘文件等于有你系统控制权,以前我们开发机器忘记 root 密码都是直接拆硬盘下来修改里面系统文件去重置密码的,同样的也可以在里面加个木马脚本偷数据。除非你的机箱有拆机检测,一被拆机就更换系统,但这样又太麻烦了。还是全盘加密靠谱好用,用 5 楼说的 initrd 方案远程解密足够方便了

    @Cify 数据同步问题,现在 TLS 都是标配了,中间人攻击不了的,保护好密钥就行
    Jirajine
        10
    Jirajine  
       2022-09-25 05:20:23 +08:00
    @eason1874 其实 initrd 里 ssh 输入密码和只加密数据盘是一样的,也可以拆机替换 initramdisk 加个木马偷取密钥。
    要抗 Evil Maid attack 的话,还得配合 secure boot 签名和 TPM 验证。不过如果有 TPM 的话,可以直接用 TPM 解密 luks 磁盘,也就没必要 ssh 输入了。当然,前提是信任厂商的 TPM 实现。
    Cify
        11
    Cify  
    OP
       2022-09-25 05:51:20 +08:00
    @Jirajine 能推荐一些加密,解密方面网站吗? 想提高下类似木马,加密解密安全方面的知识.
    eason1874
        12
    eason1874  
       2022-09-25 06:31:00 +08:00
    @Jirajine #10 不一样吧,把 initrd ssh 编译进内核,你再改它签名不对,安全启动不了,改其他系统文件不影响启动。越说越复杂,还是直接用 TPM 吧,再信不过也比自己不懂瞎搞要可信 🤣

    @Cify 对了,你帖子里说的单用户模式是可以设置密码的
    Jirajine
        13
    Jirajine  
       2022-09-25 07:07:50 +08:00
    @eason1874 所以还是依赖 secure boot 和 TPM 进行签名验证。initramdisk 本身就是一个 mini rootfs ,和“系统盘”是同一种东西。没有 TPM 的情况下,修改替换内核 /initramdisk 并关闭 /修改安全启动的证书用户程序无法验证,和修改系统效果是一样的。
    没有 TPM 这种硬件保护机制,什么方法都没法抗拒物理访问的侵入,有 TPM 则可以连同 boot 分区一并加密。

    @Cify 从用户角度,对硬件访问的安全保护 可以从 https://wiki.archlinux.org/title/security#Physical_security 开始看
    ryd994
        14
    ryd994  
       2022-09-25 07:21:14 +08:00
    @eason1874
    “系统盘不加密,只数据盘加密,不够安全的” “同样的也可以在里面加个木马脚本偷数据”
    你需要的是 secure boot 。你这个问题就算是 LUKS 加密系统盘一样会有问题,因为 LUKS 的原理就是 boot 分区 /initramfs 不加密,启动时先启动内核加载 LUKS ,输密码后再进一步解密系统盘。


    @Cify 磁盘加密属于 encrypt at rest ,当然无法解决传输安全。BitLocker 也解决不了传输安全啊。
    你用正确实现的 TLS 传输,正确验证证书签名,怎么会有事?如果这都有事那银行都别干了。
    又或者,卸载加密盘。直接 dd 传磁盘镜像。缺点就是无法差分备份。

    @Jirajine TPM 其实也无法从根本上解决这个问题。因为人家能偷到你的 pin 就能使用 tpm 来解密你的数据盘。能解密你的数据盘就能传输数据。根本问题还是本地计算环境不可信,那就无解。TPM 提供了一个有限的可信环境,所以 TPM 内执行加解密是安全的,或者说可以这么认为。
    但是如果系统的其他部分不可信的话,那数据在被不可信的部分处理时,还是不安全的。

    @eason1874 linux 的 secure boot 很有限,很多发行版只是 secure boot 到 bootloader ,也就是 grub 是签名的,但 grub 不验证内核签名。何况你自己编译的内核也无法获得官方签名,自己签名的话就需要自己维护一套 CA 和可信的编译流水线,于是又回到了我上面说的 “更高安全的系统是( intrusion detector )连到 BIOS 里。从原厂直接锁定 secure boot key 之类的配置。任何人开箱,系统自动报废 TPM 。”

    冷知识:大部分系统预装的 secureboot key 是微软的 key 。
    Jirajine
        15
    Jirajine  
       2022-09-25 07:37:22 +08:00
    @ryd994 TPM 可信就可以构建 trust chain ,让整个系统都可信。BIOS 验证 bootloader ,bootloader 验证内核,内核验证 rootfs 。
    一个最典型的例子是 Android ,Android 上的应用默认不会被 MITM (无需 ssl pinning ),这点可以由 TEE 保证。TEE 配合 bootloader 锁确保用户无法篡改 ROM ,而可信厂商(签名被信任)构建的 ROM 确保用户无法修改系统 SSL 证书。
    ryd994
        16
    ryd994  
       2022-09-25 07:43:27 +08:00 via Android
    @Jirajine 确实可以可信但无法做到加密。
    你说的是用 tpm 代替密码直接解密磁盘,这是没用的,如果可以偷硬盘,就可以连 TPM 一起偷。

    TPM 不设 pin 等于没有。

    可验证 /不可篡改 和 数据安全 /不可访问 是两回事
    Jirajine
        17
    Jirajine  
       2022-09-25 08:03:04 +08:00
    @ryd994 当然,这样只能保证设备本身被篡改(变更证书等)后不会释放 key 。如果要保证设备被偷了也不能解密,那肯定得从外部输入 key (键盘、ssh )。
    即使这样也不能完全确保物理访问下的安全,要想不被物理 dump 内存,还是得连同硬件一起保护才行。
    mokiki
        18
    mokiki  
       2022-09-25 08:07:17 +08:00
    数据分区加密用 luks 和 zfs 都可。至于预防植入木马,可以先记录非加密分区所有文件指纹,保存在自己的电脑上,每次开机 ssh 上去之后,先验证指纹,验证通过才手动挂载加密数据分区。

    不过还是逃不过物理冷冻拔内存窃取内存中的密钥。
    Cify
        19
    Cify  
    OP
       2022-09-25 08:27:12 +08:00
    @eason1874 就是为了防止单用户模式进去修改密码, 所以想做到加密磁盘, 这样足够强悍的密码一般也很难破解了, 我这么理解对吗?
    eason1874
        20
    eason1874  
       2022-09-25 09:11:20 +08:00
    @Cify 不是,两回事。“防止单用户模式进去修改密码” 只要给这个模式设置密码就行,那样别人想进这个模式就跟想正常进系统一样,要输入密码,没密码进不了。而磁盘加密是阻止别人越过系统直接读取硬盘里面的内容
    Cify
        21
    Cify  
    OP
       2022-09-25 09:16:35 +08:00
    @eason1874 磁盘加密是最需要考虑的,这样就算别人拿到硬盘读取也无法解密内容.

    同时也要考虑到单用户问题, 这 2 个考量都是我开此帖请教的目的.
    Greenm
        22
    Greenm  
       2022-09-25 09:35:01 +08:00
    只要能硬件接触你的机器,极端情况下你怎么加密都没用,内存中的东西都是明文。

    所以你既然把机器托管到别人那,就只能考虑常规情况的安全了,极端情况不用考虑,那个你防不了。
    flexbug
        23
    flexbug  
       2022-09-25 09:44:01 +08:00 via iPhone
    托管 IDC 还考虑这问题,做好服务器监控,重启能看不见吗,IDC 有自己的管理制度,我这做金融行业 IDC 托管都不考虑你这问题
    Cify
        24
    Cify  
    OP
       2022-09-25 10:13:59 +08:00
    @Greenm
    @flexbug 大概能防住就可以了... 难道赤裸裸的面对潜在风险吗?
    eason1874
        25
    eason1874  
       2022-09-25 10:42:00 +08:00
    @Cify 单用户模式添加密码,编辑 grub conf 就可以添加

    机箱内加开盖报警器,可以问卖你服务器的人有没有,没有的话贴几个易碎标签得了,异常的时候看下易碎标有没有坏就知道有没被拆过了。像 #23 说的,异常重启确实罕见,为几年一遇的事情考虑太多有些多余,这事发生的概率还没有服务器被黑的概率大 😂

    要是底层系统选择全盘加密,用远程控制卡什么的输入密码好了,反正几年未必重启一次,用 TPM 没便利多少反而提高风险。如果安装虚拟化环境,可以选择底层系统不加密,在上面运行的虚拟机系统全盘加密,这样同样能确保业务数据不明文保存在硬盘
    Cify
        26
    Cify  
    OP
       2022-09-25 10:49:49 +08:00
    @eason1874 我觉得底层也加密, 运行虚拟机系统全盘也加密基本就是万无一失了.

    单用户模式基本都是因为 root 密码忘记了才采用的, 这也相当于一个机房有人可以随时进我的系统, 为消除隐患所以单用户模式一般禁用.
    duke807
        27
    duke807  
       2022-09-25 11:15:04 +08:00 via Android
    可以看看我这个小脚本:
    https://github.com/dukelec/cde/blob/master/tools/aes-mount.sh

    可以输入密码解密
    不解密的状态,传输也会比较安全
    PendingOni
        28
    PendingOni  
       2022-09-25 11:33:34 +08:00
    使用加密狗?
    直接硬件加密了
    malagebidi
        29
    malagebidi  
       2022-09-25 11:37:16 +08:00
    单用户模式进去修改资料太麻烦了,直接把硬盘拔出来整个拷贝到一个新硬盘,再慢慢折腾。
    Osk
        30
    Osk  
       2022-09-25 12:07:54 +08:00   ❤️ 2
    个人见解:
    安全没有绝对的安全, 你唯一能做到的只有保证付出较低的成本来拔高攻击者的成本, 让攻击者无利可图自己放弃, 原因解释一下:

    给单用户模式设置密码, 或者阻止单用户模式:
    属于预防只会百度的初级用户. 实际没啥用, 直接启动第二个系统或者拔盘破解;


    使用 luks 加密:
    属于常规操作, 能阻止一部分人, 但需要往下看: 如何阻止被窃取密码和无人交互启动.


    initramfs 中 ssh 去解锁: 我不知道怎么吐槽 wiki 上面的这个建议, 遍地是漏洞:
    1. 如果使用预先生成的 sshd 证书, 攻击者轻松中间人;
    2. 如果每次启动生成 sshd 证书, 根本不好验证有没有被中间人.
    当然, 可能我理解有误.


    使用 secure boot 保护启动组件:
    注意: 大部分 linux 的 secure boot 不验证 initramfs, 你要用这种方法请把 kernel + initramfs + kernel command line 一起打包成一个 efi 文件签名, 最好不要用 grub 等中间加一道.
    如果你的机器能轻松重置固件设置, secure boot 属于废物, 毕竟他不像 surface 那样关闭 secure boot 会红屏警告. 攻击者可以重签安全启动证书, 重新配置主板证书链, 你还不好发现...
    但有一说一, 到这一步了, 使用 secure boot 保护 kernel + initramfs 已经能挡住不少人了.


    使用 tpm 解锁 luks:
    不用交互自动启动. 不知道现在 linux 对此支持如何, 以前一团糟.
    但是: 目前的 TPM 是挂在 LPC 总线上的, 硬件黑客低成本就能完成攻击窃取密码.
    tpm 能阻挡相当大比例的攻击, 等未来微软推广开新的安全处理器规范后, 从 LPC 窃取密码也许不再可能, TPM 的一个大漏洞被堵上.

    硬件层面实际上漏洞很多, 比如 cold boot attack 攻击, 直接 dump 内存; 主板固件安全不到位等等等等问题挺多的.
    但你可以认为: 使用 secure boot + tpm 已经可以认为比较安全了, 毕竟要攻击这一套, 算是比较高级玩家玩的了, 除非你的数据足够值钱, 大佬才没空破解你的硬件呢.



    说会本题:
    如何在不安全的环境中托管 Linux 服务器:
    之前我也有这个需求, 还在 v 站多次发帖问过, 比如: https://www.v2ex.com/t/803782
    最终结论: 放弃, 我换成 Windows Server + Hyper-V 跑 Linux 了,只要不调用显卡或者其他硬件外设, 一切都还好.
    yanqiyu
        31
    yanqiyu  
       2022-09-25 12:10:56 +08:00
    要防 IDC 偷数据+数据很重要的话至少要实现
    secure boot (建议自签名 unified kernel image ,保证 initramfs 镜像完整性)
    fTPM+PIN (最好加密所有盘,只加密数据的话有离线被修改系统,注入恶意程序的可能,之所以用 TPM 是为了保证固件 /kernel/initramfs/安全启动设置没被修改,不然别人拿个假的 initramfs 就骗了你的密码)
    SME 之类的内存加密技术,避免冷冻内存攻击

    最糟糕的情况是别人拿一个假机器,骗了你的 PIN ,但这时候他虽然能把你的服务器开机进系统,但是他依然无法绕过系统的登陆限制,除非系统本身出安全问题,否则还可以认为是安全的

    @ryd994 #6 最极端的情况下攻击者可以修改你的明文部分的系统等你输密码的时候偷走你的密码
    @Greenm #22 内存加密在近些年的服务器平台上已经很成熟了,也没什么明显感知的性能下降
    Osk
        32
    Osk  
       2022-09-25 12:19:35 +08:00
    对了, 关于 TPM 和 pin:

    Bitlocker 的 pin 不是密码, 他应该只是最终发给 TPM 的一个检验因子, 估计会是 PCR11 的某个因子 (乱猜测的, 没有深入了解过).
    之前看过相关文档好像是这么说的.


    这个 PIN, 就算被人知道了, 也可以在一定时间内保证你的数据安全:
    只有这个 pin 是没有用的, 这个 pin 是 tpm 的一个校验因子, 只有其它校验因子, 比如 pcr7 等全部符合要求要求才能解封 tpm 中的密码. (不一定正确, 没有找到明确的文档说明目前常用的 PCR11 到底有哪些东西).


    一定时间是指:
    攻击者利用 pin 启动进入系统, 但他什么也做不了, 因为 Windows 账户密码阻止了他进一步的操作, 但万一过一段时间后, 你的系统被发现有没有修复的安全漏洞, 此时, 攻击者就能利用漏洞进入你的系统. 所以说, 这个是 "一定时间内" 的安全的.
    SD10
        33
    SD10  
       2022-09-25 12:21:29 +08:00 via iPhone
    记得保存 recoverykey ,刚刚遇到一个怎么都找不到 key 的案例,什么都找不回来了🥲
    yanqiyu
        34
    yanqiyu  
       2022-09-25 12:21:35 +08:00
    @Osk #30 你提到的攻击方式应该在 #31 都可以规避?包括 TPM 总线的监听可以通过使用 fTPM 实现,这时候 CPU core 和 TPM 的沟通就在 SOC 内部完成了
    yanqiyu
        35
    yanqiyu  
       2022-09-25 12:28:28 +08:00 via Android
    @yanqiyu 查了下,大概也不是完全没办法,可以让 initramfs 从 tpm 签 hostkey ,这样也能防输入 pin 的 sshsession 被 mitm 了
    Osk
        36
    Osk  
       2022-09-25 12:34:08 +08:00
    @yanqiyu 确实, 大部分的 fTPM 攻击难度要高得多, 但一些机器还是有在用 dTPM 的.

    我个人觉得, 普通人防护到 TPM + secure boot 这一步就可以认为足够了. 再搞下去可用性就大大降低, 如果数据真有这么值钱的话, 也不适合放在不受信任的物理位置了.
    shijingshijing
        37
    shijingshijing  
       2022-09-25 13:35:58 +08:00
    @Jirajine 现在 Trust Chain 的建立是从 SoC 内部开始,SoC 不仅包含最初上电时候运行的 bootrom ,还包含硬件 key 。然后才开始验证 BIOS/EFI/Bootloader 的完整性,然后将控制权转交给 BIOS/EFI/Bootloader ,然后开始向后传播。

    这个过程基本上都分 Two Stages ,第一个 Stage 完全在 SoC 内部完成,这样要 Hack 进去,攻击面非常有限,只能在 Silicon 这个 level 进行,除非是找到 bootrom 的 bug ,其他外部措施几乎没有可能性;第二个 Stage 才开始用到系统 RAM ,PCI-E 等 SoC 片外的资源。
    RichardY
        38
    RichardY  
       2022-09-25 13:38:44 +08:00
    有没有办法在输入错误密码时候硬盘自毁?
    RichardY
        39
    RichardY  
       2022-09-25 13:39:00 +08:00
    @RichardY 输入特定的密码时
    Jirajine
        40
    Jirajine  
       2022-09-25 15:06:05 +08:00
    @shijingshijing 是的呀,trusted computing 从硬件开始 cryptographically 阻止 Root of Turst 以外的实体(比如购买了设备的最终用户)对系统的任何修改。
    这种 trust chain 之下如果用户不被 trust ,那设备简直就是租的,而非拥有的。欧美国家反垄断应该立法使用 trusted computing 的设备必须 trust 购买者,或禁止各种应用在非 trusted 环境下拒绝工作的行为。
    现在很多不能解锁的 Android 设备连内网私有 CA 签名的 HTTPS 服务都不能用,能解锁的很多应用也能通过 TEE 验证环境不可信从而拒绝工作。
    ysc3839
        41
    ysc3839  
       2022-09-25 19:49:39 +08:00 via Android
    @Osk TPM 那个问题还可以用 fTPM 解决
    ysc3839
        42
    ysc3839  
       2022-09-25 19:54:24 +08:00 via Android
    硬件在别人手中,要防攻击的话,最终可能还是得用 Xbox 、PlayStation 和 iOS 设备这种完全定制硬件的方案。然而就算是苹果和索尼这两家全球顶尖的企业的产品,曾经都被发现有硬件(固件)级的漏洞,所以基本可以认为是无解的。
    wb14123
        43
    wb14123  
       2022-09-25 20:26:15 +08:00   ❤️ 1
    我之前有过类似的需求,是把异地备份的机器放到朋友那里。用 secure boot + TPM 应该就能避免大部分攻击。我之前写过一篇博客有一些步骤可以参考: https://www.binwang.me/2021-09-19-Personal-ZFS-Offsite-Online-Backup-Solution.html 中的 3.2 和 3.3 节。

    这个教程是写给 Arch Linux 的,但是别的发行版改改应该就能用。
    shijingshijing
        44
    shijingshijing  
       2022-09-25 20:52:35 +08:00
    @wb14123 博客挺不错的,用的什么引擎? Hexo ?文章配图用什么画的?
    julyclyde
        45
    julyclyde  
       2022-09-26 09:44:31 +08:00
    正常情况下并不需要考虑这个需求
    你如果想抵抗 IDC 的工作人员,那基本上很难
    如果想抵抗 IDC 的其他客户,只需要靠“摄像头的威慑”其实就已经足够了

    另外,IDC 专区物理锁、机柜锁、机箱锁、机箱开启传感器、机箱开启自毁装置、开机密码、启动密码……手段其实很多
    但估计你用不了几个月就烦了
    flexbug
        46
    flexbug  
       2022-09-26 09:53:23 +08:00 via iPhone
    @julyclyde 是啊,直接自建 IDC 得了
    wb14123
        47
    wb14123  
       2022-09-26 12:02:02 +08:00   ❤️ 1
    @shijingshijing 用的 Jekyll ,博客代码都在 github 上 https://github.com/wb14123/blog 。画图用的 draw.io ,也是开源的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:36 · PVG 03:36 · LAX 11:36 · JFK 14:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.