Steganography توسط فایل ها: پنهان کردن داده ها به طور مستقیم در بخش ها

یک پیشگفتار کوچک

استگانوگرافی، اگر کسی به خاطر نداشته باشد، اطلاعات را در برخی از کانتینرها پنهان می کند. به عنوان مثال، در تصاویر (مورد بحث اینجا и اینجا). همچنین می توانید داده ها را در جداول سرویس سیستم فایل مخفی کنید (در این مورد نوشته شده است اینجا)، و حتی در بسته های سرویس پروتکل TCP. متأسفانه، همه این روش ها یک اشکال دارند: برای اینکه اطلاعات را به طور نامحسوس در یک ظرف "درج" کنید، به الگوریتم های حیله گری نیاز دارید که ویژگی های ساختار داخلی ظرف را در نظر می گیرند. و مشکلاتی با مقاومت ظرف در برابر دستکاری ایجاد می شود: به عنوان مثال، اگر کمی تصویر را ویرایش کنید، اطلاعات پنهان از بین می رود.

آیا می توان به نحوی بدون الگوریتم های حیله گر و دستکاری های ظریف با داده ها عمل کرد و همچنان از عملکرد کانتینر و سطح قابل قبولی از امنیت داده های پنهان اطمینان حاصل کرد؟ با نگاه کردن به آینده، می گویم - بله، می توانید! من حتی یک ابزار کاربردی ارائه خواهم کرد.

جزئیات خونین روش

ایده اصلی به سادگی یک ضربه به پیشانی است: قسمت هایی روی دیسک وجود دارد که سیستم عامل هرگز روی آنها نمی نویسد (یا در موارد نادر می نویسد). برای جلوگیری از نیاز به جستجوی این مناطق با استفاده از الگوریتم‌های حیله‌گر، از افزونگی استفاده می‌کنیم - یعنی اطلاعات پنهان خود را چندین و چند بار در تمام بخش‌های دیسک کپی می‌کنیم. سپس، درست در بالای این همه شکوه، می توانید پارتیشن های لازم را ایجاد کنید، سیستم های فایل را قالب بندی کنید، فایل ها را بنویسید و سیستم عامل ها را نصب کنید - در عین حال، بخشی از داده های مخفی ذخیره می شود و قابل بازیابی است، و تکرار مکرر به ما کمک می کند. کل اصلی را از قطعات کنار هم قرار دهید.

مزیت این روش واضح است: ما به فرمت فایل یا حتی به نوع سیستم فایل مورد استفاده وابسته نیستیم.

معایب نیز به نظر من واضح است:

  • داده های مخفی را می توان تنها با بازنویسی کامل کل دیسک و به دنبال آن ایجاد مجدد محتوای قابل مشاهده برای کاربر تغییر داد. با این حال، نمی‌توانید از نرم‌افزاری استفاده کنید که دیسک را از روی یک تصویر بازسازی می‌کند: همچنین داده‌های مخفی قبلی را دوباره ایجاد می‌کند.
  • هر چه حجم داده های مخفی بیشتر باشد، احتمال از دست دادن برخی اطلاعات بیشتر می شود.
  • بازیابی اطلاعات از دیسک ممکن است زمان زیادی را ببرد. از چند دقیقه تا چند روز (دیسک های مدرن بزرگ هستند).

حالا بیایید به جزئیات بپردازیم.

واضح است که اگر به سادگی داده های مخفی را روی دیسک بمالید، فقط از چشم غیر مسلح پنهان می شود. اگر نگاه خود را مثلاً به یک ویرایشگر دیسک مجهز کنید، داده ها با شکوه ظاهر می شوند. بنابراین، بهتر است داده ها را رمزگذاری کنید تا نمایش داده نشود. با استفاده از الگوریتم aes256-cbc، به سادگی، اما با سلیقه رمزگذاری خواهیم کرد. ما از کاربر کلید رمزگذاری را می‌خواهیم و به او اجازه می‌دهیم یک رمز عبور خوب پیدا کند.

سوال بعدی این است که چگونه می توانیم داده های "خوب" را از داده های بد تشخیص دهیم. در اینجا یک چک‌سوم به ما کمک می‌کند، اما نه ساده، بلکه SHA1. و چی؟ به اندازه کافی برای git خوب است، بنابراین برای ما نیز مناسب است. تصمیم گرفت: ما به هر بخش از اطلاعات ذخیره شده یک چک‌سوم ارائه می‌کنیم و اگر پس از رمزگشایی مطابقت داشته باشد، به این معنی است که رمزگشایی موفقیت‌آمیز بوده است.

