Ler em inglês

Partilhar via


Retornos de chamada (RPC)

Geralmente, o modelo de programação requer um retorno de chamada de servidor para um cliente por meio de uma RPC (chamada de procedimento remoto) ou chamadas de cliente para um servidor não confiável. Isso apresenta muitas armadilhas em potencial.

Primeiro, o retorno de chamada para o cliente deve ser feito com um nível de representação suficientemente baixo. Se o servidor for um serviço de sistema altamente privilegiado, chamar de volta um cliente local com um nível de representação de representação ou superior poderá fornecer ao cliente privilégios suficientes para assumir o sistema. Chamar de volta um cliente remoto com nível de representação mais alto do que o necessário também pode levar a consequências indesejáveis.

Segundo, se um invasor induz seu serviço a executar um retorno de chamada, ele pode iniciar o que é chamado de buraco negro — ataque de negação de serviço. Esses ataques não são específicos do RPC; nesses ataques, um computador induz você a enviar tráfego para ele, mas não responde às suas solicitações. Você afunda cada vez mais recursos para chamar o buraco negro, mas eles nunca mais voltam. Um exemplo genérico desse ataque é um ataque de nível TCP chamado de ataque de inundação TCP/IP SYN.

No nível RPC, um ataque simples de buraco negro ocorre quando um invasor chama uma interface e solicita que o servidor chame a interface de volta. A interface está em conformidade, mas o invasor nunca retorna a chamada: um thread no servidor está vinculado. O invasor faz isso 100 vezes, amarrando 100 threads no servidor. Eventualmente, o servidor fica sem memória. A depuração do servidor pode potencialmente revelar a identidade do chamador de buraco negro, mas muitas vezes o servidor será reiniciado sem suspeita de jogo sujo ou pode não haver experiência suficiente disponível para determinar o invasor.

A terceira armadilha está no cliente. Geralmente, um cliente faz uma chamada para o servidor informando ao servidor como chamá-lo de volta (geralmente uma associação de cadeia de caracteres) e, em seguida, aguarda a chegada de uma chamada do servidor, aceitando cegamente qualquer chamada nesse ponto de extremidade que declara vir do servidor. O protocolo de retorno de chamada do servidor para o cliente deve incluir algum mecanismo de verificação para garantir que, quando o retorno de chamada chegar ao cliente, ele realmente tenha se originado no servidor.