Blockchain'de 2FA'yı güvence altına almak için harekete geçin

SMS mesajları, iki faktörlü kimlik doğrulamanın (2FA) en popüler yöntemidir. Bankalar, elektronik ve kripto cüzdanlar, posta kutuları ve her türlü hizmet tarafından kullanılır; yöntemi kullananların sayısı %100'e yaklaşıyor.

Bu senaryoya kızgınım çünkü bu yöntem güvensiz. Bir SIM karttan diğerine bir numaranın yeniden atanması, mobil çağın başlangıcında başladı; SIM kart kaybolduğunda numara bu şekilde geri yüklenir. "Dijital para hırsızlığı uzmanları", "SIM kartı yeniden yaz" seçeneğinin dolandırıcılık planlarında kullanılabileceğini fark etti. Sonuçta SIM kartı kontrol eden kişi, başkalarının çevrimiçi bankacılığını, elektronik cüzdanlarını ve hatta kripto para birimini bile kontrol edebilir. Ayrıca bir telekom çalışanına rüşvet vererek, aldatma veya sahte belgeler kullanarak başka bir kişinin numarasını ele geçirebilirsiniz.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

Bu dolandırıcılık planı olarak adlandırılan binlerce SIM değiştirme olayı ortaya çıkarıldı. Felaketin boyutu, dünyanın SMS yoluyla 2FA'yı yakında terk edeceğini gösteriyor. Ancak bu gerçekleşmez - çalışma 2FA yöntemini seçenlerin kullanıcılar değil, hizmet sahipleri olduğunu söylüyorlar.

Tek seferlik kodların blockchain aracılığıyla iletilmesiyle güvenli 2FA yöntemini kullanmanızı öneriyoruz ve size hizmet sahibinin bunu nasıl bağlayabileceğini anlatacağız.

Sayı milyonlara ulaşıyor

Londra polisine göre 2019 yılında SIM takas dolandırıcılığı %63 oranında arttı ve bir saldırganın “ortalama faturası” 4,000 GBP oldu. Rusya'da herhangi bir istatistik bulamadım, ancak daha da kötü olduklarını varsayıyorum.

SIM değiştirme, popüler Twitter, Instagram, Facebook, VK hesaplarını, banka hesaplarını ve hatta son zamanlarda kripto para birimlerini çalmak için kullanılıyor. The Times gazetesinin bildirdiğine göre Bitcoin girişimcisi Joby Weeks'e göre. SIM değiştirmeyi kullanan yüksek profilli kripto para hırsızlığı vakaları 2016'dan bu yana basında ortaya çıkıyor; 2019 gerçek bir zirveye tanık oldu.

Mayıs ayında, Michigan'ın Doğu Bölgesi ABD Başsavcılığı getirilen suçlamalar Yaşları 19 ile 26 arasında değişen dokuz genç: "Topluluk" adlı bir hacker çetesinin parçası olduklarına inanılıyor. Çete, bilgisayar korsanlarının 2,4 milyon doların üzerinde değere sahip kripto para birimini çalmasıyla sonuçlanan yedi takas saldırısıyla suçlanıyor. Ve Nisan ayında Kaliforniyalı öğrenci Joel Ortiz, SIM değişimi nedeniyle 10 yıl hapis cezasına çarptırıldı; kripto para birimi cinsinden üretimi 7.5 milyon dolardı.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin
Joel Ortiz'in üniversite basın toplantısındaki fotoğrafı. İki yıl sonra siber dolandırıcılık suçundan tutuklanacak.

SIM takası nasıl çalışır?

