Se um sistema está em um caminho crítico nesse nível, ele não deveria ter passado por uma pipeline de CI adequada
Não sou extremamente rigoroso com testes automatizados, mas, para um sistema com essa importância, o controle de qualidade deveria ser excepcionalmente bom
Não se deveria fazer deploy em produção sem testes de integração para todos os ambientes que a empresa afirma suportar, e não faz sentido uma empresa desse porte e importância nem sequer ter servidores de teste de staging ou desenvolvimento que validem todo o conjunto de imagens suportadas
Há informações demais faltando e suposições demais. Por exemplo, pode ser que o arquivo correto existisse, e o ponto de falha tenha sido o código que faz upload dos artefatos validados para a CDN
Nesse caso, o problema poderia aparecer só depois de passar por muitos checks antes do deploy. Eu não concluiria apressadamente que eles não testam de jeito nenhum a exportação para Windows
Quem disse que esse ambiente não existe? Quem disse que todos esses testes não passaram? No momento há suposições demais
Há alguns anos, quando entrevistei com uma equipe responsável por uma linguagem que roda no kernel, lembro que disseram que o CI executava 20 mil a 40 mil combinações de máquinas/OS e configurações
Imagino que Windows básico certamente estivesse entre elas
Se o critério de aceitação era “se houver uma assinatura de dados inválida, impedir a máquina de iniciar”, isso poderia significar um deploy ou rede corrompidos, então não iniciar talvez tenha sido, retrospectivamente, o comportamento correto
Também é possível que o design fosse que a máquina não deveria inicializar completamente até que um arquivo com assinatura válida fosse baixado
É difícil acreditar que um arquivo preenchido inteiramente com caracteres nulos fosse o artefato de uma pipeline de build automatizada
Eu apostaria que algo foi compilado e passou nos testes de CI, e então o sistema quebrou em uma etapa posterior que copiava o arquivo para prepará-lo para distribuição. Mas, por enquanto, tudo é especulação
Sobre isso, não parece coincidência que duas das maiores catástrofes tecnológicas da história (CrowdStrike e o hack da SolarWinds de alguns anos atrás) tenham vindo de software de segurança que saiu do controle
Acho bem provável que pessoas com perfil hacker que querem criar empresas de software de segurança sejam justamente as menos interessadas em implementar as partes entediantes de uma cultura orientada a processos. No caso da SolarWinds, ficou claro que a cultura interna de segurança da empresa era terrível, e neste caso também parece provável que a causa raiz acabe sendo um processo de deploy rápido e frouxo
Não concordo. Empresas de segurança sofrem da síndrome de “grandes demais para falhar”, e o dinheiro entra fácil porque os clientes querem marcar checkboxes Segurança não é um produto que você compra, é uma cultura, e precisa ser implantada desde o primeiro dia com esforço ativo e trabalho duro. Não existe produto no mercado que forneça segurança; existem apenas produtos para culpar quando algo dá errado
A CrowdStrike foi originalmente fundada e sediada em Irvine, Califórnia
No início, a maior parte da organização de engenharia era remota/home office ou ficava em Irvine; conforme cresceu, a empresa acrescentou um escritório em Sunnyvale e, mais tarde, mudou oficialmente a sede para Austin, TX
Nos últimos anos, ela também expandiu operações de engenharia no exterior, o que possivelmente incluiu offshoring
É uma hipótese separada, mas compatível. Software de segurança em geral precisa de permissões de acesso amplas e fortes
Por isso, quando há um erro ou comprometimento, o impacto tende a ser muito maior
O histórico do setor é bem peculiar. Só de cabeça, há CrowdStrike, SolarWinds, Kaspersky e https://en.wikipedia.org/wiki/John_McAfee
Deve haver outros de que estou esquecendo. Talvez seja uma estrutura parecida com o problema de autosseleção que aflige a indústria legal de cannabis
Software de segurança precisa de acesso em nível de kernel. Se algo quebra, isso vira loop de inicialização e crashes
A maioria dos outros softwares não precisa de acesso em um nível tão baixo, não leva o sistema inteiro junto quando trava e também permite upgrades automáticos rápidos
Se for para encontrar um lado positivo neste desastre, há uma esperança muito pequena de que as organizações repensem o acesso em nível de kernel
Não dá para presumir que qualquer empresa de games tenha competência suficiente para usar software anticheat em nível de kernel
A menos que a Microsoft faça uma repressão muito forte, não acho que software de jogos será afetado
Ainda assim, como há empresas de games sob a Microsoft, é bem provável que continuem oferecendo hooks para jogos. Organizações corporativas não vão nem piscar diante das práticas de anticheat da Riot, porque não instalam LoL em máquinas de trabalho
O adversário a combater são os compradores de cheats que dizem “driver em nível de kernel aleatório? Sem problema!”
Acho que anticheat deveria ser, em sua maior parte, baseado em comportamento do lado do servidor
No macOS, pelo que sei, pelo menos o acesso ao kernel não é possível, o que já é algum alívio
Isto parece um arquivo de teste que alguém de QA tentaria em segundo ou terceiro lugar, logo depois de um arquivo vazio e de um arquivo minimamente válido. O nível de incompetência generalizada revelado aqui é chocante
Em um mercado competitivo em que se impressiona executivos não técnicos com apresentações, não surpreende que empresas tecnicamente competentes não tenham vantagem sobre empresas incompetentes
Li recentemente a sentença do caso Craig Wright https://www.judiciary.uk/judgments/copa-v-wright/; ele, que alegava falsamente ser Satoshi Nakamoto, não tinha competência técnica básica nem mesmo na área em que dizia ser especialista mundial. No banco das testemunhas, nem sabia o que significava ‘unsigned’, e parece ter enganado pessoas desde os anos 90 fazendo trabalho de segurança para grandes empresas, com jargão técnico, demos manipuladas e documentos falsificados
George Kurtz, fundador e CEO da CrowdStrike, era CTO da McAfee 14 anos atrás, quando a empresa fez quase a mesma coisa: https://old.reddit.com/r/sysadmin/comments/1e78l0g/can_crowd...https://en.wikipedia.org/wiki/George_Kurtz
A própria CrowdStrike causou o mesmo problema no Debian stable há 3 meses: https://old.reddit.com/r/debian/comments/1c8db7l/linuximage6...
É terrível que as regras de conformidade PCI tenham empurrado a CrowdStrike e antivírus para praticamente todos os cantos da infraestrutura de TI atual
É irônico também que a conformidade tenha criado a maior vulnerabilidade como um enorme ponto único de falha
Mas regulamentação governamental é isso aí
O pior deste incidente é que atores estatais agora obtiveram um roteiro claro para um ataque de infraestrutura em larga escala
É engraçado ver as pessoas nos links irritadas por chamarem isso de “falha da Microsoft” e dizendo que “a culpa é da CrowdStrike”
Mas isso também é uma falha da Microsoft. Mais amplamente, é mais uma falha do setor
Quantas vezes algo assim ainda precisa se repetir para que aconteçam reformas no setor que nos permitam construir sistemas seguros e confiáveis, algo que estudamos há 70 anos? Parece 1988 se repetindo de novo
É bem irônico que Craig Wright tenha proposto não deixar certificados digitais serem emitidos por um único computador ou cluster, mas colocá-los em uma blockchain
Quando estão em um único lugar, viram alvo, mas uma rede peer-to-peer é muito mais resiliente a ataques
Se este problema tivesse relação com os certificados raiz de todos os computadores sendo substituídos pela CrowdStrike, certificados registrados em blockchain poderiam ser uma solução. Não sou especialista em criptografia, mas parece plausível
Além disso, foi só quando ouvi a explicação de Craig Wright sobre blockchain que o white paper do Bitcoin começou a fazer bastante sentido para mim. Ele pode não ser o melhor programador, mas matemáticos não são inúteis em segurança, certo?
Não quero soar conspiratório, mas ainda parece cedo para descartar má-fé apenas com a navalha de Hanlon
A maioria dos erros não é absurda assim em escala global. Parece o maior erro até agora, algo como o Y2K que não chegou a acontecer
A CrowdStrike tem um comportamento em que, se um arquivo sendo transferido por um socket de rede corresponder a uma assinatura de malware, ela substitui esse arquivo por zeros
Se esses arquivos são os próprios arquivos de assinatura de malware, não surpreende que haja correspondência
Isso bate com o que ouvi de um amigo que conhece alguém que trabalha na CrowdStrike sobre este bug
O bug ficou latente por anos dentro do driver de kernel e foi disparado quando dados defeituosos entraram. Esses dados foram adicionados em uma etapa de pós-processamento de uma atualização de configuração, depois dos testes, mas antes de serem copiados para os servidores de atualização de onde os clientes os buscariam
A configuração de testes da CrowdStrike parece ter sido adequada para os dados de configuração em si, mas não pegou o problema antes de ir para produção porque estavam testando a coisa errada
Se publicarem uma análise pós-incidente, espero que reconheçam esse problema e expliquem o que farão para evitar outra falha de processo com impacto global
Finalmente uma explicação que faz algum sentido
Qualquer administrador de sistemas competente provavelmente já deve estar desativando atualizações automáticas de Greenland a New Zealand, bloqueando por firewall e planejando remover este produto do parque de servidores o mais rápido possível
O orçamento de marketing dos concorrentes deve aumentar neste trimestre
A CrowdStrike precisa passar por algo muito maior do que simplesmente “reconhecer”
Mesmo que os contratos tenham “limitação de responsabilidade”, espero que haja investigações sérias, multas e responsabilização legal
O tamanho do dano causado por este incidente é difícil até de calcular, e é ainda maior se incluir o tempo desperdiçado por empresas e pessoas comuns. Por exemplo, quem estava tentando pegar voos
Esse tipo de negligência precisa necessariamente ter um preço
Eu achava que o Windows exigia assinatura para todos os módulos de kernel
Se não foi só um vazamento de teste, mas várias cópias corrompidas, fica a dúvida de como isso passou pela verificação de assinatura e pôde ser carregado pelo kernel
Isso pode não ser o conteúdo original do arquivo, mas o resultado de uma resposta manual para tentar interromper os danos
Alguém pode ter esperado que sobrescrever o arquivo problemático por um arquivo do mesmo tamanho composto só de zeros tornaria a atualização inofensiva
Ou, seguindo a hipótese de que “o QA foi contornado por causa de uma vulnerabilidade crítica”, interromper a distribuição do patch real pode ter sido uma tentativa de reduzir o acesso aos dados reais e atrasar a engenharia reversa da vulnerabilidade
Segundo uma explicação publicada no fórum de tecnologia do 4chan, o problema teve duas etapas
Um driver de kernel assinado chamado CSAgent.sys fazia o parsing dos arquivos de definição de vírus da CrowdStrike e não tratava corretamente os casos em que um arquivo de definição malformado causava acesso inválido à memória
Havia um driver de kernel com bomba-relógio rodando por meses sem problemas junto com arquivos de definição normais, até que, em algum momento, o servidor web ou CDN que fornecia os arquivos de definição começou a entregar conteúdo incorreto, como arquivos vazios, bytes aleatórios ou arquivos de outro software
A explicação é que o cliente de atualização baixava isso para baixo de C:\Windows\System32\drivers, e o CSAgent.sys relia e fazia o parsing, caindo em uma tela azul e em um loop de reinicialização com PAGE_FAULT_IN_NONPAGED_AREA
Dizem que, ao comparar CSAgent.sys_18511.sys e CSAgent.sys_18513.sys, aparecem indícios de que mudaram a verificação de tamanho e o tamanho do buffer para impedir que arquivos de definição incorretos causem falhas no futuro
Parece que algum recurso de proteção contra vírus no servidor que fornecia os arquivos de definição bloqueou a leitura do disco e, em vez de gerar erro, entregou dados de saída zerados
Se algum pacote antivírus realmente tiver sido a causa, seria bem irônico
Se isso aconteceu várias vezes, pode ter sido um ataque hacker mirando um driver de kernel mal escrito
Especialmente no contexto deste momento eleitoral e de ser uma empresa de que Trump gosta, também poderia ter sido uma demonstração de força
Já houve, no passado, um caso em que software de segurança transformou um arquivo inteiro em zeros e quebrou a compilação de software
Não estou dizendo que foi isso agora, mas também não seria surpreendente
Basicamente, no Windows, o linker não conseguia abrir o arquivo porque outro processo o estava bloqueando enquanto fazia a varredura. Só que, em vez de gerar erro, ele transformava em zeros o código-objeto que deveria ser linkado
As pessoas não conseguiam encontrar a causa até abrirem um debugger e só então confirmarem que grandes blocos do código-objeto tinham sido substituídos por zeros
Já passei vezes demais pelo problema de o Visual Studio não conseguir gravar em um arquivo que acabou de compilar
O antivírus pegava o binário recém-criado justamente no momento em que o mt.exe precisava escrever nele, então eu até criei um wrapper para o mt.exe com novas tentativas. Builds de CI também falhavam aleatoriamente por causa disso
1 comentários
Opiniões do Hacker News
Se um sistema está em um caminho crítico nesse nível, ele não deveria ter passado por uma pipeline de CI adequada
Não sou extremamente rigoroso com testes automatizados, mas, para um sistema com essa importância, o controle de qualidade deveria ser excepcionalmente bom
Não se deveria fazer deploy em produção sem testes de integração para todos os ambientes que a empresa afirma suportar, e não faz sentido uma empresa desse porte e importância nem sequer ter servidores de teste de staging ou desenvolvimento que validem todo o conjunto de imagens suportadas
Nesse caso, o problema poderia aparecer só depois de passar por muitos checks antes do deploy. Eu não concluiria apressadamente que eles não testam de jeito nenhum a exportação para Windows
Imagino que Windows básico certamente estivesse entre elas
Também é possível que o design fosse que a máquina não deveria inicializar completamente até que um arquivo com assinatura válida fosse baixado
Eu apostaria que algo foi compilado e passou nos testes de CI, e então o sistema quebrou em uma etapa posterior que copiava o arquivo para prepará-lo para distribuição. Mas, por enquanto, tudo é especulação
Sobre isso, não parece coincidência que duas das maiores catástrofes tecnológicas da história (CrowdStrike e o hack da SolarWinds de alguns anos atrás) tenham vindo de software de segurança que saiu do controle
Acho bem provável que pessoas com perfil hacker que querem criar empresas de software de segurança sejam justamente as menos interessadas em implementar as partes entediantes de uma cultura orientada a processos. No caso da SolarWinds, ficou claro que a cultura interna de segurança da empresa era terrível, e neste caso também parece provável que a causa raiz acabe sendo um processo de deploy rápido e frouxo
Segurança não é um produto que você compra, é uma cultura, e precisa ser implantada desde o primeiro dia com esforço ativo e trabalho duro. Não existe produto no mercado que forneça segurança; existem apenas produtos para culpar quando algo dá errado
No início, a maior parte da organização de engenharia era remota/home office ou ficava em Irvine; conforme cresceu, a empresa acrescentou um escritório em Sunnyvale e, mais tarde, mudou oficialmente a sede para Austin, TX
Nos últimos anos, ela também expandiu operações de engenharia no exterior, o que possivelmente incluiu offshoring
Por isso, quando há um erro ou comprometimento, o impacto tende a ser muito maior
Deve haver outros de que estou esquecendo. Talvez seja uma estrutura parecida com o problema de autosseleção que aflige a indústria legal de cannabis
A maioria dos outros softwares não precisa de acesso em um nível tão baixo, não leva o sistema inteiro junto quando trava e também permite upgrades automáticos rápidos
Se for para encontrar um lado positivo neste desastre, há uma esperança muito pequena de que as organizações repensem o acesso em nível de kernel
Não dá para presumir que qualquer empresa de games tenha competência suficiente para usar software anticheat em nível de kernel
Ainda assim, como há empresas de games sob a Microsoft, é bem provável que continuem oferecendo hooks para jogos. Organizações corporativas não vão nem piscar diante das práticas de anticheat da Riot, porque não instalam LoL em máquinas de trabalho
Isto parece um arquivo de teste que alguém de QA tentaria em segundo ou terceiro lugar, logo depois de um arquivo vazio e de um arquivo minimamente válido. O nível de incompetência generalizada revelado aqui é chocante
Em um mercado competitivo em que se impressiona executivos não técnicos com apresentações, não surpreende que empresas tecnicamente competentes não tenham vantagem sobre empresas incompetentes
Li recentemente a sentença do caso Craig Wright https://www.judiciary.uk/judgments/copa-v-wright/; ele, que alegava falsamente ser Satoshi Nakamoto, não tinha competência técnica básica nem mesmo na área em que dizia ser especialista mundial. No banco das testemunhas, nem sabia o que significava ‘unsigned’, e parece ter enganado pessoas desde os anos 90 fazendo trabalho de segurança para grandes empresas, com jargão técnico, demos manipuladas e documentos falsificados
George Kurtz, fundador e CEO da CrowdStrike, era CTO da McAfee 14 anos atrás, quando a empresa fez quase a mesma coisa: https://old.reddit.com/r/sysadmin/comments/1e78l0g/can_crowd... https://en.wikipedia.org/wiki/George_Kurtz
A própria CrowdStrike causou o mesmo problema no Debian stable há 3 meses: https://old.reddit.com/r/debian/comments/1c8db7l/linuximage6...
É terrível que as regras de conformidade PCI tenham empurrado a CrowdStrike e antivírus para praticamente todos os cantos da infraestrutura de TI atual
Mas regulamentação governamental é isso aí
Mas isso também é uma falha da Microsoft. Mais amplamente, é mais uma falha do setor
Quantas vezes algo assim ainda precisa se repetir para que aconteçam reformas no setor que nos permitam construir sistemas seguros e confiáveis, algo que estudamos há 70 anos? Parece 1988 se repetindo de novo
Quando estão em um único lugar, viram alvo, mas uma rede peer-to-peer é muito mais resiliente a ataques
Se este problema tivesse relação com os certificados raiz de todos os computadores sendo substituídos pela CrowdStrike, certificados registrados em blockchain poderiam ser uma solução. Não sou especialista em criptografia, mas parece plausível
Além disso, foi só quando ouvi a explicação de Craig Wright sobre blockchain que o white paper do Bitcoin começou a fazer bastante sentido para mim. Ele pode não ser o melhor programador, mas matemáticos não são inúteis em segurança, certo?
A maioria dos erros não é absurda assim em escala global. Parece o maior erro até agora, algo como o Y2K que não chegou a acontecer
Este texto está errado, e sinalizei porque não há outra forma de tirá-lo da front page
O fato de terem encontrado em computadores quebrados um arquivo composto só de zeros não significa que esse arquivo tenha sido distribuído desde o início só com zeros
https://x.com/craiu/status/1814339965347610863
https://x.com/cyb3rops/status/1814329155833516492
Se esses arquivos são os próprios arquivos de assinatura de malware, não surpreende que haja correspondência
Isso bate com o que ouvi de um amigo que conhece alguém que trabalha na CrowdStrike sobre este bug
O bug ficou latente por anos dentro do driver de kernel e foi disparado quando dados defeituosos entraram. Esses dados foram adicionados em uma etapa de pós-processamento de uma atualização de configuração, depois dos testes, mas antes de serem copiados para os servidores de atualização de onde os clientes os buscariam
A configuração de testes da CrowdStrike parece ter sido adequada para os dados de configuração em si, mas não pegou o problema antes de ir para produção porque estavam testando a coisa errada
Se publicarem uma análise pós-incidente, espero que reconheçam esse problema e expliquem o que farão para evitar outra falha de processo com impacto global
Qualquer administrador de sistemas competente provavelmente já deve estar desativando atualizações automáticas de Greenland a New Zealand, bloqueando por firewall e planejando remover este produto do parque de servidores o mais rápido possível
O orçamento de marketing dos concorrentes deve aumentar neste trimestre
Mesmo que os contratos tenham “limitação de responsabilidade”, espero que haja investigações sérias, multas e responsabilização legal
O tamanho do dano causado por este incidente é difícil até de calcular, e é ainda maior se incluir o tempo desperdiçado por empresas e pessoas comuns. Por exemplo, quem estava tentando pegar voos
Esse tipo de negligência precisa necessariamente ter um preço
Há uma alegação no Mastodon de que os arquivos recebidos por Kevin Beaumont variam de cliente para cliente
https://cyberplace.social/@GossiTheDog/112812454405913406
Basta rolar um pouco para baixo
Se não foi só um vazamento de teste, mas várias cópias corrompidas, fica a dúvida de como isso passou pela verificação de assinatura e pôde ser carregado pelo kernel
Isso pode não ser o conteúdo original do arquivo, mas o resultado de uma resposta manual para tentar interromper os danos
Alguém pode ter esperado que sobrescrever o arquivo problemático por um arquivo do mesmo tamanho composto só de zeros tornaria a atualização inofensiva
Ou, seguindo a hipótese de que “o QA foi contornado por causa de uma vulnerabilidade crítica”, interromper a distribuição do patch real pode ter sido uma tentativa de reduzir o acesso aos dados reais e atrasar a engenharia reversa da vulnerabilidade
Segundo uma explicação publicada no fórum de tecnologia do 4chan, o problema teve duas etapas
Um driver de kernel assinado chamado CSAgent.sys fazia o parsing dos arquivos de definição de vírus da CrowdStrike e não tratava corretamente os casos em que um arquivo de definição malformado causava acesso inválido à memória
Havia um driver de kernel com bomba-relógio rodando por meses sem problemas junto com arquivos de definição normais, até que, em algum momento, o servidor web ou CDN que fornecia os arquivos de definição começou a entregar conteúdo incorreto, como arquivos vazios, bytes aleatórios ou arquivos de outro software
A explicação é que o cliente de atualização baixava isso para baixo de C:\Windows\System32\drivers, e o CSAgent.sys relia e fazia o parsing, caindo em uma tela azul e em um loop de reinicialização com PAGE_FAULT_IN_NONPAGED_AREA
Dizem que, ao comparar CSAgent.sys_18511.sys e CSAgent.sys_18513.sys, aparecem indícios de que mudaram a verificação de tamanho e o tamanho do buffer para impedir que arquivos de definição incorretos causem falhas no futuro
Se algum pacote antivírus realmente tiver sido a causa, seria bem irônico
Especialmente no contexto deste momento eleitoral e de ser uma empresa de que Trump gosta, também poderia ter sido uma demonstração de força
Já houve, no passado, um caso em que software de segurança transformou um arquivo inteiro em zeros e quebrou a compilação de software
Não estou dizendo que foi isso agora, mas também não seria surpreendente
Basicamente, no Windows, o linker não conseguia abrir o arquivo porque outro processo o estava bloqueando enquanto fazia a varredura. Só que, em vez de gerar erro, ele transformava em zeros o código-objeto que deveria ser linkado
As pessoas não conseguiam encontrar a causa até abrirem um debugger e só então confirmarem que grandes blocos do código-objeto tinham sido substituídos por zeros
O antivírus pegava o binário recém-criado justamente no momento em que o mt.exe precisava escrever nele, então eu até criei um wrapper para o mt.exe com novas tentativas. Builds de CI também falhavam aleatoriamente por causa disso