比尔盖子 博客

Sticky post
软件的自由,关系到人类的自由。

by Cory Doctorow

GnuPG 2.1.18 不识别智能卡的解决方法

如果你通过 PC/SC 访问 OpenPGP Card,在升级到 GnuPG 2.1.18 后,你的智能卡将会停止工作。智能卡将无法被 gpg --card-status 正常识别,提示各类错误,例如:

gpg: selecting openpgp failed: No such device
gpg: OpenPGP card not available: No such device

在 GnuPG 中,本身就通过 ccid 支持了标准的 OpenPGP Card,一张标准的智能卡和兼容的读卡器可以直接和 GnuPG 一起工作,无需修改任何配置或安装任何程序。

但是,很多 OpenPGP Card 并非完全遵守 v2 标准,例如开发版本的 gnuk(遵守 v3 标准);或者 Yubikey(带有扩展特性),我们就需要通过 PC/SC 作为中间层访问智能卡。

这时,竟态条件就产生了。初次使用智能卡时,GnuPG 会和 PC-SC 抢占智能卡设备的控制权,过去 PC-SC 总是赢家,偶然,如果 GnuPG 赢了,智能卡就会无法正常工作。

因此,可以通过禁用 GnuPG 内建的智能卡支持,解决这个问题。

echo "disable-ccid" >> ~/.gnupg/scdaemon.conf

重启 pcscdgpg-agentscdaemon 后见效。如果你是 PC-SC 用户,建议总是禁用 ccid 避免冲突。

那么为何升级到 2.1.18 之后才会出现这个问题?日本 FSIJ 的 Niibe Yutaka,也就是 gnuk 的核心开发者主动跳出来表示,他把一个 bug 添加进了 scdaemon。以前,scdaemon 发现内建的 ccid 无法识别智能卡后,会顺便调用 PC/SC 再试试看,但重构代码时忘记保留这个特性,他已经编写了这个补丁修复了问题,而且已经被 Debian 采纳。

来源:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=852702

最近的 OpenSSH 漏洞究竟有多大危害?

OpenSSH 刚刚更新到了 7.4 版,修复了已公开的 CVE-2016-10009, CVE-2016-10010, CVE-2016-10011, CVE-2016-10012 以及一个没有 CVE 的漏洞。其中,CVE-2016-10009 可以用来“任意执行代码”,因此,强烈建议大家立即更新所有的服务器,而且客户端也不能除外。但是,这些漏洞究竟有多大危害呢?是否可以利用这些漏洞控制服务器呢?我们一起来仔细看看:

CVE-2016-10009:sshd 服务器可以利用转发的 agent-socket 文件欺骗本机的 ssh-agent 加载一个恶意 PKCS#11 模块,任意执行代码。换句话说,是恶意服务器在客户端的机器上远程执行代码。

谁让你连恶意服务器的????

CVE-2016-10010:关闭 UsePrivilegeSeparation 权限隔离功能时,ssh 转发的 socket 文件将以 root 权限创建。

谁让你关闭权限隔离的????UsePrivilegeSeparation sandbox 是标准配置。

CVE-2016-10011:即使打开权限隔离,假如攻击者可以让 sshd 创建的子进程提权,那么服务器私钥理论上可能通过 realloc() 的过程泄漏给子进程。

泄漏私钥,听上去有点危险。前提是这攻击是理论上的,要使用,你得先有办法让子进程提权啊?????你有办法吗???再者,你们的 sshd 都应该开前向安全了吧……

CVE-2016-10012:sshd 服务器如果启用了认证前压缩(也就是 Compression yes),其中的某些边界检查可能会被编译优化去除,导致攻击者有可能从经过权限隔离的子进程中攻击高权限的父进程。

谁让你打开认证前压缩的?你当 CRIME 攻击是闹着玩的啊????CRIME 攻击之后 sshd 的默认配置都是 Compression delayed,也就是认证后压缩,如果你这都不知道那你的服务器就已经不安全了。再者,从子进程中怎么攻击父进程?目前还没有已知的方法。

