Membaca berita terbaru tentang penggantian yang berhasil oleh penyerang dari kode proyek besar, pertanyaan alami muncul: bagaimana ini bahkan mungkin jika kode itu ditandatangani !? Mengabaikan aturan keamanan di cryptosphere adalah sebuah oxymoron dan, pada saat yang sama, sebuah fakta, oleh karena itu, sehingga artikel ini tidak berubah menjadi pembawa orang yang berbohong, saya memilih untuk analisis bukan pemula, tetapi cryptocurrency dari bagian atas peringkat CoinMarketCap. Dan, Anda menebaknya, tidak sia-sia.
Mari kita lihat bagaimana keadaan dengan penggunaan tanda tangan digital di kubu revolusi fintech.
Motivasi
Seperti yang kemungkinan besar Anda ketahui, peretasan situs resmi dan profil github dari proyek crypto cukup sering terjadi melalui penyebaran kode jahat. Terkadang alamat dompet diganti, dalam kasus lain perangkat lunak yang didistribusikan diganti. Metode peretasan berbeda: ada serangan pada salah satu node jaringan yang bertanggung jawab untuk pengiriman data dan substitusi tersembunyi dari fragmen data dilakukan. Mendeteksi spoof secara visual cukup sulit, yang digunakan penjahat cyber. Ada beberapa cara untuk bertahan melawan serangan semacam itu. Tanda tangan PGP dianggap standar: publikasi jumlah verifikasi yang ditandatangani. Dalam melakukannya, kunci PGP harus didistribusikan dengan benar. Misalnya, dipublikasikan di berbagai sumber (lebih disukai lebih dari dua).
Analisis
Untuk analisis, saya menggunakan sumber daya resmi, tautan yang saya terima dari berbagai sumber. Kemudian dia mulai mengumpulkan informasi bergerak dari berbagai arah. Analisis memperhitungkan publikasi perangkat lunak pengguna dan SDK. Untuk analisis, token atau proyek berdasarkan kontrak pintar tidak diambil, hanya cryptocurrency.
Hasil
Proyek | Hasil |
---|
Inti Bitcoin | publikasi kunci dan kode dalam satu sumber |
Ethereum geth | publikasi kunci dan kode dalam satu sumber |
Ethereum SDK | tidak ada tanda tangan |
Paritas | tidak ada tanda tangan |
Xrp | - |
Litecoin | publikasi kunci dan kode dalam satu sumber |
Cardano daedalus | tidak ada tanda tangan |
Cardano | tidak ada tanda tangan |
Stellar | kunci yang tidak diterbitkan |
Stellar SDK | rilis yang tidak ditandatangani, tanda tangan dengan kunci yang tidak diterbitkan |
IOTA IRI | tidak ada tanda tangan |
Dompet IOTA | tidak ada tanda tangan |
Inti Tron | tidak ada tanda tangan |
Dompet Tron | tidak ada tanda tangan |
Neo gui | tidak ada tanda tangan |
Neo cli | tidak ada tanda tangan |
Monero | publikasi kunci dan kode dalam satu sumber |
Dash core | publikasi kunci dan kode dalam satu sumber |
Dash Electrum | tidak ada tanda tangan |
Dompet NEM Nano | tidak ada tanda tangan |
Tidak | kunci yang tidak diterbitkan |
Ethereum klasik | * |
Inti Qtum | tidak ada tanda tangan |
Zcash | rilis yang tidak ditandatangani |
(*) Ethereum Classic menggunakan perangkat lunak pihak ketiga dan tidak mempublikasikan informasi untuk mengkonfirmasi rilis.
Kesalahan umum
- Kurangnya tanda tangan seperti itu ( 10/15 ):
Mungkin berubah menjadi tidak ditandatangani sebagai kode yang dapat dieksekusi, tetapi perpustakaan dan perangkat lunak aplikasi yang tidak ditandatangani seperti dompet lebih umum. - Tanda tangan oleh Kunci yang Tidak Diterbitkan ( 15/2 ):
Kode ini ditandatangani oleh beberapa pengembang yang kunci-kuncinya tidak diterbitkan di mana pun, dan karenanya tanda tangan semacam itu tidak berguna. - Publikasi kunci dan kode dalam satu sumber ( 15/5 ).
Kesalahan yang sangat umum adalah publikasi kunci melalui tautan pada sumber daya pihak ketiga, atau pembuatan satu sumber tepercaya dalam bentuk situs. Jadi, untuk mengganti data, cukup dengan meretas situs saja.
Kesalahan atipikal
Monero menawarkan untuk melihat kunci di folder dengan data yang ditandatangani. Pada dasarnya, ini adalah kesalahan distribusi utama, yang menyebabkan hilangnya keandalan lengkap.
Catat!
- Litecoin menerbitkan kunci, termasuk sebagai tautan ke pgp.mit.edu sumber daya tepercaya.
- Ethereum dan Zcash menerbitkan daftar tombol terperinci:
- Ethereum menerbitkan kunci layanan CI.
Alasan
- Kurangnya strategi terpadu . Saat ini tidak ada instruksi yang sesuai untuk sebagian besar pengembang untuk memecahkan masalah memastikan pengiriman kode dijamin pada platform yang berbeda. Sebagian besar pertunjukan amatir.
- Usang . Jika Anda melihat situs utama teknologi PGP, Anda mendapat kesan bahwa teknologi tersebut terlupakan:
- Kurangnya alat komprehensif untuk menerbitkan dan memverifikasi tanda tangan . Sekalipun ada keinginan, pengguna akan menemui hambatan serius - banyak pengguna tidak tahu caranya dan tidak siap menggunakan konsol wajib untuk memverifikasi tanda tangan. Bahkan untuk pengembang, menggunakan tanda tangan bukanlah tugas yang sepele.
- Protokol pertukaran kunci yang sudah tidak digunakan lagi . Pada abad ke-21, ketika pengembang hampir tidak pernah bertemu langsung, mengatur pertukaran kunci berdasarkan p2p menjadi sangat tidak nyaman dan kami membutuhkan alat untuk distribusi yang lebih cepat dan pencabutan tanda tangan.
Kiat
Kiat terbaik dalam situasi ini:
- Pisahkan kunci berdasarkan tugas (ini akan membantu menghindari kebocoran kunci master atau penggunaan kunci pengembang untuk menandatangani rilis).
- Gandakan informasi dalam beberapa sumber, misalnya, di situs web resmi dan di Github (meretas dua sumber daya pada saat yang sama lebih sulit daripada satu).
- Buat url yang bisa dibaca manusia (lebih mudah diingat dan diperiksa).
Instruksi manual
Jika Anda belum menggunakan kunci PGP, saya sangat menyarankan agar Anda menyertakan verifikasi tanda tangan dalam alur kerja, bahkan jika Anda tidak mengembangkan proyek keuangan, lebih baik untuk membawa keterampilan ini ke otomatisme sebelum Anda membutuhkannya. Cukup dari kekuatan satu jam waktu sudah cukup untuk memulai, tetapi kesenangan yang diterima kemudian tidak dapat diukur.
Menggunakan GPG dengan Git- Unduh perangkat lunak manajemen kunci:
- Linux (Tidak diperlukan instalasi, gunakan
gpg2
). - Alat MacOS GPG .
- Windows GPG4Win .
- Hasilkan kunci:
> gpg2 --gen-key
- Kami mendapatkan sidik jari kunci:
> 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]
- Tambahkan kunci ke git (lihat stackoverflow ):
> git config user.signingkey E5F12C73
- Kami menandatangani komitmen dengan penambahan -S switch:
> git commit -S -m 'Signed commit'
Ekspor kuncinya:
> 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-----
- Kami menyalin hasilnya dan menambahkannya ke kunci tepercaya di antarmuka Github, Gitlab atau Bitbucket.
Kesimpulan
Hari ini, infrastruktur pengiriman kode menderita penyakit pada masa kanak-kanak: fragmentasi, kurangnya praktik mapan, perangkat lunak yang tidak memenuhi kenyataan, dan pengembang proyek besar bahkan di bawah pengawasan ribuan mata berhasil membuat kesalahan sederhana ketika datang ke keamanan. Jadi percaya, tetapi periksa% username%!