NetCatTest

Malware & Ameaças

QWERTY e Regin: código vazado, Five Eyes e o contexto GCHQ

Como uma comparação de binários ligou QWERTY a Regin: drivers, dependências, armazenamento virtual e os limites da atribuição à inteligência britânica.

Por Daniel Felipe 9 min leitura

Um código vazado pode revelar mais pelaquilo de que depende do que pelo seu nome. QWERTY e Regin oferecem um exemplo particularmente interessante: pesquisadores encontraram código compartilhado e referências a módulos de uma mesma plataforma. A análise ligou um keylogger publicado a partir do acervo Snowden a um ecossistema de espionagem que já estava sob investigação.

Esta matéria examina pesquisas de 2014 e 2015, com atenção ao contexto Five Eyes e à inteligência britânica. A publicação em outubro de 2026 não representa um novo vazamento. O objetivo é explicar como comparação de binários, dependências e memória ajudam a construir conclusões verificáveis, sem tratar toda hipótese de atribuição como confirmação oficial.

QWERTY e Regin: o contrato entre módulos é mais forte que uma string

A comparação publicada pelos pesquisadores associa código de 20123.sys ao módulo 50251 e aponta a dependência do módulo 50225. Essa relação é mais informativa que encontrar a palavra QWERTY em um arquivo: mostra componentes que precisam concordar sobre inicialização e serviços de hook.

Uma arquitetura modular pode carregar um componente, registrar suas capacidades e resolver dependências por identificador. A rotina abaixo demonstra apenas esse contrato com funções inertes. É uma reconstrução didática própria, não o loader de Regin e não um keylogger.

modulos = {
    50225: {'dependencias': [], 'versao': 'lab-1'},
    50251: {'dependencias': [50225], 'versao': 'lab-1'}
}

def pronto(identificador, disponiveis):
    return all(d in disponiveis for d in modulos[identificador]['dependencias'])

assert not pronto(50251, set())
assert pronto(50251, {50225})
assert pronto(50225, set())
print('dependencia necessaria, nao atribuicao')

Se um componente requer a mesma interface e compartilha implementações com outro, há uma hipótese concreta de plataforma comum. Os números usados aqui são referências do estudo, mas os registros e a função são fictícios. A conclusão do exemplo é estrutural, não operacional.

Para comparar binários, mapeie funções por fluxo de controle, chamadas, constantes e operações, preservando diferenças de compilador e arquitetura. Uma sequência curta de biblioteca pode coincidir em software sem relação. Já múltiplas funções específicas, dependências e inicialização compatíveis reduzem essa explicação alternativa.

No armazenamento virtual, bytes no disco, conteúdo expandido e módulos em memória são camadas diferentes. Calcule hashes por camada e documente a transformação necessária para compará-las. Não chame um hash do contêiner de hash do módulo. Esse cuidado permite reproduzir a análise sem transformar similaridade técnica em certeza sobre qual agência operou cada máquina.

QWERTY: a documentação publicada a partir do acervo Snowden

A apresentação publicada junto ao material QWERTY descreve um componente de captura de teclado para WARRIORPRIDE. Ela distingue um driver que interage com o teclado e uma biblioteca que recebe os dados. O documento enquadra a plataforma no compartilhamento de ferramentas dos Five Eyes.

Essa descrição fornece uma alegação documental e um contexto de origem. A etapa seguinte é perguntar se as características podem ser reconhecidas por análise independente. Um nome escrito num documento, por si só, não identifica um arquivo recolhido em outra investigação. É preciso conectar os objetos através de propriedades técnicas.

O elo técnico entre QWERTY e Regin

Em 27 de janeiro de 2015, Costin Raiu e Igor Kuznetsov publicaram a comparação entre QWERTY e o módulo Regin 50251. A pesquisa encontrou código compartilhado entre o driver 20123.sys e o plugin 50251, além de referências ao módulo 50225, responsável por funções de hooking em modo kernel.

Os autores também analisaram inicialização e registro de plugins. A combinação de semelhança de código e dependência operacional sustentou a conclusão de que os componentes pertenciam à mesma plataforma, com desenvolvedores comuns ou em colaboração. A razão dos identificadores diferentes permaneceu desconhecida.

Relações descritas na pesquisa histórica

QWERTY: 20123.sys ── código compartilhado ── Regin: 50251
        │                                        │
        └──────── dependência: módulo 50225 ──────┘

Semelhança + dependência + inicialização
  → vínculo técnico de plataforma

Vínculo de plataforma
  ≠ identificação automática do operador de cada incidente

A diferença entre essas conclusões é essencial. O grafo mostra uma relação técnica que pode ser examinada. A identificação de quem implantou o componente em uma vítima exige outras evidências. Uma empresa ou governo também pode adquirir, compartilhar ou reutilizar ferramentas; a autoria do código e o operador de uma campanha não são necessariamente a mesma entidade.

GCHQ, MI6 e os limites da atribuição

GCHQ e MI6 são organizações distintas. O perfil oficial do GCHQ descreve suas funções de inteligência e proteção da informação. O perfil do Secret Intelligence Service, conhecido como MI6 apresenta a atuação de inteligência no exterior. Usar os dois nomes como sinônimos prejudica a leitura do caso.

O relatório suíço de segurança da informação relativo ao segundo semestre de 2014 contextualiza Regin, Belgacom e a atribuição ao GCHQ a partir dos documentos Snowden. É um registro contemporâneo dessa discussão, não uma confissão da agência. A ligação técnica QWERTY/Regin e a atribuição de uma operação devem permanecer em camadas separadas.

