Al leer las últimas noticias sobre el reemplazo exitoso por parte de los atacantes del código de un gran proyecto, surge naturalmente la pregunta: ¿cómo es esto posible si el código fue firmado? Ignorar las reglas de seguridad en la criptosfera es un oxímoron y, al mismo tiempo, un hecho, por lo tanto, para que este artículo no se convierta en portador de un hombre mentiroso, seleccioné para el análisis no a los novatos, sino a las criptomonedas de la parte superior de la calificación CoinMarketCap. Y, lo has adivinado, no en vano.
Veamos cómo están las cosas con el uso de firmas digitales en la fortaleza de la revolución fintech.
Motivación
Como es muy probable que sepa, los hacks de sitios oficiales y los perfiles de github de proyectos de cifrado ocurren con bastante frecuencia a través de los cuales se propaga código malicioso. A veces se sustituyen las direcciones de billetera, en otros casos se reemplaza el software distribuido. Los métodos de pirateo difieren: hay un ataque en uno de los nodos de la red responsables de la entrega de datos y se realiza una sustitución oculta de un fragmento de datos. Detectar una parodia es visualmente bastante difícil, que es lo que usan los ciberdelincuentes. Hay varias formas de defenderse contra tal ataque. La firma PGP se considera estándar: publicación de sumas de verificación firmadas. Al hacerlo, la clave PGP se debe distribuir correctamente. Por ejemplo, publicado en varios recursos (preferiblemente más de dos).
Análisis
Para el análisis, utilicé recursos oficiales, enlaces a los que recibí de varias fuentes. Luego comenzó a recopilar información moviéndose desde diferentes direcciones. El análisis tuvo en cuenta la publicación tanto del software del usuario como del SDK. Para el análisis, no se tomaron tokens o proyectos basados en contratos inteligentes, solo criptomonedas.
Resultados
Proyecto | Resultado |
---|
Núcleo de Bitcoin | publicación de clave y código en una fuente |
Ethereum geth | publicación de clave y código en una fuente |
Ethereum SDK | sin firma |
Paridad | sin firma |
Xrp | - |
Litecoin | publicación de clave y código en una fuente |
Cardano daedalus | sin firma |
Cardano | sin firma |
Estelar | claves inéditas |
SDK estelar | lanzamientos sin firmar, firma con claves inéditas |
IOTA IRI | sin firma |
Billetera IOTA | sin firma |
Tron core | sin firma |
Billetera Tron | sin firma |
Neo gui | sin firma |
Neo cli | sin firma |
Monero | publicación de clave y código en una fuente |
Núcleo de tablero | publicación de clave y código en una fuente |
Dash Electrum | sin firma |
Monedero NEM Nano | sin firma |
Nem nis | claves inéditas |
Ethereum clásico | * * |
Qtum core | sin firma |
Zcash | lanzamientos sin firmar |
(*) Ethereum Classic utiliza software de terceros y no publica información para confirmar el lanzamiento.
Errores comunes
- Falta de firma como tal ( 15/10 ):
Puede resultar sin firmar como código ejecutable, pero las bibliotecas sin firmar y el software de aplicación como billeteras son más comunes. - Firma por claves no publicadas ( 2/15 ):
El código está firmado por varios desarrolladores cuyas claves no se publican en ningún lado y, en consecuencia, tales firmas son inútiles. - Publicación de claves y código en una fuente ( 15/5 ).
Un error muy común es la publicación de claves a través de un enlace en un recurso de terceros, o la creación de una única fuente confiable en forma de sitio. Por lo tanto, para reemplazar los datos, es suficiente hackear solo el sitio.
Errores atípicos
Monero ofrece mirar las claves en la carpeta con los datos firmados. En esencia, este es un error de distribución clave, que conduce a una pérdida completa de confiabilidad.
Nota!
- Litecoin publica claves, incluso como un enlace al recurso de confianza pgp.mit.edu.
- Ethereum y Zcash publican listas clave detalladas:
- Ethereum publica las claves de servicio de CI.
Razones
- Falta de una estrategia unificada . Hoy en día no hay instrucciones que convengan a la mayoría de los desarrolladores para resolver los problemas de garantizar la entrega de código garantizado en diferentes plataformas. Una gran proporción de actuaciones de aficionados.
- Obsolescencia Si observa los sitios principales de la tecnología PGP, tiene la impresión de que la tecnología está en el olvido:
- Falta de herramientas integrales para publicar y verificar firmas . Incluso si hay un deseo, el usuario encontrará serios obstáculos en el camino: muchos usuarios no saben cómo y no están listos para usar la consola obligatoria para verificar la firma. Incluso para los desarrolladores, el uso de una firma no es una tarea trivial.
- Protocolo de intercambio de claves obsoleto . En el siglo XXI, cuando los desarrolladores casi nunca se reúnen en persona, organizar un intercambio de claves sobre una base p2p no es muy conveniente y se necesitan herramientas para una distribución y revocación de firmas más rápidas.
Consejos
Los mejores consejos en esta situación:
- Separe las claves por tarea (esto ayudará a evitar la fuga de una clave maestra o el uso de una clave de desarrollador para firmar un lanzamiento).
- Duplicar información en varias fuentes, por ejemplo, en el sitio web oficial y en Github (piratear dos recursos al mismo tiempo es más difícil que uno).
- Genere una URL legible para humanos (son más fáciles de recordar y verificar).
Manual de instrucciones
Si aún no está utilizando las claves PGP, le recomiendo que incluya la verificación de firma en el flujo de trabajo, incluso si no está desarrollando proyectos financieros, es mejor llevar esta habilidad al automatismo antes de que la necesite. Suficiente de la fuerza de una hora de tiempo es suficiente para comenzar, pero el placer recibido no puede medirse.
Usando GPG con Git- Descargue el software de gestión de claves:
- Linux (no requiere instalación, use
gpg2
). - MacOS GPG Tools .
- Windows GPG4Win .
- Generar una clave:
> gpg2 --gen-key
- Obtenemos la huella digital de la clave:
> 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]
- Agregue la clave a git (vea stackoverflow ):
> git config user.signingkey E5F12C73
- Firmamos commits con la adición del modificador -S:
> git commit -S -m 'Signed commit'
Exportar la clave:
> 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 el resultado y lo agregamos a las claves confiables en la interfaz de Github, Gitlab o Bitbucket.
Conclusión
Hoy, la infraestructura de entrega de código sufre de enfermedades infantiles: fragmentación, falta de prácticas bien establecidas, software que no cumple con las realidades, y los desarrolladores de incluso grandes proyectos bajo el escrutinio de miles de ojos logran cometer errores incluso simples en lo que respecta a la seguridad. ¡Confíe, pero marque% username%!