起因

在阅读 《精通比特币》第二版 第五章 钱包 的时候,发现扩展父私钥创建子私钥扩展父公钥以创建子公钥的两图中,HMAC-SHA512 的三个输入是完全相同的,都为父公钥、父链码和索引号,并且将结果的左 256 位分别作为了子私钥与子公钥。对于这两张图,我就产生了几个疑惑:

  • 为什么用相同的参数生成的两个相同的数在两个场景中可以分别作为私钥和公钥?
  • 图上父私钥、父公钥到子私钥、子公钥的连线是什么意思?
  • 如果子私钥和子公钥不同,如何能确保它们是配对的?

后来发现这些问题都源于漏看文章的几句话以及文章没有对算法进行详述。(捂脸

阅读全文 »

介绍

这次写的内核模块比较简单(不要问我为啥总是写一些奇奇怪怪的东西 XD),用于在内核态监控 CPU 使用率。在实现上主要就是对 htop 和 /proc/stat 的实现的简单缝合,配合内核态时钟来定时获取数据,最后配合 procfs 来实现和用户态的交互,用于配置 CPU 监控阈值。

环境:opencloudos 8.6,内核版本 5.4.119

仓库地址:https://github.com/ytf4425/cpu_monitor_in_kernel

阅读全文 »

虚拟化简介

与虚拟化相对的一个概念是仿真/模拟,简单说就是伪造硬件。例如 QEMU 依靠模拟 ARM 处理器在 x86 处理器系统中创建一个 ARM 处理器的虚拟机。

而虚拟化的(大部分)指令是直接跑在真实的 CPU 上的,虚拟机内的指令集与宿主机相同,执行速度接近原生(宿主机)执行的速度。

阅读全文 »

这个标题看起来很高大上,其实也只是一个功能比较简陋的小内核模块,这篇文章看完我想你也能做一个类似的甚至更好的东西。

如果你也想尝试,建议使用 VMware Workstation 虚拟机,不推荐使用 Windows 自带的 Hyper-V 虚拟机,因为用现成的内核编译配置文件直接编译同版本内核在 Hyper-V 中都跑不起来,需要调整很多驱动,还不能保证成功运行。

代码仓库:https://github.com/ytf4425/lsm_totp_2fa

初步构思

这个模块想要实现的功能很简单,就是在文件访问之前添加 2FA。

由于 LSM 是在内核态默默地做验证,验证时并不能与用户态进行交互,因此并不能在程序访问到某个文件的时候做实时的认证,因此需要在访问文件前就通过一个程序来解锁,设定 unlocked 状态,这样在 LSM 检查访问权限时才能通过。当然在文件访问结束后可以根据意愿重新加锁。一个文件可能在一个程序中需要被重复打开,因此没有做打开后自动加锁的功能(不过也许以后可以加上,事实上大多数情况只打开一次就够了)。

所有文件名(这是个坑,最后再说)和对应的 TOTP 密钥及其他信息需要保存在一个普通用户无法读取的地方,因为知道 TOTP 的密钥后就可以直接计算并解锁。

阅读全文 »

隐蔽通道场景演示

测试准备

  1. 启动到隐蔽通道处理前的安全核 SecLinux

  2. 创建两个进程 user_huser_luser_h 的安全范畴包含 user_l 的安全范畴,user_h 的密级高于user_l 的密级,即 user_h 的安全级支配 user_l 的安全级。此外,设置进程主目录安全级与进程安全级相同。将两个进程主目录自主访问控制权限放开,即均通过 chmod 命令将其权限设为 0777,允许所有进程可读、写和执行。

阅读全文 »

启动并登录系统

安装完成 VMware Workstation 后可以直接打开 vmx 虚拟机文件,启动后使用用户名密码登录。VMware 虚拟机的网络默认配置为 NAT 模式。打开终端,使用 dhclient 连接网络。

可以看到获取到的 IP 地址为 192.168.245.128.

打开 系统设置 -> 安全级别,在弹出的窗口中勾选允许进入中的 SSH,确定后退出。

阅读全文 »

安装前准备

根据 Hadoop Java Versions,最新版 Hadoop 支持 Java 8 与 Java 11 的运行时环境,同时还支持 Java 8 的编译。此外,Apache Hadoop 社区编译测试都使用 OpenJDK,因此这里我们选择安装 OpenJDK 8。Ubuntu 仓库中的 headless 版 JDK 是针对无需 GUI 界面的 Java 程序的软件包,占用空间更小。

此外,Hadoop 官方文档要求安装并启用 ssh,并且推荐安装 pdsh 更好地管理 ssh 资源。

1
sudo apt install openjdk-8-jdk-headless ssh pdsh

使用命令 sudo service ssh start 启动 ssh(WSL 不能使用 systemctl,只能用 SysV init 的命令),若出现 sshd: no hostkeys available -- exiting. 的错误,使用 sudo ssh-keygen -A 生成一个 hostkey 后重试。

阅读全文 »

简单认识 IMA

内核完整性子系统可用于检测文件是否被远程或本地更改。它会评估一个文件的度量值(哈希值),并将其与先前存储为扩展属性的“良好”值进行比较(在 ext3、ext4 等支持扩展属性的文件系统上)。其他安全技术(如 SELinux)也提供了类似但互补的机制,可以根据策略尝试保护文件完整性。

内核完整性子系统由两个主要组件组成:

  • IMA(Integrity Measurement Architecture,完整性度量架构)能够基于自定义策略对通过 execve()mmap()open() 系统调用访问的文件进行度量,度量结果可被用于本地/远程证明,或者和已有的参考值比较以控制对文件的访问。
  • EVM(Extended Verification Module,扩展验证模块)能将系统当中某个文件的安全扩展属性,包括 security.imasecurity.selinux 等合起来计算一个哈希值,然后使用 TPM 中存的密钥或其他可信环境中的密钥对其进行签名,签名之后的值存在 security.evm 中,这个签名后的值是不能被篡改的,如果被篡改,再次访问的时候就会验签失败。EVM 的作用就是通过对安全扩展属性计算摘要和签名并将其存储在 security.evm 中,提供对安全扩展属性的离线保护。

Linux IMA 子系统在 Linux 内核中引入了钩子,以支持在文件内容被读取或执行之前,在打开时创建和收集文件的哈希值。IMA 度量子系统于 Linux 2.6.30 中被引入。

阅读全文 »

TPM 的概念

可信平台模块 (Trusted Platform Module, TPM) 是一种提供基本的安全相关函数的芯片,主要涉及加密密钥。 TPM 安装在计算机的主板上,它使用硬件总线与系统的其他部分通信。

装有 TPM 的计算机可以创建加密密钥并对密钥进行加密,以便只能由 TPM 解密。此过程通常称为包装 (wrapping) 或绑定 (binding) 密钥,可帮助保护密钥免受泄露。 每个 TPM 都有一个主包装密钥 (master wrapping key),称为存储根密钥 (storage root key, SRK),存于 TPM 内。在 TPM 中创建的存储根密钥或背书密钥 (endorsement key, EK) 的私钥永远不会向任何其他组件、软件、进程或用户公开。

阅读全文 »

本文是 Trusted Platform Module - Wikipedia 的部分翻译,译于 2022 年 10 月 17 日。

概述

TPM 提供:

  • 一个硬件随机数生成器
  • 用于安全生成有限用途密钥的设施
  • 远程认证:创建一个几乎不可伪造的硬件和软件配置的哈希密钥摘要,可以用来验证软硬件是否被修改。负责给配置生成哈希的软件决定了摘要的范围。
  • 绑定:用 TPM 绑定的密钥(一个从存储密钥派生而来的唯一的 RSA 密钥)加密数据。包含 TPM 的计算机可以创建密钥并用 TPM 来加密这些密钥,以便它们只能由 TPM 解密。这一过程通常称为包装或绑定密钥,可以保护密钥不被泄露。每个 TPM 有一个存于内部的主包装密钥,称为存储根密钥(storage root key)。用户级 RSA 密钥容器和特定用户的 Windows 用户配置一起存储,可以用于加解密以该特定用户身份运行的应用程序的信息。
  • 密封:类似于绑定,但要指定 TPM 状态以便解密(开封)数据。
  • 其他解密(开封)数据的可信计算功能。

由于每个 TPM 芯片在生产时都有烧录在内的一个唯一且保密的背书密钥 (Endorsement Key, EK),计算机程序可以使用 TPM 来认证硬件设备。嵌入硬件的安全方案能比纯软件解决方案提供更多保护。但它在某些国家受到限制。

阅读全文 »
0%