Lendo as últimas notícias sobre a substituição bem-sucedida pelos invasores do código de um grande projeto, surge naturalmente a pergunta: como isso é possível se o código foi assinado!? Ignorar as regras de segurança na criptosfera é um oxímoro e, ao mesmo tempo, um fato, portanto, para que este artigo não se transforme em portador de um homem mentiroso, selecionei para análise não iniciantes, mas criptomoedas no topo da classificação CoinMarketCap. E você adivinhou, não em vão.
Vamos ver como estão as coisas com o uso de assinaturas digitais na fortaleza da revolução das fintech.
Motivação
Como você provavelmente sabe, hacks de sites oficiais e perfis do github de projetos de criptografia ocorrem com bastante frequência por meio da qual o código malicioso se espalha. Às vezes, os endereços da carteira são substituídos; em outros casos, o software distribuído é substituído. Os métodos de hacking diferem: há um ataque em um dos nós da rede responsáveis pela entrega dos dados e uma substituição oculta de um fragmento de dados é realizada. Detectar uma paródia é visualmente bastante difícil, que é o que os cibercriminosos usam. Existem várias maneiras de se defender contra esse ataque. A assinatura PGP é considerada padrão: publicação de somas de verificação assinadas. Ao fazer isso, a chave PGP deve ser adequadamente distribuída. Por exemplo, publicado em vários recursos (de preferência mais de dois).
Análise
Para análise, usei recursos oficiais, links para os quais recebi de várias fontes. Então ele começou a coletar informações movendo-se de diferentes direções. A análise levou em consideração a publicação do software do usuário e do SDK. Para análise, tokens ou projetos baseados em contratos inteligentes não foram utilizados, apenas criptomoedas.
Resultados
Projeto | Resultado |
---|
Núcleo de Bitcoin | publicação de chave e código em uma fonte |
Ethereum geth | publicação de chave e código em uma fonte |
Ethereum SDK | sem assinatura |
Paridade | sem assinatura |
Xrp | - |
Litecoin | publicação de chave e código em uma fonte |
Cardano daedalus | sem assinatura |
Cardano | sem assinatura |
Stellar | chaves não publicadas |
Stellar sdk | lançamentos não assinados, assinatura com chaves não publicadas |
IOTA IRI | sem assinatura |
Carteira IOTA | sem assinatura |
Tron core | sem assinatura |
Carteira Tron | sem assinatura |
Neo gui | sem assinatura |
Neo cli | sem assinatura |
Monero | publicação de chave e código em uma fonte |
Núcleo do traço | publicação de chave e código em uma fonte |
Dash Electrum | sem assinatura |
NEM Nano Wallet | sem assinatura |
Nem nis | chaves não publicadas |
Ethereum classic | * |
Qtum core | sem assinatura |
Zcash | liberações não assinadas |
(*) O Ethereum Classic usa software de terceiros e não publica informações para confirmar o lançamento.
Erros comuns
- Falta de assinatura como tal ( 10/15 ):
Pode não ser assinado como código executável, mas bibliotecas não assinadas e software de aplicativo, como carteiras, são mais comuns. - Assinatura por chaves não publicadas ( 2/15 ):
O código é assinado por vários desenvolvedores cujas chaves não são publicadas em nenhum lugar e, portanto, essas assinaturas são inúteis. - Publicação de chaves e código em uma fonte ( 5/15 ).
Um erro muito comum é a publicação de chaves por meio de um link em um recurso de terceiros ou a criação de uma única fonte confiável na forma de um site. Assim, para substituir os dados, basta invadir apenas o site.
Erros atípicos
Monero oferece olhar as chaves na pasta com os dados assinados. Em essência, esse é um erro de distribuição importante, que leva a uma completa perda de confiabilidade.
Nota!
- O Litecoin publica chaves, inclusive como um link para o recurso confiável pgp.mit.edu.
- Ethereum e Zcash publicam listas de chaves detalhadas:
- Ethereum publica chaves de serviço de IC.
Razões
- Falta de uma estratégia unificada . Atualmente, não há instruções que atendam à maioria dos desenvolvedores para resolver os problemas de garantir a entrega garantida de código em diferentes plataformas. Uma grande proporção de performances amadoras.
- Obsolescência . Se você observar os principais sites da tecnologia PGP, terá a impressão de que a tecnologia está esquecida:
- Falta de ferramentas abrangentes para publicação e verificação de assinaturas . Mesmo se houver um desejo, o usuário encontrará sérios obstáculos no caminho - muitos usuários não sabem como e não estão prontos para usar o console obrigatório para verificar a assinatura. Mesmo para desenvolvedores, usar uma assinatura não é uma tarefa trivial.
- Protocolo de troca de chaves descontinuado . No século 21, quando os desenvolvedores quase nunca se encontram pessoalmente, organizar uma troca de chaves em uma base p2p não se torna muito conveniente e são necessárias ferramentas para uma distribuição e revogação mais rápidas de assinaturas.
Dicas
As melhores dicas nessa situação:
- Chaves separadas por tarefa (isso ajudará a evitar o vazamento de uma chave mestra ou o uso de uma chave de desenvolvedor para assinar um release).
- Duplique informações em várias fontes, por exemplo, no site oficial e no Github (invadir dois recursos ao mesmo tempo é mais difícil que um).
- Gere um URL legível por humanos (eles são mais fáceis de lembrar e verificar).
Manual de instruções
Se você ainda não estiver usando chaves PGP, recomendo que você inclua a verificação de assinatura no fluxo de trabalho, mesmo se você não estiver desenvolvendo projetos financeiros, é melhor trazer essa habilidade para o automatismo antes que você precise. O suficiente da força de uma hora é suficiente para começar, mas o prazer recebido então não pode ser medido.
Usando GPG com Git- Faça o download do software de gerenciamento de chaves:
- Linux (nenhuma instalação é necessária, use
gpg2
). - Ferramentas MacG GPG .
- Windows GPG4Win .
- Gere uma chave:
> gpg2 --gen-key
- Obtemos a impressão digital da chave:
> gpg2 --fingerprint user@localhost gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 2 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 2u gpg: next trustdb check due at 2020-07-01 pub rsa2048 2018-07-02 [SC] [expires: 2020-07-01] E5F1 2C73 045F 1E85 302D A9D5 269E 7C5E B852 68BB uid [ultimate] User <user@localhost> sub rsa2048 2018-07-02 [E] [expires: 2020-07-01]
- Adicione a chave ao git (consulte stackoverflow ):
> git config user.signingkey E5F12C73
- Assinamos confirmações com a adição da opção -S:
> git commit -S -m 'Signed commit'
Exporte a chave:
> gpg2 --armor --export user@localhost -----BEGIN PGP PUBLIC KEY BLOCK----- mQENBFs6VDsBCADzd5F4jaJr7Dzp11+h5CmnRNHGSTWOMQe+TSXljR351BCF9hS6 VrIizaPCVkLW/ATsqdf6vZEApvbQplwHecFPwMpFhusTOILk7lsuXm8w5CscqgBo KiZdSBa9bpWmFrSsPgD8/2VMlQdh+3uChOKapsLo7cHKXNuWX8b1L30twNwgavMc Sel/3clO7Bwp9cFftyktsM/HtSUu1oaE//dibS60HzwmscPHsIIoYsfUSCEOj08f DwK2vLbPilYKyE7fONJpXCSPk5pfDnNxzdFWylNBTQL8benhCtSyfabbtHmeywe+ VWfRAGf/BRjjb7meAMX5vO6qh1l4FfHVo7irABEBAAG0FVJ1bWtpbiA8c3BhbUBy dW1rLmluPokBVAQTAQgAPhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsD BQkDwmcABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJECaefF64Umi7e4kIALs2 0wbQ0g5557cIbN/eXeK+DsyZFyp3D95RoOnLgWiDknVBluRyPY1QFkjKgNNepMNr 7TM1eNev1CcSDLkuUxlLMrDH9AsAIVWFl7v1+/npJuHkazylU2DgssWICF0yKgWZ tzOQUEDwX7xwIJ3g5v44Lymq0hPi56FVv+rq15hkNsqIOyjDQNVGROUURyO/+vUP khOa2ryjWCpdBzoRNxSyVMlyoABLHwTfXDkCFHV9T7bOa/o0GqILOZ7wCBN9tT5C 38ellwu/HTCtmzZsWvl3a6g8JcunB9yV3RZFQgUDvLEjiVoY2qqn/SWgcl6QR2Ro aEwTKk/p3PU1Foz7mEC5AQ0EWzpUOwEIAPbKGT/xzJ9JvXhMyoOGQZNWkqyXKtV4 zVdfdjxkWMrsMD/C2K1CQ5HPafTM9G/kATGCAmoFPCdLwrc9QqOw3H8PNxnph3Ca irvp0ICj6KDiuCCuptJYICzllKriyLhUDyFkb7GPpRgHpKJZMVCkRbDEau3jcJEx jsdUnjf3gDpEnkuV1pwSxGFxTV3vHNQBqGbFG8mjVkfZSnB++e+tyKPhC5X0QFue K2AlHbnj0/uXZ9wYfRTOJsbW6myR0k1edo7Y5P93fhpW49wwaMTe2Q9p+m6zRguf 8vC9sGUB/eGD9+6OwtIZJ6ZlUa8/MYUBr9er/z+hl7ApdpibChCb8lUAEQEAAYkB PAQYAQgAJhYhBOXxLHMEXx6FMC2p1SaefF64Umi7BQJbOlQ7AhsMBQkDwmcAAAoJ ECaefF64Umi7e3UIAO9ixyXaKmsfWVB11tYPHP+9Xo2s0RRanNMyqAcp1se3jQBZ Z7gfr7DBFBFPU0KeOibWXysMz54hXImxDgYQPKFznzKB5463DiZt8pYjxdphX4/j m6ccw1GnpImRJHpu3mMPSItd/QDqEl87KqSw+IojaLDid3QeL0uRzi2k5/Jwz6ru QMCwdKIMBDPw936YOsfHjQx1RTY9NC59cW1i0lU813By1J80hd24aIJH5vVyYI/I suz153mZUZ+dmN0F6wfnuqNzeCfJRoHKh45ABDD3cRQ2kE76UQ4Kr0xb0G512yUO WJFT8ff3EWn1FulR7bmprA4HHACyx/otL7P777E= =zi5u -----END PGP PUBLIC KEY BLOCK-----
- Copiamos o resultado e o adicionamos às chaves confiáveis na interface do Github, Gitlab ou Bitbucket.
Conclusão
Hoje, a infraestrutura de entrega de código sofre de doenças na infância: fragmentação, falta de práticas estabelecidas, software que não atende às realidades e desenvolvedores de projetos ainda grandes, sob o escrutínio de milhares de olhos, conseguem cometer erros simples quando se trata de segurança. Portanto, confie, mas verifique% username%!