无名漏洞AllowUsersDenyUsers 选项可以接受无效的 IP 段。假如管理员想拉黑用户,但却输入了无效的 IP 段,那么用户就不会被禁止登录,而管理员也不知道。

谁让你把 IP 段输错了?????再者,你拉黑恶意 IP 不使用 iptables 防火墙吗???


可见,这些漏洞确实不容忽视,强烈建议所有人立刻更新。然而,如果你想搞个大新闻说利用这些漏洞可以控制服务器,那还是图样图森破了。如果你平时在运维服务器的时候已经遵循了最佳安全实践,那么其实际危害是很低的。

新服务器密钥指纹

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

* RSA
    * SHA256 | DSsHk7JuE8iNPV9yVESiRptOPv4eepQKpWxaDoOk9m4
    * MD5 | 92:a7:2f:a8:07:76:3f:f7:03:f2:54:e9:06:ea:19:9e

* Ed25519
    * SHA256 | MTJ6TdQezosVmHLR258Fp967mSZlfK96V4oQprP96qw
    * MD5 | 6f:b2:9b:0d:05:51:12:25:23:02:ea:74:33:3d:28:d5
-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEJVIRsjlaWj4OSKDx+tPrBeiOjW0FAlhLgf8ACgkQ+tPrBeiO
jW2raw/9HKZ2c9tjs/u001P1TL7+sLriK12SzBkXR7jfTCRjXAR4Qxh9QnU5hZ8/
tnXH5qmKQxQXTrZqZtkbsNNQbwLBT5c0N7ZfYoJAh1occveAOaE9z6W7CT/8y1H5
1KiYXKhWs0ShbFs+VT9yasvgwGInTjERvXUk9JBa5DCjz1tFBDAzE51h5fQD8CA2
5USJHMbx4wDVAskZ5uSeXWV+xMY1U9JgDbZeSefFJLV+rzd1tt9rCWrgz7lQRDmT
ufQ8hMOX3Dkp6Zllyi1OVrxbep8zMSZgRPaIhcdnIG9A+9dBRQ5QJV6uBzMocXlP
FlSjqtlGqjCdcdqQg7ka9fMBhox/hE34lKeNdubT9TVv7jWy8EmUxUhIKd+72wUC
9sdt6g/yLeboPa88YwKH9LvmOlsJS69P4m40i4rJprZSaERyNTkGP1GoFl167v1k
nDIrwkmI6Os53H1rt7e3jYbgg/cJxOF7+734T+RbVsHO+t/GvgoD9OCP3avpzbF/
SNl4rGBlNbbqN7Trw4a8w+SRl3FLiH6HSt64xrNqhttb/wJHO0SmR/aaXqYVa3Og
VKCaXgIuOqaOw3aDuoSt4Qh//BDRInC/89QLEbHBxjvFxnGF+BVIg3Kij3lVIlXi
cJmkh+a4j94KfTvV3ZQkM61jTkeASAUc2UP10cZTPABinUT1fdk=
=0t8H
-----END PGP SIGNATURE-----

使用 cryptsetup 加密 swap

Swap 分区不利于系统安全。当 RAM 中的数据被写入到硬盘等永久存储设备时,就会面临更高的数据泄漏风险。如果内存中的密钥恰好被写入到了 Swap 中,就大大降低了攻击者的难度,只需要简单得进行数据恢复,无论是什么加密算法都不在话下。不过,随着现在的计算机内存容量越来越来,Swap 的使用已经没有那么广泛了。

不过,很多情况下 Swap 依然是非常有用的,这时候我们可以使用 cryptsetup 对 Swap 加密一下消除安全隐患,整个过程非常简单,也不需要记忆任何的密钥。作为副作用,这意味着系统无法在关机后解密 Swap,因此无法休眠了,此外,写入 Swap 时的 CPU 占用率也会有所上升,但如果你的 CPU 支持 AES 指令集,影响会十分有限。

