Security

共 234 篇文章。

再谈域名注册服务提供商的选择

• Security

近期由于一些众所周知的原因,我做了一系列域名转移的操作。和 2006 年的这篇相比,这些年我也经历了不少域名注册服务提供商,并且积累了不少经验,是时候更新一下了。

域名服务是一项互联网基础服务,它提供了容易被人记忆和识别的在线地址。对于个人和企业来说,拥有自己的域名最大的好处在于能够掌握随时换一家供应商的议价权。集中式的平台,包括 YouTube、Twitter、GitHub,也包括新兴的平台如 TikTok、或是来自中国的小红书、喜马拉雅、B站等等,尽管也都是很好的产品,有些甚至可以为内容作者带来丰厚的回报,但是其上的个人或是企业无法很容易地离开这些平台。依赖这些平台,意味着在它们选择对内容作者采取某些行动,或是退出某项生意的时候,当事人可能没有任何其他选择,而必须在极短的时间内通知自己的受众去其他平台,这有时是很困难甚至不可能的。

对个人来说,邮件服务的运行成本是很高的(这里需要考虑的不仅是服务器本身的成本和运行费用,也包括需要投入的时间精力)。但即使不自己去运行邮件服务,也仍然有许多支持独立域名的邮件服务提供商,例如 Google Workspace、Microsoft 365、Zoho Workplace等等。与单纯使用 Gmail 或 outlook.com 等等相比,拥有独立的域名意味着可以在这些服务之间随时进行转移,而无需逐个通知亲朋好友。

阅读全文… ( 本文约 3727 字,阅读大致需要 8 分钟 )

带 DNSSEC 的域名转移

• Security

DNSSEC 是一组针对 DNS 协议的扩展,其主要目的是为数据的权威性(或者说DNS数据确实来自于有权发布这些数据的人)提供一套验证机制。DNSSEC并不改善私密性,所有的查询依然是明文的。

目前最新的 DNSSEC 最佳实践指南是 BCP 237 (RFC 9364)。值得说明的是,如果没有特别的需要,使用 DNS 服务业者的 DNSSEC 实现可以避免踩很多的坑,尽管这样一来安全方面就完全要仰赖这些业者了,但对普通的域名所有这来说这些服务要比他们自己去架设和管理要可靠不少。本文并不打算深入介绍 DNSSEC 及其部署,而只是关注于在进行域名转移时需要注意的问题,以备我个人未来进行参考。

阅读全文… ( 本文约 2097 字,阅读大致需要 5 分钟 )

关掉了 Google 账户的 passkey

• Security

最近, Google 账户新增了一种叫做 passkey 的登录方式。

传统的采用密码登录的登录方式中,用户需要用某种方式证明自己知道密码,而绝大多数实现中这意味着网站必须保存用户的密码,或是密码的 hash 值(通常是HMAC),这意味着网站如果发生了拖库的情况,有可能会将用户的密码或其 hash 值泄漏出去。此外,用户可能必须输入密码,并将密码通过某种方式传输到服务器上,这样一来在这个过程中便有可能由于本地的木马,或是网站采用的 SSL/TLS 实现的漏洞导致密码泄漏。除此之外,即使用户十分小心地在每一个不同的网站都使用了不同的密码,他们仍然需要担心被「钓鱼」的问题,所谓「钓鱼」是这样一种攻击方式:攻击者架设一个看起来很像是用户希望登录的网站的网站,并诱骗用户输入密码。

阅读全文… ( 本文约 1697 字,阅读大致需要 4 分钟 )

FreeBSD 上的 nginx kTLS 支持

• Security

昨天,FreeBSD 13.2 正式发布了。kTLS 是在 FreeBSD 13.0 中由 Netflix 赞助的新功能,过去,TLS/SSL 应用程序对于通讯内容的加解密通常是在用户态进行的,这样一来,系统在读取出数据和发出数据之前需要进行额外的上下文切换,并在内核和用户地址空间之间来回复制缓冲区来满足加解密的需要。有了 kTLS 之后,内核可以在 sendfile(2) 时直接在内核上下文中完成加密和填充到网络协议栈的操作,从而减少了上下文切换和不必要的复制操作。

阅读全文… ( 本文约 836 字,阅读大致需要 2 分钟 )

UGFzc3dvcmQ6 是什么?

• Security

今天无意中看了一眼服务器日志,结果发现了一些奇怪的消息:

1
2
3
4
5
6
7
8
9
warning: unknown[122.168.199.151]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[176.8.89.240]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[185.232.21.42]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[206.217.216.13]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[220.196.249.145]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[5.253.204.74]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[70.45.212.49]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[93.177.73.82]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
warning: unknown[93.177.75.66]: SASL LOGIN authentication failed: UGFzc3dvcmQ6