شما همچنین به شماره قطعه و طول کل داده های مخفی نیاز دارید. شماره قطعه برای ردیابی قطعاتی است که قبلاً رمزگشایی کرده‌ایم و کدام‌ها باقی مانده‌اند. طول کل هنگام پردازش آخرین قطعه برای ما مفید خواهد بود تا داده های غیر ضروری (یعنی padding) را ننویسیم. خوب، از آنجایی که ما هنوز یک هدر داریم، نام فایل مخفی را در آنجا اضافه می کنیم. پس از رمزگشایی مفید خواهد بود تا حدس نزنید که چگونه آن را باز کنید.

آزمایش روش در عمل

برای بررسی، بیایید رایج ترین رسانه را انتخاب کنیم - درایو فلش. من یک قدیمی با ظرفیت 1 گیگابایت پیدا کردم که برای آزمایش کاملاً مناسب است. اگر شما نیز مانند من به این فکر افتادید که با رسانه فیزیکی خود را خسته نکنید، بلکه آن را روی یک فایل - یک تصویر دیسک آزمایش کنید، بلافاصله می گویم: کار نخواهد کرد. هنگام قالب بندی چنین "دیسکی"، لینوکس دوباره فایل را ایجاد می کند و تمام بخش های استفاده نشده با صفر پر می شوند.

به عنوان یک ماشین با لینوکس، متأسفانه، مجبور شدم از یک ایستگاه هواشناسی در Raspberry Pi 3 استفاده کنم که در بالکن قرار دارد. حافظه زیادی در آنجا وجود ندارد، بنابراین ما فایل های بزرگ را پنهان نمی کنیم. ما خودمان را به حداکثر اندازه 10 مگابایت محدود می کنیم. همچنین هیچ فایده ای برای مخفی کردن فایل های بسیار کوچک وجود ندارد: این ابزار داده ها را در کلاسترهای 4 کیلوبایتی روی دیسک می نویسد. بنابراین، در زیر ما خود را به یک فایل 3 کیلوبایت محدود می کنیم - در یکی از این خوشه ها قرار می گیرد.

ما درایو فلش را به صورت مرحله ای مسخره می کنیم و بعد از هر مرحله بررسی می کنیم که آیا اطلاعات پنهان قابل خواندن هستند یا خیر:

  1. قالب بندی سریع با فرمت FAT16 با حجم کلاستر 16 کیلوبایت. این همان کاری است که ویندوز 7 با فلش مموری که سیستم فایل ندارد انجام می دهد.
  2. پر کردن فلش مموری با انواع زباله تا 50 درصد
  3. پر کردن فلش مموری با انواع زباله تا 100 درصد
  4. قالب بندی "طولانی" در قالب FAT16 (رونویسی همه چیز).

دو آزمایش اول، همانطور که انتظار می رفت، با پیروزی کامل به پایان رسید: این ابزار توانست با موفقیت 10 مگابایت داده مخفی را از درایو فلش استخراج کند. اما پس از پر شدن ظرفیت درایو فلش با فایل ها، مشکلی رخ داد:

Total clusters read: 250752, decrypted: 158
ERROR: cannot write incomplete secretFile

همانطور که می بینید، تنها 158 خوشه با موفقیت رمزگشایی شدند (632 کیلوبایت داده خام، که 636424،10 بایت بار محموله می دهد). واضح است که هیچ راهی برای دریافت 1 مگابایت در اینجا وجود ندارد، اما در بین این خوشه ها به وضوح موارد تکراری وجود دارد. شما حتی نمی توانید 3 مگابایت را از این طریق بازیابی کنید. اما ما می توانیم تضمین کنیم که 120 کیلوبایت اطلاعات مخفی را از یک درایو فلش حتی پس از فرمت و نوشتن به ظرفیت بازیابی خواهیم کرد. با این حال، آزمایشات نشان می دهد که استخراج یک فایل XNUMX کیلوبایتی از چنین فلش درایو کاملاً امکان پذیر است.

متأسفانه آخرین آزمایش نشان داد که کل درایو فلش بازنویسی شده است:

$ sudo ./steganodisk -p password /dev/sda
Device size: 250752 clusters
250700 99%
Total clusters read: 250752, decrypted: 0
ERROR: cannot write incomplete secretFile

حتی یک خوشه هم زنده نمانده است... غم انگیز، اما نه غم انگیز! قبل از قالب بندی، بیایید سعی کنیم یک پارتیشن در درایو فلش ایجاد کنیم، و در حال حاضر یک سیستم فایل در آن وجود دارد. در ضمن دقیقا با این فرمت از کارخانه اومده پس کار مشکوکی انجام نمیدیم.
کاملاً انتظار می رود که فضای موجود در درایو فلش اندکی کاهش یافته باشد.

