BT

你的观点很重要! 快来参与InfoQ调研吧!

WiFi爆惊天漏洞!KRACK可攻陷所有WiFi网络

| 作者 Mathy Vanhoef 关注 0 他的粉丝 发布于 2017年10月17日. 估计阅读时间: 28 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

内容简介

我们发现 WPA2 当中存在一项严重安全漏洞。WPA2 为目前使用范围最广的 Wi-Fi 网络保护协议。身处攻击目标周边的恶意人士能够利用密钥重装攻击(Key Reinstallation Attacks,KRACK)利用此类安全漏洞。

具体来讲,攻击者能够使用这种新型攻击方法读取此前被认为是安全加密的信息,进而窃取各类敏感信息,具体包括信用卡号码、密码、聊天信息、电子邮件以及图片等等。

此类攻击指向全部现代受保护 Wi-Fi 网络。根据具体网络配置的不同,攻击者还能够进一步实现注入或者操纵数据。举例来说,攻击者能够将勒索软件或者其他恶意软件注入至目标网站当中。

这类安全缺陷存在于 Wi-Fi 标准本身,而非特定某些产品或者实现方案中。因此,即使是得到正确部署的 WPA2 同样有可能受到影响。为了预防攻击,用户必须在安全更新发布时立即对受影响产品进行修复。

需要注意的是,如果您的设备支持 Wi-Fi,则很有可能会受到影响。通过我们的初步研究,已经发现 Android、Linux、苹果、Windows、OpenBSD、联发科以及 Linksys 等厂商的产品都会受到某些变种攻击的影响。

与特定产品相关的更多细节信息,请参阅 CERT/CC 数据库或者联系您的产品供应商。

此项攻击研究将于本届计算机与通信安全(CSS)大会以及黑帽欧洲大会上正式公布。

演示

作为 POC,我们对一部 Android 智能手机执行了一次 KRACK。在本次演示中,攻击者有能力对受害者传输的全部数据进行解密。对于攻击方而言,这一攻击方式易于实现,因为我们的密钥重装攻击对于 Linux 以及 Android 6.0 或者更高版本系统拥有强大的破坏性。

这主要是由于 Android 以及 Linux 会在攻击者的引导下(重新)安装一条全零加密密钥(详见后文)。在攻击其他设备时,虽然解密全部数据包难度极大,但攻击者仍然有能力解密相当一部分数据包。

无论如何,以下演示将强调攻击者在针对受保护 Wi-Fi 网络执行密钥重装攻击时所能够获得的信息类型:

观看视频

我们的攻击并不仅限于恢复登录凭证(即电子邮件地址以及密码)。总体而言,受害主机所传输的任何数据或者信息都能够进行解密。另外,根据具体使用设备以及网络设置的不同,攻击者亦有可能解密被发送至受害者处的数据(例如网站内容)。

尽管网站或者应用可能利用 HTTPS 作为额外的保护层,但我们需要提出警告,这类额外保护手段在相当一部分情况下仍有可能被绕过。举例来说,此前即有案例证明 HTTPS 会在非浏览器软件、苹果 iOS 与 OS X、Android 应用、银行应用甚至是 VPN 应用当中被绕过。

细节信息

我们的主要攻击是针对 WPA2 协议的四次握手。这一握手活动会在客户端希望添加到受保护 Wi-Fi 网络当中时执行,并被用于确认客户端与接入点皆拥有正确的凭证(例如网络的预共享密码)。

与此同时,四次握手还会协商一个新的加密密钥,此密钥将被用于对所有后续流量进行加密。目前,所有具备现代保护机制的 Wi-Fi 网络皆使用四次握手机制,这意味着此类网络都将受到我们发现的攻击手段的某些变种的影响。

举例来说,此类攻击可能将黑手指向个人与企业 Wi-Fi 网络、较为陈旧的 WPA 与最新的 WPA2 标准,甚至攻击仅使用 AES 的网络。我们对 WPA2 采取的所有攻击手段皆应用到一种新型技术,即密钥重新安装攻击(简称 KRACK):

密钥重装攻击:高级描述

