Steganography hệ thống tập tin

Xin chào, Habr.

Tôi muốn giới thiệu với bạn một dự án nhỏ về kỹ thuật giấu tin, được thực hiện trong thời gian rảnh rỗi sau khi học tập.

Tôi đã thực hiện một dự án về lưu trữ thông tin ẩn trong hệ thống tập tin (thêm FS).
Điều này có thể được sử dụng để đánh cắp thông tin bí mật cho mục đích giáo dục.

Steganography hệ thống tập tin

Một Linux FS rất cũ đã được chọn làm nguyên mẫu ext2.

Thực hiện

Cân nhắc thực hiện

Nếu việc "làm sáng tỏ" tiêu chuẩn ext2 là tốt, thì bạn có thể thay thế tiêu chuẩn đó trong FS có cái gọi là siêu khối, cung cấp thông tin cơ bản về hệ thống. Sau khi tôi được tìm thấy Chặn ảnh bitmap и Bảng Inode. Gần như ngay lập tức, ý tưởng ghi thông tin vào các khối FS hiện đang trống đã ra đời. Bây giờ đáng để suy nghĩ về việc bảo vệ khỏi một lập trình viên được trang bị vũ khí trình soạn thảo hex.

Nếu bạn lưu trữ thông tin ẩn mà không mã hóa thì ngay cả khi nó bị mờ trong FS, nó vẫn sẽ quá dễ thấy, đặc biệt nếu lập trình viên biết những gì cần tìm. Vì vậy, người ta quyết định mã hóa tất cả các khối của tệp nguồn. Tôi đã chọn mật mã khối AES, nhưng như bạn hiểu, điều này không quan trọng.

Để tách các khối cần thiết khỏi tất cả các khối khác khi đọc, người ta quyết định thêm một điểm đánh dấu đặc biệt vào mỗi khối ở đầu khối. Mã thông báo này đã được mã hóa tùy thuộc vào số khối trong tệp nguồn. Thủ thuật này ngay lập tức giúp bạn không chỉ tìm thấy các khối cần thiết mà còn có thể nhận ra thứ tự chính xác của chúng.

Nguyên lý hoạt động chung của hệ thống.

Steganography hệ thống tập tin

Thuật toán ghi

Các điểm:

  • Đầu tiên hãy ghi một số thông tin vào hệ thống tập tin nguồn;
  • Xóa thông tin này (không nhất thiết phải tất cả);
  • Tệp cần ẩn được chia thành các khối có độ dài bằng nhau, thêm điểm đánh dấu;
  • Mã hóa các khối này;
  • Đặt các khối được mã hóa vào các khối FS trống.

Dành cho những người yêu thích sơ đồ khối

Dưới đây là sơ đồ khối của thuật toán ghi. Thuật toán nhận bốn tệp làm đầu vào:
-Hình ảnh của một hệ thống tập tin có thể sửa đổi;
-File theo phương pháp steganography;
-File có khóa mã hóa cho AES;
-File với điểm đánh dấu.
Steganography hệ thống tập tin

Điều đáng lưu ý ngay là thuật toán này có một nhược điểm: sau khi ghi tệp vào FS, phải không viết bất kỳ điều gì mới vào FS, vì bất kỳ thông tin mới nào cũng có thể nằm trong các khối mà chúng tôi đã phân bổ cho tệp nén của mình, mặc dù điều này cũng mở ra khả năng “nhanh chóng che dấu vết của chúng tôi”.

Nhưng cách khắc phục vấn đề này khá rõ ràng: cần phải viết lại thuật toán ghi khối trong FS. Đây là một công việc dễ hiểu nhưng cực kỳ tốn thời gian.
Đối với Proof Of Consept, tôi đã không thực hiện điều này.

Do đó, những thay đổi sau đây sẽ được thực hiện đối với FS; đây là giao diện của FS trước khi ghi mật mã (tệp âm thanh đã được ghi trước đó).
Steganography hệ thống tập tin
Và đây là giao diện của FS với thông tin đã được nén.
Steganography hệ thống tập tin

Thuật toán đọc