همچنین کاملاً انتظار می رود که 10 مگابایت را نتوان روی یک دیسک کاملاً پر پنهان کرد. اما اکنون تعداد خوشه های رمزگشایی شده با موفقیت بیش از دو برابر شده است!

Total clusters read: 250752, decrypted: 405

متأسفانه، جمع آوری یک مگابایت از قطعات غیرممکن است، اما دویست کیلوبایت آسان است.

خوب، اخبار مربوط به آخرین، چهارمین بررسی، این بار خوشحال کننده است: قالب بندی کامل چنین فلش مموری منجر به از بین رفتن تمام اطلاعات نشد! 4 کیلوبایت داده مخفی کاملاً در فضای بلا استفاده قرار می گیرد.

جدول خلاصه آزمون:

Steganography توسط فایل ها: پنهان کردن داده ها به طور مستقیم در بخش ها

کمی نظریه پردازی: در مورد فضای آزاد و بخش های استفاده نشده

اگر تا به حال هارد دیسک خود را به پارتیشن تقسیم کرده اید، ممکن است متوجه شده باشید که تخصیص تمام فضای آزاد روی دیسک همیشه امکان پذیر نیست. بخش اول همیشه با مقداری تورفتگی (معمولاً 1 مگابایت یا 2048 بخش) شروع می شود. در پشت آخرین بخش، همچنین اتفاق می افتد که یک "دم" کوچک از بخش های استفاده نشده باقی می ماند. و گاهی اوقات شکاف هایی بین بخش ها وجود دارد، هرچند به ندرت.

به عبارت دیگر سکتورهایی روی دیسک وجود دارند که در حین کار معمولی با دیسک نمی توان به آنها دسترسی پیدا کرد اما می توان داده ها را روی این سکتورها نوشت! و این به معنای خواندن آن نیز هست. برای این واقعیت تنظیم شده است که یک جدول پارتیشن و کد بوت لودر نیز وجود دارد که در قسمت خالی در ابتدای دیسک قرار دارند.

بیایید کمی از بخش ها فاصله بگیریم و به اصطلاح به دیسک از دید پرنده نگاه کنیم. در اینجا ما یک پارتیشن خالی روی دیسک داریم. بیایید یک سیستم فایل در آن ایجاد کنیم. آیا می توانیم بگوییم که برخی از بخش های روی دیسک پاک نشده باقی می مانند؟

ای-ای - درام رول! پاسخ تقریباً همیشه مثبت خواهد بود! در واقع، در بیشتر موارد، ایجاد یک فایل سیستم به نوشتن تنها چند بلوک از اطلاعات سرویس بر روی دیسک منجر می شود، و در غیر این صورت محتویات پارتیشن تغییر نمی کند.

و همچنین - کاملاً تجربی - می توانیم فرض کنیم که سیستم فایل همیشه نمی تواند تمام فضای اختصاص داده شده به آن را تا آخرین بخش اشغال کند. به عنوان مثال، یک سیستم فایل FAT16 با اندازه کلاستر 64 کیلوبایت بدیهی است که نمی تواند به طور کامل پارتیشنی را با اندازه نه مضرب 64 کیلوبایت اشغال کند. در انتهای چنین بخش باید یک "دم" از چندین بخش وجود داشته باشد که برای ذخیره داده های کاربر غیرقابل دسترسی است. با این حال، این فرض را نمی توان به طور تجربی تایید کرد.

بنابراین، برای به حداکثر رساندن فضای موجود برای استگانوگرام، باید از یک سیستم فایل با اندازه کلاستر بزرگتر استفاده کنید. شما همچنین می توانید یک پارتیشن ایجاد کنید، حتی اگر این کار ضروری نباشد (مثلاً در یک درایو فلش). نیازی به ایجاد بخش های خالی یا ترک مناطق غیر اختصاصی نیست - این باعث جلب توجه شهروندان علاقه مند می شود.

ابزار برای آزمایش

می توانید کد منبع برنامه را لمس کنید اینجا

برای ساخت، به Qt نسخه 5.0 یا بالاتر و OpenSSL نیاز دارید. اگر چیزی کار نمی کند، ممکن است مجبور شوید فایل steganodisk.pro را ویرایش کنید.

می توانید اندازه کلاستر را از 4 کیلوبایت به مثلاً 512 بایت (در secretfile.h) تغییر دهید. در همان زمان، هزینه اطلاعات سرویس افزایش خواهد یافت: هدر و چک جمع 68 بایت ثابت را اشغال می کنند.

شما باید برنامه را اجرا کنید، البته، با حقوق کاربر ریشه، و با احتیاط. قبل از بازنویسی فایل یا دستگاه مشخص شده هیچ سوالی پرسیده نخواهد شد!

لذت بردن.

منبع: www.habr.com

اضافه کردن نظر