在密钥重装攻击当中,攻击者会诱导受害者重新安装已经被使用过的密钥。具体实现方法是操纵并重播密码握手消息。当受害者重新安装密钥时,增量发送分组号(即随机数)以及接收分组号(即重播计数器)等相关参数将被重置为初始值。

从本质上来讲,为了保证安全性,每条密钥只能安装并使用一次。遗憾的是,我们发现 WPA2 协议当中并不包含这一强制要求。通过操纵加密握手过程,我们将能够在实践当中利用这一致命缺陷。

密钥重装攻击:针对四次握手的具体示例

正如相关研究论文当中指出的,密钥重装攻击背后的思路可以总结如下。当某客户端加入一个网络时,会执行四次握手协议以协商获取一个新的加密密钥。

它将在接收到四次握手中的第 3 个消息后安装此密钥。一旦该密钥安装完成,它将被用于配合加密协议对普通数据帧进行加密。然而,由于消息内容可能丢失或者丢包,因此如果接入点(AP)没有收到适当的响应作为确认,则将重新发送消息 3。

每当接收到这条消息时,客户端都会重新安装同样的加密密钥,并因此重置增量发送分组号(随机数)且接收加密协议所使用的重播计算器。在演示中可以看到,攻击者能够通过收集并重播四次握手中的消息 3 来重演上述重传操作。

如此一来,即可强制重复使用随机数,意味着该加密协议即遭攻击影响——具体包括重播数据包、加密数据包以及 / 或者伪造数据包。这一技术亦可被用于攻击组密钥、PeerKey、TDLS 以及快速 BSS 切换握手。

实际影响

在我们看来,影响最为广泛且实际危害最大的攻击方式正是针对四次握手的密钥重装攻击。之所以得出这样的结论,主要基于我们观察到的两大结果。首先,在我们自己的研究中,我们发现它会导致大多数客户端遭受影响。

第二,攻击者可以利用此种攻击方式解密客户端发送的数据包,从而拦截密码或者 Cookie 等敏感信息。分组解密同样存在可能性,这是因为密钥重装攻击会导致传输随机数(有时亦被称为分组号或者初始化向量)被重置为零。

如此一来,同一个加密密钥可能使用以往已经使用过的随机数值。这反过来会导致全部 WPA2 加密协议皆在加密数据包时重复使用密钥流。此后,该密钥流可被用于利用同一随机数进行消息解密。

当不存在已知内容时,数据包解密很难实现,不过事实证明某些特定情况下攻击者仍可达成这一目标(例如仍可解密英文文本)。实际上,找出包含书籍内容的数据包并不是什么难题,因此可以假定任意受影响数据包皆可能因此遭到解密。

这种解密数据包的能力会被用于解密 TCP SYN 数据包。这意味着攻击者将能够获取一条连接当中的 TCP 序列号,同时劫持 TCP 连接。在这种情况下,即使使用 WPA2 保护协议,攻击者仍然能够针对开放 Wi-Fi 网络执行一类常见的攻击手段:向未加密 HTTP 连接当中注入恶意数据。举例来说,攻击者可以利用这种方式将勒索软件或者恶意软件注入至受害者访问的网站当中。

如果受害者使用的是 WPA-TKIP 或者 GCMP 加密协议,而非 AES-CCMP,更将面临灾难性的影响。在使用此类加密协议时,随机数复用不仅允许攻击者进行解密,甚至允许其对数据包进行伪造以及注入。

另外,由于 GCMP 在双工通信的两侧中皆使用同样的认证密钥,那么一旦因随机数复用而引发密钥恢复,则影响将极为巨大。需要注意的是,GCMP 支持目前被广泛称为 Wireless Gigabit(简称 WiGig),且预计将在未来几年内逐步得到普及。

哪个方向的数据包可实现解密(乃至伪造),具体取决于受到攻击的握手过程。简单来讲,当攻击四次握手时,我们可以对由客户端发送的数据包进行解密(及伪造)。当攻击快速 BSS 切换(简称 FT)握手时,我们可以对客户端接收到的数据包进行解密(及伪造)。最后,我们的大多数攻击方式亦可实现单播、广播与多播。欲了解更多细节信息,请参阅我们研究论文中的第六章内容。

