He thong quan ly tap tin NTFS - 7 - Attribute



(Tiếp theo của He thong quan ly tap tin NTFS - 6 - MFT - MFT entry)


Attribute


Attribute là một cấu trúc dữ liệu, được sử dụng để chứa nội dung của tập tin, chứa các thông tin liên quan đến tập tin, thư mục,…v.v trong hệ thống NTFS.

Có nhiều loại attribute, mỗi loại có cấu trúc tổ chức riêng, có một mã loại (type ID) riêng. Mã loại là một số nguyên. Microsoft sắp xếp thứ tự các attribute trong mỗi MFT entry theo chiều tăng dần của mã loại, nghĩa là, attribute nào có mã loại nhỏ sẽ đứng trước, attribute nào có mã loại lớn sẽ đứng sau.

Các attribute quan trọng thường sử dụng mã loại mặc định, tuy nhiên mã này có thể được định nghĩa lại trong siêu tập tin $AttrDef.

Mỗi loại attribute cũng có một tên gọi riêng, tên gọi được viết hoa toàn bộ, bắt đầu bằng kí hiệu $.

Bảng sau liệt kê một số loại attribute.

Mã loại (hệ 10)
Loại attribute
Mô tả
16
$STANDARD_INFORMATION
Chứa thông tin chung, ví dụ: các cờ, thời gian tạo, thời gian truy cập mới nhất, thời gian ghi mới nhất, người sở hữu, định danh bảo mật (security ID).
32
$ATTRIBUTE_LIST
Cho biết vị trí các attribute của một tập tin.
48
$FILE_NAME
Chứa tên tập tin (dạng Unicode), thời gian tạo, thời điểm ghi tập tin mới nhất, thời điểm truy cập mới nhất.
64
$VOLUME_VERSION
Chứa thông tin về ổ đĩa. Chỉ có ở phiên  bản 1.2
64
$OBJECT_ID
Chứa định danh duy nhất của tập tin hoặc thư mục. Chỉ có ở phiên bản 3.0 trở về sau.
80
$SECURITY_DESCRIPTOR
Chứa thông tin về bảo mật và thông tin kiểm soát truy cập của tập tin.
96
$VOLUME_NAME
Chứa tên ổ đĩa logic.
112
$VOLUME_INFORMATION
Chứa thông tin về phiên bản của hệ thống quản lý tập tin và các cờ hiệu.
128
$DATA
Chứa nội dung của tập tin.
144
$INDEX_ROOT
Chứa nút gốc (root node) của cây chỉ mục (index tree).
160
$INDEX_ALLOCATION
Chứa các nút của cây chỉ mục (index tree) có gốc thuộc attribute $INDEX_ROOT.
176
$BITMAP
Chứa bitmap cho siêu tập tin $MFT và cho các chỉ mục.
192
$SYMBOLIC_LINK
Chứa thông tin liên kết mềm. Chỉ có ở phiên bản 1.2
192
$REPARSE_POINT
Chứa thông tin liên kết mềm. Có ở các phiên bản 3.0 về sau.
208
$EA_INFORMATION
Chứa thông tin đảm bảo việc tương thích với các ứng dụng trên nền OS/2.
224
$EA
Chứa thông tin đảm bảo việc tương thích với các ứng dụng trên nền OS/2.
256
$LOGGED_UTILITY_STREAM
Chứa khóa (key) và thông tin mã hóa attribute (encrypted attribute) trong các phiên bản từ 3.0 về sau.

Với hệ thống quản lý tập tin FAT32, có thao tác đọc và ghi nội dung tập tin. Tuy nhiên, đối với hệ thống NTFS, thao tác đọc và ghi nội dung tập tin được thay thế bằng thao tác đọc và ghi các attribute.

Cấu trúc của một attribute gồm hai phần: header của attribute và nội dung của attribute. Xem Hình 24 dưới đây.




Header của attribute

Header của attribute là phần đầu của mỗi attribute, có kích thước 16 byte. Header chứa thông tin về: mã loại, kích thước và tên của attribute. Header cũng chứa cờ báo cho biết attribute có được nén hay không? có được mã hóa hay không?

Cấu trúc cụ thể của header được minh họa trong bảng sau.

Byte thứ
Mô tả
0 – 3
Mã loại của attribute (type ID)
4 – 7
Kích thước của attribute
8 – 8
Cờ báo non-resident
9 – 9
Chiều dài của tên attribute
10 – 11
Vị trí (offset) chứa tên của attribute
12 – 13
Các cờ báo
14 – 15
Định danh của attribute (định danh này là duy nhất trong phạm vi một MFT entry)