思路非常简单,首先,我们使用 cryptsetup 使用一个随机密钥打开 Swap 分区或文件,然后,再将 cryptsetup 在 /dev/mapper/ 中创建的抽象设备作为 Swap 使用。由于密钥是随机的,因此每次抽象设备中的数据也都是完全随机的,我们在使用之前还需要重新 mkswap 创建 Swap。

我们假设已经有一个 Swap 文件位于 /swap,因此抽象设备将是 /dev/mapper/swap。如果你使用其他文件或分区自然没有问题,记得手工执行 cryptsetup 并观察一下 /dev/mapper 里的设备叫什么名字。如果你想自己创建 /swap,别忘了在创建后使用 chmod 600 /swap 保护原始文件。

cryptsetup open --type plain /swap swap --key-file /dev/urandom 
chmod 600 /dev/mapper/swap 
mkswap /dev/mapper/swap
swapon /dev/mapper/swap

创建此脚本,赋予可执行权限,并执行此脚本,Swap 立刻可以使用了。由于这是一个一次性 Swap,我们并不需要关闭它,但如果测试需要,可以这样:

swapoff /dev/mapper/swap
cryptsetup close /dev/mapper/swap

为了方便,我使用了一个 Systemd 的 Unit 文件来做到自动挂载。

[Unit]
Requires=swap.target

[Service]
ExecStart=/usr/local/sbin/encrypted-swap
Type=oneshot

[Install]
WantedBy=multi-user.target

其中 Requires=swap.target 代表此脚本在 Systemd 执行内建的 swap 服务后执行,避免可能的竞态条件;/usr/local/sbin/encrypted-swap 代表脚本的位置;Type=oneshot 代表此服务只运行一次,然后立刻退出。首先关闭现有的 Swap,把此文件命名为 encrypted-swap.service,并 systemd start encrypted-swap 看看是否正常,若正常便可 systemctl enable encrypted-swap 开机自启动了。如果你有现有的自动挂载 Swap 配置,如 /etc/fstab,你需要手工取消,避免冲突。

此外,cryptsetup 加密 plain 文件的默认算法是 aes-cbc-essiv:sha256,没有安全问题。你可以使用 cryptsetup --help 查看默认的 plain 类型加密算法。

Linode Xen 下 grsecurity >= 4.3 崩溃的解决

更新:官方已在 grsecurity-3.1-4.7.4-201609152234.patch 中修复问题,不再需要此 workaround。

自从 Linux 4.3 开始,在 Linode 上使用 PaX/grsecurity 时,内核会在被 pv-grub 执行后不久立即崩溃。由于崩溃是在启动后极早期立刻发生的,没有任何可以用来调试的日志,同时公司也不是盖子开的,也没有办法得到母机上有意义的调试信息。这导致了盖子的 VPS 内核从去年 12 月开始被锁定在 4.2.7。由于不知什么时候产生了 Linode 东京机房会在 2016 年 6 月从 Xen 迁移到 KVM 的错觉,也没有花精力去尝试调试这个问题。

Continue reading

自由软件基金会的历史包袱 —— GFDL

当我们需要发布文档的时,可以选择有许多不同的许可证。事实上,老牌的 MIT、BSD 或 GPL 均可以用于任何作品,包括文档在内;但你可能会说,这些都并非专门为文档制定,因此需要一些更合适的,没问题,你可以立刻加入 CC 协议豪华午餐;但你可能又会说,你已经采用 GPL 许可证作为了项目的主许可,采用另一个组织发布的许可证,不太整齐划一,因此希望使用 GFDL 许可证。

