Aşağıdaki kopya korumasını kırmak ne kadar kolay? [kapalı]


11

ARM cihazında (Raspberry Pi) Linux çekirdeğini önyükleyebilen önyüklenebilir bir SD kart olan bazı işleri kopyalamaya karşı korumaya çalışıyorum. Bu yaklaşımı kullanıyorum:

  1. Yaklaşım şifreli bir kök dosya sistemini bağlamak için bir initrd kullanır.
  2. İnitrd, SD kartın CID'sine göre dosya sistemlerinin şifresini oluşturur. (bir karma işlevi kullanılır, henüz md5 veya sha1 üzerinde karar vermedi). Initrd, oluşturulan şifreyi kullanarak dosya sistemini bağlamaya çalışır.
  3. Şimdi en ilginç / şüpheli kısım: initrd'nin kendisi özel bir C fonksiyonu kullanılarak şifreleniyor, temel olarak her bayt özel yapılmış bir sözde rastgele jeneratör kullanılarak XOR'ed. Çekirdek, şifre çözücü olarak çalışan aynı şifreleme işlevine sahip olacak şekilde değiştirilmiştir.
  4. Sistemin kendisi çıkarılır, böylece klavye veya harici depolama kullanmanın bir yolu yoktur. Tek bir uygulama tam ekran çalışır.

Önyükleyici çekirdek ve initrd yükledikten sonra, çekirdek initrd şifresini çözer ve init betiğini yürütür, bu da parolayı oluşturur ve kök dosya sistemini bağlar.

Benim sorum: Bu kurulumu kırmak ne kadar kolay olurdu (kök dosya sisteminin şifresini çözmek ve herhangi bir SD karttan önyükleme yapmak)? En zayıf kısımlar nelerdir? Çekirdeği koda etmek ve bu özel şifreleme işlevlerini bulmak ne kadar kolay?

EDIT: İşte bazı düzeltmeler, böylece bariz şeylerle zaman kaybetmeyin:

  1. Kök aygıt LUKS (aes256) ile şifrelenecek ve anahtar SD kartın CID'si ve biraz tuz kullanılarak bazı HMAC işlevleri tarafından üretilecektir.
  2. Initramfs şifreleme için sözde rasgele algoritma aslında RC4 olacaktır, sadece anahtar bazı özel işlevler kullanılarak üretilecektir, çünkü anahtarı sadece bir bayt dizisinde saklarsam, onu geri almayı basitleştirir (evet, bu gizlilik yoluyla güvenliktir ama başka yolu yok gibi görünüyor).
  3. Bir SD kart emülatörü kullanılıyorsa, birisinin bu sistemin bir kopyasını başlatabileceğini anlıyorum, ancak bu benim için sorun değil, çünkü oldukça zor ve kimse bunu yapamaz.

Çekirdek ve initrd nerede saklanır?
user1686

Hepsi tek bir SD kartta saklanır. Her ikisi de ayrı dosyalarda. / Boot'ta her zamanki gibi saklanır.
dimovnike

Yanıtlar:


7

Bu kurulumu kırmak ne kadar kolay olurdu (kök dosya sisteminin şifresini çözmek ve herhangi bir sd karttan önyükleme yapmak)?

Kurulumunuzu "kırmanın" ne kadar zor olduğu, dosya sisteminin kendisini imzalamak / şifrelemek için kullandığınız yöntemdeki entropinin bit sayısına bağlıdır (bu, kaba kuvvet için kullanılabilecek toplam benzersiz kombinasyon sayısını belirler. şifre).

En zayıf kısımlar nelerdir?

Şüphesiz, şifre olarak önceden tanımlanmış bir CID kullanmak ve özel bir sözde rasgele sayı üretme fonksiyonu kullanmak.

Bir SD kartın CID'sinin salt okunur olması gerekiyor , ancak bu gün ve yaşta uyumlu olmayan flash bellek aygıtlarını bulmak nadir değildir. Bazı insanlar , bazı SD kartlarla CID'nin üzerine yazma yeteneğini bile gösterdi . Bu, özellikle klonunuzu kendiniz klonladıktan sonra bir SD kartı taklit ediyorsa (ki dikkate almak isteyebileceğiniz başka bir şeydir) şifreyi kaba kuvvetle zorlamanızı kolaylaştıracaktır .

