# IT Sicherheit 笔记
# Netzwerksicherheit
# 保护数据传输
问题
- 有不同的协议 WLAN(无线局域网)、BT(蓝牙)、5G、以太网、IP/TCP 协议
- 不同的安全保障层次
应用层:例如单独的即时消息、单独的电子邮件
传输层:例如 TCP 连接、TLS(传输层安全)加密的数据传输
# 分析端点的数据流量
- 防火墙:过滤进出网络的数据包
- 入侵检测系统:检测可能的攻击痕迹(攻击者的 “脚印”)
# 传输层的安全
保护目标:
- Authentifikation: 每一个设备 / 用户的身份认证
- Vertraulichkeit: 每次连接的数据加密
- Integrität: 数据包的完整性
问题:密钥交换
使用的方法:AES-128 GCM(高级加密标准)、SHA256(安全哈希算法 256 位)、X509 证书
静态预设的方法或动态 “协商”(即在通信过程中协商选择加密方法)
# TLS 1.3
通过 HTTPS 保障 HTTP 安全,通过 SMTP over TLS 保证 SMTP 安全
- 加密算法:规定了 5 种密码套件(Cipher Suites), 只允许 AEAD 模式的密码
- 密钥交换:用 ECDH 密钥交换
- 身份验证:CR, X.509
- 数字签名:RSA 或者 ECDSA
# TLS-Protokollablauf
目标:Clint A 安全地连接 Server B
-
初始化:Handshake-Protokoll:
- 确定 Cipher-Suite
- 身份认证
- 去中心化生成共享密钥: , 并且生成一个用于握手消息的 MAC 密钥(kmac)来确保消息的完整性和认证
-
加密数据交换:Application Data Protokoll
- 客户端和服务器之间传输的应用数据包(如 HTTP 请求、邮件内容等)会进行端到端加密
# TLS-Handshake-Protokoll
广为流传的版本:Server B 对 A 验证自己,A 不对 Server B 验证自己
# Msg1: A to B
- A 随机生成
- A 生成 DH-Paar
- 选择 Cipher-Suite
生成第一个消息
# Msg 2: B 生成,不发送
- B 生成 , 选择 作为 Cipher-Suite, (let )
- 生成
第二个消息
- 通过 和 生成 DH-Secret
- 通过 生成密钥
- 计算
- 计算
# Msg 3: B to A
# HTTP Request: A to B
- 验证签名
- 从 提取 和 计算
- 通过 生成密钥
- 验证 HMAC:
- 生成结束
发送 HTTP Request
A 之后用 加密数据
# B 验证 Finish
B 验证
B 之后用 加密数据
# TLS 1.3-Handshakes 的种类
之前说的是 1-RTT (Round Trip Time)
# 双方方互相验证的 TLS1.3
- B 发送 ServerHello 的时候同时发送一个 Certificate Request
- A 会回复它的 Client-Certificate , 并且签名
- B 再验证这个签名
# 0-RTT
A 保存之前的 并且用作之后的通讯
A 在发送 Hello 之后,直接发送数据
# ACME
Automatic Certificate Management Environment (ACME)
问题:
Server 经常没有 TLS 服务,生成 TLS-Server-Zertifikats 太贵了
ACME-Protocoll 可以通过自动化流程为网站服务器颁发免费的 TLS 证书。
Let’s Encrypt:广泛使用的认证机构(CA),为网站提供免费 TLS 证书
# 应用对象的安全保障
Messenger 即时信息服务
WhatsApp, Signal, Telegram, Threema, Matrix
安全目标:
- Vertraulichkeit 机密性:在数据传输过程中保证安全
加密通信模式
- E2E 加密 + TLS 传输:服务器不能读取消息
- 仅传输层层加密:服务器可以读取消息
# 案例:Singal
以隐私保护和安全通信为核心设计,开源软件,由非盈利组织 Signal Foundation 维护和运营。
用户注册:
- 需要电话号码
- 电话号码只存 hash 值
- Signal-Server 不存储用户数据
通信安全:
- AES-256 加密,通过用户 PIN 保护
- TLS 加密传输
- 不保存元数据 Metadata
# Signal Protokoll
Signal 协议被广泛用于 Whatsapp 等平台
任务:
- 双向身份验证
- 支持离线模式
- 每条信息用新的密钥加密
- 音视频传输
协议实现:
- X3DH (Extended Triple Diffie-Hellman)主要用于初始密钥协商,在通信开始时确定共享密钥
- Double Ratchet 用于即时消息的加密,动态更新加密密钥,确保消息安全。
# Double Ratchet-Protokoll
# Symmetrisches Ratchet Protokoll
基础是: A,B 直接共享密钥 CK
任务:
- 用 作为第 个消息的密钥
- A,B 去中心化计算密钥
- 对称加密
过程:
- A 计算
- B 用自己的 CK 计算
- 下一个用 作为基础
# DH-Ratchet-Protokoll
之前这个的问题是,没有 PFS,所以需要 DH-Ratchet
第一步:A
- A 生成新的 DH pair
- A 计算 作为新的 CK
第二步:B
- B 收到 , 计算
- B 生成新的 , 使用新的进行下一轮
# 例子说明
首先,设 B 当前的 DH 密钥是
# A 给 B 发消息
A 先生成 , 然后用 B 当前的公钥得到
, 用这个作为 KDF 左侧的输入,和上一个 RK 导出新的 RK. 我们设上一个 RK 是 (初始情况的 RK = SK, SK 是从 X3DH-Protokoll 交换出来的), 这里就求了
然后用这个 作为 Symmetrisches Ratchet Protokoll 的 CK , 推导出发送消息的 Message Key , 如果发送多条消息要重复推导,也就是 用上一个 CK 推到下一个 CK 和 Message Key。
此时 B 是离线状态
# B 给 A 发消息
此时 B 上线了,首先计算 , 用这个推导出 A 的 Message Key 来解密所有的消息 (过程和 A 一样)。
然后 B 给 A 发消息:
首先生成 , 计算 , 推导 , 然后用这个 作为新的 CK 推导出自己发送消息的 Message Key
以此类推
# Signal-Protokoll 的安全机制
- PFS
- Backward Secrecy: 一条信息的密钥泄露不会影响之前的安全性
- 通过 X3DH 协议双向认证
- 群聊: E2E 加密
# Systemsicherheit
# 操作系统的任务
- 通过 syscall 控制硬件
- 控制:内存,CPU, E/A, 文件管理
- Modi: Kernal-Mode: 执行特权命令;User-Mode: 执行普通命令
# 操作系统的保护 / 控制任务
-
标识符 Identifikatoren: 进程,文件,文件的安全管理
-
访问控制
-
访问与信息流控制: ACL (访问控制列表), 权限能力,分类
-
安全启动:Secure Boot, Trusted Boot
-
安全运行环境: TEE
-
RAM 保护机制: Canaries, DEP 数据执行保护,ASLR 地址空间布局随机化
-
虚拟化: Isolation, Hypervisor, VM-Monitor
# 内存保护
冯诺依曼架构 universelle Interpretierbarkeit:程序指令和数据存储在同一存储器中,具有统一的地址空间。
# 进程地址空间
# Buffer Overflow
# Example 1
void a() { | |
bool is_admin; | |
char msg[128]; | |
gets(msg); | |
} |
这个时候, is_admin
在 msg 的上面,Buffer Overflow 的时候是从低地址往高地址 overflow,可以覆盖掉 is_admin
# Return To ShellCode
可以把 shellcode
(可以打开 shell 的代码) 作为输入,然后控制返回地址,跳转到这个 shellcode 的地方开始执行。
# Stack-Shielding
# Stack Canary
在返回地址前面加一个随机数,如果随机数被覆盖了就说明有 Buffer Overflow
这个保护措施通过 GCC 加的
Shadow Stack
Shadow-Stack 是一个独立且受保护的内存区域,用于安全存储函数调用的返回地址。它与常规栈相分离,以防止攻击者通过缓冲区溢出等手段篡改返回地址。
# DEP
Data Execution Prevention:
- CPU-Feature NX-bit (No-eXecute) 标记为不可运行
# ASLR
Address Space Layout Randomization 地址随机化
因为 DEP 不能保护 Return Oriented Programming (ROP)
- Linux 在每个程序启动的时候随机化
- Windows 在每次启动系统的时候随机化
但是代码段不会随机化
扩展:
- PIE (Position Independent Executable): 支持代码段随机化
- KASLR: Kernel ASLR 对内核地址空间进行随机化,从而进一步提升内核态安全性。
# Virtual-Machine-Monitor (VMM)
目标:
- 将物理硬件资源抽象为虚拟化资源,供虚拟机使用.
- Isolation: 确保各虚拟机(VM)之间相互独立,不受干扰
VMM/Hypervisor:
- 是一种管理虚拟机的软件,负责创建、启动和运行虚拟机。
- 允许不同的操作系统在多个虚拟机中并行运行。
- Hypervisor 实现了虚拟机之间的隔离,防止一个虚拟机对另一个虚拟机的直接干扰或访问。
- Hypervisor 可以控制虚拟机的状态,包括暂停、重启、调整资源配置等。
# Container-Konzept
轻量化的虚拟化,以更高效地运行和管理应用程序。
容器将应用程序运行所需的所有组件打包成一个整体,包括:应用程序代码,相关服务,依赖的库与运行环境
- 容器在用户空间中以 隔离进程 的方式运行。
- 与传统虚拟机相比,容器的隔离性较弱,因为它们共享相同的内核。
优点是:轻量高效,易于部署和维护
# 硬盘加密
保护系统中数据的机密性,特别是当攻击者拥有物理访问权限时。
例如,一台包含公司敏感数据的笔记本电脑被盗,攻击者拆下硬盘后,操作系统的保护措施不再生效,数据可能被轻易访问。
通过加密保护数据,只有在用户提供正确的密码(Passphrase)后,才能解密数据并访问。
在计算机关闭时,数据处于加密状态,无法被访问或读取。
# 种类
- 通过特定应用程序对文件进行加密,例如 PDF 文件加密。
- 文件系统层面进行加密,比如 fscrypt(Linux)
- Device Mapper: 在硬盘和文件系统之间进行透明加密,例如 BitLocker(Windows)、dm-crypt/LUKS(Linux)
# 硬盘加密的局限性
- 在加密过程中,密钥需要始终存储在主存(RAM)中,以便操作系统和应用程序访问。这意味着在系统运行时,密钥始终暴露于内存中。
- Cold Boot Attacks: 即使设备关闭,DRAM(动态随机存取内存)芯片仍会在短时间内保持其数据状态。
- 硬盘加密无法防止恶意软件的入侵 (恶意软件可以在系统运行时监视并记录密码输入或直接访问密钥)
解决方案
- 将加密密钥存储在 CPU 的寄存器中
- AMD SME,Intel MKTME 技术可以在硬件级别进行加密操作
- 使用受信执行环境,如 Intel SGX 或 AMD SEV 为加密操作提供一个安全的运行环境
# 信息安全管理
信息安全管理(ISM)是组织内部制定的一系列程序和规则,旨在确保信息安全的有效管理,包括
- 控制与管理:对信息安全进行持续的控制和监督,以确保其有效性。
- 保持与改进:确保信息安全的管理措施能够长期有效运行,并通过持续的优化和改进保持高效性。