Dosya sistemi steganografisi

Merhaba Habr.

Size küçük bir proje sunmak istiyorum steganografi, ders çalışırken boş zamanlarımda yaptım.

Dosya sisteminde bilgilerin gizli depolanması üzerine bir proje yaptım (daha fazla FS).
Bu, eğitim amaçlı gizli bilgileri çalmak için kullanılabilir.

Dosya sistemi steganografisi

Prototip olarak çok eski bir Linux FS seçildi ext2.

uygulama

Uygulama Hususları

Ext2 standardını "çözmek" iyiyse, FS'de sözde olanı değiştirebilirsiniz. süper bloklarSistem hakkında temel bilgileri sağlar. Ben bulunduktan sonra Bitmap'i Engelle и Inode Tablosu. Şu anda boş olan FS bloklarına bilgi kaydetme fikri neredeyse anında doğdu. Artık silahlı bir programcıdan korunmayı düşünmeye değerdi altıgen düzenleyici.

Gizli bilgileri şifrelemeden saklarsanız, FS'deki bulanıklığa rağmen, özellikle programcı neyi arayacağını biliyorsa, yine de çok dikkat çekici olacaktır. Bu nedenle kaynak dosyanın tüm bloklarının şifrelenmesine karar verildi. Blok şifreyi seçtim AESama anladığınız gibi bu önemli değil.

Okurken gerekli blokları diğerlerinden ayırmak için her bloğun başına bloğun başına özel bir işaret eklenmesine karar verildi. Bu token, kaynak dosyadaki blok numarasına bağlı olarak şifrelendi. Bu numara, yalnızca gerekli blokları bulmayı değil, aynı zamanda doğru sıralarını da tanımayı hemen mümkün kıldı.

Sistemin genel çalışma prensibi.

Dosya sistemi steganografisi

Kayıt algoritması

Puan:

  • Öncelikle kaynak dosya sistemine bazı bilgiler yazın;
  • Bu bilgileri silin (hepsini değil);
  • Gizlenecek dosya, bir işaretleyici eklenerek eşit uzunlukta bloklara bölünür;
  • Bu blokları şifreleyin;
  • Şifrelenmiş blokları boş FS bloklarına yerleştirin.

Blok diyagramı sevenler için

Aşağıda kayıt algoritmasının blok diyagramı bulunmaktadır. Algoritma girdi olarak dört dosya alır:
-Değiştirilebilir bir dosya sisteminin görüntüsü;
-Steganografiye tabi dosya;
-AES için şifreleme anahtarını içeren dosya;
-İşaretleyicili dosya.
Dosya sistemi steganografisi

Bu algoritmanın bir dezavantajı olduğunu hemen belirtmekte fayda var: dosyayı FS'ye yazdıktan sonra, yapmamalısın FS'ye yeni bir şey yazın, çünkü herhangi bir yeni bilgi sıkıştırılmış dosyamıza ayırdığımız bloklarda yer alabilir, ancak bu aynı zamanda "izlerimizi hızlı bir şekilde kapatma" olasılığını da açar.

Ancak bunun nasıl düzeltilebileceği oldukça açık: FS'de blok yazma algoritmasını yeniden yazmak gerekiyor. Bu anlaşılabilir ancak inanılmaz derecede zaman alıcı bir iştir.
Proof of Concept için bunu uygulamadım.

Sonuç olarak, FS'de aşağıdaki değişiklikler yapılacaktır; FS, steganografiden önce böyle görünüyor (daha önce bir ses dosyası kaydedilmişti).
Dosya sistemi steganografisi
Ve bilgiler zaten sıkıştırılmış haldeyken FS böyle görünüyor.
Dosya sistemi steganografisi

Okuma algoritması

Puan:

  • Anahtar ve işaretleyici oluşturma yöntemi hakkında bilgi sahibi olarak, N'nin dosya sistemi bloğunun uzunluğu ile çarpılmasının sıkıştırılmış dosyanın uzunluğundan daha büyük olacağını garanti ederek ilk N işaretleyiciyi oluşturun;
  • FS'de işaretleyicilerle başlayan blokları arayın;
  • Alınan blokların şifresini çözün ve işaretleri ayırın;
  • Ortaya çıkan blokları doğru sırayla toplayın ve kaynak dosyayı alın.

Blok diyagramı sevenler için

Aşağıda kayıt algoritmasının blok diyagramı bulunmaktadır. Algoritma girdi olarak üç dosya alır:
-Dosya sistemi görüntüsü;
-AES için şifreleme anahtarını içeren dosya;
-İşaretleyicili dosya.
Dosya sistemi steganografisi

Program çalıştırıldıktan sonra steganografili dosya sisteminden çıkarılan dosya olacak Okuma dosyası görünür; anahtar veya işaretleyici yanlış belirtildiyse Okuma dosyası boş olacaktır.
(güzellik sevenler için, yalnızca dosyayı değil, meta bilgileri içeren bir "başlık" da ekleyebilirsiniz: dosya adı, haklar, son değiştirilme zamanı vb.)

Başlangıç ​​otomasyonu

Kolaylık sağlamak için, Linux'ta başlatmayı otomatikleştirmek için bash komut dosyaları yazılmıştır (Ubuntu 16.04.3 LTS'de test edilmiştir).
Lansmana adım adım bakalım.
kayıt:

  1. sudo Copy_Flash.sh “DEVICE” - DEVICE'tan (flash) FS görüntüsünü alın;
  2. ./Write.sh “DOSYA” “ANAHTAR” “MARKER” – sanal bir ortam oluşturun, gerekli kitaplıkları indirin ve yazma komut dosyasını çalıştırın;
  3. sudo ./Write_Flash.sh “DEVICE” – değiştirilen FS'yi tekrar DEVICE'a yazın.

Okuma:

  1. sudo Copy_Flash.sh “DEVICE” - DEVICE'tan (flash) FS görüntüsünü alın;
  2. ./Read.sh “KEY” 'MARKER” - sanal bir ortam oluşturun, gerekli kütüphaneleri indirin ve okumak için skipt'i çalıştırın;
  3. Geçerli dizinde Okuma dosyasını açın - bu sıkıştırılmış bilgidir.

Sonuç

Bu steganografi yönteminin muhtemelen iyileştirilmesi, ek test edilmesi ve aşağıdakiler gibi daha popüler dosya sistemlerine genişletilmesi gerekmektedir: Fat32, NTFS и ext4.
Ancak bu çalışmanın amacı, dosya sisteminde bilgilerin gizli depolanmasının mümkün olduğu prensibi göstermekti.
Bu tür algoritmaların yardımıyla bilgileri korkusuzca saklayabilirsiniz ve eğer anahtarı biliyorsanız, böyle bir sistemi kaba kuvvetle değil (ama çok uzun bir algoritmayla) hacklemek mümkünse, o zaman anahtarı bilmeden, bu sistem bana kesinlikle kararlı görünüyor, ancak bu ayrı bir makalenin nedeni olabilir.

Tüm kodlar Python 3.5.2 sürümünde uygulanmıştır. İş örneği Youtube kanalımda sunuldu. Projenin tam kodu şu adreste yayınlanmıştır: github.
(Evet evet, üretim versiyonu için "hızlı" bir şey yazmanız gerektiğini biliyorum, örneğin C 😉)
Bu uygulamada steganografi için girdi dosyasının boyutu 1000 kB'ı geçmemelidir.

Kullanıcıya şükranlarımı sunmak istiyorum PavelMSTU Çalışmanın planlanmasında değerli tavsiyeler ve makalenin tasarımına ilişkin tavsiyeler için.

Kaynak: habr.com

Yorum ekle