A maior parte do trabalho que mantém um produto de segurança confiável é invisível. Os usuários veem uma verificação concluída, uma ameaça bloqueada, uma atualização aplicada durante a noite. Eles não veem a plataforma subjacente. Runtimes, bibliotecas gerenciadas, drivers nativos e Windows Todos os requisitos devem permanecer atualizados e funcionar em conjunto em milhões de endpoints. Nossa migração para o .NET 10 é um exemplo de como mantemos essa plataforma em constante evolução e será o foco deste artigo.
Seria fácil chamar essas atualizações de tarefas de manutenção e seguir em frente. Mas isso seria subestimá-las. Nosso código é executado continuamente, com privilégios elevados, próximo a algumas das partes mais sensíveis do sistema. Windows .
Cada dependência em nossa pilha, desde o ambiente de execução e bibliotecas de terceiros até drivers nativos e requisitos do sistema operacional, afeta o ambiente em que nosso software é executado. Quando uma delas muda, tudo o que depende dela também pode precisar ser alterado.
O problema: as plataformas ficam para trás por ficarem paradas.
Em segurança de endpoints, o cenário está em constante evolução. Windows Evolui. As ameaças evoluem. O hardware evolui, desde laptops ARM64 até máquinas com muito mais memória e armazenamento mais rápido do que aquelas para as quais nosso código foi originalmente escrito.
Uma plataforma que permanece estática não se mantém a mesma. Ela fica para trás. Cada lançamento tardio de uma dependência ou ambiente de execução amplia a lacuna entre o ecossistema sobre o qual o construímos e aquele que é estável hoje.
Um ambiente de execução moderno, e o .NET 10 em particular, pode nos proporcionar maior segurança, caminhos de código mais rápidos, menor consumo de memória e diagnósticos mais completos. Ele também oferece aos nossos engenheiros melhorias na linguagem e nas ferramentas, ajudando-os a trabalhar com mais eficiência.
Os riscos também são particularmente altos para o software de segurança:
- Um aplicativo web pode ser revertido com uma implantação. O software já instalado no dispositivo do cliente não pode.
- Nosso código é executado com altos privilégios, juntamente com drivers de kernel e proteções contra adulteração.
- Uma regressão em tempo de execução não afeta apenas um servidor. Ela tem o potencial de afetar milhões de máquinas.
Assim, tratamos uma atualização de tempo de execução com o mesmo rigor que uma funcionalidade de segurança.
O desafio: tudo se move em conjunto.
Malwarebytes para Windows Não se trata de um programa único. É um sistema coordenado: uma interface voltada para o usuário, vários programas de longa duração... Windows Serviços, um instalador, um pipeline de atualização automática, uma interface para plugins e dependências gerenciadas por terceiros.
Esses componentes ficam acima dos drivers nativos e do nosso mecanismo de detecção. A migração para o .NET 10 abrangeu as partes gerenciadas de Malwarebytes deixando esse núcleo nativo intacto. Mas as diferentes camadas ainda precisam trabalhar juntas.
A migração teve que satisfazer vários requisitos simultaneamente:
- O código sensível à segurança tinha que se comportar de forma idêntica antes e depois da alteração.
- Os drivers nativos e as camadas anti-adulteração precisavam continuar funcionando corretamente com o código gerenciado.
- O processo de instalação e atualização precisava implantar os novos arquivos de tempo de execução e limpar os antigos.
- Os plugins e as dependências de terceiros precisavam permanecer compatíveis.
- Existente Malwarebytes As instalações tiveram que continuar funcionando.
- Nossa validação automatizada precisava ser abrangente o suficiente para confiarmos no resultado sem precisarmos inspecionar cada caminho manualmente.
A fronteira entre código gerenciado e código nativo merece atenção especial. O código gerenciado em nossos serviços se comunica com componentes nativos por meio de interfaces como P/Invoke e COM. Uma alteração em tempo de execução pode afetar sutilmente a forma como essas diferentes partes do sistema interagem. Malwarebytes Comunicar e trabalhar em conjunto.
Essas diferenças podem nunca aparecer em uma demonstração. Elas podem surgir em apenas uma máquina a cada 10.000. O importante é encontrá-las antes que os clientes as encontrem.
Nem todas as atualizações são iguais.
Existem três razões principais pelas quais atualizamos uma dependência: optamos por fazê-lo, a plataforma subjacente nos força a isso ou uma vulnerabilidade nos obriga. Cada uma delas tem um cronograma diferente.
Modernização opcional. Podemos optar por migrar para um novo ambiente de execução, uma nova versão principal de uma biblioteca ou uma nova capacidade de plataforma para aproveitar novos recursos, correções ou melhorias de segurança.
Mudanças na linha de base. À medida que os requisitos da plataforma evoluem, algumas restrições de compatibilidade antigas podem dificultar a modernização. Por exemplo, a migração para o .NET 10 nos permitiu atualizar a linha de base do aplicativo e adotar um runtime mais recente e compatível. Como parte dessa mesma mudança, Windows O suporte para a versão 7 foi descontinuado.
Correções obrigatórias. Às vezes, uma vulnerabilidade é descoberta em uma biblioteca que distribuímos ou em um sistema do qual dependemos. A alteração deixa de ser opcional e o cronograma não está sob nosso controle. O que podemos controlar é nossa prontidão: os testes, o processo de lançamento e a implementação gradual que nos permitem responder rapidamente sem introduzir novos problemas.
Razões e prazos diferentes, mas todos exigem a mesma abordagem cuidadosa.
A migração para o .NET: Por que a fizemos?
A migração para o .NET 10 proporciona Malwarebytes uma base mais segura, apoiada e capaz para Windows , com diversos benefícios cumulativos:
Segurança. Um ambiente de execução moderno se beneficia do trabalho contínuo da Microsoft em segurança, incluindo configurações padrão mais seguras, criptografia mais robusta e mitigações para bugs de memória e interoperabilidade. Manter um ambiente de execução com suporte ativo da Microsoft significa que podemos continuar aplicando correções quando vulnerabilidades forem descobertas.
Uma base sólida. Pode não ser um motivo glamoroso, mas o .NET 10 nos mantém em uma plataforma com suporte e desenvolvimento ativo, mais alinhada com as versões mais recentes do .NET Framework. Windows Isso facilita a adoção de correções, recursos e melhorias futuras como trabalho rotineiro, em vez de projetos pontuais.
Diagnóstico e observabilidade. O .NET moderno possui recursos integrados mais robustos de rastreamento, métricas e diagnóstico de falhas. Em um produto de segurança, entender como o código se comporta em produção é fundamental. Um diagnóstico mais eficiente nos ajuda a identificar e resolver problemas de confiabilidade.
Desempenho e eficiência de memória. As versões recentes do .NET aprimoraram o compilador just-in-time, o coletor de lixo e as bibliotecas principais. Nossos processos são executados em segundo plano o dia todo, portanto, a eficiência com que executam e gerenciam a memória é crucial. Esses recursos nos oferecem mais oportunidades para melhorar a eficiência, embora o impacto varie entre os componentes.
A migração para o .NET: como fizemos isso
O princípio orientador é simples: nunca avance mais rápido do que as evidências permitem.
Começamos isolando o trabalho em uma ramificação dedicada. Redefinimos a plataforma e atualizamos todas as dependências gerenciadas para que o novo ambiente de execução e a base de código concordassem exatamente sobre quais componentes deveriam ser distribuídos.
Isso trouxe à tona algumas das consequências menos óbvias da atualização logo no início: bibliotecas que haviam sido renomeadas ou incorporadas ao ambiente de execução, arquivos que não eram mais necessários e novos arquivos que tiveram que ser distribuídos em seu lugar.