Các điểm:

  • Với kiến ​​thức về khóa và phương pháp xây dựng điểm đánh dấu, hãy soạn N điểm đánh dấu đầu tiên, đảm bảo N nhân với độ dài của khối hệ thống tệp lớn hơn độ dài của tệp nén;
  • Tìm kiếm các khối trong FS bắt đầu bằng điểm đánh dấu;
  • Giải mã các khối nhận được và tách các điểm đánh dấu;
  • Thu thập các khối kết quả theo đúng thứ tự và lấy tệp nguồn.

Dành cho những người yêu thích sơ đồ khối

Dưới đây là sơ đồ khối của thuật toán ghi. Thuật toán nhận ba tệp làm đầu vào:
-Hình ảnh hệ thống tập tin;
-File có khóa mã hóa cho AES;
-File với điểm đánh dấu.
Steganography hệ thống tập tin

Sau khi chương trình chạy, tệp Đọc xuất hiện, đây sẽ là tệp được trích xuất từ ​​​​hệ thống tệp được ghi mật mã; nếu khóa hoặc điểm đánh dấu được chỉ định không chính xác thì tệp Đọc sẽ trống.
(đối với những người yêu thích cái đẹp, bạn không chỉ có thể chèn tệp mà còn có thể chèn “tiêu đề” chứa thông tin meta: tên tệp, quyền, thời gian sửa đổi lần cuối, v.v.)

Tự động hóa khởi động

Để thuận tiện, các tập lệnh bash được viết để tự động khởi chạy trên Linux (đã thử nghiệm trên Ubuntu 16.04.3 LTS).
Chúng ta hãy nhìn vào sự ra mắt từng bước.
Ghi lại:

  1. sudo Copy_Flash.sh “THIẾT BỊ” - lấy hình ảnh FS từ THIẾT BỊ (flash);
  2. ./Write.sh “FILE” “KEY” “MARKER” – tạo môi trường ảo, tải xuống các thư viện cần thiết và chạy tập lệnh ghi;
  3. sudo ./Write_Flash.sh “DEVICE” – ghi lại FS đã thay đổi vào DEVICE.

Đọc:

  1. sudo Copy_Flash.sh “THIẾT BỊ” - lấy hình ảnh FS từ THIẾT BỊ (flash);
  2. ./Read.sh “KEY” 'MARKER” - tạo môi trường ảo, tải xuống các thư viện cần thiết và chạy Skipt để đọc;
  3. Trong thư mục hiện tại, hãy mở tệp Đọc - đây là thông tin được nén.

Kết luận

Phương pháp steganography này có lẽ cần được cải tiến, thử nghiệm bổ sung và mở rộng cho các hệ thống tệp phổ biến hơn, chẳng hạn như Béo32, NTFS и ext4.
Nhưng mục đích của công việc này là chỉ ra nguyên tắc có thể thực hiện việc lưu trữ thông tin ẩn trong hệ thống tệp.
Với sự trợ giúp của các thuật toán như vậy, bạn có thể lưu trữ thông tin một cách an toàn và nếu, nếu bạn biết khóa, thì có thể hack một hệ thống như vậy không phải bằng vũ lực (mà bằng một thuật toán rất dài), thì không cần biết khóa, điều này Đối với tôi, hệ thống dường như hoàn toàn ổn định, tuy nhiên, điều này có thể là lý do cho một bài viết riêng.

Tất cả mã được triển khai trong phiên bản Python 3.5.2. Ví dụ công việc được giới thiệu trên kênh youtube của tôi. Mã đầy đủ của dự án được đăng trên github.
(Vâng, vâng, tôi biết rằng đối với phiên bản sản xuất, bạn cần phải viết bằng thứ gì đó “nhanh”, ví dụ như C 😉 )
Trong quá trình triển khai này, kích thước của tệp đầu vào dành cho chức năng ghi mật mã không được vượt quá 1000 kB.

Tôi muốn bày tỏ lòng biết ơn của mình tới người dùng PavelMSTU để có được những lời khuyên có giá trị trong việc lập kế hoạch nghiên cứu và những đề xuất về thiết kế của bài viết.

Nguồn: www.habr.com

Thêm một lời nhận xét