Araştırmacılar BitcoinJS kütüphanesinde, on yıl önce çevrimiçi olarak oluşturulan Bitcoin cüzdanlarını ele geçirilmeye açık hale getirebilecek çeşitli güvenlik açıkları keşfetti. Temel sorun, bu kripto cüzdanlarının özel anahtarlarının kütüphane geliştiricilerinin beklediğinden çok daha yüksek bir öngörülebilirlikle üretilmiş olmasıydı.
Randstorm güvenlik açıkları ve sonuçları
Meseleyi en baştan ele alalım. Kripto cüzdan erişimi kurtarma konusunda uzmanlaşmış bir şirket olan Unciphered’deki araştırmacılar, birçok çevrimiçi kripto para birimi platformu tarafından kullanılan BitcoinJS JavaScript kütüphanesinde bir dizi güvenlik açığı keşfetti ve açıkladı. Bu hizmetler arasında çok popüler olanlar ve özellikle de artık Blockchain.com olarak bilinen Blockchain.info da bulunuyor. Bu güvenlik açığı kümesine araştırmacılar tarafından Randstorm adı verildi.
BitcoinJS kütüphanesindeki güvenlik açıkları 2014 yılında giderilmiş olsa da, sorun bu kütüphanenin kullanımının sonuçlarını da kapsıyor: 2010’ların başında BitcoinJS ile oluşturulan tüm kripto cüzdanları güvensiz olabilir çünkü özel anahtarlarını bulmak, altta yatan Bitcoin kriptografisinin varsaydığından çok daha kolay.
Araştırmacılar, toplamda yaklaşık 1,4 milyon BTC’ye tekabül eden birkaç milyon cüzdanın Randstorm nedeniyle potansiyel olarak risk altında olduğunu tahmin ediyor. Araştırmacılara göre, potansiyel olarak savunmasız cüzdanların %3 ila %5’i gerçek saldırılara karşı savunmasız durumda. Yayının yapıldığı tarihte yaklaşık 36.500 $ olan Bitcoin kuruna göre bu, Randstorm’dan başarıyla yararlanabilen saldırganlar için toplam 1,5 ila 2,5 milyar $’lık bir ganimet anlamına geliyor.
Araştırmacılar, Randstorm güvenlik açıklarının gerçekten de kripto cüzdanlarına yönelik gerçek dünya saldırıları için kullanılabileceğini iddia ediyor. Dahası, Mart 2012’den önce Blockchain.info’da oluşturulan birkaç kripto cüzdanına erişimi yeniden sağlamak için bu güvenlik açıklarından başarıyla yararlandılar. Etik nedenlerden ötürü, on binlerce kripto cüzdanını doğrudan hırsızlık riskine maruz bırakacağından saldırı için kavram kanıtlama yayınlamadılar.
Araştırmacılar, BitcoinJS kütüphanesinin güvenlik açığı bulunan sürümlerini kullandığı bilinen çevrimiçi kripto para hizmetleriyle çoktan iletişime geçti. Bu hizmetler de Randstorm’dan potansiyel olarak etkilenebilecek müşterileri bilgilendirdi.
Randstorm güvenlik açıklarının doğası
Şimdi bu güvenlik açıklarının gerçekte nasıl çalıştığına daha ayrıntılı olarak bakalım. Bitcoin cüzdan güvenliğinin temelinde özel anahtar vardır. Her modern kriptografik sistem gibi Bitcoin de bu anahtarın gizli ve kırılamaz olmasına dayanır. Yine, her modern kriptografik sistemde olduğu gibi, bu da çok uzun rastgele sayıların kullanılmasını gerektirir.
Ve özel anahtar tarafından korunan herhangi bir verinin güvenliği için, bu sayıların olabildiğince rastgele olması gerekir. Anahtar olarak kullanılan sayı yüksek tahmin edilebilirliğe sahip olursa, anahtar oluşturma prosedürü hakkında bilgi sahibi olan bir saldırganın bu sayıyı deneme yanılma yöntemiyle elde etmesi daha kolay ve hızlı olur.
Rastgele bir sayı üretmenin aslında o kadar da kolay olmadığını unutmayın. Ayrıca bilgisayarlar doğaları gereği bu görev için son derece elverişsizdir çünkü çok öngörülebilirdirler. Bu nedenle, genellikle sahip olduğumuz şey sözde rastgele sayılardır ve üretimin entropisini (kriptograf dilinde öngörülemezlik ölçüsü) artırmak için özel işlevlere güveniriz.
Şimdi BitcoinJS kütüphanesine geri dönelim. “Yüksek kaliteli” sözde rastgele sayılar elde etmek için bu kütüphane JSBN (JavaScript Big Number) adlı başka bir JavaScript kütüphanesini, özellikle de SecureRandom işlevini kullanıyor. Adından da anlaşılacağı gibi, bu işlev kriptografide kullanılmaya uygun sözde rastgele sayılar üretmek için tasarlanmıştır. Entropilerini artırmak için SecureRandom, window.crypto.random tarayıcı işlevine güvenir.
Sorun da zaten burada yatıyor: window.crypto.random işlevi Netscape Navigator 4.x tarayıcı ailesinde mevcut olsa da, web hizmetleri BitcoinJS kütüphanesini aktif olarak kullanmaya başladığında bu tarayıcılar çoktan kullanılmaz hale gelmişti bile. Ve o günlerin popüler tarayıcılarında )(Internet Explorer, Google Chrome, Mozilla Firefox ve Apple Safari)window.crypto.random işlevi basitçe uygulanmıyordu.
Ne yazık ki, JSBN kütüphanesinin geliştiricileri herhangi bir kontrol veya ilgili hata mesajı için hazırlık yapmamıştı. Bunun neticesinde, SecureRandom işlevi entropi artırma adımını sessizce geçerek özel anahtar oluşturma görevini standart sözde rastgele sayı üreteci Math.random‘a devretti.
Bu durumun kendisi zaten çok vahimdir çünkü Math.random kriptografik amaçlar için uygun değildir. Ancak başta Google Chrome olmak üzere 2011-2015 yıllarının popüler tarayıcılarındaki Math.random uygulamasının, olması gerekenden daha az rastgele sayı elde edilmesine neden olan hatalar içermesi durumu daha da karmaşık hale getirmektedir.
Böylece, BitcoinJS kütüphanesi yukarıda bahsedilen tüm sorunları JSBN’den devralmış oldu. Sonuç olarak, kripto cüzdanları için özel anahtarlar üretmek için kullanan platformlar, SecureRandom işlevi sayesinde kütüphane geliştiricilerinin beklediğinden çok daha az rastgele sayı elde etti. Ve bu anahtarlar büyük bir öngörülebilirlikle üretildiğinden, deneme yanılma ile kırılmaları çok daha kolaydır ve savunmasız kripto cüzdanlarının ele geçirilmesine olanak tanır.
Yukarıda belirtildiği gibi, bu teorik bir tehlike değil, oldukça pratik bir tehlikedir. Unciphered ekibi, Blockchain.info’da oluşturulan birkaç eski kripto cüzdanına erişimi geri almak (başka bir deyişle, etik olarak hacklemek) için bu güvenlik açıklarından yararlanmayı başardı.
Randstorm riski altında olanlar
BitcoinJS, 2011’deki tanıtımından 2014’e kadar savunmasız JSBN kütüphanesini kullanmıştır. Bununla birlikte, bazı kripto para projelerinin bir süredir kütüphanenin en son sürümünden daha düşük sürümlerini kullanıyor olabileceğini de unutmayın. Popüler tarayıcılarda Math.random’u etkileyen hatalara gelince, 2016 yılına kadar sözde rastgele sayı üretme algoritmaları değiştirilerek düzeltildi. Bunlar bir araya getirildiğinde, potansiyel olarak savunmasız kripto cüzdanlarının oluşturulduğu zaman diliminin yaklaşık 2011-2015 olduğu ortaya çıkıyor.
Araştırmacılar, BitcoinJS’nin 2010’ların başında çok popüler olduğunu, bu nedenle savunmasız bir sürümü kullanmış olabilecek hizmetlerin tam bir listesini derlemenin zor olduğunu vurguluyor. Hazırladıkları raporda, risk altında olduğunu tespit ettikleri platformların bir listesi yer alıyor:
- BitAddress – hala çalışır durumda.
- BitCore (BitPay) – hala çalışır durumda.
- Bitgo – hala çalışır durumda.
- info – Blockchain.com olarak hala çalışır durumda.
- Blocktrail —
https://btc.com
veyahttps://blockchair.com
adresine yönlendiriyor. - BrainWallet – kapandı.
- CoinKite – artık donanım cüzdanları satıyor.
- CoinPunk – kapandı.
- Dark Wallet —
https://crypto-engine.org
adresine yönlendiriyor. - DecentralBank – kapandı.
- info (Block.io) – hala çalışır durumda.
- EI8HT – kapandı.
- GreenAddress —
https://blockstream.com/green/
adresine yönlendiriyor. - QuickCon kapandı.
- Robocoin – kapandı.
- Skyhook ATM —
https://yuan-pay-group.net
adresine yönlendiriyor.
Bitcoin cüzdanlarının yanı sıra Litecoin, Zcash ve Dogecoin cüzdanları da risk altında olabilir, çünkü bu kripto para birimleri için de BitcoinJS tabanlı kütüphaneler bulunmaktadır. Bu kütüphanelerin ilgili kripto cüzdanları için özel anahtarlar üretmek amacıyla kullanılabileceğini varsaymak doğal görünüyor.
Unciphered raporu Randstorm ile ilgili bir dizi başka karmaşıklığı da açıklıyor. Ancak temelde durum, 2011-2015 yılları arasında savunmasız kütüphane kullanılarak oluşturulan cüzdanların, belirli koşullara bağlı olarak değişen derecelerde savunmasız olabileceği.
Randstorm’a karşı nasıl korunulur?
Araştırmacıların da haklı olarak belirttiği gibi, yazılımdaki güvenlik açığının düzeltilmesi yeterli olmayacaktır: cüzdan sahiplerinin özel anahtarlarının “yamalanması” ve güvenli anahtarlarla değiştirilmesi mümkün değildir. Bu nedenle, hatalar uzun süredir düzeltilmiş olmasına rağmen, yukarıda tartışılan hatalar BitcoinJS kütüphanesinin etkilendiği dönemde oluşturulan kripto cüzdanları için sorun olmaya devam ediyor. Bu, savunmasız cüzdan sahiplerinin kendi başlarına koruyucu önlemler alması gerektiği anlamına geliyor.
Savunmasız kütüphaneyi kullanan kripto para platformlarının tam bir listesini çıkarmak zor olduğundan, güvenliği tercih etmek ve 2011-2015 yılları arasında çevrimiçi olarak oluşturulan herhangi bir kripto cüzdanını potansiyel olarak güvensiz olarak kabul etmek daha iyidir (öyle olmadığından eminseniz başka). Ve doğal olarak, cüzdan ne kadar dolu olursa, suçlular için o kadar cazip olur.
Sorunun bariz (ve tek) çözümü, yeni kripto cüzdanları oluşturmak ve potansiyel olarak savunmasız cüzdanlardaki tüm fonları bunlara taşımaktır.
Ve bunu yaparken bu sefer son derece dikkatli ilerlemek mantıklıdır. Kripto koruması çok adımlı bir süreçtir, bu nedenle bağlantılardan erişilebilen birçok ek bilgi ile birlikte sizin için kapsamlı bir kontrol listesi hazırladık:
- Ana kripto tehditlerini ve koruma yöntemlerini ayrıntılı olarak öğrenin.
- Sıcak ve soğuk kripto cüzdanları arasındaki farkları ve bunlara saldırmanın en yaygın yollarını anlayın.
- Temel kripto varlıklarının uzun süreli depolanması için bir donanım (soğuk) cüzdan ve günlük işlemler için minimum fon içeriğine sahip bir sıcak cüzdan kullanın.
- Tüm fonları eski cüzdandan yenisine aktarmadan önce, tüm cihazlarınızı güvenilir koruma ile donatın. Bu, akıllı telefonunuzu veya bilgisayarınızı parolaları ve özel anahtarları çalmak isteyen Truva atlarına veya panodaki kripto cüzdan adreslerini değiştiren kırpıcılara karşı korumanın yanı sıra bilgisayarınızı kötü niyetli kripto madencilerinden ve yetkisiz uzaktan erişimden de koruyacaktır.
- Tohum cümlenizin fotoğrafını veya ekran görüntüsünü asla akıllı telefonunuzda saklamayın, tohum cümlenizi asla ücretsiz bulut hizmetlerine yüklemeyin, asla mesajlaşma programları veya e-posta yoluyla göndermeyin ve kayıp bir özel anahtarı kurtarma işlemleri hariç olmak üzere hiçbir yere girmeyin.
- Gerektiğinde ulaşmak için özel anahtarınızı ve tohum cümlenizi güvenli bir şekilde saklayın. Bu, depolanan tüm verileri AES-256 kullanarak şifreleyen Kaspersky Premium adresindeki Kimlik Koruma Cüzdanı kullanılarak yapılabilir. Bunun için parola beyniniz dışında hiçbir yerde saklanmaz (tabii monitörünüze iliştirilmiş bir yapışkan nota yazmadığınızı da varsayıyoruz) ve kurtarılamaz, bu nedenle kişisel belgelerinize erişimi olan tek kişi siz olursunuz.
- Diğer bir seçenek ise, özel anahtarı yedeklemek için bir tohum cümlesi gerektirmeyen soğuk bir kripto cüzdanı kullanmaktır. Örneğin Tangem donanım cüzdanı bu şekilde çalışır.