"Swaping" takas anlamına gelir. Bu tür planların hepsinde suçlular, genellikle SIM kartı yeniden vererek kurbanın telefon numarasını ele geçiriyor ve bunu şifreyi sıfırlamak için kullanıyor. Teorik olarak tipik bir SIM değişimi şuna benzer:

  1. İstihbarat teşkilatı. Dolandırıcılar kurbanın kişisel bilgilerini bulur: adı ve telefon numarası. Açık kaynaklarda (sosyal ağlar, arkadaşlar) bulunabilir veya bir suç ortağından - bir mobil operatörün çalışanından alınabilirler.
  2. Engelleme. Kurbanın SIM kartı devre dışı bırakıldı; Bunu yapmak için sağlayıcının teknik desteğini aramanız, numarayı vermeniz ve telefonun kaybolduğunu söylemeniz yeterlidir.
  3. Numarayı yakalayın ve SIM kartınıza aktarın. Genellikle bu, telekom şirketindeki bir suç ortağı aracılığıyla veya belgelerde sahtecilik yoluyla da yapılır.

Gerçek hayatta ise işler daha da vahim. Saldırganlar bir kurban seçer ve ardından telefonun konumunu günlük olarak takip eder; abonenin dolaşıma geçtiğine dair bilgi almak için yapılan bir talep 1-2 sente mal olur. SIM kartın sahibi yurt dışına çıkar çıkmaz, iletişim mağazasının müdürüyle yeni bir SIM kart verilmesi için pazarlık yapıyorlar. Maliyeti yaklaşık 50 dolar (farklı ülkelerde ve farklı operatörlerde 20 ila 100 dolar arasında bilgi buldum) ve en kötü durumda yönetici kovulacak - bunun hiçbir sorumluluğu yok.

Artık tüm SMS'ler saldırganlar tarafından alınacak ve telefonun sahibi bu konuda hiçbir şey yapamayacak - kendisi yurtdışında. Daha sonra kötü adamlar kurbanın tüm hesaplarına erişiyor ve istenirse şifreleri değiştiriyor.

Çalınan malı iade etme şansı

Bankalar bazen mağdurları yarı yolda bırakıyor ve hesaplarından transferleri çekiyor. Dolayısıyla suçlu bulunmasa bile itibari paranın iadesi mümkün. Ancak kripto para cüzdanlarında her şey daha karmaşıktır ve teknik olarakve yasal olarak. Şu ana kadar tek bir borsa/cüzdan takas mağdurlarına tazminat ödemedi.

Mağdurlar paralarını mahkemede savunmak isterlerse, operatörü suçluyorlar: hesaptan para çalınması için gerekli koşulları o yarattı. Ben de tam olarak bunu yaptım Michael TurpinTakas nedeniyle 224 milyon dolar kaybeden , şimdi telekomünikasyon şirketi AT&T'ye dava açıyor.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

Şu ana kadar hiçbir eyaletin kripto para sahiplerini yasal olarak korumaya yönelik çalışma planları yok. Sermayenizi sigortalatmanız veya kaybınız için tazminat almanız mümkün değildir. Bu nedenle takas saldırısını önlemek, sonuçlarıyla uğraşmaktan daha kolaydır. En belirgin yol, 2FA için daha güvenilir bir "ikinci faktör" kullanmaktır.

SMS yoluyla 2FA'nın tek sorunu SIM değişimi değil

SMS'deki onay kodları da teknik açıdan güvenli değildir. Sinyal Sistemi 7'deki (SS7) yamalanmamış güvenlik açıkları nedeniyle mesajlara müdahale edilebilir. SMS üzerinden 2FA, resmi olarak güvensiz olarak kabul edilmektedir (ABD Ulusal Standartlar ve Teknoloji Enstitüsü bunu kendi raporunda belirtmektedir). Dijital Kimlik Doğrulama Kılavuzu).

Aynı zamanda, 2FA'nın varlığı sıklıkla kullanıcıya sahte bir güvenlik hissi verir ve kullanıcı daha basit bir şifre seçer. Dolayısıyla bu tür bir kimlik doğrulama işi zorlaştırmaz, aksine saldırganın hesaba erişmesini kolaylaştırır.

Ve çoğu zaman SMS uzun bir gecikmeyle geliyor ya da hiç ulaşmıyor.

Diğer 2FA yöntemleri

