chackd 是一个守护进程,每秒随机化内核参数 tcp_challenge_ack_limit,以防止侧信道攻击。
最近展示的一种侧信道攻击引起了社区的广泛关注 [1]。对于许多服务器或智能手机设备,这种攻击被认为对 IPv4 连接是危险的。毫无疑问,内核将在后续版本中修复此问题。然而,某些管理员可能由于特定原因或仅仅因为懒惰而不更新内核。
将参数调整为非常高的值 [2] 可以正常工作。但另一方面,对于服务器应用程序,这可能会导致不必要的流量。为了防止这种情况,我编写了 chackd 程序。它可以配置以实现 [1] 中提出的解决方案。
chackd 守护进程很好地完成了这项工作,并保持了简单性。我之前的一个构想是寻找一个可加载的内核模块,但我放弃了这个想法,因为用户空间与内核空间之间有一个强大的接口叫做 proc vfs。通过 proc 文件,我们可以用一个简单的守护进程来完成这项工作。
这是我的第一个开源项目,对于希望防御 challenge_ack_limit 攻击但又无法更新内核的管理员来说,这是一个很好的福利。只需编译并在你的服务器上运行即可。
我需要社区的帮助,使这个项目达到"社区标准"。
请查看源文件中的 TODO 注释,了解我希望进一步处理的内容。欢迎以任何方式分支进行修改。 我希望从这个项目中学到很多东西。
Makefile - 我希望 Makefile 能成为一种标准格式,包含安装、内核版本查询等功能。
start_daemon - 任何可能导致守护进程崩溃的代码部分都必须修复。
stop_daemon - 任何不符合标准的代码部分都必须修复。
init_daemon - 任何可能导致守护进程崩溃的代码部分都必须修复。
main - 我的意图是让主参数作为简单的整数传递,目前工作正常。但也许有更好的处理方式?
1 秒间隔的 "sysctl net.ipv4.tcp_challenge_ack_limit"
net.ipv4.tcp_challenge_ack_limit = 222
net.ipv4.tcp_challenge_ack_limit = 227
net.ipv4.tcp_challenge_ack_limit = 191
net.ipv4.tcp_challenge_ack_limit = 178
net.ipv4.tcp_challenge_ack_limit = 229
net.ipv4.tcp_challenge_ack_limit = 167
net.ipv4.tcp_challenge_ack_limit = 189
net.ipv4.tcp_challenge_ack_limit = 229
Bastian Pukallus,请发送邮件至 [email protected]
[1] http://www.cs.ucr.edu/~zhiyunq/pub/sec16_TCP_pure_offpath.pdf
[2] https://www.mail-archive.com/[email protected]/msg705042.html