Programação da Web

Vulnerabilidades de condição de corrida em aplicativos da Web

Vulnerabilidades de condição de corrida em aplicativos da Web
Quando um aplicativo da web configurado para gerenciar funções em uma sequência fixa é necessário para executar duas ou mais operações simultaneamente, ocorre um ataque de condição de corrida. Esta técnica tira proveito de um atraso de tempo entre o momento em que um serviço é introduzido e quando ocorre um controle de segurança. Este ataque pode ser realizado de uma das duas maneiras, com base em aplicativos multithread: intrusão incorrida por processos não confiáveis ​​e intrusão incorrida por um processo confiável que poderia ter os mesmos e iguais direitos.

Diferentes processos podem interagir uns com os outros sem medidas adequadas. Esses ataques também são conhecidos como ataque de tempo de verificação, ataque de tempo de uso ou ataques TOC / TOU. Vulnerabilidades de condição de corrida estão lá em primeiro lugar devido a erros básicos de programação que os desenvolvedores geralmente criam, e essas falhas se mostraram caras. Entidades maliciosas exploraram as condições de corrida para muitos fins maliciosos, i.e., desde obter vouchers grátis até roubar dinheiro de contas online e firmas de investimento.

Vamos supor que dois threads de execução paralela tentam aumentar o valor de uma variável global em 5. Em última análise, então, a variável global teria um valor de 10. No entanto, se todos os threads forem executados simultaneamente, a execução pode ser errada sem bloqueios de recursos ou sincronização. Quando o primeiro encadeamento está fazendo algumas manipulações para aquela variável global, o segundo encadeamento lê e começa a fazer algumas outras manipulações. Nesse caso, o valor final não seria o esperado.

Isso ocorre porque o efeito da terminação de um thread depende do resultado do outro. Quando os dois threads são executados simultaneamente, haverá consequências indesejadas.

Âmbito dos ataques de condição de corrida:

Imagine que qualquer coisa um pouco mais crítica está sendo executada pelos dois threads do exemplo acima, como a troca de dinheiro entre contas bancárias. Para enviar o dinheiro corretamente, o programa precisará executar essas tarefas nesta sequência; Verifique se há saldo suficiente na conta do remetente, adicione dinheiro à conta do destinatário e, em seguida, deduza da conta do remetente. Mas se você enviar duas solicitações simultaneamente, pode ser capaz de acionar uma condição na qual a sequência de execução do encadeamento muda. Em uma situação como essa, você vai acabar com uma quantidade diferente do esperado.

A vulnerabilidade da condição de corrida foi encontrada por Egor Homakov no site da Starbucks. Ele descobriu uma maneira de criar uma quantidade infinita de crédito em vouchers-presente da Starbucks gratuitamente usando diferentes navegadores com cookies diferentes.

O ataque Meltdown proeminente é um exemplo de vulnerabilidade à condição de corrida. No ataque de colapso, a fraqueza é desencadeada pelo processamento paralelo de recuperação de dados da memória e autenticação de se um usuário tem ou não permissão para acessar a memória. Esta falha possibilita que uma ferramenta evite verificações de privilégios padrão que separam o mecanismo de ataque do acesso aos dados do sistema operacional. Esta brecha permite que qualquer processo não autorizado visualize dados e informações de qualquer outro endereço conectado ao estado do progresso atual na memória. No processo de execução defeituosa, as informações de um endereço não aprovado frequentemente serão rapidamente empilhadas no cache da CPU, a partir do qual as informações podem ser recuperadas.

Cenários de ataque na vida real:

Ao enviar inúmeras solicitações ao servidor da web continuamente, você pode pesquisar e manipular as condições da corrida em aplicativos da web. Se você quiser ver se pode ou não sacar mais dinheiro do que tem em sua conta bancária, usando a função curl, você pode enviar simultaneamente vários pedidos de saque para o servidor.

curl (retirar 50000) & (retirar 50000) & (retirar 50000) & (retirar 50000) & (retirar 50000) & (retirar 50000)

Quanto mais demandas você arquivar em um breve período de tempo, maiores serão as chances de seu ataque funcionar.

Além disso, se você enviar solicitações de acompanhamento assíncronas, você seguirá um usuário várias vezes em vez de enviar uma resposta de erro. eu.e., se você adicionar um cabeçalho falso contendo% s ao descartar solicitações usando turbo intruder e colar o seguinte código Python:

def followReqs (destino, listas de palavras):
engine = RequestEngine (endpoint = target.ponto final,
concurrentConnections = 40,
requestPerConnection = 100,
pipeline = False
)
para i no intervalo (40):
motor.fila (alvo.req, str (i), portão = 'verificar')
motor.openGate ('verificar')
motor.completo (tempo limite = 60)
def responseHandle (req, interessante):
tabela.adicionar (req)

Você verá um botão de ataque. Depois de pressioná-lo, o Turbo Intruder envia 40 consultas e verifica os códigos de status. Se você vir várias respostas com o status 201 Gerado, isso indica várias vezes que você seguiu a pessoa.

Existe uma vulnerabilidade de condição de corrida em que você pode acessar vários consoles oferecidos para contas gratuitas. A maioria dos sites que oferecem consoles gratuitos têm contas gratuitas, pacotes padrão e premium. Contas gratuitas fornecem apenas 2 ou 3 consoles por usuário. Para quebrar esse limite e usar consoles ilimitados, invada a solicitação GET usando cargas úteis NULL várias vezes, como 100 ou 200. E, em seguida, exclua qualquer um dos consoles manualmente da IU enquanto os threads estão em execução.

Conclusão:

Como um meio de minar os controles de acesso, as condições de corrida estão incluídas. Qualquer programa que dependa de mecanismos de controle de acesso pode ser vulnerável. Na maioria das vezes, em sites de instituições financeiras, os hackers exploram as condições de corrida. Uma vez que poderia levar a benefícios financeiros ilimitados para o hacker se uma condição de corrida pudesse ser descoberta em um recurso vital, como retirada de dinheiro, transferência de dinheiro ou pagamento com cartão de crédito. Plataformas de comércio eletrônico, jogos de vídeo e serviços de votação online são outras tecnologias de alto risco. Implementar simultaneidade segura é o segredo para evitar condições de corrida. E você também pode usar bloqueios de recursos. Haverá também um recurso de bloqueio integrado para linguagens de programação com habilidades de simultaneidade que ajudam a prevenir tais condições. Além disso, seguindo padrões de codificação seguros, eu.e., o conceito de privilégio mínimo e o código de auditoria diminuirão a chance do programa de violar.

Como aumentar o FPS no Linux?
FPS significa Quadros por segundo. A tarefa do FPS é medir a taxa de quadros em reproduções de vídeo ou desempenho de jogos. Em palavras simples, o nú...
Top jogos do Oculus App Lab
Se você é proprietário de um fone de ouvido Oculus, deve estar informado sobre o carregamento lateral. Sideload é o processo de instalação de conteúdo...
Os 10 melhores jogos para jogar no Ubuntu
A plataforma Windows tem sido uma das plataformas dominantes para jogos devido à grande porcentagem de jogos que estão sendo desenvolvidos hoje para o...