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. Essa técnica aproveita um atraso de tempo entre quando um serviço é introduzido e quando ocorre um controle de segurança. Esse ataque pode ser realizado de qualquer uma das duas maneiras, com base em aplicações multithread: intrusão incorrida por processos não confiáveis ​​e intrusão incorridos por um processo confiável que poderia ter o mesmo e igual a direitos.

Diferentes processos podem interagir entre si sem medidas adequadas. Esses ataques também são conhecidos como tempo de ataque de cheque, tempo de uso de ataques ou ataques de TOC/TOU. As 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 provaram caro. Entidades maliciosas exploraram as condições de raça para muitos propósitos maliciosos, eu.e., Desde obter cupons gratuitos até roubar dinheiro de contas e empresas de investimento online.

Vamos supor que dois fios de execução paralelos tentem aumentar o valor de uma variável global por 5. Por fim, então, a variável global teria um valor de 10. No entanto, se todos os threads funcionarem simultaneamente, a execução pode estar errada sem bloqueios de recursos ou sincronização. Quando o primeiro tópico está fazendo algumas manipulações nessa variável global, o segundo tópico o lê e começa a fazer outras manipulações. Nesse caso, o valor final não seria o esperado.

Isso ocorre desde que o efeito de um término de thread depende do resultado do outro. Quando os dois tópicos forem executados simultaneamente, haverá consequências não intencionais.

Escopo de ataques de condição de corrida:

Imagine que qualquer coisa um pouco mais crítica está sendo executada pelos dois tópicos do exemplo acima, como trocar dinheiro entre contas bancárias. Para enviar o dinheiro corretamente, o programa precisará executar essas tarefas nessa sequência; Verifique se há saldo suficiente na conta do remetente, adicione dinheiro à conta do receptor e deduza da conta do remetente. Mas se você enviar simultaneamente duas solicitações, poderá desencadear uma condição na qual a sequência de alterações de execução de threads. Em uma situação como essa, você acabará com uma quantia diferente da esperada.

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 de presente da Starbucks gratuitamente usando diferentes navegadores com diferentes cookies.

O ataque proeminente de colapso é um exemplo de vulnerabilidade da condição de corrida. No ataque de colapso, a fraqueza é desencadeada pelo processamento paralelo da recuperação de dados da memória e da autenticação de se um usuário pode ou não acessar a memória. Essa falha possibilita que uma ferramenta evite verificações de privilégios padrão que separam o mecanismo de ataque de acessar dados do sistema operacional. Essa brecha resulta em permitir 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 serão frequentemente empilhadas rapidamente no cache da CPU, a partir do qual a informação pode ser recuperada.

Cenários de ataque da vida real:

Ao enviar inúmeras solicitações ao servidor da web continuamente, você pode pesquisar e manipular condições de corrida em aplicativos da Web. Se você quiser ver se pode ou não retirar mais dinheiro do que em sua conta bancária, usando a função CURL, você pode enviar várias solicitações de retirada ao servidor.

Curl (retire 50000) e (retire 50000) e (retire 50000) e (retire 50000) e (retire 50000) e (retire 50000)

Quanto mais demandas você arquiva 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, 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 retirar solicitações usando o Turbo Intruder e colar o seguinte código Python:

def sigiceReqs (Target, WordLists):
motor = requestengine (endpoint = alvo.endpoint,
Conections concorrentes = 40,
requestsperConnection = 100,
pipeline = false
)
para i no intervalo (40):
motor.fila (destino.req, str (i), gate = 'check')
motor.OpenGate ('Check')
motor.Completo (Timeout = 60)
DEF ResponseHandle (Req, interessante):
mesa.add (req)

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

Existe uma vulnerabilidade de condição de corrida na qual você pode acessar vários consoles oferecidos a contas gratuitas. A maioria dos sites que fornecem consoles gratuitos possui 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, intrua a solicitação GET usando cargas úteis nulas várias vezes, como 100 ou 200. E depois exclua qualquer um dos consoles manualmente da interface do usuário enquanto os threads estão executando.

Conclusão:

Como um meio de minar os controles de acesso, as condições de corrida são incluídas. Qualquer programa que depende de mecanismos de controle de acesso pode ser vulnerável. Na maioria das vezes, nos sites das instituições financeiras, os hackers exploram as condições de corrida. Pois pode levar a benefícios financeiros ilimitados para o hacker se uma condição de corrida pudesse ser descoberta em um recurso vital, como retirada em dinheiro, transferência de dinheiro ou pagamento de cartão de crédito. Plataformas de comércio eletrônico, videogame e serviços de votação on-line são outras tecnologias de alto risco. A implementação de concorrência segura é o segredo para evitar condições de corrida. E você pode usar bloqueios de recursos também. Também haverá um recurso de bloqueio embutido para linguagens de programação com habilidades de simultaneidade que ajudam a prevenir essas condições. Além disso, após padrões de codificação seguros, eu.e., O menos privilégio conceito e código de auditoria diminuirão a chance do programa de violar.