Dia cung - 15 - NTFS - Ma hoa attribute (encrypted attribute)



(tiếp theo của Dia cung - 14)

Mã hóa attribute (encrypted attribute)

NTFS có cơ chế để mã hóa phần nội dung của attribute. Về mặt lý thuyết, tất cả các attribute đều có thể mã hóa được, tuy nhiên, Windows chỉ thực hiện mã hóa cho các attribute kiểu $DATA. Khi thực hiện mã hóa một attribute $DATA, Windows chỉ thực hiện mã hóa phần nội dung (content), phần header không được mã hóa. Khóa để giải mã được lưu trong thuộc tính $LOGGED_UTILITY_STREAM.
Trong Windows người dùng có thể thực hiện mã hóa cho một thư mục hoặc tập tin bất kì. Khi mã hóa thư mục, bản thân thư mục không được mã hóa, chỉ có các tập tin trong thư mục được mã hóa. Các thư mục con và tập tin được tạo trong các thư mục đã được mã hóa cũng sẽ được mã hóa. “Cờ báo” mã hóa của một tập tin hay thư mục được lưu trong attribute $STANDARD_INFORMATION, ngoài ra còn được lưu trong chính header của attribute được mã hóa.

Cơ bản về mã hóa (cryptography)

Mã hóa là quá trình sử dụng thuật toán cùng với khóa để chuyển dữ liệu ở dạng rõ (đọc được - plaintext) sang dạng mờ (không đọc được - ciphertext). Có thể hiểu đơn giản là quá trình biến đổi dữ liệu từ dạng này sang dạng khác, để những người không có phận sự không thể biết được dữ liệu ở dạng gốc là gì. Nếu muốn biết dữ liệu ở dạng gốc là gì họ phải có khóa để giải mã.
Giải mã là quá trình ngược lại của mã hóa, sử dụng thuật toán và khóa để chuyển dữ liệu ở dạng mờ sang dạng rõ.
Có hai loại mã hóa: mã hóa đối xứng (symmetric encryption) và mã hóa bất đối xứng (asymmetric encryption).
  • Mã hóa đối xứng: là sử dụng cùng một khóa (key) cho cả quá trình mã hóa và quá trình giải mã.
  • Mã hóa bất đối xứng: cần sử dụng hai khóa khác nhau, một khóa cho quá trình mã hóa và khóa còn lại cho quá trình giải mã.
Mã hóa đối xứng thực hiện nhanh, nhưng không thuận tiện và không an toàn trong quá trình sử dụng. Nếu chúng ta thực hiện mã hóa một tập tin bất kì, sau đó, muốn chia sẻ tập tin đã được mã hóa cho nhiều người sử dụng thì có hai cách sau: một là mã hóa tập tin, sau đó gửi tập tin này cho mọi người, kèm theo khóa để giải mã, điều này giảm sự bảo mật của tài liệu; hai là nhân bản tập tin cần mã hóa, thực hiện mã hóa mỗi bản sao bằng một khóa khác nhau, gửi tập tin cho mỗi người cùng với khóa tương ứng để mở, điều này làm lãng phí thời gian và không gian lưu trữ.
Mã hóa bất đối xứng sử dụng hai loại khóa: public và private. Mọi người có thể sử dụng khóa public để mã hóa dữ liệu, và chỉ ai có khóa private mới có thể giải mã được dữ liệu. Chiều dài của khóa thường là trên 1024 bit.

Mã hóa trong NTFS

Khi thực hiện mã hóa attribute $DATA, phần nội dung của attribute $DATA được mã hóa bằng phương pháp mã hóa đối xứng (gọi tắt là DESX). Hệ thống sẽ sinh ra một khóa ngẫu nhiên cho mỗi MFT entry được mã hóa, khóa này được gọi là FEK (file encryption key). Nếu một MFT entry có nhiều attribute $DATA, thì chúng sẽ được mã hóa bằng cùng một FEK.
FEK cũng được mã hóa và lưu trong attribute $LOGGED-UTILITY_STREAM. Attribute này chứa một danh sách các DDF (data decryption fields) và DRF (data recovery fields).
Mỗi người dùng có quyền truy cập tập tin đều có một DDF riêng, trong đó gồm: SID (security ID) của người dùng, thông tin về mã hóa, FEK đã được mã hóa bằng public key của người dùng (Windows quản lý public này như thế nào?).
Mỗi phương pháp khôi phục dữ liệu (data recovery) được hệ thống tạo cho một DRF tương ứng, mỗi DRF gồm: FEK đã được mã hóa bằng public key của phương pháp phục hồi dữ liệu. DRF được administrator hoặc các người dùng hợp lệ sử dụng khi truy cập dữ liệu.
Quá trình mã khóa phần nội dung của attribute $DATA (nội dung của tập tin) được minh họa trong hình dưới đây.

Quá trình giải mã

Để giải mã attribute $DATA, hệ thống sẽ:
o       Đọc attribute $LOGGED_UTILITY_STREAM để xác định DDF của người dùng.
o       Sử dụng private key của người dùng để giải mã FEK.
o       Sử dụng FEK để giải mã attribute $DATA.
Khi gỡ bỏ quyền truy cập tập tin của người dùng, key của người dùng sẽ bị gỡ bỏ khỏi danh sách trong $LOGGED_UTILITY_STREAM.
Private key của người dùng được lưu trong registry của Windows. Private key được mã hóa bằng thuật toán mã hóa đối xứng với key là mật khẩu đăng nhập của người dùng. Vì vậy quá trình giải mã sẽ cần sử dụng tới mật khẩu đăng nhập của người dùng và registry.
Quá trình giải mã được minh họa trong hình dưới đây.

Mã hóa dữ liệu không an toàn tuyệt đối

Một vài công cụ có thể thực hiện tấn công, dò tìm được mật khẩu của người dùng, khi có mật khẩu, người tấn công có thể thực hiện giải mã các tập tin đã được mã hóa.
Trong quá trình thực hiện mã hóa, NTFS sẽ tạo ra tập tin tạm có tên EFS0.TMP. Tập tin EFSS0.TMP chứa nội dung của tập tin đang mã hóa. Sau khi thực hiện mã hóa xong, NTFS thực hiện xóa tập tin này, tuy nhiên, nội dung của nó vẫn còn tồn tại trên đĩa nếu MTF entry của EFS0.TMP chưa được cấp phát lại.
Trong swap space hoặc page file cũng có chứa nội dung của dữ liệu ở dạng chưa mã hóa.
Tài khoản Administrator, các tài khoản có quyền hợp lệ trên domain controller nếu được cấu hình để khôi phục dữ liệu của hệ thống, đều có thể thực hiển giải mã được các tập tin trên hệ thống.

 ---------------------------

Tham khảo
[1] Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
----------------------
Cập nhật: 2013/10/2