Elbette ışık akıllı telefonlara ve SMS'e yaklaşmadı. 2FA'nın başka yöntemleri de var. Örneğin, tek seferlik TAN kodları: ilkel bir yöntem, ancak işe yarıyor - bazı bankalarda hala kullanılıyor. Biyometrik verileri kullanan sistemler var: parmak izleri, retina taramaları. Kolaylık, güvenilirlik ve fiyat açısından makul bir uzlaşma gibi görünen bir diğer seçenek ise 2FA'ya yönelik özel uygulamalardır: RSA Token, Google Authenticator. Ayrıca fiziksel anahtarlar ve başka yöntemler de vardır.

Teorik olarak her şey mantıklı ve güvenilir görünüyor. Ancak pratikte modern 2FA çözümlerinin sorunları var ve bu sorunlar nedeniyle gerçeklik beklentilerden farklı oluyor.

Göre keşif2FA kullanımı prensipte bir rahatsızlıktır ve 2FA'nın SMS yoluyla popülaritesi "diğer yöntemlere kıyasla daha az rahatsızlık" ile açıklanmaktadır - tek seferlik kodların alınması kullanıcı için anlaşılabilir bir durumdur.

Kullanıcılar birçok 2FA yöntemini erişimin kaybedileceği korkusuyla ilişkilendirmektedir. Fiziksel anahtar veya TAN şifrelerinin listesi kaybolabilir veya çalınabilir. Kişisel olarak Google Authenticator ile kötü deneyimlerim oldu. Bu uygulamanın bulunduğu ilk akıllı telefonum bozuldu; hesaplarıma erişimi yeniden sağlama çabalarımı takdir edin. Diğer bir sorun ise yeni bir cihaza geçmektir. Güvenlik nedeniyle Google Authenticator'ın dışa aktarma seçeneği yoktur (anahtarlar dışa aktarılabiliyorsa güvenlik nasıldır?). Anahtarları elle taşıdığımda eski akıllı telefonu raftaki bir kutuda bırakmanın daha kolay olduğuna karar verdim.

2FA yöntemi şöyle olmalıdır:

  • Güvenli - hesabınıza saldırganlar değil, yalnızca siz erişmelisiniz
  • Güvenilir - ihtiyacınız olduğunda hesabınıza erişebilirsiniz
  • Kullanışlı ve erişilebilir - 2FA'yı kullanmak kolaydır ve minimum zaman alır
  • Ucuz

Blockchain'in doğru çözüm olduğuna inanıyoruz.

Blockchain'de 2FA kullanın

Kullanıcı için blockchain üzerindeki 2FA, SMS yoluyla tek seferlik kod almaya benziyor. Tek fark teslimat kanalıdır. 2FA kodu alma yöntemi, blockchain'in sunduklarına bağlıdır. Projemizde (bilgiler profilimde mevcut) bu bir Web uygulaması, Tor, iOS, Android, Linux, Windows, MacOS.

Hizmet, tek seferlik bir kod oluşturur ve bunu blockchain üzerindeki messenger'a gönderir. Ardından klasikleri takip edin: Kullanıcı, alınan kodu servis arayüzüne girer ve oturum açar.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

makale Merkezi olmayan bir mesajlaşma sistemi blockchain üzerinde nasıl çalışır? Blockchain'in mesaj iletiminin güvenliğini ve gizliliğini sağladığını yazdım. 2FA kodlarını gönderme konusunda şunları vurgulayacağım:

  • Hesap oluşturmak için tek tıklamayla - telefon veya e-posta yok.
  • 2FA kodlu tüm mesajlar Uçtan Uca curve25519xsalsa20poly1305 ile şifrelenir.
  • MITM saldırısı hariçtir; 2FA koduna sahip her mesaj, blok zincirindeki bir işlemdir ve Ed25519 EdDSA tarafından imzalanır.
  • 2FA kodlu mesaj kendi bloğunda biter. Blokların sırası ve zaman damgası düzeltilemez, dolayısıyla mesajların sırası da düzeltilemez.
  • Bir mesajın “gerçekliğini” kontrol eden merkezi bir yapı yoktur. Bu, fikir birliğine dayalı dağıtılmış bir düğüm sistemi tarafından yapılır ve kullanıcılara aittir.
  • Devre dışı bırakılamaz - hesaplar engellenemez ve mesajlar silinemez.
  • 2FA kodlarına istediğiniz zaman istediğiniz cihazdan erişin.
  • Mesaj tesliminin 2FA koduyla onaylanması. Tek kullanımlık şifreyi gönderen servis, şifrenin teslim edildiğinden emin olur. “Tekrar gönder” düğmesi yok.

