ZenGo adalah dompet Web 3 yang aman menggunakan teknologi komputasi multi-pihak (MPC).
Baru-baru ini, tim SkyFall CertiK melakukan audit dan penelitian menyeluruh terhadap banyak dompet seluler dan menemukan bahwa solusi MPC ZenGo memberikan pertahanan keamanan yang lebih kuat daripada dompet seluler biasa – pengguna dompet ZenGo, terutama mereka yang memiliki dompet bernilai tinggi Pengguna terlindungi dari serangan langsung dari penyerang tingkat lanjut: misalnya, mengeksploitasi kerentanan zero-day atau malware tingkat lanjut untuk mendapatkan akses root pada perangkat pengguna.
Ancaman ini merupakan ancaman terbaru dan baru ditemukan oleh tim CertiK, sehingga pengembang dompet MPC harus memperhatikan detail serangan tersebut!
Bertahan melawan penyerang yang memiliki hak istimewa merupakan sebuah tantangan. Kami mengusulkan metode serangan baru dan vektor serangan untuk metode MPC di ZenGo dalam hasil laporan. Jadi kami segera melaporkan masalah keamanan ini ke ZenGo, dan ZenGo merespons dengan cepat dan memperbaiki masalah tersebut.
Dalam artikel ini kami akan mendalami detail teknis penemuan ini dan berbagi bagaimana kami bekerja dengan ZenGo untuk meningkatkan keamanan dompet MPC secara keseluruhan.
Berdasarkan tinjauan menyeluruh kami terhadap desain keamanan ZenGo dan respons profesional mereka terhadap masalah, CertiK percaya bahwa ZenGo dapat disebut sebagai solusi dompet paling aman yang ada di pasaran saat ini.
Apa itu MPC?
Komputasi multi-pihak (MPC), terkadang juga disebut komputasi multi-pihak yang aman (SMPC), adalah bidang kriptografi. Hal ini memungkinkan banyak pihak untuk bersama-sama menandatangani transaksi sambil memastikan bahwa kunci masing-masing pihak tidak dikompromikan.
Karena teknologi MPC dapat mendistribusikan kunci di antara banyak pihak sehingga menghilangkan satu titik kegagalan, teknologi ini memungkinkan pengguna untuk melindungi kunci pribadi Web 3 dengan lebih baik. Metode ini juga biasa disebut sebagai "penandatanganan ambang batas" dan saat ini digunakan oleh banyak Web 3 yang Diadopsi kustodian dan pengembang dompet untuk melindungi aset Web 3. Diantaranya, ZenGo adalah salah satu pengembang dompet MPC yang paling terkenal dan paling banyak digunakan.
Seperti yang ditunjukkan pada gambar di bawah, dompet tidak menggunakan kunci privat tradisional untuk mengontrol penandatanganan transaksi. Sebaliknya, beberapa kunci privat dipecah untuk berpartisipasi dalam proses penandatanganan transaksi dan menghasilkan tanda tangan akhir untuk verifikasi.
Desain MPC umum yang menghasilkan tanda tangan
Melalui penelitian ini, kami menyadari tantangan dan potensi risiko keamanan yang terkait dengan pendekatan MPC dan pentingnya perlindungan aset Web 3. Jadi kami ingin melindungi pengguna Web3 dengan lebih baik dengan mengeksplorasi dan memecahkan tantangan ini.
Jadi kita dapat memikirkan pertanyaan ini: mengapa dompet MPC dapat memberikan keamanan yang lebih tinggi dibandingkan dengan dompet kripto tradisional? Bagaimana cara melakukannya?
Desain ZenGo MPC dan jaminan keamanan
Melalui penelitian ini, kami menyadari tantangan dan potensi risiko keamanan yang terkait dengan pendekatan MPC dan pentingnya perlindungan aset Web 3. Jadi kami ingin melindungi pengguna Web3 dengan lebih baik dengan mengeksplorasi dan memecahkan tantangan ini.
Jadi kita dapat memikirkan pertanyaan ini: mengapa dompet MPC dapat memberikan keamanan yang lebih tinggi dibandingkan dengan dompet kripto tradisional? Bagaimana cara melakukannya?
Setelah mengevaluasi desain berbagai dompet Web 3, kami melihat dompet Web 3 MPC – kami mengevaluasi salah satu dompet MPC yang paling dihormati di pasar dan dompet MPC yang dihosting sendiri – ZenGo.
Untuk evaluasi ini kami menggunakan model ancaman yang sama seperti yang diuraikan dalam penelitian sebelumnya: “Jika perangkat Anda terinfeksi malware, apakah dompet ini akan tetap melindungi aset Anda?”
Ikhtisar Arsitektur Keamanan ZenGo
Seperti yang ditunjukkan pada gambar di atas, dompet ZenGo memiliki desain keamanan yang unik, dan arsitektur keamanan serta proses pemulihannya lebih berlapis dibandingkan dompet tradisional. Fitur keamanan yang disediakan oleh ZenGo termasuk namun tidak terbatas pada:
Skema tanda tangan dua pihak: Desain MPC ZenGo menerapkan skema tanda tangan dua pihak. Setiap pengguna melibatkan dua pecahan kunci saat membuat tanda tangan transaksi: satu disimpan di server ZenGo (kunci master ①), dan yang lainnya disimpan di perangkat pengguna (kunci master ②). Baik ZenGo maupun pengguna tidak mengetahui kunci apa yang dimiliki pihak lain.
Perlindungan berbasis TEE: Selain itu, untuk mencegah serangan "man-in-the-middle" dan "APP hijacking", aplikasi ZenGo menggunakan solusi TEE (Trusted Execution Environment) dan menggunakan kunci pribadi TEE untuk menandatangani HTTPS konten komunikasi untuk meminta API terkait. Kunci perangkat berbasis TEE ini dibuat di dalam TEE saat pengguna menyiapkan perangkat, dan tidak dapat diekstraksi bahkan oleh sistem operasi itu sendiri.
Dengan adanya fitur keamanan ini, penyerang tidak dapat lagi mencuri kunci pribadi pengguna dari memori atau file penyimpanan dan mengambil kendali atas aset pengguna ZenGo. ZenGo juga menggunakan TEE untuk melindungi interaksi antara server dan klien agar tidak dirusak. Hal ini juga berarti bahwa serangan "man-in-the-middle" dan "APP hijacking" dapat diblokir dan dipertahankan secara efektif.
Audit kami mengonfirmasi bahwa ZenGo memang memiliki desain dan implementasi aman yang dapat menahan serangan ini, dan ini adalah desain keamanan tingkat tertinggi di antara dompet teraudit yang pernah kami hubungi.
Desain dan implementasi keamanan ZenGo berhasil mempertahankan diri dari serangan termasuk hak istimewa dan serangan di atas. Namun, menangani semua jenis serangan dengan hak istimewa tidaklah mudah, terutama mengingat penyerang dapat membaca (dan dalam beberapa kasus menulis) memori sewenang-wenang.
Dengan mengaudit seluruh dompet, kami dapat menemukan masalah implementasi di ZenGo yang memungkinkan kami bertindak sebagai penyerang dengan hak istimewa dan melewati perlindungan tertentu.
Namun sebelum membahas detailnya, mari kita tinjau mekanisme keamanan dompet ZenGo.
Praktik Aman untuk Dompet ZenGo
Melalui penelitian ini, kami menyadari tantangan dan potensi risiko keamanan yang terkait dengan pendekatan MPC dan pentingnya perlindungan aset Web 3. Jadi kami ingin melindungi pengguna Web3 dengan lebih baik dengan mengeksplorasi dan memecahkan tantangan ini.
Jadi kita dapat memikirkan pertanyaan ini: mengapa dompet MPC dapat memberikan keamanan yang lebih tinggi dibandingkan dengan dompet kripto tradisional? Bagaimana cara melakukannya?
Dompet Web 3 klasik hanya memerlukan kunci pribadi. Namun, selalu ada kemungkinan bahwa pengguna akan mengungkapkan kunci pribadi atau frase mnemonik. Jadi mereka bisa kehilangan kunci pribadinya dan kemudian melihat penyerang mengambil alih aset tersebut.
Dompet MPC bekerja secara berbeda. Dompet tidak memiliki satu kunci pribadi. Pengguna sekarang hanya memegang satu pecahan kunci pribadi dan tidak mengetahui apa pun tentang pecahan kunci pribadi yang tersisa. Dari perspektif ini, meskipun penyerang mendapatkan kunci pribadi pengguna, dia tidak dapat mentransfer dana secara langsung. Untuk lebih melindungi pengguna, ZenGo menggunakan berbagai cara untuk memperkuat desain keamanan mereka: tidak hanya skema tanda tangan dua pihak yang disebutkan di atas dan perlindungan perangkat berbasis TEE, tetapi juga otentikasi biometrik berbasis pemindaian wajah dan enkripsi kunci tambahan.
Langkah-langkah perlindungan selama pendaftaran pengguna dan pemulihan akun pengguna
Selama proses pendaftaran pengguna dan pemulihan akun, ZenGo menerapkan langkah-langkah perlindungan berikut untuk melindungi aset pengguna.
Perlindungan Identifikasi Pengguna: Skema tanda tangan dua pihak mengharuskan pengguna hanya dapat mengakses dana mereka ketika mereka berinteraksi dengan pihak lain (sisi server dalam pengaturan ZenGo). Agar dapat mengidentifikasi pengguna dan key share terkait yang disimpan di server, ZenGo memerlukan email pengguna untuk mendaftarkan akun.
Untuk menghindari peretasan email, ZenGo menggunakan teknologi pemindaian wajah (Zoom by FaceTec) untuk mengaitkan informasi biometrik ke akun pengguna. Selama proses pemulihan akun setelah registrasi dan verifikasi email, pengguna perlu "menggesek wajah mereka" untuk otentikasi.
Perlindungan komunikasi server aplikasi: Untuk memastikan bahwa server ZenGo berinteraksi dengan perangkat pengguna yang sah, ZenGo membuat dan mendaftarkan kunci asimetris di lingkungan TEE selama proses pendaftaran dan pemulihan akun. Semua interaksi antara aplikasi ZenGo dan server harus ditandatangani dengan kunci khusus ini. Karena dilindungi oleh solusi keamanan yang didukung perangkat keras, kunci ini tidak dapat langsung dibaca oleh penyerang, dan kunci tersebut sulit untuk disalahgunakan.
Pendaftaran pengguna ZenGo dan proses pemulihan akun
Perlindungan Berbagi Kunci Pengguna: Membiarkan pengguna menyimpan dan mencadangkan pecahan kunci mereka berisiko, karena hal ini dapat membahayakan semua tindakan keamanan yang disediakan oleh ZenGo. Untuk mengatasi masalah keamanan ini, ZenGo menghasilkan kunci enkripsi selama proses registrasi. Kunci enkripsi mengenkripsi pembagian kunci pengguna dan menyimpan teks sandi di servernya.
Namun, kunci enkripsi tidak dibagikan dengan ZenGo, melainkan memaksa sinkronisasi dengan Google Drive atau iCloud pengguna. Kunci terenkripsi dapat dibagikan dan didekripsi lebih lanjut hanya setelah pengguna melewati verifikasi email dan otentikasi biometrik berbasis server. Diantaranya, otentikasi biometrik berbasis server (pengenalan wajah FaceTec) hampir tidak mungkin "ditipu" oleh rekonstruksi wajah 2D/3D konvensional.
Proses transaksi ZenGo pembuatan tanda tangan transaksi
Untuk menandatangani transaksi, aplikasi ZenGo melakukan serangkaian interaksi dengan server ZenGo. Selama interaksi, ZenGo menggunakan solusi tanda tangan dua pihak yang bersifat open source dan sharding kunci pengguna untuk menghasilkan tanda tangan dua pihak. Server ZenGo kemudian melangkah lebih jauh dengan menandatangani dan menyiarkan transaksi. Semua permintaan dalam proses ini diberi stempel waktu dan ditandatangani di TEE untuk menjaga integritas dan informasi yang tidak dapat diputar ulang.
Penemuan masalah dalam desain ZenGo MPC
Seperti yang telah kita bahas sebelumnya, desain keamanan ZenGo melibatkan banyak kunci enkripsi, masing-masing dengan tanggung jawab berbeda. Pada tabel di bawah ini kami menunjukkan kunci mana yang digunakan oleh ZenGo dan bagaimana kunci tersebut dilindungi.
Melalui tabel ini, kita dapat melihat bahwa tiga kunci digunakan di sisi klien: kunci master ②, kunci perangkat, dan kunci enkripsi. Penyerang perlu mendapatkan kunci utama② dan kunci perangkat untuk berinteraksi dengan server ZenGo dan mencuri dana pengguna.
Seperti yang diperkenalkan di bagian detail transaksi sebelumnya, kunci master ② berpartisipasi dalam pembuatan tanda tangan kedua belah pihak sebagai teks dalam memori, yang memungkinkan penyerang membaca memori proses dan mengekstrak kunci master ②. Sebagai solusi parsial, semua permintaan transaksi ke server ZenGo harus ditandatangani dengan kunci perangkat, yang tidak dapat dibaca atau diekstraksi. Proses ini dilakukan di TEE dan tidak memiliki kendali atas penyerang.
Namun, terlepas dari banyak aspek desain keamanan ZenGo, tim SkyFall CertiK masih menemukan kerentanan di dalamnya. Setelah melakukan audit mendetail terhadap semua API di aplikasi ZenGo, kami melihat bahwa API tertentu memungkinkan penyerang melakukan spoofing pada server ZenGo dan dengan mudah membuat kunci perangkat baru untuk digunakan pada perangkat lain.
API yang terdaftar dengan kunci perangkat ini tidak memiliki perlindungan keamanan yang diperlukan: penyerang dapat membuat kunci kurva elips NIST P-256 baru di perangkat lain, lalu penyerang dapat memanfaatkan API yang terdaftar dengan kunci perangkat dan mendaftarkan yang baru. Buat pasangan kunci , berpura-pura menjadi perangkat pengguna baru dan meminta transaksi.
Kami menamakannya serangan forking perangkat serangan.
Serangan forking perangkat pada dompet ZenGo
Seperti disebutkan di atas, penyerang harus memiliki kunci utama pengguna ZenGo ② dan kunci perangkat yang valid untuk mencuri aset mereka.
Kunci master ②: Kunci master ② adalah kunci tetap yang digunakan sebagai teks biasa di memori untuk berpartisipasi dalam proses penandatanganan kedua belah pihak. Karena kompleksitas dan keunikan algoritma tanda tangan kedua belah pihak, proses ini tidak dapat diselesaikan di TEE. Oleh karena itu, penyerang yang memiliki hak istimewa dapat dengan mudah membuang memori proses atau membajak API sistem tertentu untuk mengekstrak kunci master. Tangkapan layar di bawah menunjukkan kunci master yang dapat kita ekstrak di platform iOS ②.
Kunci Perangkat: Selama proses pendaftaran atau pemulihan akun, kunci perangkat yang valid dibuat pada perangkat pengguna di TEE sebagai solusi terhadap ancaman ekstraksi teks jelas yang disebutkan di atas. Kunci perangkat tidak dapat dibaca oleh penyerang yang memiliki hak istimewa. Namun, penyerang dapat menggunakan API pendaftaran kunci perangkat yang sama untuk mendaftarkan pasangan kunci lainnya dan menggunakannya.
API pendaftaran kunci perangkat hanya memiliki mekanisme autentikasi yang sangat mendasar: penyerang dapat menggunakan token JWT teks biasa yang disimpan secara lokal dan kunci master yang diekstraksi ② untuk autentikasi API. Secara desain, kode server yang terlibat dalam API ini juga harus diautentikasi biometrik Face tec. Namun, dalam praktiknya, kode gagal melakukan langkah ini karena kesalahan logika.
Dalam simulasi serangan kami, kami menyimulasikan penyerang yang memiliki hak istimewa dan terus memantau perangkat korban. Segera setelah aplikasi ZenGo diluncurkan, kami mengekstrak kunci master dari memori dan membaca token API dari database lokal. Dan informasi ini cukup bagi penyerang untuk mencuri semua dana pengguna!
Setelah kami memiliki token API, kami membuat kunci perangkat baru dan memanggil API Pendaftaran Kunci Perangkat untuk mendaftarkan kunci perangkat ke server ZenGo. Kami kemudian membuat semua permintaan API untuk berinteraksi dengan server ZenGo untuk memulai transaksi. Untuk dompet MPC, menghasilkan tanda tangan dari kedua belah pihak adalah proses yang sangat unik dan kompleks. Untungnya, proses pengembangan ZenGo selalu menganut semangat open source, sehingga kami dapat mengkompilasi perpustakaan tanda tangan dua pihak yang digunakan dalam aplikasi resmi ZenGo dan menjalankannya secara lokal.
Gambar di atas menunjukkan bagaimana kita mengekstrak kunci master ② dan mendaftarkan kunci perangkat baru atas nama korban. Kami kemudian menggunakan dua kunci ini untuk mengirim 0,00222 ETH ke "akun penyerang". Keseluruhan proses hanya memakan waktu beberapa detik dan sama sekali tidak disadari oleh korbannya.
Untuk mengatasi masalah ini, ZenGo menerapkan otentikasi biometrik FaceTec di sisi server untuk registrasi perangkat. Solusi tingkat API server menghilangkan kemungkinan serangan ini dan tidak memerlukan pembaruan pada kode klien.
Meringkaskan
Dalam evaluasi CertiK terhadap ZenGo, kami memeriksa dan mengaudit secara menyeluruh semua tindakan keamanan yang diterapkan untuk melindungi aset pengguna. Ini termasuk skema tanda tangan bersama, perlindungan perangkat berbasis TEE, dan biometrik untuk pendaftaran dan pemulihan akun.
Meskipun ZenGo memiliki tingkat kesadaran keamanan yang tinggi dan telah mengambil banyak langkah untuk meningkatkan keamanannya, CertiK menemukan risiko otentikasi akses API utama yang dapat dieksploitasi dalam implementasi ZenGo. Kerentanan ini memungkinkan penyerang yang memiliki hak istimewa untuk melewati langkah-langkah keamanan yang ada dan mencuri dana pengguna jika perangkat mereka disusupi.
ZenGo segera menyelesaikan masalah tersebut dan menerapkan patch, dan CeritK kemudian melakukan audit lebih lanjut secara menyeluruh dan memutuskan bahwa patch tersebut memperbaiki risiko yang disebutkan dalam laporan.
Dengan penerapan patch, kami yakin ZenGo dapat secara efektif mencegah pengguna yang memiliki hak istimewa mengakses dana pengguna secara ilegal di masa mendatang. Bertahan dari penyerang yang memiliki hak istimewa adalah tugas yang sulit, dan praktik keamanan ZenGo menunjukkan kepada kita pendekatan komprehensif untuk melindungi pengguna. Dompet ini berfungsi lebih dari kebanyakan dompet konvensional yang ada di pasaran saat ini.
Kami bangga bermitra dengan ZenGo dan bangga bekerja sama dengan ZenGo untuk melindungi keamanan pengguna Web 3 dan memecahkan tantangan keamanan. Kami juga ingin mengucapkan terima kasih kepada ZenGo atas tanggapannya yang tepat waktu terhadap kerentanan yang kami temukan dan tindakan perbaikannya yang efisien.
Sebagai praktisi di industri keamanan, kami sangat senang melihat perusahaan dompet Web 3 terkemuka memperhatikan keamanan dengan sangat serius dan memiliki rasa tanggung jawab yang tinggi terhadap pengguna dan dana pengguna. Kami berharap dalam perjalanan menuju keselamatan di masa depan, kami dapat meningkatkan keselamatan untuk lebih banyak proyek dan memberikan "ketenangan pikiran" kepada penggunanya.