需要强调的是,我们的攻击无法恢复 Wi-Fi 网络自身使用的密码,也无法恢复在四次握手期间进行协商的(任意部分)新加密密钥。

Android 与 Linux

我们的攻击对于 wpa_supplicant 2.4 以及更高版本具有极大威胁——这是一套在 Linux 当中得到广泛使用的 Wi-FI 客户端。在这里,该客户端将安装一个全零加密密钥——而非重新安装真正的密钥。

这项安全漏洞似乎是由 Wi-Fi 标准当中的一条注释所造成,其提到会在首次进行安装之后,将加密密钥从内存中清除。现在当客户端接收到四次握手所重播的消息 3 时,其会重新安装已经被清除的加密密钥,但实际安装的却是一条全零密钥。

由于 Android 使用 wpa_supplicant,因此 Android 6.0 以及更高版本亦存在此项安全缺陷。这使得攻击者能够轻松拦截并操纵往来于这些 Linux 与 Android 设备之间的网络流量。需要注意的是,目前有 41% 的 Android 设备会受到我们攻击手段的某类变种的影响。

相关 CVE 码

以下常见漏洞与披露(简称 CVE)码,用于追踪哪些产品会受到此次密钥重装攻击中特定安装手段的影响:

  • CVE-2017-13077: 在四次握手当中重新安装成对加密密钥(PTK-TK)。
  • CVE-2017-13078: 在四次握手当中重新安装组密钥(GTK)。
  • CVE-2017-13079: 在四次握手当中重新安装完整性组密钥(IGTK)。
  • CVE-2017-13080: 在组密钥握手当中重新安装组密钥(GTK)。
  • CVE-2017-13081: 在组密钥握手当中重新安装完整性组密钥(IGTK)。
  • CVE-2017-13082: 接收一条重发快速 BSS 切换(简称 FT)重新关联请求,并在处理过程中对成对加密密钥(PTK-TK)进行重新安装。
  • CVE-2017-13084: 在 PeerKey 握手当中重新安装 STK 密钥。
  • CVE-2017-13086: 在 TDLS 握手当中重新安装隧道直连设置(简称 TDLS)PeerKey(TPK)密钥。
  • CVE-2017-13087: 当处理无线网络管理(简称 WNM)睡眠模式响应帧时,重新安装组密钥(GTK)。
  • CVE-2017-13088: 当处理处理无线网络管理(简称 WNM)睡眠模式响应帧时,重新安装完整性组密钥(IGTK)。

需要注意的是,每个 CVE 码皆代表着密钥重装攻击的一种特定实例。这意味着每条 CVE ID 都描述了特定的协议漏洞,且每一条 CVE ID 都可能影响到多家供应商。您亦可点击此处参阅 CERT/CC 的 VU#228519 安全漏洞说明以了解更多已知受影响产品的细节信息。

论文

我们针对此类攻击行为所编撰的论文题为《密钥重装攻击:WPA2 中的强制随机数复用》,其将于 2017 年 11 月 1 日星期三召开的计算机与通信安全(简称 CCS)大会上正式发表。

尽管这篇文章目前已经正式公布,但我们于 2017 年 5 月 19 日即将其提交以进行审查。在此之后,我们仅对内容作出了细微修改。因此,文中的调查结果已经完成数月之久。

与此同时,我们还发现了更为轻松易行的技术手段,用以在四次握手阶段执行密钥重装攻击。复用这种新型攻击技术,我们无需对四次握手中的消息 3 进行加密重传即可达成目标。具体来讲,这意味着对 MacOS 与 OpenBSD 的攻击方式在难度上已经远低于论文当中提到的水平。

我们还希望对以下附录及勘误内容作出强调说明:

附录: wpa_supplicant v2.6 与 Android 6.0+

Linux 的 wpa_supplicant v2.6 同样会受到在四次握手期间安装全零加密密钥攻击的影响。这一问题最初由 John A. Van Boxtel 所发现。如此一来,全部高于 6.0 的 Android 版本皆将受到影响,即其会在攻击者的诱导下安装一条全零加密密钥。这种新型攻击手段为注入一条伪造的消息 1,其中使用与原始消息 1 相同的随机数,而后将重发消息 3 转发至受害者处。

