(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