Ticari kullanım için Pi'deki yazılımı nasıl koruyabilirim?


16

Raspberry Pi'yi ticari bir üründe kullanmak istiyorum, ancak yazılımın cihazda tersine mühendislik yapmasını önlemek istiyorum. Söz konusu yazılım Ruby'de yazılır. Son kullanıcının SD karta fiziksel erişimi olduğunu ve Pi'ye root erişimi sağlayacak kadar akıllı olduğunu varsayıyorum.

Gördüğüm gibi, seçenekler şunları içerebilir:

  • SD kartın bir kısmını (veya tümünü) şifrele
  • Ruby kodunu gizleyin veya bayt koduna (JRuby veya Rubinius) derleyin

Şifreleme en iyi çözüm olurdu, ancak kullanıcıdan anahtarı sormadan şifresini çözmenin bir yolunu düşünemiyorum. Kod gizleme kesinlikle mümkündür, ancak aklımda daha az güvenlidir.

SD kartın bir bölümünü kullanıcıdan şifresini çözmek için bir anahtar sormadan şifrelemek mümkün mü? Veya kodun yalnızca istenen cihazda erişilebilir olduğundan emin olmanın daha iyi bir yolu var mı?


Benzer bir çözüm arıyorum. Aldığım en iyi yanıt, belirli koşulları kullanarak önyüklemeden sonra şifrelenen bir görüntü (bölüm) monte etmektir (belki de dinamik şifre çözme anahtarı sağlamak için DRM gibi ajax çağrısı, kilitleme algoritması olan bir seri numarası ((SN * tarih - 1)) - Sadece başka bir yol, kodunuzu c ++ veya .net (mono) gibi ikili dosyalara derleyebilen bir kod kullanmak ve iyi yazılım krakerlerinin yazılımınızı hedeflemeyeceğini ummaktır - Microsoft'un bu sorun için böyle bir sorun yaşamadığını biliyorsunuz ... Çözüldü .. İyi şanslar!
Piotr Kula

Yanıtlar:


8

Tabii ki şifreli dosya / kapsayıcılar / vb şifresini çözmek mümkündür. şifre sormadan. (Şifreli) şifreyi SD karta depolamak ve verilerinizin şifresini çözmek için kullanmak yeterlidir. Örneğin, kolay bir openssldemo şunlar olabilir:

openssl enc -a -e -salt -aes-256-cbc -pass pass:abc123 -in /tmp/plaintext.txt -out /tmp/ciphertext.enc

openssl enc -d -a -aes-256-cbc -pass pass:abc123 -in /tmp/ciphertext.enc

Şifreleme, yazılımı Pi'ye yüklerken gerçekleştirilir ve şifre çözme çalışma zamanında, muhtemelen RAM'de gerçekleştirilir. Örneğin, parola, bazı bilinen sahte sıra numarası (sizin tarafınızdan bilinen) ile a'dan elde edilen belirli Pi'nin seri numarasının bir kombinasyonu olabilir cat /proc/cpuinfo. Sonra bakılırsa bakılsın "etmektir bu yalancı rasgele bir sayı saklamak için uygun bir şekilde gizli bir yer bulmak zorunda şifre " ve bütün şifreleme mekanizması dolayısıyla zayıf noktası. Örneğin, SD'deki yedek bir sektör tipik bir seçim olabilir, ancak bunu yürütülebilir dosyalarınızdan birine gömebilirsiniz.

Her durumda, en iyi seçeneğiniz, yazılımınıza farklı gizleme katmanları eklemek için yazılımınızı hem şifrelemek hem de derlemektir.

Son olarak, yazılımınızın bir internet bağlantısına ihtiyacı varsa, Pi'yi her seferinde şifre isteyebilirsiniz. Şifreyi yine de bağlantı içinde gizlemeniz gerekecek, ayrıca kullanmanız httpsgerekecek saltve şifreleme için geçerli saati kullanarak yanıt saldırılarına karşı korunmanız gerekecektir .

Yazılımınızı güvenli hale getirmek için birçok (ucuz) seçeneğiniz vardır. Ancak, yazılımınız iyi tanımlanmış bir popülerlik eşiğine ulaşırsa, korumasına önemli miktarda para yatırsanız bile kesinlikle kırılacağını bilmelisiniz.


1
Güvenli modda root olarak giriş yapabilir, anahtar dosyayı okuyabilir ve tüm sıkı çalışmasının şifresini çözebilir ve milyonlarca Ruslara satabilirim. İyi deneyin .. ama kurşun geçirmez değil. Hatta https bile yönetilen bir ağ içinde DNS yönlendirmeleri ve sahte sertifikalarla kandırılabilir .. oops
Piotr Kula

1
@Avio: Öncelikle sektör bilinmiyor. Bilinmesi gerekiyor, nerede olduğu belli değil. Ancak bazı şifre çözme komut dosyası / uygulaması ile bulmanız gerektiğinden, biri bulabilirsiniz. Şifre çözme yapacak kodu bir yere koymalısınız. Nereye koymak istiyorsunuz? İnitramf'lerde, bazı SD kart bölümleri veya korunmayan başka bir yer. Herkes şifreli bölümün şifresini çözmek için kullanılan uygulamaları / komut dosyalarını görebilir ve / veya yürütülmeden önce bir tür erişim elde etmek için bunları değiştirebilir.
Krzysztof Adamski

1
Anahtarın SD kartta depolanması dışında tüm şifreleme yöntemleriniz iyi. Operatör büyük olasılıkla Pi için / Pi ile birlikte son kullanıcıya SD kart satmak istiyor. Sonra SD kartı alabilir, kaba kesmek, istismar, güvenli modu kök dosyaya okuyabilir ve diğer tüm cihaz iletişimine ve kaynak koduna sızabilirim. Bu muamma. Eminim OP şeyler şifrelemek biliyorum. Sistemin otomatik olarak şifresini çözmesine izin verirken, yazılımının şifresinin çözülmesini nasıl koruyacağını soruyor.
Piotr Kula

1
@Avio: Hayır, pek değil. Ama 'nasıl?' Diye sorduğunuz için, ben buna cevap verdim. Bunun retorik bir soru olduğunu bilmiyordum. Fikrinizi uygulamanın uygulamayı dağıtmaya başlamak için yeterli olduğunu yazdınız, ancak OP'nin (ve bunu okuyan diğerlerinin) sadece bu yaklaşımın zayıf taraflarının farkında olması gerektiğine inanıyorum. Bununla birlikte, Raspberry Pi için çok daha iyi bir çözüm olduğuna inanmıyorum. Birinin yapabileceği tek şey sadece daha fazlasını gizlemek. Belki OP uygulaması risk almak için çok kıymetlidir ve daha iyi koruma mekanizması oluşturabileceği RPi'den başka bir şey kullanmaya karar verir.
Krzysztof Adamski

1
Buradaki tüm cevaplar sorumla ilgili ödünleşmeler ve zorluklar hakkında harika bir tartışma sağlarken, bu cevabı şimdilik kabul edeceğim çünkü en somut çözüm var. / Proc / cpuinfo'dan seri numarasını kullanmak eksik bağlantı olabilir.
Schrockwell

6

Kod ve anahtarlar bir SD kart makinede ise Pratikte, bunlar olacak onlar, bunu de-derlemek mümkün olacaktır anahtarları keşfetmek mümkün ve onlar olacaktır hassas verileri ayıklamak mümkün.

Filmleri şifrelemek gibi, bir DVD de izleyiciye gösterilebilmesi için filmin şifresini çözmek için gereken tüm bilgileri içermelidir, böylece tüm film kopya koruma mekanizmaları sonuçta mahkumdur.

Yapabileceğiniz en iyi şey, ürününüzün tersine mühendislik ekonomisini değiştirmek.

Şifreleme ve / veya gizleme buna değer mi?

Şimdi kendinizi tamamen korumanın bir yolu olmadığını belirledik, sorular

  1. Bunun gerçekleşme olasılığı nedir?
  2. Algoritmanız ve verileriniz için başka birinin değeri nedir?
  3. Yazılımınızı kullanmak için lisans satın almanın maliyeti nedir?
  4. Algoritmanızı ve verilerinizi kopyalamanın maliyeti nedir?
  5. Algoritmanızı ve verilerinizi tersine mühendislik etmenin maliyeti nedir?
  6. Algoritmanızı ve verilerinizi korumanın maliyeti nedir?

Bunlar algoritmanızı / verilerinizi korumak için önemli bir ekonomik zorunluluk oluşturuyorsa, bunu yapmayı düşünmelisiniz. Örneğin, hizmetin değeri ve müşterilere maliyet yüksekse, ancak kodunuzu tersine mühendislik maliyeti, kodu kendisinin geliştirme maliyetinden çok daha düşükse, insanlar bunu deneyebilir.

Yani, bu sorunuza yol açar

  • Algoritmanızı ve verilerinizi nasıl korursunuz?

Gizleme

Önerdiğiniz seçenek, kodu şaşırtmak, yukarıdaki ekonomi ile uğraşmaktır - size maliyeti çok fazla artırmadan (yukarıda 5) maliyeti önemli ölçüde artırmaya çalışır (6). Sorun, DVD şifrelemesinde olduğu gibi, başarısızlığa mahkum olması ve 3, 4 ve 5 arasında yeterli bir fark varsa, sonunda birisinin bunu yapmasıdır.

Başka bir seçenek , kodunuzun şifresini kimin şifresini çözdüğünü ve dağıtmaya başladığını belirlemenizi sağlayan bir Steganografi formu olabilir . Örneğin, 100 farklı verilerin bir parçası olarak float değerleri ve 1bit hata varsa LSB bu bit içine bu değerlerin her olmaz uygulamanızda, kodlamak (her müşteriye) benzersiz bir sorun nedeni tanımlayıcı arasında . Sorun, birisinin uygulama verilerinizin birden fazla kopyasına erişimi varsa, farklı olduğu açıktır ve gizli iletiyi tanımlamayı kolaylaştırır.

Koruma

Gerçekten güvenli olan tek seçenek, yazılımınızın kritik bir bölümünü, uygulamanıza dahil etmek yerine hizmet olarak sunmaktır .

Kavramsal olarak, uygulamanız algoritmanızı çalıştırmak için gerekli tüm verileri toplar , bulutta bir sunucuya (sizin tarafınızdan kontrol edilen) bir istek olarak paketler , hizmetiniz sonuçlarınızı hesaplar ve istemciye geri gönderir, hangi gösterecektir.

Bu, tamamen kontrol ettiğiniz bir alandaki tüm özel, gizli verilerinizi ve algoritmalarınızı tutar ve bir istemcinin de ayıklama olasılığını ortadan kaldırır.

Bariz dezavantajı, istemcilerin servis sağlayıcınıza bağlı olması, sunucularınızın ve internet bağlantılarının insafına olmasıdır. Artı tarafta, hata düzeltmeleri ile her zaman günceller. Ne yazık ki birçok insan tam da bu nedenlerle SaaS'a itiraz ediyor .

Bu, atmak için büyük bir adım olacaktır ve yukarıda büyük bir maliyet 6 olabilir, ancak algoritmanızı ve verilerinizi tamamen güvende tutmanın tek yolu budur .


SaaS bir seçenek olabilir, ancak çevrimiçi koyduğunuz her sunucu için 1 ile 6 arasındaki noktaları yeniden kontrol etmeniz gerekeceğinin farkında olmalısınız. Ayrıca DDoS saldırılarına da maruz kalırsınız.
Avio

4

Son zamanlarda bu çözülemeyen soruna çok zarif bir çözüm icat ettim. Bu xkcd çizgi romanından ilham aldı:

resim açıklamasını buraya girin

Bu yüzden çözüme süper yapıştırıcı denir . PI'ya bir superglue SD kartı varsa Zarar vermeden kartı çıkarmak neredeyse imkansız olacaktır.

SD'de saklanan bir parola ile şifrelenmiş harici SSD diski bile kullanabilirsiniz ve kendinizi güvende hissedin!

resim açıklamasını buraya girin


Birisi kolayca bir görüntü dosyası ( dd) oluşturabilir ve buna göre kullanabilir!
Vassilis

@Vassilis giriş yapmadan imkansız mı, değil mi?
ADOConnection

Canlı linux görüntüsü olan herkes yapabilir! Bu kök olmak gerekli değildir sizin sisteme.
Vassilis

@ Vasilis sizden bu prosedürü açıklayan herhangi bir makaleye işaret etmenizi isteyebilir miyim
ADOConnection

Google'da ortaya çıkan ilk şey bu
Vassilis

2

Bayt koduna derleme en iyi iticidir. Şifrelemeye gelince, yazılım TrueCrypt biriminde saklanabilir, ancak yalnızca kullanıcı root erişimi elde edemezse; denetleme için herhangi bir zamanda bellek / disk dökülebileceğinden, parolayı güvenli bir şekilde saklamanın bir yolu yoktur. Yazılım, kullanıcının çok sayıda linux yardımcı programına sahip olduğu yerlerde çalışırsa, güvenli cihazların (akıllı kartlar) yardımı bile pek işe yaramaz. Bildiğim kadarıyla güvenli önyükleme R-Pi'de kullanıcının OS içinde dolaşmasını önleyen bir seçenek değil.


1
Önyükleme sırasında şifreleme düşündüğünüz kadar güvenli değil. Sadece normal sistem önyüklemesine erişmeniz / atlamanız yeterlidir ve hepsi kıyma etidir. Blurays bile bunu doğru anlayamadı .. kahretsin!
Piotr Kula

Yalnızca tamamen kapalı sistemler uygulamanızı koruyabilir. Bir şekilde programlanabilir olan sadece bir şeyi biliyorum - Java Kartı.
Tomas Q.

1
Evet, ancak her zaman bir PIN girmeniz gerekir - PIN ASLA kartta saklanmaz.
Piotr Kula

1

Gerçek bir Ticari uygulama yapmak istiyorsanız, Pi, son kullanıcı formunda olduğu gibi sizin için iyi değildir!

Kendi PCB'nizi tasarlamanız, örneğin Pi'deki işlemciyi kullanmanız ve bir flash belleği PCB'ye yerleştirmeniz gerekecek.

  1. Sadece son 10 saniye içinde kullanılabilen bazı gizli algoritmaları temel alarak tek bir oturum açma kodu oluşturan BCM için uygun bir ürün yazılımı yazın.
  2. Kendi çekirdeğinizi uygun yazılımınızla derleyin ve yazılımınızla başka bir şifreli bölüm içeren, şifrelenmiş bir dosyadan kök bağlamanızı sağlayan bazı Linux özelliklerini etkinleştirin. (Çift koruma)
  3. BCM ürün yazılımınız, bazı akıllı algoritmalara veya genel anahtarlara dayanan bir kez bir kimlik doğrulama anahtarı oluşturacak ve şifrelenmiş kök diskinizi yükleyecek ve şifrelenmiş yazılım sürücünüzü yüklemek için önyükleme sırasında biraz daha kriptografik şeyler yapacak olan özel linux çekirdeğinize geçirecektir. şifreli görüntü içinde.

İPUÇLARI

  • İyi kimlik doğrulama anahtarları 8-16 karakter uzunluğunda değildir. Sistem daha fazla sistem sembolü (HEX) ve daha az karakter (ASCII) kullanarak 256/512 bayt uzun kimlik doğrulama anahtarları sağlamak önemlidir
  • Kolayca çatladığı için AES, TKIP kullanmayın
  • Bugünden itibaren - Whirlpool şifrelemesi 256/512 tuşlarını kullanarak kırılması en karmaşık olanlardan biridir
  • Bir bilgisayar korsanı flash sürücüyü kaldırabilir veya içeriği dökebilir. yazılımınız iki kez şifrelenir.
  • Kimlik doğrulama anahtarına müdahale ederse, bellenimden çıkmak çok zor olacaktır (çünkü BCM bellenim dökümlerini önleyebilir)
  • Bazı akıllı flash rom'lar da tam bellek dökülmelerini önleme özelliğine sahiptir.
  • Bir PCB tasarlıyorsanız (Dell ve Apple gibi) tüm şifreleme verilerinizi ve anahtarlarınızı sağlayan ve kaba kuvvet girişimlerini önleyen bir güvenlik yongaları uygulayacaksınız. Bazı Dell'lerde Askeri kullanım için kendi kendini yok etme özelliği vardır. BIOS parolasını 2 kez yanlış koyarsanız, sürücüleri bombalarla siler. Yetkilendirme anahtarı manipülasyonları tespit ederseniz aynı işlemi uygulayabilirsiniz.

Günün sonu. Raspberry Pi, çocukların Linux kullanmayı ve bazı programlar yazmayı öğrenmeleri için Eğitim amaçlıdır.

Yüksek profilli ticari kullanıma uygun değildir. Kendi cihazınızı oluşturmanız ve kendi koruma sistemlerinizi bulmanız gerekir. Çünkü sadece siz ve başka kimse uygunluk bilgilerinizi nasıl koruduğunuzu bilmiyorsa, o zaman birinin bilinen bir istismar veya kaba kullanarak hackleme şansı .. 0.001%

ALTERNATİF

  • Hedef sisteme ikili biçimde derlenip dağıtılabilmesi için yazılımınızı yazın. .NET, JAR for Java veya (Linux, C ++ 'da emin değilim) üzerinde çalışan Windows için örnek EXE.
  • Unutmayın, ne kadar iyi bir güvenlik istiyorsanız o kadar çok para harcarsınız. İstisna yok.

1

Çözümlerden biri, belirli bir Pi için neredeyse benzersiz olan RaspberryPi'nin MAC adresini kullanmaktır. Kodunuzdaki bu adresi doğrulayın ve derlenmiş sürümü sağlayın. Bu tersine mühendisliği zorlaştıracaktır.

SD kartı körü körüne yenisine kopyalayan insanlar için başka bir Pi'de çalışmazlar. Bu, yazılımınızı çalan insanların büyük çoğunluğunu ortadan kaldıracaktır. Bunu kırmaya yetecek kadar akıllı olan diğer kişiler, yazılımı yeniden oluşturacak kadar akıllı olabilirler, sayısız değildirler ve satışlarınıza zarar vereceklerini düşünmüyorum.


0

Sırtıma dayalı bir çözüm kullanabilirsiniz: Raspberry Pi için Yazılım Seri Koruma


2
Yanılıyorsam beni düzeltin ama bu cihaz tersine mühendisliğe karşı herhangi bir koruma eklemiyor gibi görünüyor. CPU seri numarası üzerindeki basit bir kodlanmış denetim de aynısını yapacaktır.
EDP

0

Neden taşıyıcı panonuza SPI tabanlı bir flaş eklemeyin ve kodunuzu üzerinde saklamıyorsunuz? Kendi ürünüm için bu seçeneği düşünüyorum. SD bozulursa, son kullanıcının özel bir raspbian ve SPI flash mount ve yürütülebilir dosyayı çalıştırmak için kod içeren yeni bir tane yazmak mümkün olmasını istiyorum.

Başka bir seçenek de RTC'nize bir şifreleme anahtarı depolamaktır. Çoğu RTC çipinin bir miktar depolama alanı vardır ve SD veya SPI flaşından yürütülebilir dosyanın kilidini açıp monte etmeyi sağlayan anahtarla önceden programlanabilir.


-4

Raspberry Pi serisinde kullanılan tüm CPU'ların kendi güvenli bir önyüklemesini desteklediğine inanıyorum. Pi'nin sahip olmadığı 4,8,16,32 veya 64K dahili flaşın veya EEPROM'un yeniden çözülmesinin 12 volt gerektirdiğine inanıyorum. Bunlardan, Trustzone'u kodunuzla kurabilirsiniz, böylece tüm iyi şeyler görülemez. Ayrıca, statik RAM'in her iki biçiminin de belirli sayıda yeniden yazma için kararlı olduğunu anlıyorum. İlk adım, yedek bir CPU'ya sahip olmak ve bu güvenli önyükleme belleğini birkaç saat veya gün boyunca yeniden yanıtlamaktır. Sonunda, tüm bitler sabitlenir, böylece hiç kimse kodunuzu değiştiremez ve gerçek ürüne bağlı olarak, periyodik olarak 2 faktörlü bir kimlik (bankalar gibi) isteyebilirsiniz, böylece ürün bir kod tükürür ve yeniden etkinleştirme kodu gönderilir email adresi. Pi'yi biraz değiştirirseniz, ARM'nin bir CPUID'si olduğuna inanıyorum, bu yüzden gidebileceğiniz bir dizi güvenlik seviyesi. Yani, belirli bir numaraya SMS de sunabilirsiniz. Birçok yol.


1
Merhaba ve hoşgeldin. Çok fazla tahmin var ve bu gönderiye inanıyorum. İnsanlara Pi'ye 12 V uygulamalarını tavsiye etmeden önce daha ayrıntılı bir cevap vermeniz ve uygun referanslarla desteklemeniz önemle tavsiye edilir.
Ghanima
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.