Home avatar

Wings

Kernel Pwn Syscall userfaultfd and Syscall setxattr

userfaultfd 是一个系统调用, 可以用来自定义 handler 处理缺页等情况. 简单来说是通过新建一个线程, 然后监视一个页面. 在任何时刻出现了缺页的情况, 触发缺页的线程挂起, 监视线程进行处理, 处理完毕后唤醒之前挂起的线程.

在 CTF 题中通常用来卡条件竞争. 当内核模块中有 copy from/to user 的时候, 内核模块会访问用户的空间. 如果我们传入的是一个被 uffd 监视的地址, 那么这个线程将会被挂起直到处理结束. 这样就能够控制内核中线程的执行顺序, 从而更好的达到想要的竞争效果.

uffd 使用模板如下:

「笔记」应用密码学与网络安全

古典密码

代替和置换

单表代替密码.

$c = p + k \mod |\Sigma|$

统计频率可以攻击

多字母代替密码

在 $5 \times 5$ 的矩阵中, 从左到右从上到下, 先填入密钥, 然后再按顺序填入剩余字母. 其中 I = J.

明文两个字母一组. 若一组字母相同, 则插入一个字母 (如 x). 若明文长度奇数, 则最后补一个字母 (如 x).

两字母在表上

  1. 同行, 用右边一个代替
  2. 同列, 用下面一个代替
  3. 对角线代替, (第一个字母所在行, 第二个字母所在列), (第一个字母所在列, 第二个字母所在行)

明密文不是一一对应关系, 能够降低统计规律, 但仍然有结构信息, 可被攻破.

多字母代替密码

$n \times n$ 可逆矩阵 K, 明文分组, $n \times 1$ 的列向量 $p$.

加密: $c = Kp \mod |\Sigma|$

解密: $p = K^{-1}c \mod |\Sigma|$