我在很多地方看到卡信息即使在内存中也是加密的,这真的是PCI要求的吗?我看不出背后的原因,如果被攻击者可以获取值,他也可以获取加密密钥,对吗?
如果确实需要,每张卡是否都需要自己的加密密钥?或者一个普通的可以只与每个单独的 IV 一起使用?
我在很多地方看到卡信息即使在内存中也是加密的,这真的是PCI要求的吗?我看不出背后的原因,如果被攻击者可以获取值,他也可以获取加密密钥,对吗?
如果确实需要,每张卡是否都需要自己的加密密钥?或者一个普通的可以只与每个单独的 IV 一起使用?
TL;博士
从技术上讲,PCI 要求持卡人数据 (CHD) 在传输和静止时都进行加密。乍一看这似乎很简单,但实际上,它并没有非常具体地描述磁盘上的静止 与 易失性内存之间的界限。如果您想学究气,易失性内存仍然是静态数据,但根据常见问题解答,并没有明确要求在内存中进行加密。尽管很高兴指出这只是常见问题解答,实际上并不是 PCI DSS 标准本身。这是一篇很好的文章,可以阅读更多信息。
长答案
内存加密的原因与内存抓取攻击向量有关。
PCI DSS 在确保持久存储中的信用卡数据安全方面做得很好,但是,非持久存储中的此类数据(例如临时存储在内存中的文件)仍然容易受到损害,尤其是通过内存抓取恶意软件。了解有关此威胁的更多信息。来源
有关 PCI 要求的更多信息,请参见此处。长答案的TL;DR是,如果您不加密静态数据(在磁盘或内存中),请确保您有补偿控制以降低数据丢失的风险。
如果存储的持卡人数据无法加密,请参阅 PCI DSS 附录 B:补偿控制和附录 C:补偿控制工作表。
持卡人数据不需要在易失性内存中加密(https://pcissc.secure.force.com/faq/articles/Frequently_Asked_Question/Should-cardholder-data-be-encrypted-while-in-memory)应注意写入易失性内存的数据持久保存在磁盘上的能力能够并且将会发生。页面文件或交换文件的加密有助于防止这种情况发生。
持卡人数据在通过开放的公共网络传输时必须受到保护 [PCI DSS Req. 4.1] 和写入磁盘时 [PCI DSS Req. 3.4]。每个要求都不相同,示例在 PCI DSS 中给出。标准右侧的指导栏通常也很有帮助。
可以在此处找到最新版本的 PCI DSS。https://www.pcisecuritystandards.org/document_library
首先回答您的第二个问题,(“我看不出背后的原因,如果被攻击者可以获取值,他也可以获取加密密钥,对吗?”)现成的 RAM 抓取恶意软件只知道如何识别内存中的磁道数据。它不了解您的注册进程的内存映射。它不知道您的结构或字段。它不会尝试查找标记为“Track_Data”的 char* 缓冲区。它只是读取您进程中的所有内存,如果它匹配 15 或 16 位数字的模式,它会将其刮掉并将其发送给坏人。现成的恶意软件当然不知道哪些字节构成了加密密钥,因此一旦您的数据被加密,恶意软件就不会看到它。(典型的恶意软件不是很复杂,当然不会识别 XOR 或 ROT-13 数据,
考虑到攻击者必须是隐秘的:如果他们在每次交易后从每个收银机发送 2GB RAM 转储,网络人员可能会注意到。他们只发送他们需要的最少量的数据,并且不尝试解密任何东西。
(请注意,这仅适用于 Dexter 和 BlackPOS 等通用 RAM 抓取恶意软件;如果存在针对特定应用程序的恶意软件,则可以对其进行定制以了解内存结构并尝试从其中窃取密钥和/或加密数据具体地址。这完全取决于攻击者。)
--
如所问,您问题的第一部分几乎描述了一种比赛条件:在什么时候赛道数据被认为是“静止的”?是只有落在硬盘上的时候,还是在内存中等待加密时才可以认为是静止的?
但现在你必须继续前进,并获得更详细的信息。它在 USB 设备驱动程序的缓冲区中时是否处于静止状态?当发布一条 Windows 消息以通知您的进程已输入新的跟踪数据时,它是否正在休息?缓冲区发送到加密算法时是否正在休息?当应用程序解析轨迹以恢复持卡人姓名、服务代码、PAN、CVV 和到期日期时,它是否处于静止状态?当它去除收据的最后 4 位数字时,它是否处于静止状态?如果应用程序在加密之前以任何方式处理帐号,它是否处于静止状态?也许验证校验位,或者确定它是 Visa 还是其他类型的信用卡?构建授权消息时是否处于静止状态?这些活动中的任何一个看起来都不像数据非常静止,其中许多活动是 POS 系统中的常见功能。总的来说,所有这些处理可能需要几毫秒或更长时间才能执行。
现在让我们考虑现实世界的攻击者。在一些最知名的违规行为中使用的恶意软件是 RAM 抓取恶意软件,它非常具有攻击性。它可以每秒扫描数百次寄存器的内存,并在最短暂的 PAN 或跟踪数据一瞥时触发。它可以在通知应用程序之前捕获到达 USB 缓冲区、Windows 消息缓冲区中的跟踪数据,同时在解析例程中被拆分,甚至在调用加密例程时。即使您完全遵守 PCI-DSS 法律的规定并在您的应用程序看到它时立即对其进行加密,但如果该恶意软件系列的某些成员将其放入您的收银机,您仍然容易受到破坏。
与其专注于对 PCI-DSS 的准确解释,不如通过从 PCI 范围中删除尽可能多的系统来完全避免这种情况。如果可以的话,将跟踪数据从收银机中取出,然后进入一个单独的支付终端,该终端可以在将数据发送到您的收银机之前对其进行加密。
如果您将加密移动到位于收银机环境之外的单独设备,则收银机永远不需要接收明文 PAN 或跟踪数据。任何进入您的寄存器的恶意软件都不会发现要抓取的跟踪数据。与成熟的基于 Windows 的收银机应用程序相比,支付终端的攻击面要小得多。
我对 PCI 中使用的加密方法不太熟悉,但有充分的理由想要这样做。硬件操作通常绕过 CPU 并具有直接内存访问 (DMA) 以提高性能并忽略不必要的 CPU 周期。强大的力量伴随着巨大的责任,直接内存IO可以带来创造性的利用。
举个例子,虚拟机、监狱和容器将主机和来宾之间的环境分开。除了明确允许外,客人绝不应该能够在电路段中接触到主人或其他客人。如果确实发生了这种情况,我们就说越狱。任何允许 DMA 的硬件设备都可以被利用来携带恶意软件。已经发表了许多关于 PCI-passthrough 漏洞的论文,将主机暴露给来宾。
GPU计算的漏洞分析,2013:
[31]提到了通过利用直接内存访问 (DMA) 访问本来会受到保护的内存来攻击系统的可能性。虽然本文没有特别提到,但将此想法扩展到 GPU 代表了一个很大的漏洞。DMA 允许 GPU 独立于 CPU 访问系统内存。由于 CPU 执行所有内存保护,因此该 DMA 将绕过任何类型的内存安全并允许无限制地访问系统内存。[12] 描述了过去如何使用网卡成功实施此类攻击。然而,我们在该领域的研究表明,目前不可能使用 GPU 来执行此类攻击。这是由于 DMA 在 CUDA 中实现的方式。为了使用 DMA,需要使用某些异步复制功能。CPU 仍负责分配主机内存,并将此固定内存传递给 GPU 以供 DMA 使用。这可以防止漏洞,因为 CPU 仍然控制内存访问并且保护仍然存在。GPU 只能使用 DMA 访问 CPU 已经分配给它的内存,而不是任何受系统保护的内存。未来 GPU 可能会对其 DMA 有更多的控制权,但目前这种类型的攻击是不可能的。