Một số API Windows trả về mã thông báo chính và một số trả lại mã thông báo mạo danh là gì. Một số API yêu cầu mã thông báo chính trong khi các API khác yêu cầu mã thông báo mạo danh.Sự khác nhau giữa Mã thông báo chính và Mã thông báo mạo danh
Ví dụ, LogonUser
thường trả về một mã thông báo ban đầu, trừ khi sử dụng LOGON32_LOGON_NETWORK
như kiểu đăng nhập (dwLogonType
):
Trong hầu hết các trường hợp, xử lý trở lại là một dấu hiệu chính mà bạn có thể sử dụng trong các cuộc gọi đến Hàm CreateProcessAsUser. Tuy nhiên, nếu bạn chỉ định cờ LOGON32_LOGON_NETWORK, LogonUser trả về một mã thông báo mạo danh mà bạn không thể sử dụng trong CreateProcessAsUser trừ khi bạn gọi DuplicateTokenEx để chuyển đổi nó thành một mã thông báo chính.
SetThreadToken
yêu cầu mã thông báo mạo danh trong khi ImpersonateLoggedOnUser
có vẻ giống như một điều tương tự.
CreateProcessAsUser
và CreateProcessWithTokenW
cả yêu cầu mã tiểu học và cả hai lưu ý một thẻ chính có thể được mua lại từ một thẻ mạo danh bằng cách gọi DuplicateTokenEx
, nhưng điều gì làm các loại thẻ nghĩa?
Các thuật ngữ nói như sau:
mã thông báo truy cập có chứa các thông tin bảo mật cho một phiên đăng nhập. Hệ thống tạo mã thông báo truy cập khi người dùng đăng nhập và mọi quá trình được thực hiện thay mặt cho người dùng đều có bản sao mã thông báo. Mã thông báo xác định người dùng, nhóm của người dùng và đặc quyền của người dùng. Hệ thống sử dụng mã thông báo để kiểm soát quyền truy cập vào các đối tượng bảo mật và để kiểm soát khả năng của người dùng thực hiện các hoạt động liên quan đến hệ thống khác nhau trên máy tính cục bộ. Có hai loại mã thông báo truy cập, chính và mạo danh.
mã thông báo truy cập mà thường được tạo ra chỉ bằng hạt nhân Windows. Nó có thể được gán cho một quá trình để biểu diễn thông tin bảo mật mặc định cho quá trình đó.
mã thông báo truy cập đã được tạo ra để nắm bắt những thông tin bảo mật của một quá trình khách hàng, cho phép một máy chủ để "mạo danh" quá trình khách hàng trong các hoạt động an ninh.
Nhưng điều đó không hoàn toàn hữu ích. Có vẻ như ai đó muốn sử dụng các từ lớn như "hạt nhân" nhưng điều này chỉ nhằm tăng thêm các câu hỏi như những gì khác (ngoài việc được gán cho một quy trình) có thể sử dụng mã thông báo chính và ai khác ngoài hạt nhân mã thông báo?
(Chúng có nghĩa là ý nghĩa của Microsoft trong đó hạt nhân chỉ là một phần của những gì chạy trong chế độ hạt nhân và cũng có điều hành, vv hoặc có nghĩa là mã chế độ người dùng cũng có thể tạo mã thông báo? nếu mã chế độ người dùng có thể tạo mã thông báo, nó sẽ phải thực hiện thông qua một cuộc gọi hệ thống, như với bất kỳ đối tượng Trình quản lý đối tượng nào, vì vậy mã thông báo sẽ thực sự được tạo trong chế độ hạt nhân.)
Dù sao, điều này không ' t trả lời câu hỏi cơ bản: Sự khác nhau giữa các loại mã thông báo là gì?Không những gì họ có thể được sử dụng hoặc cách chúng là thường được tạo.
Bạn cũng có thể tạo mã thông báo từ chế độ người dùng với các chức năng CreateToken và CreateTokenEx đã được tạo tài liệu, nhưng bạn cần rất nhiều cơ sở hạ tầng để làm như vậy, vì những chức năng này chỉ có thể được gọi từ SSP/AP. gói "). –
Điểm tốt. Lưu ý rằng không chỉ yêu cầu bạn triển khai tất cả giao diện SSP/AP (có chức năng 'SpLsaModeInitialize' sẽ trả về trong bảng chức năng, v.v.), không giống như SSPs, SSP/AP chạy như một phần của LSASS, vì vậy chúng chạy dưới tài khoản 'NT AUTHORITY \ SYSTEM' và có' SeCreateTokenPrivilege', 'SeTcbPrivilege', v.v. Vì vậy, bảo mật khôn ngoan họ có yêu cầu tương tự (thậm chí bạn có thể nói rằng 'ZwCreateToken' là ít đòi hỏi), mặc dù bạn đang chính xác trong lưu ý rằng họ được ghi nhận đó là một cộng. – conio
Điều gì sẽ xảy ra với chủ đề khi mã thông báo mạo danh được xử lý? – Dolev