Một MFT entry có thể chứa nhiều attribute cùng loại. Mỗi attribute có một mã định danh riêng (identifier) để phân biệt, mã định danh cần đảm bảo tính duy nhất trong phạm vi mỗi MFT entry.

Đọc nội dung header của attribute

Hình 25 dưới đây minh họa việc đọc header của attribute.



Từ header của MFT entry, địa chỉ (offset) 0x14 -> 0x15 cho biết nơi bắt đầu của các attribute (đơn vị tính là byte). Giá trị của trường này là 0x0038, đổi sang hệ thập phân là 56. Nghĩa là, trong MFT entry này, các attribute sẽ được bắt đầu từ byte thứ 56.

Đọc 16 byte, bắt đầu từ byte thứ 56 sẽ là header của attribute đầu tiên, phần tô màu xanh lá cây trong Hình 25.

Giá trị cụ thể các trường của header được thể hiện trong bảng sau.

Byte thứ
Giá trị (Hệ 16 – Hệ 10)
Mô tả
0 – 3
0x00000010 – 16
Mã loại là 16: $STANDARD_INFORMATION
4 – 7
0x00000060 – 96
Kích thước của attribute là 96 byte
8 – 8
0x00 – 0
Attribute thuộc kiểu resident
9 – 9
0x00 – 0
Attribute này không được đặt tên, nên không có giá trị chiều dài của tên.
10 – 11
0x0000 – 0
Attribute này không được đặt tên, nên không có thông tin về vị trí của tên.
12 – 13
0x0000 – 0
Giá trị cờ báo
14 – 15
0x0000 – 0
Định danh của attribute (attribute ID) là 0.

Nội dung của attribute

Phần nội dung của attribute được sử dụng để chứa dữ liệu ở định dạng bất kì, với kích thước bất kì. Ví dụ, attribute chứa nội dung của một tập tin có thể có kích thước từ vài MB tới hàng GB. Tuy nhiên, kích thước của một MFT entry chỉ là 1024 byte, nên việc chứa toàn bộ nội dung của attribute trong MFT entry là không thực tế.

Để giải quyết vấn đề này, hệ thống NTFS cung cấp hai tùy chọn để lưu nội dung của attribute:

-         lưu trực tiếp trong MFT entry,

-         và lưu ở ngoài MFT entry.

Attribute có phần nội dung được lưu ngay trong MFT entry được gọi là resident attribute (attribute thường trú), thường áp dụng với các attribute có kích thước phần nội dung nhỏ.

Attribute lưu phần nội dung ở các cluster bên ngoài MFT entry được gọi là non-resident attribute (attribute không thường trú).

Trong header của attribute có trường cho biết attribute đó là resident hay non-resident. Nếu attribute thuộc loại resident, phần nội dung sẽ được đặt ngay sau header của attribute, ngược lại, nếu attribute thuộc loại non-resident, header sẽ cung cấp địa chỉ của cluster. Xem hình minh họa sau đây, Hình 25: attribute thứ nhất, thứ hai thuộc loại resident, attribute thứ ba thuộc loại non-resident.



Tổ chức cụ thể của một attribute kiểu non-resident sẽ được trình bày sau.

Phần này sẽ trình bày về tổ chức của một attribute kiểu resident. Cấu trúc của một attribute kiểu resident được minh họa trong bảng sau.

Byte thứ
Mô tả
0 - 15
Cấu trúc header chuẩn (có trong tất cả các loại attribute – Hình 25).
16 – 19
Cho biết kích thước phần nội dung của attribute.
20 - 21
Cho biết nơi bắt đầu (offset) của phần nội dung.

Tùy thuộc vào mỗi loại attribute, phần nội dung của attribute sẽ có cấu trúc tổ chức khác nhau.

Để hiểu rõ hơn về cấu trúc của attribute, phần tiếp theo sẽ trình bày chi tiết về các attribute: $STANDARD_INFORMATION, $FILE_NAME, $DATA.

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

Tài liệu đã tham khảo:
Brian Carrie, File System Forensic Analysis, Addison Wesley Professional, 2005
-------------------
Cập nhật 2014/5/29
-----------------------
Đọc thêm
He thong quan ly tap tin NTFS - 8 - Attribute
$STANDARD_INFORMATION 
-----
Bạn muốn tự học HTML bài bản? Xem thêm