AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 740483
Accepted
ChennyStar
ChennyStar
Asked: 2023-03-21 21:42:06 +0800 CST2023-03-21 21:42:06 +0800 CST 2023-03-21 21:42:06 +0800 CST

如何刷新似是而非的可否认性 dm-crypt 方案的诱饵数据?

  • 772

我刚刚阅读了Linus Torvalds 和(以及其他人)Milan Broz之间的讨论,他是 dm-crypt 的维护者之一。

我对讨论的以下部分很感兴趣:

Linus Torvalds:我认为那些使用隐藏(“可否认”)东西的人实际上根本没有使用过外部文件系统,正是为了让他们可以把真正加密的东西放在那里而不用担心它。

Milan Broz:好吧,他们实际上应该不时“使用”外部系统,这样数据看起来就“最近”了,对于整个“隐藏操作系统”,他们甚至应该能够根据要求启动到外部诱饵操作系统,只是为了表明一些东西工作在那里。

从理论上讲,我同意米兰的说法,使用诱饵数据是增加可信度的好事。但你如何在实践中实现这一点?例如,如何在不冒覆盖内部卷的风险的情况下写入外部卷?

多年来,我一直在使用隐藏的 LUKS 卷,结合可拆卸的标题和数据偏移量。通常我首先创建一个小的 LUKS 加密的外部卷(比如 20 GB),我用 EXT4 格式化它,用诱饵数据填充它,然后我增加这个外部卷的大小(例如 500 GB),然后我创建例如偏移量为 25GB 的内部卷。

在那之后我按照 Linus 所说的去做,我虔诚地避免接触外部卷的诱饵数据,因为害怕损坏内部卷的数据。

有没有办法刷新外部卷的数据,而不会有损坏内部卷数据的风险?例如,是否有一种工具可以专门在外卷的前 20 个 Gigs 上写入,确保不会弄乱后面的 480 gigs?

我同时使用 HDD 和 SSD,所以这个问题对两者都适用。

partition
  • 2 2 个回答
  • 53 Views

2 个回答

  • Voted
  1. Best Answer
    LustreOne
    2023-03-23T09:09:10+08:002023-03-23T09:09:10+08:00

    可能有几种方法可以合理安全地做到这一点,如果从新的外部体积或现有的外部体积开始,则可能采用不同的方法。

    执行此操作的最佳方法可能是debugfs setb在未安装的外部文件系统设备上使用命令来标记属于内部卷的块范围,然后再安装外部文件系统并在那里更新文件。:

    debugfs -c -R "setb <inner_start_blk> <inner_count>" /dev/<outer>
    
    setb block [count]
        Mark the block number block as allocated.  If the optional argument
        "count" is present, then "count" blocks starting at block number 
        "block" will be marked as allocated.
    

    如果文件有不相交的范围,则可以通过管道传输具有块范围的文件来编写多个 setb 命令的脚本,例如:

    setb <range1> <count1>
    setb <range2> <count2>
    :
    

    阅读debugfs文件debugfs -c -f <file> /dev/<outer>。

    fallocate -s 32M mydir/inner如果你想比仅仅在外部文件系统末尾打包内部卷更聪明一点,内部卷最初可以在外部文件系统中创建,然后块范围可以从生成debugfs:

    # debugfs -c -R "stat mydir/inner" /dev/vg_root/lvhome
    Inode: 263236   Type: regular    Mode:  0664   Flags: 0x80000
    Generation: 2399864846    Version: 0x00000000:00000001
    User:  1000   Group:  1000   Project:     0   Size: 32499577
    File ACL: 0
    Links: 1   Blockcount: 63480
    Fragment:  Address: 0    Number: 0    Size: 0
     ctime: 0x63c98fc0:62bb0a38 -- Thu Jan 19 11:45:20 2023
     atime: 0x63cee835:5e019630 -- Mon Jan 23 13:04:05 2023
     mtime: 0x63c98fc0:559e2928 -- Thu Jan 19 11:45:20 2023
    crtime: 0x63c98fc0:41974a6c -- Thu Jan 19 11:45:20 2023
    Size of extra inode fields: 32
    Extended attributes:
      security.selinux (37) = "unconfined_u:object_r:user_home_t:s0\000"
    EXTENTS:
    (0-7934):966656-974590
    

    在这种情况下,~32MB(7935x4KiB 块)文件位于块 966656-974590 中,因此这将用于setb 966656 7935标记那些已使用的块。应擦除 inodeclri <inum>以防止分配的块范围之后可见。

    在外部文件系统中分配的块debugfs setb将保持分配状态,直到下一次在外部文件系统上运行 e2fsck。如果有人真的注意的话,这可能会“暴露”那些正在使用的块,因此可以选择在卸载外部文件系统后再次清除它们,使用 `debugfs -c -R "clrb <inner_start> <inner_count>" /dev /”,或保持分配以避免内部文件系统可能被损坏。

    • 1
  2. frostschutz
    2023-03-25T06:18:58+08:002023-03-25T06:18:58+08:00

    我自己不使用似是而非的推诿,因此请将此视为评论。

    您可以为作业使用设备映射器dmsetup( )。

    它允许您设置线性映射(映射到实际数据的扇区范围)、错误映射(不存在的扇区范围,只会产生读/写错误)、零映射(丢弃写入并在读取时返回零的扇区范围), 快照 (写时复制覆盖), ...

    因此,您可以构造一个块设备,其中只有外部卷区域可见,内部卷受到保护,并且对内部卷的写入将被有效丢弃或仅临时存储在快照区域中。并且在这些区域中尝试读取可能会产生零或读取错误。

    您可以在该外部卷上安装甚至启动 VM,它根本无法损坏或访问您的内部卷。但是,在没有这层保护的情况下使用它时没有这样的承诺。

    另一种选择是通过在外部卷中创建文件来分配空间,然后使用 dm-linear 从分配的文件空间中创建可用的块设备(filefrag将显示为每个文件分配的扇区范围)。这样,外部文件系统的文件将保护内部卷。

    这种方法将允许您自由使用外部文件系统,甚至可以在其上运行 TRIM/discard。只要表示内部卷的文件保持不变,任何事情都可以。这还假设外部卷文件系统不会自行重新定位/重写文件内容(没有碎片整理、重新压缩、去重等)。

    • 0

相关问题

  • 如何在 solaris 11.3 中挂载 zfs 驱动器分区

  • 备份 Nand Flash 存储区

  • 如何正确分区 SSD 以进行双启动设置

  • 并行安装多个 linux 发行版

  • fdisk 没有看到 resize2fs 缩小未挂载的分区

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve