RPC) (回调
通常,编程模型需要通过远程过程调用 (RPC) 或客户端调用不受信任的服务器来回调客户端。 这会带来许多潜在的缺陷。
首先,必须使用足够低的模拟级别对客户端进行回调。 如果服务器是高特权系统服务,则回调模拟级别为或更高模拟级别的本地客户端可以为客户端提供足以接管系统的权限。 调用模拟级别高于必要级别的远程客户端也可能导致不良后果。
其次,如果攻击者诱使你的服务执行回调,它可能会引发所谓的 黑洞-拒绝服务攻击。 此类攻击并非特定于 RPC;在这些攻击中,计算机会诱使你向其发送流量,但它不会响应你的请求。 你把越来越多的资源沉入到调用黑洞中,但它们永远不会回来。 此类攻击的一个通用示例是称为 TCP/IP SYN 洪水攻击的 TCP 级别攻击。
在 RPC 级别,当攻击者调用接口并请求服务器重新调用接口时,会发生简单的黑洞攻击。 接口符合要求,但攻击者永远不会返回调用:服务器上的一个线程被绑定。 攻击者执行此操作 100 次,在服务器上将 100 个线程连接在一起。 服务器最终耗尽内存。 调试服务器可能会泄露黑洞调用方的身份,但服务器通常会重新启动而不会怀疑犯规,或者没有足够的专业知识来确定攻击者。
第三个陷阱在客户端上。 通常,客户端向服务器发出调用,通知服务器如何调用它 (通常是字符串绑定) ,然后等待来自服务器的调用到达,盲目接受该终结点上声明来自服务器的任何调用。 从服务器到客户端的回调协议应包含一些验证机制,以确保当回调来到客户端时,它实际上源自服务器。