附录:其他易受攻击的握手协议

在论文中提到的初步研究之后,我们还发现 TDLS 握手与 WNM 睡眠模式响应帧同样会受到密钥重新安装攻击的影响。

内容勘误

  • 在用于描述攻击第三阶段的图九当中,由攻击者发送给认证方的帧应该为 ReassoReq,而非 ReassoResp。

工具

我们已经制作了脚本来检测四次握手、组密钥握手或者快速 BSS 切换握手的具体实现是否会受到密钥重装攻击的影响。我们目前正在对脚本中的使用说明进行整理,并将在结束后立即进行发布。

我们还制作了一份概念验证脚本,其可在特定 Android 以及 Linux 设备之上实现全零密钥(重新)安装。我们在演示视频当中使用的也正是这套脚本。当各方已经对相关设备进行合理更新(而我们也对发布代码库进行筹备)之后,这套脚本即将与各位见面。

需要强调的是,我们的概念验证脚本的实际可靠性取决于受害者环境与真实网络间的近似程度。如果受害者环境与真实网络非常相似,则脚本可能失败——这是因为尽管会被迫使用网络上的其他 Wi-FI 信道,受害者仍将始终直接与真实网络保持通信。

常见问题

我们现在是否需要 WPA3?

不,幸运的是我们可以通过向下兼容的方式进行修复。这意味着安装补丁的客户端仍将与未经修复的接入点通信,反之亦然。换句话来说,安装过补丁的客户端或者接入点将发送与以往完全相同的握手消息,且时间点亦完全一致。然而,安装更新将确保一条密钥仅被安装一次,从而避免受到攻击影响。因此再次强调,一旦安装更新发布,请立即为您的设备安装。

我是否应该修改 Wi-Fi 密码?

变更您 Wi-Fi 网络的密码并不能避免(或者缓解)此类攻击。因此,您不需要对 WiFi 网络的密码进行更新。相反,您应当确保全部设备皆进行更新,并应更新您的路由器固件。在路由器更新完毕后,您应选择性地变更 WiFi 密码以作为额外预防手段。

我正在使用纯 AES WPA2 模式。这是否仍然面临安全风险?

是的,这一网络配置同样存在安全隐患。我们的攻击手段同时针对 WPA1 与 WPA2,会影响到个人及企业网络,且将波及您所使用的任何加密套件(包括 WPA-TKIP、AES-CCMP 以及 GCMP)。因此每位用户都应更新相关设备以预防这类攻击!

您在网站当中使用了“我们”这一词汇。“我们”指的是谁?

我之所以使用“我们”,是因为论文当中也使用了同样的表述。具体来讲,所有工作皆是由我一人完成,即 Mathy Vanhoef。我优秀的上级以荣誉作者的身份被纳入研究论文,并为我的工作提供了出色的指导。但所有具体工作皆由我个人进行。因此,学术论文作者名单并不体现具体分工情况。

我的设备是否会受到影响?

有可能。任何使用 WiFi 的设备都有可能面临这一安全风险。请联系您的供应商以了解更多细节信息。

如果我的路由器没有提供安全更新,该怎么办?

我们的主要攻击手段面向四次握手,且不会利用接入点——而是主要指向客户端。因此您的路由器可能并不需要进行安装更新。我们强烈建议您与供应商联系以获取更多细节信息。总体来讲,您可以通过禁用客户端功能(例如用于中继器模式等)并禁用 802.11r(快速漫游)以减轻针对路由器与接入点的攻击风险。对于普通家庭用户,您应当优先更新各类客户端,例如笔记本电脑以及智能手机。

您是如何发现这些安全漏洞的?

在筹备另一篇论文的终版时,我反复检查了关于 OpenBSD 执行四次握手时的一些说明。从某种意义上讲,我当时的心态比较放松,因为当时的任务只剩下完善论文,而非抓紧调整代码。但在这一过程中,我再次审查了已经阅读了不知多少次的代码,以避免存在某些纰漏。

