Bugün Product Hunt'tayız! Yorum bırakın
Authenticator 1.16.0 yayınlandı. Yenilikleri gör
Güvenlik incelemesi yapanlar için teknik bir genel bakış. Buradaki her şey kaynak kodla doğrulanabilir — bizi daha az parlak gösteren kısımlar dahil; onları atlamak yerine açıkça yazıyoruz.
Uzantı, TOTP kodlarını OTPAuth ile yerel olarak üreten bir Manifest V3 Chrome uzantısıdır. Kod üretmek, hesapları saklamak ve onları şifrelemek hiçbir arka uca dayanmaz; kullanıcı hesabı da yoktur. Ücretsiz plan ve Pro için tek bir sunucu işletiyoruz — aşağıda anlatılan api.authenticator.sh — ve bu sunucu hiçbir zaman bir gizli anahtar, hesap adı, hizmet adı (issuer) ya da kod almaz.
Bu sunucu kimsenin hesapları için anahtar malzemesi tutmaz: anahtar emaneti ya da bizim denetimimizdeki bir kurtarma yolu yoktur. Bir kullanıcı parolasını unutur ve kurtarma kodunu kaybederse yardımcı olamayız — bu tasarım gereği böyle.
Parola koruması isteğe bağlıdır ve varsayılan olarak kapalıdır. Açıkken:
Veriler hiçbir zaman doğrudan paroladan türetilen bir anahtarla şifrelenmez. Kayıtları rastgele bir ana anahtar şifreler; PBKDF2 çıktısı yalnızca bu ana anahtarı sarmalar. Bundan iki sonuç çıkar ve ikisi de önemlidir:
Parola koruması açıkken hesap kaydının tamamı, tanımlayıcısı ve parmak izi dışında şifrelenir — servis adı dahil; böylece çalınan bir profil, kullanıcının hangi servislerde hesabı olduğunu ele vermez. Koruma açıldığında uzantı kayıtları şifreler, şifresini çözüp karşılaştırarak doğrular ve ancak ondan sonra düz metin kopyaların tümünü siler: tarayıcının yerel deposu, senkronizasyon ve yedi dönüşümlü yedek anlık görüntüsünün hepsi.
Değerlendirmeniz açısından önemli olduğu için açıkça yazıyoruz:
Kısacası: bu, veriyi beklemedeyken korur. Kullanım sırasında zaten saldırganın denetiminde olan bir cihazı savunmaz, savunamaz da.
Manifest beş izin ve hiçbir host izni bildirmez:
Hiç content script yok yok, tabs, cookies veya webRequest izinleri yok, web-accessible resources da yok. Siz orada bir kod istemedikçe sayfada bize ait hiçbir şey bulunmaz; o an çalışan şey, yalnızca o sekme ve o çağrı için, kendi tıklamanızın verdiği izinle enjekte edilir ve geriye hiçbir şey bırakmaz.
Kamerayla QR tarama, açılır pencerede değil sekmede açılan bir uzantı sayfasında çalışır — açılır pencere odağı kaybettiği anda yok edilir ve izin istemi tam olarak bunu yapar. Bunun için manifestte hiçbir izin gerekmez: tarayıcının standart kamera istemi kullanılır, uzantı origin'i başına verilir, site ayarlarından geri alınabilir ve kullanıcı tarayıcıyı açana kadar hiç sorulmaz. Video yerel olarak çözülür, hiçbir zaman iletilmez veya saklanmaz.
1.14.0'dan beri uzantı günde bir kez api.authenticator.sh ile iletişim kurar — tarayıcı başladığında ya da açılır pencere çizildikten sonra; bir kodun gösterilmesini asla bekletmez. İstek kapalı bir alan listesidir: src/billing/sync.ts dosyasındaki tek bir fonksiyonda oluşturulur ve bir test onu bu listeye bağlı tutar:
Asla gönderilmeyenler: gizli anahtarlar, hesap adları, hizmet adları (issuer), kodlar ya da bunların kullanıldığı siteler. Sunucu ülkeyi kendi uç noktasında (edge) istekten alır ve IP adresini saklamaz. Kaldırma sayfası aynı kurulum kimliğini ?i= parametresiyle alır: sunucuya kurulumun kaldırıldığını bildirir ve isteğe bağlı bir anket yanıtını bu kuruluma bağlar.
Bunun için chrome.storage.local içinde tutulanlar: kurulum kimliği, son imzalı politika ile lisans, bu kurulumun elindeki lisans anahtarı (elle yazılmış ya da bu kurulumdan satın aldıktan sonra gelmiş), sunucuya ulaşana kadar günlük açılma sayıları ve sırada bekleyen olaylar — hesap verisi yok. Senkronizasyon açıkken, kurulumun faturalandırmadan önceye ait olup olmadığı ve o lisans anahtarı da Chrome Sync'e gider; böylece kullanıcının diğer Chrome profilleri de bunları alır ve Pro'yu kendiliğinden açar. Senkronizasyon kapatılınca ikisi de Chrome Sync'ten silinir, yeniden açılınca geri konur.
Sunucudan ne döndüğü ve uzantının onu nasıl ele aldığı:
Sınır bir DRM değildir: kod açık kaynaktır ve bir çatal (fork) onu kaldırabilir. Asla mümkün olmaması gereken şey, bir kişinin başka birinin lisansını elde edebilmesi ya da kullanabilmesi veya başka birinin kurulumunu sınırlı hâle getirebilmesidir — bu bir zafiyettir ve güvenlik politikamızın kapsamındadır.
Kendiliğinden gerçekleşen iki tür istek vardır: saat kontrolü ve günlük faturalandırma kontrolü. Aşağıdaki diğer her şey kullanıcı bir yere tıkladığı için gerçekleşir. Manifest V3 uzak kodu yasaklar ve buradakilerin hiçbiri hesapları, gizli anahtarları veya üretilen kodları taşımaz. Listenin tamamı:
| Sunucu | Ne zaman | Kullanıcı verisi taşır mı? |
|---|---|---|
| time.akamai.com timeapi.io cloudflare.com | Saat sapması kontrolü, önbelleklenir; hiçbir kaynağa ulaşılamazsa Ayarlar bunu belirtir. Saat kayarsa TOTP bozulur. | Hayır |
| authenticator.sh | Kurulumda karşılama sayfası; kaldırmada, adresinde kurulum kimliğini taşıyan geri bildirim sayfası; açılır pencereden açıldığında yardım ve destek sayfaları. | Yalnızca kaldırma sayfasında kurulum kimliği; bunun dışında hayır (sıradan web sunucusu günlükleri) |
| api.authenticator.sh | Günde bir kez faturalandırma kontrolü; kullanıcı Pro satın aldığında, bir anahtar girdiğinde, bir satın alımı geri yüklediğinde ya da bir aboneliği yönettiğinde ödeme, lisans ve portal çağrıları. | Yukarıda listelenen alanlar — asla hesap verisi değil. Lisans anahtarı ya da e-posta adresi yalnızca kullanıcı birini yazdığında |
| checkout.stripe.com billing.stripe.com | Stripe Checkout ve müşteri portalı; kullanıcı Pro satın aldığında ya da bir aboneliği yönettiğinde sekmede açılır. | Alıcının orada girdikleri. Stripe'ın ve Link'in kendi koşulları geçerlidir |
| chromewebstore.google.com | Mağaza sayfası, yalnızca tıklandığında sekmede açılır: puanlama isteğinden değerlendirme formu. | Hayır (Google bunu herhangi bir mağaza sayfası ziyareti gibi görür) |
Üçüncü taraf sunuculardan yazı tipi, betik, stil veya görsel yüklenmez. Arayüzü çizmek için gereken her şey paketin içinde gelir.
Yukarıdakilerin hiçbirini bize güvenerek kabul etmek zorunda değilsiniz. Uzantı açık kaynaktır ve her sürüm yeniden üretilebilir:
.crx dosyasını Chrome Web Store'dan indirip açınnpm ci && npm run build çalıştırındist/ dizinini açılmış paketle karşılaştırınÜretilen dist/ içindeki her dosyanın SHA-256 özeti, her GitHub sürümüyle birlikte SHA256SUMS-v<version>.txt olarak ve sha256sum biçiminde yayımlanır; böylece 4. adım tek bir sha256sum -c çalıştırmasına iner. Farklar, arşiv içindeki dosya sırası ve Node yama sürümleri arasında küçültülmüş çıktıdaki boşluklarla sınırlı kalmalıdır.
Çalışma zamanı bağımlılıkları bilinçli olarak az — OTPAuth, React, jsQR, Zustand, Framer Motion ve Lucide — ve depoya işlenmiş bir lock dosyasıyla sabitlenmiş. CycloneDX biçiminde SBOM talep üzerine verilir.
Kaynak kodu inceleyinBiz küçük ve bağımsız bir sağlayıcıyız. Aşağıdakilerden biri süreciniz için kesin bir gereklilikse, bunu bir değerlendirmenin üçüncü haftasında değil şimdi bilmeniz daha iyi:
Bunların yerine sunduğumuz şey: kaynak kodun tümüyle şeffaf olması, doğrulanabilir bir derleme, asgari izin yüzeyi ve gizli anahtarlarınızın, hesap adlarınızın ya da kodlarınızın en baştan hiç gönderilmediği bir sunucu.
Zafiyet bildirimleri ve güvenlik soruları: security@authenticator.sh. Açıklama politikamız, kapsam, yanıt süreleri ve safe harbour koşulları güvenlik politikası sayfasında; neyin saklandığı ve cihazdan neyin çıktığı ise gizlilik politikası içinde anlatılıyor.
Yazılı bir tedarikçi değerlendirme formunu memnuniyetle yanıtlarız ya da kodu bir güvenlik ekibiyle birlikte adım adım gözden geçiririz.
Güvenlikle ilgili olmayan her şey için — kurulum, hesap kurtarma, bir dağıtımdaki faturalandırma soruları — destek sayfasına bakın. Lütfen zafiyet bildirimlerini oraya göndermeyin; o kutu gizli kabul edilmiyor.