Soru:
Donanım dongle'ları yazılımınızı koruyabilir mi?
Mellowcandle
2013-03-23 13:39:26 UTC
view on stackexchange narkive permalink

Çeşitli yazılım şirketleri, yazılımlarını donanım güvenliğiyle, genellikle yazılımın çalışması için takılması gereken bir dongle ile dağıtır.

Onlarla ilgili deneyimim yok ama merak ediyorum, öyle mi? gerçekten işe yarıyor mu?

Dongle aslında ne yapıyor? Bu yöntemi kullanarak güvenliği sağlamanın ve donanımın öykünmesini önlemenin tek yolunun, donanımın yazılımın bazı önemli işlevlerini yerine getirmesi, belki bir algoritma uygulaması vb.

Lütfen sorunuzun başlığını sorunun gövdesiyle eşleşecek şekilde düzenleyin. [Teklifim] (http://reverseengineering.stackexchange.com/review/suggested-edits/118) reddedildi. Sorunuz, örneğin akıllı kart veya HSM hakkında değil, kopya koruma donanım kilitleriyle ilgilidir. Bu dongle'lar * her zaman * kopya korumayla ilgilidir: Algoritmayı gizlediklerinde bile, önemli olan birinin algoritmayı kopyalayamamasıdır. Bu, örneğin kriptografik anahtarları saklamaktan çok farklı bir sorundur.
"Copyprotection" etiketini kaldırdım; "kopya-koruma" olarak yazılmalıdır, ancak sistem "kopya koruma" kaybolana kadar bu etiketi oluşturmama izin vermiyor (bu, tüm sorulardan kaldırıldıktan yaklaşık bir gün sonra gerçekleşecek).
Şu anda bu soruyu son derece geniş buluyorum ve kapatma kararı veriyorum.
üç yanıtlar:
#1
+15
Peter Andersson
2013-03-23 15:36:47 UTC
view on stackexchange narkive permalink

Problem açıklaması

Birkaç varsayımda bulunalım. Yazılım, işlevsel bileşenlere ayrılmıştır. Lisanslar, bu yazılım paketindeki işlevsel bileşenler içindir. Lisanslar zamana, sürüme veya bir dizi kullanıma dayalı olabilir, yani işlevselliği belirli bir zamana kadar kullanabilir, satın aldığınız sürümün işlevselliğini veya bazı küçük türevlerini kullanabilirsiniz veya kullanabilirsiniz. defalarca. Çözmeniz gereken iki ana senaryo var; bir saldırganın lisansa erişiminin olmadığı ve nerede olduğu.

Lisanssız saldırgan

İlk senaryo, saldırganın ürününüz için geçerli bir lisansa erişiminin olmadığı durumdur. Bu problemin çözülmesi kolaydır. Yazılımınızın işlevsel lisanslanabilir parçalarının her birine ayrı bir şifreleme anahtarı atamanız yeterlidir. Her bir işlevsel parçayı, o parça için tasarlanmış şifreleme anahtarıyla şifreleyin. Artık onlara anahtarı göndermediğiniz için, lisanslamadıkları işlevlerin şifresini çözme endişesi olmadan yazılımınızı dağıtabilirsiniz.

Lisansa erişimi olan saldırgan

Çözülmesi çok daha zor olan ikinci senaryo, saldırganın yazılımınız için geçerli bir lisansa sahip olması, ancak lisans verdiği işlevleri yeniden dağıtmak veya lisans süresini akıllıca uzatmak istemesidir.

Artık güvenilir bir zaman kaynağına ihtiyacınız var, bu sorunu şu şekilde çözebilirsiniz:

  • bir dongle'a bir genel anahtar yerleştirerek ve dongle'ı iletilmesi gereken rastgele bir meydan okuma sorunuyla çözebilirsiniz bir zaman sunucusuna. Zaman sunucusu, geçerli saati ve meydan okumayı imzalayarak ve istemciye geri göndererek yanıt verir; ardından bunu anahtara gönderir ve anahtara gönderir ve ardından dahili saati günceller ve kilidi açar.
  • dahili saati, bilgisayara takıldığı zaman. USB bağlantı noktası, takılıyken dongle'ınıza her zaman güç sağlar.
  • dahili saati, bağlı olduğu makinede yüklü sürücülerden gönderilen zaman damgalarına göre güncelleme. Yalnızca zaman damgalarının zamanında ilerlemesine izin verin. Yalnızca zaman kaynağı, imzalı bir zaman damgası sağlayan bir uzak güvenilir zaman sunucusuysa, zamanda geriye doğru harekete izin verin.

Lisansınız, gerçekte bir saldırıya uğrayan ve erişim izni olmayan sürümlere dayanıyorsa, bir lisans çünkü işlevsel birim için anahtar türetme işleviniz hem işlevsel birimin tanımlayıcısını hem de sürümünü girdi olarak alıyor.

Anahtar dağıtımı

Bu nedenle, her bir işlevsel birim için ayrı anahtarlara sahip olduğunuzda, lisanslarınız temelde simetrik anahtarların dongle'a gönderilebilmesi için dağıtılması meselesi haline gelir. Bu genellikle dongle'a gizli bir simetrik anahtar yerleştirerek, lisans şifre çözme anahtarlarını paylaşılan gizli anahtarla şifreleyerek ve ardından şifreli anahtar güncelleme dosyalarını imzalayarak yapılır. İmzalanan güncelleme dosyaları daha sonra güncellemedeki imzayı doğrulayan, paylaşılan simetrik anahtarla yeni anahtarların şifresini çözen ve daha sonra kullanmak üzere saklayan dongle'a iletilir.

Anahtar saklama

Lisans şifre çözme anahtarlarını, sona erme zaman damgalarını vb. saklamak için tüm donanım anahtarlarının güvenli depolamaya erişimi olmalıdır. Genel olarak bu, harici flash belleğe veya EEPROM'a uygulanmaz. Eğer öyleyse, ASIC veya FPGA'ya dahili bir anahtarla şifrelenmeli ve değiştirilemeyecek şekilde imzalanmalıdır.

Düz metin deliği

Kullanıcı, işlevsel bileşeninizin lisansını aldıktan sonra, gizli anahtarınızı çıkaramasa bile, bu işlevsel bileşenin şifresini çözmek için dongle'ınızı kullanabilir. Bu, tüm düz metninizi çıkarması ve şifre çözme çağrısını çıkarılan düz metne doğrudan bir çağrı ile değiştirmesi sorununa yol açar. Bazı dongle'lar, dongle'a bir işlemci yerleştirerek bu sorunu çözer. İşlevsel bileşen daha sonra, bileşenin şifresini çözen ve dahili olarak çalıştıran dongle'a şifreli olarak gönderilir. Bu, dongle'ın esasen bir kara kutu haline geldiği ve donanım kilidine gönderilen işlevsel bileşenlerin, özelliklerini keşfetmek için ayrı ayrı araştırılması gerektiği anlamına gelir.

Oracles

Pek çok dongle, şifreleme ve şifre çözme oracle'larıdır ve bu da Chosen-ciphertext saldırılarıyla, örneğin son padding oracle saldırıları gibi olası sorunlara yol açar.

Yan kanal saldırıları

Oracle sorunlarının yanı sıra şu ana kadar iyi bilinen tüm yan kanal saldırılarıyla ilgili birçok endişeniz var. Ayrıca, potansiyel ancak keşfedilmemiş yan kanallarla da ilgilenmeniz gerekir.

Dekapsülasyon

Dünyada uzmanlaşan çok sayıda şirket olduğunu unutmayın. güvenli çipleri ayırmada ve denetlemede. En iyi bilinen şirketlerden bazıları, muhtemelen artık IOActive ve chipworks bünyesinde yer alan flylogic şirketinden Chris Tarnovsky'dir. Bu tür bir saldırı pahalıdır ancak hedefinizin değerine bağlı olarak gerçek bir tehdit olabilir. Bugün dongle'lardan birkaçı, muhtemelen hiçbirinin bu tür yüksek bütçeli saldırganlara dayanamaması beni şaşırtabilir.

Çalışıyorlar mı

Güçlü şifrelemeye dayalı bir dongle verildiğinde, şifreleme anahtarlarını zamana bağlı olarak sona erdiremeyeceğiniz için zaman temelli değildir ve zaman mutlak değildir, herhangi bir yan kanal saldırısından arındırılmıştır ve çip üzerindeki kodu çalıştırır, evet bu bir kara kutuyu araştırmaya eşdeğer kodun keşfedilmesini sağlayacaktır. Bu dongle'larda meydana gelen kesintilerin çoğu, uygulayıcının genel olarak tersine mühendislik ve bilgisayar güvenliğine aşina olmaması nedeniyle donanım lisanslama sisteminin lisans sahiplerinin uygulama zayıflıklarına dayanmaktadır.

Ayrıca, mantığın çoğunluğunun internete bakan bir sunucuda uygulandığı yazılımların bile, kara kutuyu araştırarak ve istemci kodu beklentilerine göre sunucu tarafı kodunu çıkararak kırıldığını fark edin. Daima uygulamanızın bozulmasına hazırlanın ve gerçekleştiğinde bununla nasıl başa çıkılacağına dair bir plan geliştirin.

#2
+14
0xC0000022L
2013-03-25 06:11:26 UTC
view on stackexchange narkive permalink

Açıkçası Peter, doğru uygulamanın ana noktalarını ele aldı. Geçmişte - sonuçları yayınlamadan - iki farklı dongle sistemini "kırdığım" göz önüne alındığında, görüşlerimi de paylaşmak istiyorum. user276, kısmen sorunun ne olduğuna dair ipuçları veriyor.

Birçok yazılım satıcısı, bir dongle sistemini lisanslarken kendi lisanslama modelleri için bir tür güvenlik satın aldıklarını düşünüyor. Gerçeklerden daha fazla olamazlardı. Yaptıkları tek şey, nispeten güvenli bir sistem uygulamalarına olanak tanıyan araçları elde etmektir (Peters'ın cevabında belirtilen sınırlar içinde).

Genel olarak kopya korumayla ilgili sorun nedir? Bir yazılım kendi lisans şeması için matematiksel olarak sağlam şifreleme kullanıyorsa, bunun kopya korumasının güvenliği ile hiçbir ilgisi yoktur. Neden? Pekala, sonunda 22 durumu yakaladın. Kullanıcıya güvenmiyorsunuz (çünkü kullanıcı yazılımı kopyalayabilir), bu nedenle kopya koruma planınızda bir şeyleri şifreliyor veya bir şekilde şifreleme kullanıyorsunuz. Ne yazık ki, şifrelemeyi kullanmak için üründe özel anahtarınızın olması gerekir, bu da kullanıcıya güvensizlik kavramıyla tamamen çelişir. Dongle'lar, özel anahtarı (ve / veya algoritmayı ve / veya diğer bileşenleri), kullanıcının ilk etapta erişimi olmayacak şekilde donanıma yerleştirmeye çalışır.

Ancak, birçok satıcı, kutudan güvenlik satın alın, doğru uygulama için çaba sarf etmiyorlar. Bu da beni ilk örneğe getiriyor. Annemin kullandığı bir CAD programı. LPT'ye bağlanan dongle'ların daha yeni USB muadillerine göre daha sık başarısız olma eğiliminde oldukları bilgisinin dışında, bu konuda "geçici çözüm bulmaya" başladım. 2005 yılı civarındaydı.

Çok uzun sürmedi. Aslında, kodumu enjekte etmek için basit bir DLL yerleştirme saldırısı (senaryonun daha sonra bilinmeye başladığı ad) kullandım. Ve bu kod çok ayrıntılı değildi. Yalnızca belirli bir işlev, dongle'ın genellikle okuyacağı değeri (seri numarası) döndürdü ve bu da buydu. Dongle satıcısının sürücüyle birlikte yüklenmesi gereken orijinal DLL'ye aktaracağım işlevlerin geri kalanı.

Diğer dongle bundan biraz önceydi. Buradaki sorun, bir alt yüklenici için çalışıyor olmam ve yalnızca geliştirmemiz gereken yazılıma sınırlı erişimimiz olmasıydı. Yazılımın lisansını veren firma ile yazılım satıcısı arasında gerçekten bir bürokrasi meselesiydi ama bizim için büyük sıkıntılara neden oldu. Bu durumda, dongle etrafında çalışmak biraz daha zordu. Her şeyden önce, IRP'leri cihazdan ve cihaza koklamak için bir sürücünün yazılması gerekiyordu. Daha sonra şifreleme için kullanılan algoritmanın bulunması gerekiyordu. Neyse ki, her şey bizim için döngü deliği sağlayan donanımda yapılmadı. Sonunda dongle olarak görünecek küçük bir sürücümüz vardı. İşlevselliği, gerçek bir dongle'ı okuyacak, verileri kaydedecek (aslında onu kaydederek bir kullanıcı modu programına aktaracak) ve ardından bu dongle olarak görünmesi için geri yükleyecek şekilde genişletildi.

Sonuç: dongle'lar, hangi türden olursa olsun, ait oldukları programın temel işlevlerini uygularlarsa kırılması zor olacaktır. Diğer her şey için bu, çoğunlukla dongle etrafında çalışmaya başlayan kişilerin zaman ayırma kararlılığına ve istekliliğine bağlıdır. Yapıtını korumak isteyen yazılım satıcısının bir kısmının ihmali de sadece yılan yağı.

Peters'ın yanıtındaki son paragrafa dikkat edin. Ama bir fikir daha eklemek istiyorum. Bir anlamda benzersiz olduğu için gerçekten korunmaya değer olan yazılımlar, müşteri tacizi temelinde korunmamalıdır (== çoğu kopya koruma şeması). Bunun yerine, kesinlikle benzersiz bir yazılım olarak kabul edilebilecek IDA Pro örneğini düşünün. Belirli bir paketi sızdıran kişiyi bulabilmek için yazılımı filigran haline getiriyorlar. Elbette, ESET sızıntısında gördüğümüz gibi, bu her zaman yardımcı olmuyor, ancak caydırıcılık yaratıyor. Örneğin, bir kraker grubunun bir kopyayı ele geçirme olasılığı daha düşük olacaktır.

#3
+6
rev
2013-03-24 18:12:57 UTC
view on stackexchange narkive permalink

Peter'ın da belirttiği gibi, güvenlik için donanım kilidinin nasıl kullanıldığına bakmak, saldırı vektörlerini belirlemenin başlangıç ​​noktasıdır. Çoğu durumda, dongle güvenliğini uygulayan yazılım geliştiriciler en zayıf noktadır.

Geçmişte, yazılımları dongle'larla test ettiğimde, kötü durumları ortadan kaldırmak için basit güvenlik açıklarını belirlemek için ProcessMonitor ve RegShot gibi ücretsiz araçlar kullandım. dongle güvenliği uygulamaları.

Başlangıçta dongle'ın varlığını kontrol eden ve ardından yeniden başlatılıncaya kadar dongle'ı kullanmadan işlemine devam eden bir yazılım gördüm. Bu durumlarda, uygulamaya OllyDbg ile yama uygulamak, dongle sisteme takılı olmadığı sürece uygulamanın tam işlevsellikle çalışmasını söylemek o kadar da zor değildir.

Ayrıca, kullanıcının yazılımdaki bir düğmeye tıklaması, böylece kullanıcının dongle'ı taktırması gerekmez. Yazılım, "Beni Hatırla" seçeneği gibi ekstra bir işlev olduğunu iddia etti. RegShot ve ProcessMonitor bana bir dosyanın bazı bilgilerle yazıldığını ve dosya beklenen klasörde bulunduğu sürece yazılımı birden fazla sistemde dongle olmadan çalıştırabileceğimi gösterdi.

Sadece birisi AES kullanıyor diye veya Donanım Dongle'ları veya herhangi bir XYZ, güvenli oldukları anlamına gelmez. Önemli olan, güvenlik önleminde artık bilinen (veya 0 günlük güvenlik açıkları) olduğunu varsayarak, bu güvenlik önlemini doğru şekilde uygulayıp uygulamadıklarıdır.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...