(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