Diğer bazı 2FA yöntemleriyle karşılaştırmak için bir tablo hazırladım:

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

Kullanıcı, kodları bir saniyede almak için blockchain messenger'da bir hesap alır; oturum açmak için yalnızca bir parola kullanılır. Bu nedenle başvuru yöntemleri farklı olabilir; tüm hizmetlere ait kodları almak için tek bir hesap kullanabilir veya her hizmet için ayrı bir hesap oluşturabilirsiniz.

Ayrıca bir rahatsızlık da var - hesapta en az bir işlem olması gerekiyor. Kullanıcının kodlu şifreli bir mesaj alabilmesi için, onun genel anahtarını bilmeniz gerekir ve bu, yalnızca ilk işlemde blockchain'de görünür. Bu durumdan bu şekilde kurtulmayı başardık: Onlara cüzdanlarına ücretsiz jeton alma fırsatı verdik. Ancak daha iyi bir çözüm, hesaba ortak anahtar adını vermektir. (Karşılaştırma için hesap numaramız var U1467838112172792705 genel anahtarın bir türevidir cc1ca549413b942029c4742a6e6ed69767c325f8d989f7e4b71ad82a164c2ada. Messenger için bu daha kullanışlı ve okunabilirdir, ancak 2FA kodlarını gönderme sistemi için bu bir sınırlamadır). Gelecekte birisinin böyle bir karar alıp “Rahatlık ve Erişilebilirlik”i yeşil bölgeye taşıyacağını düşünüyorum.

2FA kodu göndermenin fiyatı gerçekten çok düşük - 0.001 ADM, şimdi 0.00001 USD. Yine blockchain'inizi yükseltip fiyatı sıfır yapabilirsiniz.

Blockchain üzerindeki 2FA'yı hizmetinize nasıl bağlayabilirsiniz?

Umarım hizmetlerine blockchain yetkilendirmesi eklemek için birkaç okuyucunun ilgisini çekebilmişimdir.

Örnek olarak messenger'ımızı kullanarak bunu nasıl yapacağınızı anlatacağım ve benzetme yoluyla başka bir blockchain kullanabilirsiniz. 2FA demo uygulamasında hesap bilgilerini depolamak için postgresql10 kullanıyoruz.

Bağlantı aşamaları:

  1. 2FA kodlarını göndereceğiniz blockchain üzerinde bir hesap oluşturun. Mesajları kodlarla şifrelemek ve işlemleri imzalamak için özel anahtar olarak kullanılan bir parola alacaksınız.
  2. 2FA kodları oluşturmak için sunucunuza bir komut dosyası ekleyin. Halihazırda tek seferlik şifre teslimi içeren başka bir 2FA yöntemini kullanıyorsanız bu adımı zaten tamamlamışsınız demektir.
  3. Blockchain messenger'da kullanıcıya kod göndermek için sunucunuza bir komut dosyası ekleyin.
  4. 2FA kodunu göndermek ve girmek için bir kullanıcı arayüzü oluşturun. Halihazırda tek seferlik şifre teslimi içeren başka bir 2FA yöntemini kullanıyorsanız bu adımı zaten tamamlamışsınız demektir.

1 Hesap oluşturma