A implantação é fácil de ser negligenciada e custosa se feita incorretamente. Uma migração em tempo de execução não se resume apenas ao código que é executado. Também se refere ao que é instalado no disco do cliente.
Nosso instalador e serviço de atualização tiveram que aprender o novo layout de arquivos do ambiente de execução. Eles precisaram remover as dependências que o ambiente de execução agora fornece, parar de distribuir arquivos renomeados e entregar as substituições corretamente durante novas instalações e atualizações no local.
A implementação correta é o que diferencia uma atualização que os usuários nem percebem de uma que gera problemas de suporte.
Assim que a compilação estava funcionando corretamente, o foco passou para a validação.
A migração envolveu:
- Testes automatizados abrangentes em todos os serviços, processos de instalação e atualização.
- Validação de compatibilidade com configurações reais e instalações anteriores.
- Análise comparativa de desempenho para detectar regressões no comportamento de inicialização, memória e varredura.
- Implantação gradual e faseada, começando com pequenas populações e expandindo apenas quando os resultados mostrassem que era seguro fazê-lo.
- Monitoramento contínuo e detecção automática de regressão em campo.
- Trabalho multifuncional envolvendo plataforma, controle de qualidade, instalação e atualização, e engenharia de lançamento.

“Nunca avançamos mais rápido do que as evidências permitiam. Cada portão tinha que ficar verde por conta própria.”
A migração para o .NET: as vantagens e desvantagens
Nada disso foi gratuito, e as escolhas envolviam concessões deliberadas.
A desvantagem da ramificação era a possibilidade de desvio. Isolar a migração protegia a base de código principal, mas quanto mais tempo essa ramificação existisse, mais ela poderia divergir do desenvolvimento ativo. Gerenciamos esse risco por meio de integrações frequentes, em vez de deixar uma grande e arriscada fusão para o final.
A contrapartida na implementação foi a velocidade. A implantação faseada também significava que os clientes receberiam a atualização mais tarde do que receberiam com uma atualização simultânea em larga escala. Aceitamos essa contrapartida. A experiência de usuários menores nos dá a oportunidade de identificar problemas antes que uma atualização atinja um número muito maior de dispositivos.
A desvantagem do AOT foi a flexibilidade. A compilação antecipada pode melhorar o desempenho de inicialização, mas também pode restringir o comportamento dinâmico. Aplicamos o AOT seletivamente, componente por componente, em vez de em todos os lugares por padrão.
O que a migração para o .NET 10 significa para os clientes
O melhor resultado de um trabalho de infraestrutura é que os clientes se beneficiem dele sem precisar se preocupar com isso.
No .NET 10, esses benefícios para Malwarebytes Entre os clientes, incluem-se:
- Maior confiabilidade em um ambiente de execução totalmente suportado e com manutenção ativa.
- Uma base mais segura que se beneficia das melhorias contínuas de segurança da plataforma.
- Acesso a novos recursos e correções do .NET.
- Melhor suporte para versões mais recentes de Windows .
- As ferramentas .NET mais recentes podem nos ajudar a desenvolver e fornecer novas proteções mais rapidamente.
Lições que vale a pena guardar
Cada uma dessas atualizações — o tempo de execução, as linhas de base, os patches de segurança — faz com que a equipe mantenha algumas convicções ainda mais firmes.
As atualizações de plataforma são investimentos estratégicos em tudo o que é construído sobre elas. A modernização também funciona melhor quando é contínua: quanto mais tempo uma plataforma fica defasada, mais difícil pode se tornar a atualização final.
A automação é particularmente importante para mudanças dessa magnitude. Assim como as pequenas decisões, muitas vezes pouco glamorosas, tomadas anos antes, como manter limites bem definidos entre os componentes e ter um processo de produção que saiba exatamente o que está sendo enviado.
São esses alicerces que tornam possíveis mudanças maiores.
“A dívida técnica se acumula como a dívida financeira. A atualização mais barata é aquela que você nunca adiou.”
O que vem a seguir?
Nenhuma atualização é uma linha de chegada. Cada uma é um passo em um padrão mais longo: modernizar continuamente, em etapas deliberadas, para que a plataforma nunca fique para trás. Os padrões de referência mudarão novamente. Vulnerabilidades surgirão sem aviso prévio. Cada uma delas atenderá à mesma disciplina: os mesmos testes, a mesma implementação gradual e as mesmas evidências antes de prosseguirmos.
Essa disciplina é o que realmente define um produto confiável, capaz de funcionar todos os dias, em qualquer máquina, sem qualquer preocupação.
Malwarebytes para Windows no .NET 10 foi lançado na versão 5.6.0. Este é o passo mais recente em um compromisso de longa data de investir na plataforma subjacente ao produto, para que a proteção oferecida continue a ser aprimorada.
“Um dos melhores pacotes de segurança cibernética do mundo.”
De acordo com a CNET.Leia a resenha deles →





