Este relatório analisa em detalhes os detalhes técnicos, as causas fundamentais e as possíveis formas de ataque das vulnerabilidades centrais do DoS na Máquina virtual TON, e ao mesmo tempo demonstra a solução eficiente proposta pela equipe TonBit.
Recentemente, o sistema Máquina virtual da rede TON passou por uma importante atualização de segurança. A equipe de segurança TonBit, da BitsLab, descobriu e ajudou a corrigir com sucesso uma vulnerabilidade crítica que poderia levar ao esgotamento de recursos da Máquina virtual TON. Essa vulnerabilidade explora o mecanismo recursivo do Máquina virtual ao lidar com Continuação aninhada, podendo ser abusada por contratos maliciosos, resultando em falhas no sistema e instabilidade de rede.
Se essa vulnerabilidade for explorada maliciosamente, pode fazer com que todos os nós de validação caiam sem precisar gastar um TON, ameaçando diretamente a disponibilidade da rede. Neste incidente, a TonBit localizou rapidamente a vulnerabilidade com sua excelente capacidade técnica e propôs uma solução inovadora substituindo a recursão por iteração, ajustando o fluxo de controle interno da Máquina virtual, criando com sucesso um ambiente mais seguro para os usuários do TON. A equipe oficial do TON agradeceu especialmente à TonBit por sua excelente contribuição para a segurança do ecossistema em seu mais recente anúncio de atualização.
Neste relatório de segurança detalhado, analisaremos a fundo a causa, os detalhes técnicos e a solução desta vulnerabilidade. O relatório descreve em detalhes como a vulnerabilidade é explorada para construir uma cadeia de recursão que aciona um ataque de exaustão de recursos usando a profundidade de continuação, e como contratos maliciosos esgotam o espaço de pilha do host através da expansão da pilha de chamadas. Além disso, também iremos apresentar como a equipe TonBit resolveu completamente o problema, eliminando a falha de design na cadeia de recursão e adotando um mecanismo de iteração colaborativa. Esta correção não apenas melhorou significativamente a estabilidade da rede TON, mas também forneceu uma referência importante para a segurança subjacente da indústria de blockchain.
Estudo de caso: Vulnerabilidade de DoS no TON VM e medidas de mitigação relacionadas
Introdução
Este relatório descreve uma vulnerabilidade de DoS (Negação de Serviço) no TON Máquina virtual e as medidas de mitigação para resolver o problema. A vulnerabilidade ocorre devido ao modo como a Máquina virtual lida com a aninhamento de Continuações durante a execução do contrato. Esta vulnerabilidade permite que contratos maliciosos acionem uma recursão profunda durante a avaliação, esgotando o espaço da pilha do host e fazendo com que a Máquina virtual pare de funcionar, criando Continuações de maneira específica. Para mitigar este problema, a Máquina virtual modificou o tratamento de Continuações e fluxo de controle. Agora, a Máquina virtual não faz mais chamadas de cauda sequencial através da cadeia de Continuações, em vez disso, itera ativamente a cadeia. Este método garante o uso de um espaço de pilha constante, prevenindo estouro de pilha.
Resumo
De acordo com a documentação oficial, TON VM é uma Máquina virtual baseada em pilha, que utiliza o Continuation-Passing Style (CPS, estilo de passagem de continuação) como seu mecanismo de fluxo de controle, usado para processos internos e contratos inteligentes. Os registradores de fluxo de controle são acessíveis aos contratos, proporcionando assim flexibilidade.
A teoria da continuação na TVM pode ser dividida em três categorias:
OrdCont (ou seja, vmc_std), contém segmentos de ASM TON a serem executados e é um objeto de primeira classe no TVM. Os contratos podem criá-lo explicitamente em tempo de execução e passá-lo para alcançar qualquer fluxo de controle.
As Continuações Extraordinárias (Extraordinary continuations) não são comuns e geralmente incluem componentes OrdCont, criados por primitivas de iteração explícita e operações implícitas especiais, e são usadas para lidar com os respectivos mecanismos de fluxo de controle.
ArgContExt adicional, encapsula outras Continuations para armazenar dados de controle.
Durante a execução do contrato, a Máquina Virtual entra em um loop principal, decodificando um caractere de cada vez dos fragmentos do contrato e despachando a operação correspondente para o manipulador apropriado. Os manipuladores normais retornam imediatamente após a execução da operação correspondente.
Em comparação, a instrução de iteração usará a Continuação fornecida como componente para criar uma Continuação não comum e saltar para a Continuação não comum no contexto apropriado. A própria Continuação não comum implementa a lógica ao saltar e salta para um componente com base em condições. Por exemplo, ao usar a instrução WHILE, podemos demonstrar esse processo na Figura 1 (omitindo possíveis saídas).
Figura 1: Lógica de Continuação não comum
razão fundamental
Nas versões do Máquina virtual com falhas, esses saltos resultarão em chamadas dinâmicas de cauda consecutivas, exigindo que a pilha do hospedeiro mantenha um quadro de pilha para cada salto, como mostrado na Figura 2.
Tomando WhileCont como exemplo, outras partes são omitidas por simplicidade.
Figura 2: Três saltos triplos recursivos para mergulhar na armadilha
Idealmente, isso não seria um problema, pois os componentes geralmente são representados como OrdCont, cujo salto só preserva o contexto atual e, em seguida, instrui a Máquina virtual a executar o fragmento que ele contém, antes de executar os fragmentos restantes do contrato, sem introduzir mais recursão. No entanto, em teoria, as Continuações não comuns permitem que seus componentes acessem a funcionalidade cc (c0) do TVM por meio do registrador set_c0 mencionado anteriormente. Portanto, os contratos podem abusar dessa funcionalidade para realizar recursão de Profundidade (descrita posteriormente). Em vez de modificar a implementação dessa funcionalidade geral, é mais claro e fácil eliminar a recursão diretamente no processo de salto das Continuações não comuns.
Ao construir um Continuation não comum de nível superior usando Continuations não comuns já obtidos repetidamente, é possível criar uma Continuation aninhada de Profundidade iterativamente. Essas Continuations aninhadas de Profundidade podem esgotar o espaço disponível na pilha do host durante a avaliação, levando ao envio do sinal SIGSEGV pelo sistema operacional e à terminação do processo da Máquina virtual.
A Figura 3 fornece a validação do conceito de processo de aninhamento (PoC).
Figura 3: Processo de encaixar armadilha
Vemos em cada iteração que o corpo se expande com um WhileCont{chkcond=true}. Ao executar o cc gerado e salvo na última iteração, obtemos uma pilha de chamadas semelhante a esta:
Pode-se ver que o espaço da pilha está linearmente dependente do nível de aninhamento (ou seja, do número de iterações), o que sugere que pode levar ao esgotamento do espaço da pilha.
Sobre a utilização em ambiente real
Na cadeia de blocos real, as restrições de taxa de combustível tornam a construção de contratos maliciosos bastante difícil. Devido à complexidade linear do processo de aninhamento (o TVM projeta efetivamente a construção mais barata por meio de auto-referência), desenvolver contratos maliciosos viáveis na prática não é uma tarefa fácil. Em particular, um aninhamento de camada gera uma sequência de chamadas, consumindo três quadros de pilha do host (320 bytes) no arquivo binário de depuração e dois (256 bytes, os dois últimos chamadas são inline). Para nós de verificação em execução em sistemas operacionais POSIX modernos, o tamanho padrão da pilha é de 8 MiB, que é suficiente para suportar mais de 30.000 camadas de aninhamento no arquivo binário de lançamento. Embora ainda seja possível construir um contrato que esgote o espaço da pilha, isso é muito mais difícil do que o exemplo da seção anterior.
Medidas de alívio
Esta correção altera o comportamento dos saltos em casos de aninhamento de Continuação. Podemos ver que a assinatura do salto de Continuação mudou.
Tomando UntilCont como exemplo, outras partes serão omitidas por simplicidade.
Não se chama mais VmState::jump para saltar para a próxima Continuation, o que significa que a execução recursiva de saltos triplos em cada Continuation e a espera pela propagação do valor de retorno para trás não são mais necessárias. Agora, o salto da Continuation resolve apenas a próxima camada da Continuation e, em seguida, devolve o controle para a Máquina virtual.
A Máquina virtual itera de forma colaborativa para resolver cada nível de continuação, até encontrar um NullRef, indicando a conclusão da resolução da cadeia (como implementado em OrdCont ou ExuQuitCont). Durante esse processo iterativo, apenas um salto de continuação é alocado na pilha do hospedeiro, garantindo assim o uso constante da pilha.
Conclusão
Para serviços que requerem alta disponibilidade, o uso recursivo pode se tornar um Vetor de Ataque potencial. Ao lidar com lógica definida pelo usuário, pode ser desafiador forçar a terminação recursiva. Essa vulnerabilidade de DOS demonstra um caso extremo em que a funcionalidade normal é abusada acidentalmente em situações de recursos limitados (ou outras restrições). Problemas semelhantes podem ocorrer se a recursão depender da entrada do usuário, o que é comum nas primitivas de fluxo de controle da Máquina virtual.
Este relatório analisa em detalhe os detalhes técnicos, as causas fundamentais e as possíveis formas de ataque da vulnerabilidade central DoS na Máquina virtual TON, ao mesmo tempo que apresenta a solução eficaz proposta pela equipe TonBit. Ao ajustar o mecanismo de salto recursivo da Máquina virtual para processamento iterativo, a TonBit propôs com sucesso uma solução para corrigir a vulnerabilidade, ajudando a corrigir essa vulnerabilidade central que poderia levar a uma paralisação da rede, proporcionando uma segurança mais robusta para o ecossistema TON. Este incidente não só reflete a profunda acumulação de conhecimento técnico de segurança da TonBit no campo da tecnologia de blockchain de nível inferior, mas também demonstra seu papel importante como Fornecedor Oficial de Garantia de Segurança (SAP) da TON.
Como parceiro de segurança indispensável para o ecossistema TON, a TonBit está sempre na vanguarda da proteção da estabilidade da rede Bloco e da segurança dos ativos dos utilizadores. Desde a descoberta de vulnerabilidades até à conceção de soluções, a TonBit estabeleceu uma base sólida para o desenvolvimento a longo prazo da rede TON, graças à sua sólida capacidade técnica e profundo entendimento do desenvolvimento da cadeia Bloco. Ao mesmo tempo, a equipa da TonBit continua a esforçar-se na arquitetura de segurança de rede, proteção de dados dos utilizadores e melhoria da segurança das aplicações na cadeia Bloco. No futuro, a TonBit continuará a impulsionar o progresso da segurança através da inovação, proporcionando um apoio contínuo e garantias para o desenvolvimento saudável do ecossistema TON e da indústria Bloco como um todo. A descoberta e assistência na correção desta vulnerabilidade foram altamente reconhecidas pela TON, reforçando ainda mais a posição da TonBit no campo da segurança da cadeia Bloco e demonstrando o seu compromisso firme com a promoção da Descentralização.
O conteúdo é apenas para referência, não uma solicitação ou oferta. Nenhum aconselhamento fiscal, de investimento ou jurídico é fornecido. Consulte a isenção de responsabilidade para obter mais informações sobre riscos.
BitsLab descobriu uma vulnerabilidade central do TON VM na TonBit: explicação detalhada das causas fundamentais e medidas de mitigação
Este relatório analisa em detalhes os detalhes técnicos, as causas fundamentais e as possíveis formas de ataque das vulnerabilidades centrais do DoS na Máquina virtual TON, e ao mesmo tempo demonstra a solução eficiente proposta pela equipe TonBit.
Recentemente, o sistema Máquina virtual da rede TON passou por uma importante atualização de segurança. A equipe de segurança TonBit, da BitsLab, descobriu e ajudou a corrigir com sucesso uma vulnerabilidade crítica que poderia levar ao esgotamento de recursos da Máquina virtual TON. Essa vulnerabilidade explora o mecanismo recursivo do Máquina virtual ao lidar com Continuação aninhada, podendo ser abusada por contratos maliciosos, resultando em falhas no sistema e instabilidade de rede.
Se essa vulnerabilidade for explorada maliciosamente, pode fazer com que todos os nós de validação caiam sem precisar gastar um TON, ameaçando diretamente a disponibilidade da rede. Neste incidente, a TonBit localizou rapidamente a vulnerabilidade com sua excelente capacidade técnica e propôs uma solução inovadora substituindo a recursão por iteração, ajustando o fluxo de controle interno da Máquina virtual, criando com sucesso um ambiente mais seguro para os usuários do TON. A equipe oficial do TON agradeceu especialmente à TonBit por sua excelente contribuição para a segurança do ecossistema em seu mais recente anúncio de atualização.
Neste relatório de segurança detalhado, analisaremos a fundo a causa, os detalhes técnicos e a solução desta vulnerabilidade. O relatório descreve em detalhes como a vulnerabilidade é explorada para construir uma cadeia de recursão que aciona um ataque de exaustão de recursos usando a profundidade de continuação, e como contratos maliciosos esgotam o espaço de pilha do host através da expansão da pilha de chamadas. Além disso, também iremos apresentar como a equipe TonBit resolveu completamente o problema, eliminando a falha de design na cadeia de recursão e adotando um mecanismo de iteração colaborativa. Esta correção não apenas melhorou significativamente a estabilidade da rede TON, mas também forneceu uma referência importante para a segurança subjacente da indústria de blockchain.
Estudo de caso: Vulnerabilidade de DoS no TON VM e medidas de mitigação relacionadas
Introdução
Este relatório descreve uma vulnerabilidade de DoS (Negação de Serviço) no TON Máquina virtual e as medidas de mitigação para resolver o problema. A vulnerabilidade ocorre devido ao modo como a Máquina virtual lida com a aninhamento de Continuações durante a execução do contrato. Esta vulnerabilidade permite que contratos maliciosos acionem uma recursão profunda durante a avaliação, esgotando o espaço da pilha do host e fazendo com que a Máquina virtual pare de funcionar, criando Continuações de maneira específica. Para mitigar este problema, a Máquina virtual modificou o tratamento de Continuações e fluxo de controle. Agora, a Máquina virtual não faz mais chamadas de cauda sequencial através da cadeia de Continuações, em vez disso, itera ativamente a cadeia. Este método garante o uso de um espaço de pilha constante, prevenindo estouro de pilha.
Resumo
De acordo com a documentação oficial, TON VM é uma Máquina virtual baseada em pilha, que utiliza o Continuation-Passing Style (CPS, estilo de passagem de continuação) como seu mecanismo de fluxo de controle, usado para processos internos e contratos inteligentes. Os registradores de fluxo de controle são acessíveis aos contratos, proporcionando assim flexibilidade.
A teoria da continuação na TVM pode ser dividida em três categorias:
OrdCont (ou seja, vmc_std), contém segmentos de ASM TON a serem executados e é um objeto de primeira classe no TVM. Os contratos podem criá-lo explicitamente em tempo de execução e passá-lo para alcançar qualquer fluxo de controle.
As Continuações Extraordinárias (Extraordinary continuations) não são comuns e geralmente incluem componentes OrdCont, criados por primitivas de iteração explícita e operações implícitas especiais, e são usadas para lidar com os respectivos mecanismos de fluxo de controle.
ArgContExt adicional, encapsula outras Continuations para armazenar dados de controle.
Durante a execução do contrato, a Máquina Virtual entra em um loop principal, decodificando um caractere de cada vez dos fragmentos do contrato e despachando a operação correspondente para o manipulador apropriado. Os manipuladores normais retornam imediatamente após a execução da operação correspondente.
Em comparação, a instrução de iteração usará a Continuação fornecida como componente para criar uma Continuação não comum e saltar para a Continuação não comum no contexto apropriado. A própria Continuação não comum implementa a lógica ao saltar e salta para um componente com base em condições. Por exemplo, ao usar a instrução WHILE, podemos demonstrar esse processo na Figura 1 (omitindo possíveis saídas).
Figura 1: Lógica de Continuação não comum
razão fundamental
Nas versões do Máquina virtual com falhas, esses saltos resultarão em chamadas dinâmicas de cauda consecutivas, exigindo que a pilha do hospedeiro mantenha um quadro de pilha para cada salto, como mostrado na Figura 2.
Tomando WhileCont como exemplo, outras partes são omitidas por simplicidade.
Figura 2: Três saltos triplos recursivos para mergulhar na armadilha
Idealmente, isso não seria um problema, pois os componentes geralmente são representados como OrdCont, cujo salto só preserva o contexto atual e, em seguida, instrui a Máquina virtual a executar o fragmento que ele contém, antes de executar os fragmentos restantes do contrato, sem introduzir mais recursão. No entanto, em teoria, as Continuações não comuns permitem que seus componentes acessem a funcionalidade cc (c0) do TVM por meio do registrador set_c0 mencionado anteriormente. Portanto, os contratos podem abusar dessa funcionalidade para realizar recursão de Profundidade (descrita posteriormente). Em vez de modificar a implementação dessa funcionalidade geral, é mais claro e fácil eliminar a recursão diretamente no processo de salto das Continuações não comuns.
Ao construir um Continuation não comum de nível superior usando Continuations não comuns já obtidos repetidamente, é possível criar uma Continuation aninhada de Profundidade iterativamente. Essas Continuations aninhadas de Profundidade podem esgotar o espaço disponível na pilha do host durante a avaliação, levando ao envio do sinal SIGSEGV pelo sistema operacional e à terminação do processo da Máquina virtual.
A Figura 3 fornece a validação do conceito de processo de aninhamento (PoC).
Figura 3: Processo de encaixar armadilha
Vemos em cada iteração que o corpo se expande com um WhileCont{chkcond=true}. Ao executar o cc gerado e salvo na última iteração, obtemos uma pilha de chamadas semelhante a esta:
Pode-se ver que o espaço da pilha está linearmente dependente do nível de aninhamento (ou seja, do número de iterações), o que sugere que pode levar ao esgotamento do espaço da pilha.
Sobre a utilização em ambiente real
Na cadeia de blocos real, as restrições de taxa de combustível tornam a construção de contratos maliciosos bastante difícil. Devido à complexidade linear do processo de aninhamento (o TVM projeta efetivamente a construção mais barata por meio de auto-referência), desenvolver contratos maliciosos viáveis na prática não é uma tarefa fácil. Em particular, um aninhamento de camada gera uma sequência de chamadas, consumindo três quadros de pilha do host (320 bytes) no arquivo binário de depuração e dois (256 bytes, os dois últimos chamadas são inline). Para nós de verificação em execução em sistemas operacionais POSIX modernos, o tamanho padrão da pilha é de 8 MiB, que é suficiente para suportar mais de 30.000 camadas de aninhamento no arquivo binário de lançamento. Embora ainda seja possível construir um contrato que esgote o espaço da pilha, isso é muito mais difícil do que o exemplo da seção anterior.
Medidas de alívio
Esta correção altera o comportamento dos saltos em casos de aninhamento de Continuação. Podemos ver que a assinatura do salto de Continuação mudou.
Tomando UntilCont como exemplo, outras partes serão omitidas por simplicidade.
Não se chama mais VmState::jump para saltar para a próxima Continuation, o que significa que a execução recursiva de saltos triplos em cada Continuation e a espera pela propagação do valor de retorno para trás não são mais necessárias. Agora, o salto da Continuation resolve apenas a próxima camada da Continuation e, em seguida, devolve o controle para a Máquina virtual.
A Máquina virtual itera de forma colaborativa para resolver cada nível de continuação, até encontrar um NullRef, indicando a conclusão da resolução da cadeia (como implementado em OrdCont ou ExuQuitCont). Durante esse processo iterativo, apenas um salto de continuação é alocado na pilha do hospedeiro, garantindo assim o uso constante da pilha.
Conclusão
Para serviços que requerem alta disponibilidade, o uso recursivo pode se tornar um Vetor de Ataque potencial. Ao lidar com lógica definida pelo usuário, pode ser desafiador forçar a terminação recursiva. Essa vulnerabilidade de DOS demonstra um caso extremo em que a funcionalidade normal é abusada acidentalmente em situações de recursos limitados (ou outras restrições). Problemas semelhantes podem ocorrer se a recursão depender da entrada do usuário, o que é comum nas primitivas de fluxo de controle da Máquina virtual.
Este relatório analisa em detalhe os detalhes técnicos, as causas fundamentais e as possíveis formas de ataque da vulnerabilidade central DoS na Máquina virtual TON, ao mesmo tempo que apresenta a solução eficaz proposta pela equipe TonBit. Ao ajustar o mecanismo de salto recursivo da Máquina virtual para processamento iterativo, a TonBit propôs com sucesso uma solução para corrigir a vulnerabilidade, ajudando a corrigir essa vulnerabilidade central que poderia levar a uma paralisação da rede, proporcionando uma segurança mais robusta para o ecossistema TON. Este incidente não só reflete a profunda acumulação de conhecimento técnico de segurança da TonBit no campo da tecnologia de blockchain de nível inferior, mas também demonstra seu papel importante como Fornecedor Oficial de Garantia de Segurança (SAP) da TON.
Como parceiro de segurança indispensável para o ecossistema TON, a TonBit está sempre na vanguarda da proteção da estabilidade da rede Bloco e da segurança dos ativos dos utilizadores. Desde a descoberta de vulnerabilidades até à conceção de soluções, a TonBit estabeleceu uma base sólida para o desenvolvimento a longo prazo da rede TON, graças à sua sólida capacidade técnica e profundo entendimento do desenvolvimento da cadeia Bloco. Ao mesmo tempo, a equipa da TonBit continua a esforçar-se na arquitetura de segurança de rede, proteção de dados dos utilizadores e melhoria da segurança das aplicações na cadeia Bloco. No futuro, a TonBit continuará a impulsionar o progresso da segurança através da inovação, proporcionando um apoio contínuo e garantias para o desenvolvimento saudável do ecossistema TON e da indústria Bloco como um todo. A descoberta e assistência na correção desta vulnerabilidade foram altamente reconhecidas pela TON, reforçando ainda mais a posição da TonBit no campo da segurança da cadeia Bloco e demonstrando o seu compromisso firme com a promoção da Descentralização.
Website oficial da TonBit:
TonBit Official Twitter:
Telegram:
Linkedin:
Blog: #blogs
Contato de auditoria do Telegram: @starchou