Para escrever uma conclusão precisa, informe quem formulou a atribuição, qual material utilizou e a que operação ela se refere. A capa desta matéria usa GCHQ como referência ao contexto britânico; não apresenta o caso como um pacote exclusivamente britânico, nem como uma ferramenta comprovadamente pertencente ao MI6.

Hash, similaridade e dependência respondem perguntas diferentes

Dois arquivos podem implementar funções parecidas e ter hashes completamente diferentes. O hash criptográfico identifica o conteúdo exato usado no cálculo. Já a comparação estrutural busca relações entre funções, fluxo de controle ou interfaces. Esses métodos são complementares, mas seus resultados não são intercambiáveis.

Tipo de evidênciaPergunta respondidaLimitação
Hash do arquivoO conteúdo corresponde exatamente à referência?Uma alteração muda a identidade calculada
Comparação de funçõesHá implementação compartilhada ou semelhante?Código comum e bibliotecas podem gerar coincidências
Dependência de móduloQue interface o componente espera encontrar?Uma referência isolada pode estar inativa
Registro e inicializaçãoComo o componente se integra à plataforma?Requer interpretação do caminho de execução
Contexto documentalComo o material foi descrito e publicado?Não substitui análise do artefato coletado

Uma comparação profissional deve registrar critérios e alternativas. Antes de atribuir uma função ao mesmo desenvolvedor, verifique se ela vem de uma biblioteca comum, de código gerado ou de uma interface padronizada. Depois, procure relações menos genéricas: convenções de registro, dependências específicas e comportamentos que fazem sentido dentro da mesma arquitetura.

Por que a busca por arquivos pode ser insuficiente

A pesquisa comparativa da Kaspersky descreve plugins armazenados em um sistema de arquivos virtual, cifrado e comprimido, com carregamento pelo dispatcher. Esse detalhe explica por que procurar apenas um nome de driver no disco pode não encontrar o componente na forma esperada.

Como método de investigação, organize as fontes por camada: arquivos persistidos, estruturas de armazenamento, memória e eventos de carregamento. Anote a cobertura de cada uma. Um resultado negativo numa busca por nomes deve ser registrado como ausência naquela fonte, não como prova de ausência de todos os componentes de uma plataforma.

A captura de memória precisa de planejamento e ferramentas compatíveis com o sistema investigado. Preserve informações de coleta, hash, horário e cadeia de custódia. O carregamento de um driver também exige contexto: componentes legítimos podem operar em modo kernel, e a presença de uma assinatura digital não resolve, sozinha, a avaliação de finalidade.

Laboratório de dependências sem executar malware

O exemplo abaixo usa um conjunto fictício de metadados para comparar dependências. Os rótulos lembram o caso histórico, mas os dados foram construídos apenas para o exercício. Não há amostras, keylogger, captura de teclado ou consulta à rede.

modulos = {
    "qwerty-lab": {"dependencias": {"hook-lab", "registro-lab"}},
    "regin-lab": {"dependencias": {"hook-lab", "registro-lab"}},
    "driver-comum": {"dependencias": {"entrada-sistema"}}
}

primeiro = modulos["qwerty-lab"]["dependencias"]
for nome, dados in modulos.items():
    if nome != "qwerty-lab":
        comuns = primeiro & dados["dependencias"]
        print(nome, sorted(comuns))

A saída mostra duas dependências comuns para regin-lab e nenhuma para driver-comum. Isso representa uma pista de compatibilidade, não uma prova de autoria. Um exercício mais completo acrescentaria a informação sobre quais dependências são realmente utilizadas e em que condições.

Essa limitação torna o laboratório mais útil: ele permite discutir falsos positivos. Se todos os programas de um sistema utilizam a mesma biblioteca, sua presença tem pouco poder de discriminação. Uma dependência específica, combinada com inicialização compatível e código semelhante, oferece um conjunto de evidências mais forte.

Como documentar uma comparação que outra equipe possa revisar

Comece pela proveniência dos arquivos e pela preservação de seus hashes. Registre ferramenta e versão utilizadas na comparação. Explique o que foi normalizado e o que permaneceu intacto, porque remover diferenças de compilação pode ajudar a análise, mas também altera o objeto observado.

Separe resultados diretos de interpretação. Uma referência de módulo encontrada é um resultado; dizer que ela integra determinada plataforma é uma interpretação apoiada em outras relações. Anote caminhos não analisados, trechos incompletos e hipóteses alternativas. Essa organização permite uma revisão independente sem exigir confiança cega no primeiro analista.

Por fim, preserve conclusões proporcionais à evidência. O relatório pode demonstrar que duas implementações compartilham uma arquitetura sem afirmar qual agência operou uma máquina. Essa precisão aumenta o valor da análise para resposta a incidentes, inteligência de ameaças e engenharia reversa.

Perguntas frequentes sobre QWERTY e Regin

QWERTY e Regin têm hashes iguais?

A relação estudada não depende de igualdade entre arquivos completos. A pesquisa compara código, referências e integração de módulos, aspectos que podem existir entre binários diferentes.

Esse é um vazamento confirmado do MI6?

Não. O caso está relacionado ao acervo Snowden, ao contexto Five Eyes e às atribuições discutidas sobre Regin. MI6 e GCHQ não são intercambiáveis.

Qual é a lição técnica mais interessante?

Investigar dependências e caminhos de carregamento, além de nomes e hashes. Uma relação operacional entre componentes pode revelar a plataforma que torna aquele código utilizável, e essa relação precisa ser demonstrada separadamente da atribuição política.

Escrito por

Daniel Felipe é criador do NetCatTest e produz conteúdos sobre cibersegurança, privacidade digital, OSINT, laboratórios autorizados e ferramentas para estudo técnico responsável.

Compartilhar

Enviar este artigo