这并非没有道理,《GNU 自由文档许可证》是 FSF 专门为文档量身定制的。如果你是 FSF 的支持者,FSF、GNU 和自由看上去都会是首选,更何况这也是一个老牌的许可证,比 AGPL 等许可证的岁数都大得多,看上去也挺靠谱的。然而,在 21 世纪 10 年代的今天,GFDL 已经不再是好选择,我将通过这篇文章证明这点。

Continue reading

网络维护日

日子快到了。

当年,HD DVD 密钥被泄漏了,随后就遭到的财阀的施压,导致这个能破解拷贝 DVD 的密钥到处被封杀。于是,美国网民创作了一面“言论自由之旗”,这面旗帜把遭到封杀的高清 DVD 密钥用旗帜上的颜色条表示了出来,从而绕过了审查。

而如今一到了中国互联网维护日,各种形式的自我审查就会接踵而至。很明显,中国的网民也需要自己的言论自由之旗。受到美国网民的启发,我设计了“中国版言论自由之旗”,同样象征言论自由。这是一面纯色的旗帜,旗帜颜色的 HTML 编号为 #890604。出乎意料很巧合的,这是一面暗红色的旗帜。在就连“蜡烛”图标都会遭到屏蔽的网络环境下,一种颜色就可以表达无声的抗议。

Chinese Free Speech Flag

本文章和这面旗帜均采用公有领域授权,尺寸比例是 2:3 或 3:5。请将本文转载到你的博客上;并将本旗帜和传播到社交网络的四面八方。没有任何文字说明,也不会遭到封杀,是蜡烛的绝佳替代品。同样,大家可以在任何艺术作品/设计中使用颜色 #890604。只需要注意一点:很多时候输出或上传的图片会被无损压缩,甚至是上传后的二次无损压缩,因此请多多测试,选择适当的格式传播。通常,gif 格式的图片不会被二次压缩破坏信息。SVG 矢量图的版本可以在维基共享里找到

Chromium 还是 FireFox?

比尔盖子从去年开始进行全系统加固,无论是个人电脑还是服务器都部署了 Gentoo Hardened,并采取了不同程度的安全措施。Chromium、FireFox,以及基于 Webkit 的外壳浏览器是自由软件界的御三家,从特性上来说各有独自的优势 —— 如果要从这一点上进行谈论恐怕会触发圣战,这也并不是比尔盖子撰写本文的目的。本文企图从系统安全的角度来说明浏览器的选择。

Continue reading

服务器维护初步结束

2013 年,爱德华·斯诺登披露了棱镜计划,于是人们,包括盖子自己终于学会了如何正确配置 TLS;2014 年,各研究者纷纷加入到 Linux 安全的研究行列中,随着一篇“炮打shell司令部root,我的一个 exploit”的 Bug 报告,以前那种“随便配置个 Linux 服务器让它跑”的欢乐时光已经彻底结束,真是让各运维苦不堪言,都快患上 Shell Shock 了,人们不得不以正确的态度开始对待安全;2015 年,越来越多的安全审计也被提上日常。

在这样的背景环境下,学习并应用的安全技术是多多益善的。因此,我在今年初部署了一台实验性的服务器,用于测试 PaX 技术。如今,虽然 grsecurity 以盖子的能力完全掌握还需要时间,但 PaX 已经完成测试可以部署了,而盖子的服务器运行了两年时间,也暴露出来一些问题。

因此盖子进行了一次大型服务器维护。而凑巧,在服务器进行维护之前的 8 月 15 日,忽然被 GFW 屏蔽了!一天之后,服务器也进入了关机维护状态,以至于不少人出现了“这服务器怎么挂了代理也不能翻墙访问”的错觉。

长话短说,这此维护的摘要如下(随着维护的进行,可能会更新):

Continue reading

« Older posts

Copyright © 2017 比尔盖子 博客

匿名浏览:http://x4wttqqrkud5pttgqlpxgevtr4rbqpa6lkwdiw3o3m6q4deeldgq.b32.i2p
警告:残留有明网混合资源,访问前请自行屏蔽明网流量

Theme by Anders NorenUp ↑