回调 (RPC)

通常,编程模型需要通过远程过程调用(RPC)或客户端调用到不受信任的服务器来回调客户端。 这引入了许多潜在的陷阱。

首先,必须使用足够低的模拟级别对客户端进行回调。 如果服务器是高度特权的系统服务,则调用具有模拟级别的本地客户端或更高级别的本地客户端可以提供足以接管系统的特权。 调用具有高于必要模拟级别的远程客户端也可能导致不良后果。

其次,如果攻击者诱使服务执行回调,它可以启动所谓的 黑洞-拒绝服务攻击。 此类攻击不特定于 RPC;在这些攻击中,计算机会诱使你向其发送流量,但它不会响应你的请求。 你把越来越多的资源投入到调用黑洞中,但他们永远不会回来。 此类攻击的一个通用示例是称为 TCP/IP SYN 洪水攻击的 TCP 级别攻击。

在 RPC 级别,当攻击者调用接口并请求服务器回调接口时,将发生简单的黑洞攻击。 接口符合要求,但攻击者永远不会返回调用:服务器上的一个线程已绑定。 攻击者执行此作 100 次,在服务器上将 100 个线程绑在一起。 服务器最终内存不足。 调试服务器可能会揭示黑洞调用方的身份,但服务器通常会重启,而不会怀疑犯规,或者可能没有足够的专业知识来确定攻击者。

第三个陷阱在客户端上。 客户端通常会调用服务器,告知服务器如何回调它(通常是字符串绑定),然后等待来自服务器的调用到达,盲目接受该终结点上声明来自服务器的任何调用。 从服务器到客户端的回调协议应包含一些验证机制,以确保当回调传入客户端时,它实际上源自服务器。