Blockchain'de bir hesap oluşturmak, özel bir anahtar, genel anahtar ve türetilmiş bir hesap adresi oluşturmak anlamına gelir.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

Öncelikle BIP39 parolası oluşturulur ve bundan SHA-256 karma değeri hesaplanır. Karma, k özel anahtarını ve kp genel anahtarını oluşturmak için kullanılır. Genel anahtardan, aynı SHA-256'yı ters çevirmeyle kullanarak, blok zincirindeki adresi alıyoruz.

Her seferinde yeni bir hesaptan 2FA kodu göndermek istiyorsanız, hesap oluşturma kodunun sunucuya eklenmesi gerekecektir:

import Mnemonic from 'bitcore-mnemonic'
this.passphrase = new Mnemonic(Mnemonic.Words.ENGLISH).toString()

…

import * as bip39 from 'bip39'
import crypto from 'crypto'

adamant.createPassphraseHash = function (passphrase) {
  const seedHex = bip39.mnemonicToSeedSync(passphrase).toString('hex')
  return crypto.createHash('sha256').update(seedHex, 'hex').digest()
}

…

import sodium from 'sodium-browserify-tweetnacl'

adamant.makeKeypair = function (hash) {
  var keypair = sodium.crypto_sign_seed_keypair(hash)
  return {
    publicKey: keypair.publicKey,
    privateKey: keypair.secretKey
  }
}

…

import crypto from 'crypto'

adamant.getAddressFromPublicKey = function (publicKey) {
  const publicKeyHash = crypto.createHash('sha256').update(publicKey, 'hex').digest()
  const temp = Buffer.alloc(8)
  for (var i = 0; i < 8; i++) {
    temp[i] = publicKeyHash[7 - i]
  }
  return 'U' + bignum.fromBuffer(temp).toString()
}

Demo uygulamasında bunu basitleştirdik - web uygulamasında bir hesap oluşturduk ve kodları buradan gönderdik. Çoğu durumda bu kullanıcı için de daha uygundur: Hizmetin belirli bir hesaptan 2FA kodları gönderdiğini bilir ve buna ad verebilir.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

2 2FA kodları oluşturma

Her kullanıcı girişi için bir 2FA kodu oluşturulmalıdır. Kütüphaneyi kullanıyoruz gizli bar, ancak başka birini de seçebilirsiniz.

const hotp = speakeasy.hotp({
  counter,
  secret: account.seSecretAscii,
});

Kullanıcı tarafından girilen 2FA kodunun geçerliliğinin kontrol edilmesi:

se2faVerified = speakeasy.hotp.verify({
  counter: this.seCounter,
  secret: this.seSecretAscii,
  token: hotp,
});

3 2FA kodunun gönderilmesi

2FA kodunu göndermek için blockchain düğüm API'sini, JS API kitaplığını veya konsolu kullanabilirsiniz. Bu örnekte konsolu kullanıyoruz; bu, blockchain ile etkileşimi kolaylaştıran bir yardımcı program olan Komut Satırı Arayüzü'dür. 2FA kodlu mesaj göndermek için şu komutu kullanmanız gerekir: send message konsol.

const util = require('util');
const exec = util.promisify(require('child_process').exec);

…

const command = `adm send message ${adamantAddress} "2FA code: ${hotp}"`;
let { error, stdout, stderr } = await exec(command);

Mesaj göndermenin alternatif bir yolu da bu yöntemi kullanmaktır. send JS API kitaplığında.

4 Kullanıcı arayüzü

Kullanıcıya 2FA kodu girme seçeneğinin sunulması gerekir; bu, uygulama platformunuza bağlı olarak farklı şekillerde yapılabilir. Örneğimizde bu Vue.

Blockchain'de 2FA'yı güvence altına almak için harekete geçin

Blockchain iki faktörlü kimlik doğrulama demo uygulamasının kaynak kodu şu adreste görüntülenebilir: GitHub. Benioku'da denemek için Canlı demoya bir bağlantı var.

Kaynak: habr.com

Yorum ekle