这里的 UGFzc3dvcmQ6 是什么呢?从直觉上看似乎是个 base64 编码的字符串。解码试试看,果然:

阅读全文… ( 本文约 224 字,阅读大致需要 1 分钟 )

用 FIDO key 来做 SSH key

• Security

OpenSSH 8.2 中新增了 FIDO/U2F 支持。它支持两种密钥对类型: ecdsa-sk 和 ed25519-sk。需要注意的是并非所有的 FIDO Security Key都实现了 ed25519-sk 的硬件支持:例如,截至2022年,Titan Security Key 就不支持 ed25519-sk。

使用 FIDO key 的 SSH key 在使用上和之前的 SSH key 类似,主要的区别在于在登录时系统会确认用户是否在机器旁边(通常是碰一下 FIDO key),这可以显著地改善安全性:与之前的 SSH key 不同的是,即使机器上的 U2F/FIDO SSH key 私钥文件被攻击者获得,在没有硬件 FIDO key 的情况下也无法使用这个私钥。对于对方同时能获得私钥文件和物理访问的情况,参见 xkcd/538,就不要跟扳手过不去了。

阅读全文… ( 本文约 718 字,阅读大致需要 2 分钟 )

Let's Encrypt SSL证书失效问题

• Security

Let’s Encrypt 是我目前使用的证书发证机构。早上 yegle 提到了某个bug,于是研究了一下,这里记一笔,算是留个历史见证吧。

发生了什么

在 PKI 证书体系中,信任是通过逐级签名以及对这些签名的验证来实现的。对大部分客户端系统来说,这些系统中会存在一个或多个受信的根证书发证机构的证书,其公钥是通过这些系统本身的更新机制派发的。

根证书发证机构的证书通常是自签名的,更新相对来说比较麻烦(它通常依赖于操作系统的在线或离线更新机制),因此这些证书的私钥事关重大,因此人们通常不希望经常更新它们,因而证书发证机构在绝大多数时候并不会使用这些私钥来签署证书。取而代之的是,他们会创建一些称为中级发证机构的证书用来签署日常的证书,这样根证书的私钥可以采用更为严密的方法来保护,例如可以把它们从网络上彻底断开,而中级发证机构的证书则可以以较高的频率进行密钥轮换,借此来避免其私钥暴露导致的风险。

一个新的发证机构进入市场时,其自签名的根证书往往不会被已经在市场上的客户端系统认可,因此这样一来新的发证机构想要获得用户就必须想办法解决能被用户承认这个问题。一旦获得了一定的知名度并证明了自己的可靠性,这些发证机构便可以遵循一定的流程获得主流浏览器或操作系统的认可,并将自己的根证书也加入到它们的受信根证书列表中了。所以,在起步阶段,新的发证机构往往会要求一些已经存在的根证书去对其根证书进行交叉签署,在客户端验证证书有效性时,由于这些根证书在他们看来是一个经过了受信根证书签名的中级证书而不是一个普通的不受信自签名根证书,因此也就不会给出无法验证证书是否有效的提示,而是能够正确地对其有效性进行验证了。

Let’s Encrypt 在起步阶段正是采用了这种做法。通俗地说,它的中级发证机构的证书被两家根证书机构同时签名,其一是它自己的 ISRG Root,另一个是另一家根证书机构 IdenTrust 的 DST Root X3。初期,由于 DST Root X3已经被许多操作系统和浏览器认证过,因此为其普及起到了非常重要的作用。

UTC 时间 2021年9月29日 19:21:40,DST Root X3 的根证书过期了。这样一来,这一边的信任链便不再成立。

阅读全文… ( 本文约 1606 字,阅读大致需要 4 分钟 )

用 Pomerium 来实现基于身份的访问控制

• Security

Google 在十年前提出了一套名为 BeyondCorp 的零信任网络的安全方案。这套方案想要完整地实现还是有一定门槛的,在这种模型下,企业内网不再作为一个安全边界存在,相反即使在内网进行的访问也必须进行和外网同样的鉴权与访问控制。最终的改造方向是内网不再是一个特权网络,每个终端上部署的客户端证书主要是作为一项身份信息来使用。

阅读全文… ( 本文约 919 字,阅读大致需要 2 分钟 )

这也太不注意卫生了

• Security

razor 同学对于 Xcode ghost 的事情的评价是:这也太不注意卫生了。个人深以为然。

技术细节、影响等等,已经有很多大牛写过很好的文章来介绍。但是我想问的是,这事完了吗?在我看来远远没有,根据有关厂商的介绍,想要装上这个下了马的 Xcode,首先得从 App Store 以外的渠道去下载,其次还得允许运行来自 ‘Anywhere’ 的应用程序,或者开发人员习惯于绕过系统的数字签名检查。

阅读全文… ( 本文约 710 字,阅读大致需要 2 分钟 )