就在这时,一条对于 toic_set_key 的调用引起了我的注意。此项函数会在处理四次握手中的消息 3 时被调用,其负责向驱动程序安装成对密钥。在面对该行代码时,我想到“哈,我很好奇如果该函数被调用两次,会引发怎样的结果。”当时,我(正确地)猜测到两次调用可能会重置与该密钥相关联的随机数。

而且由于消息 3 可由接入点进行重发,因此确实可能出现两次调用的情况。“最后在这里作出备注。这一函数确实有可能被调用两次。但让我们先把这篇论文完成……”数周之后,前一篇论文已经彻底完成,其他杂事也忙得差不多了,接下来我开始更为深入地考量这个想法。而接下来的事,相信大家都知道了。

四次握手在数学层面上被证明是安全的,您的攻击为何能够实现?

简单来讲,四次握手的正式实现方式并不能确保密钥仅被安装一次。相反,其仅能确保协商密钥始终处于保密状态,且握手消息不可被伪造。

要更具体地解答这个问题,则需要引用研究论文中的相关表述:我们的攻击并不会破坏四次握手在正式分析当中得到证明的安全属性。具体而言,这些证据表明协商加密密钥始终处于私有状态,且客户端与接入点身份亦可得到确认。我们的攻击并不会泄露加密密钥。

另外,虽然使用 TKIP 或者 GCMP 能够伪造正常数据帧,但攻击者仍无法伪造握手信息,因此无法在握手期间冒充客户端或者接入点。不过问题在于,证明本身并不会对密钥安装机制进行建模。换句话来讲,正式模型并没有定义应该于何时安装协商密钥。在实际使用当中,这意味着相同的密钥可进行多次安装,从而重置加密协议(例如 WPA-TKIP 或者 AES-CCMP)当中使用的随机数与重播计数器。

论文中的某些攻击方式似乎非常困难

我们已经采取后续完善工作,希望让我们的攻击手段(特别是针对 MacOS 以及 OpenBSD 的攻击)更为普适且易于执行。因此,尽管我们同意文章中提到的一部分攻击方法缺乏现实意义,但请相信我,密钥重新安装攻击在实践当中确实有可能遭到利用。

是否已经有人开始对这一漏洞加以实际利用?

我们无法确定这一漏洞是否已经被他人(或者正在被他人)所利用。具体来讲,关键是重装攻击实际上能够自发发生,且其中并不涉及真正的攻击者!可能的场景为:背景干扰因素使得握手过程中的最后一条信息发生丢失,从而导致前一条信息重发。当处理这条重发信息时,密钥被重新安装,并致使随机数如真实攻击般被重复使用。

我是否应该利用使用 WEP,直到我的设备完成补丁安装?

不!请继续使用 WPA2。

Wi-Fi 标准是否会进行更新以解决这个问题?

似乎有协议规定,Wi-Fi 标准应当进行更新以有效避免受到我们攻击手段的影响。这些更新可能将以向下兼容方式发布,从而覆盖其他早期 WPA2 实现方案。不过最终 Wi-Fi 标准是否或者将如何更新,仍然有待时间给出答案。

Wi-Fi 联盟是否也在解决这些安全漏洞?

这里要为各位不熟悉 Wi-Fi 的朋友们讲解一下:Wi-Fi 联盟是一个负责证明 Wi-Fi 设备符合某些互操作性标准的组织。除此之外,其还负责确保来自不同供应商的 Wi-Fi 产品能够顺利地协同工作。

Wi-Fi 联盟已经有计划帮助解决已发现的各类 WPA2 安全漏洞。总结来讲,该组织将:

  • 要求在全球认证实验室网络当中测试此项安全漏洞。
  • 提供一款安全漏洞检测工具以供各 WiFI 联盟成员使用(这款工具以我们的检测工具为基础,用于检测目标设备是否易受到一些已知的密钥重装攻击手段的影响)。
  • 向各设备供应商广泛发布与此项安全漏洞相关的细节信息,包括补救措施。此外,鼓励各供应商与其解决方案供应商合作,从而快速整合任何必要的修复补丁。
  • 向用户强调重要性,确保用户已经安装由设备制造商提供的安全更新。

您为何在演示视频中使用 match.com 作为示例?