Son olarak, herhangi bir sözde rasgele sayı üretecinin kullanılması, tam olarak rastgele olmadığı için bazı içsel kusurlara sahiptir - sözde rasgele olarak adlandırılması için bir neden vardır . Önceden hazırlanmış şifreli bir bootloader ( her ikisi de Raspberry Pi'de çalışan TrueCrypt veya LUKS gibi ) kullanmak ve manuel çekirdek değişiklikleri yapmaktan kaçınmak daha iyi olabilir.

Çekirdeği koda etmek ve bu özel şifreleme işlevlerini bulmak ne kadar kolay?

Bir şey kodamak çok zordur. Tersine, derlenmiş bir uygulamanın kaldırılması genellikle önemsizdir ve tersine mühendislik montajına başka bir üst düzey dile geri dönüşte yardımcı olmak için kullanılabilecek birçok araç vardır. Saldırganın derlenmiş bir çekirdeğe bile erişimi varsa, kod rasgele bir sayı üreteci gibi bir şeyi analiz etmek, kod bilerek gizlenmedikçe muhtemelen önemsizdir.


TL, DR : Şifreleme ve güvenlik söz konusu olduğunda tekerleği yeniden icat etmeyin, denenmiş ve gerçek olana sadık kalın. Halihazırda mevcut olan ve Raspberry Pi'de iyi çalıştığı gösterilen birkaç tam disk şifreleme seçeneği vardır. SD kartın CID'sini bir tür "şifre" olarak kullanmaktan kaçınırım - değiştirilemese bile, bu değeri taklit etmenin yolları vardır.

Kopyalama koruması, SD kart spesifikasyonuna CPRM olarak eklenmiştir .


Cevap için teşekkürler. CPRM hakkında biliyorum ama özellikleri NDA ile kapalı ve (googled ne) çok para maliyeti. LUKS ve Truecrypt'e gelince, bunlar elle önyüklemede bulunan anahtarı gerektirir. TrueCrypt önyükleyiciyi bazı hmac işlevini kullanarak CID'den anahtar oluşturmak için değiştirirseniz, bundan daha iyi olur mu? Ayrıca SD kart emülatörü ile yapılabileceğini anlıyorum ama bu benim için iyi, bu korsanlar için uygun zorluk derecesi. (Anahtarın cihazda
kendiliğinden tutulduğu

@ user2021201 gerçekten sizi yönlendirmeye çalıştığım şey buydu. Bu olurdu muhtemelen ben bu hesabın gelen SD kart özelliklerine sorgulamak için yüklü bir işletim sistemi olmadığı için (bir bootloader gelen CID elde etmek ne kadar zor olacağını değilim rağmen, oldukça kolay bir kaynaktan Truecrypt bootloader değiştirmeye olmak ). Ancak, başarabilirseniz, muhtemelen ihtiyaçlarınız için kabul edilebilir ve yeterli bir çözüm olacaktır.
Atılım

1

Vasıflı biri bunu kırmakta zorlanamaz. SD kartı bir emülatör altında önyüklemek nispeten kolaydır ve daha sonra anahtarları RAM'den okuyun. Sonra kopya koruması olmayan bir versiyonu Pirate Bay'e (vb.) Gönderirler ve işte budur.

Alternatif olarak, çalışan taklit sisteme kabuk kodu enjekte etmek için emülatörü kullanın. Ardından, şifresi çözülmüş rootfs kopyalamak için çalışan sistemi kullanın (veya tuşlarını kullanarak dmsetup table --showkeysvb. Okuyun ).

Hızlı bir arama Raspberry Pi emülatörlerinin varlığını ortaya çıkarır , bu yüzden işin bir kısmı zaten yapılmıştır.

Başka bir sorununuz var, özellikle şu:

Çekirdek, şifre çözücü olarak çalışan aynı şifreleme işlevine sahip olacak şekilde değiştirilmiştir.

Bunu dağıttığınız herkes, GPL şartları altında çekirdek kaynak koduna hak kazanır. Bu yüzden sökmeye gerek kalmaz, sadece diffekstra işlevi bulmak için kullanabilirsiniz .

(Sökme yoluyla bulmak o kadar zor olmaz, örneğin stok çekirdeğine karşı kontrol edebilirsiniz)

Raspberry Pi önyükleme koduna tamamen aşina değilim, ancak önyükleyiciyi gömülü bir kripto anahtarıyla (daha sonra çekirdeğe geçirilir) yeniden aktarabilirseniz, en azından SD kartta olmaz, bu yüzden ' d emülatörde önyükleme girişiminde bulunmak.


evet lisans sorunları hakkında farkındayım, hala çekirdeği olduğu gibi bırakmanın ve hatta FreeBSD çekirdeğine geçmenin yollarını arıyorum ama şimdilik sadece teknik sorunları tartışalım. Bootloader fikri çok ilginç ama bunu uygulamanın bir yolunu bulamadım, görünüşe göre böyle bir yol yok.
dimovnike
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.