用户会在 match.com 这类网站上共享大量个人信息。因此本示例的目的在于强调攻击者能够获取的各类敏感信息,同时希望示例受众能够更清楚地意识到这一攻击手段带来的(个人)影响。我们还希望这一示例能够帮助人们了解约会网站可能收集的用户信息类型。

如何避免此类 bug 的出现?

我们需要对协议实现方案作出更为严格的审查。这亦要求来自学术界的帮助与协同支持!在其他研究人员的协助下,我们希望组织起更多研讨活动以改进并验证各类安全协议实现方案的正确性。

为何选择 krackattacks.com 这样一个域名?

首先,我得强调 KRACK 是个拼接词汇,分别来自 key reinstallation attack 这几个部分。不过为了凑个韵脚,最终就选择了这样一个网站名称。

您有没有因为这个 bug 获得赏金?

我还没有申请任何 bug 赏金,当然就没有拿到过了。

与其他针对 WPA2 的攻击相比,这种攻击方式有何特点?

这是有史以来第一种不需要依靠密码猜测的 WPA2 协议攻击手段。事实上,其他针对 WPA2 网络的攻击方法主要针对的是与之相关的其他技术,例如 Wi-Fi 受保护设置(简称 WPS),或者 WPA-TKIP 等较为陈旧的标准。换句话来说,目前还没有哪种攻击方法专门针对四次握手或者 WPA2 协议当中的密码套件。相比之下,我们的密钥重新安装攻击专门针对四次握手(以及其他握手),这更加强调了 WPA2 协议本身所存在的安全隐患。

其他协议是否也会受到密钥重装攻击的影响?

我们预计其他协议的某些实现方案也可能受到类似攻击的影响。因此,最好是能够将这类攻击纳入安全协议实现方案的审计工作当中。不过我们认为其他协议标准应该不会受到同一攻击手法的影响(或者我们至少希望不会)。然而,对其他协议开展针对性审计仍然很有必要!

您是否制作了分辨率更高的 Logo 版本?

是的。这里要向帮助我制作 Logo 的朋友表示衷心感谢!

您是什么时候向供应商通知这一安全漏洞的?

我们在 2017 年 7 月 14 日左右向已经进行过实际测试的产品相关供应商发出了通知。在与这些供应商进行联络之后,我们意识到我们所发现的问题拥有多么可怕的广泛影响(直到那时,我才真正相信这是一项协议缺陷,而非错误实现方法)。到这里,我们决定由 CERT/CC 协助披露这些安全漏洞。反过来,CERT/CC 又于 2017 年 8 月 28 日向各供应商发出了广泛通告。

为什么 OpenBSD 会在通告之前悄悄发布修复补丁?

OpenBSD 早在 2017 年 7 月 15 日就已经得到了安全漏洞通知,这早于 CERT/CC 得到消息的时间。很快,Theo de Raadt 就作出了回复并要求尽快作出相关反应:“在开放世界,如果有人编写了 diff 并要求在一个月内给出回应,这显然会令人非常沮丧。”需要强调的是,我已经为 OpenBSD 编写了一份建议 diff,并表示将在同年 8 月底进行初步公开披露。这时我作出了让步,允许他们悄悄对漏洞作出修复。事后看来,这不是个明智的决定,因为可能会有人通过研究他们发布的补丁发现这一安全漏洞。为了避免今后出现这一问题,OpenBSD 现在表示能够接受发出时间与公开披露时间之间间隔更短的漏洞通知。

那么您是否还期待着找到更多其他 Wi-Fi 漏洞?

“I think we're just getting started.”  — Master Chief, Halo 1

“我认为这一切才刚刚开始。”——《光环 1》,士官长

查看英文原文https://www.krackattacks.com/?from=timeline&isappinstalled=0


给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

看到作者是先连接到wifi上面才可以破解的 by Max Max

如果都没有密码去连接进wifi,怎么能够破解??

Re: 看到作者是先连接到wifi上面才可以破解的 by Vow Sole

虽然没太看懂,大概是说握手过程可以被劫持?然后通信两端有可能使用重复的随机数进行数据加密,中间人就有可能进行解密?或对于明文数据可以直接读取或注入代码,进行钓鱼或攻击?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

2 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT