Chuong3_APIWindows

Download Report

Transcript Chuong3_APIWindows

HỆ THỐNG API WINDOWS
API HỖ TRỢ CƠ CHẾ XÁC THỰC
API HỖ TRỢ CƠ CHẾ PHÂN QUYỀN
API HỖ TRỢ CƠ CHẾ MÃ HÓA
API HỖ TRỢ CƠ CHẾ THEO DÕI HỆ
THỐNG
API HỖ TRỢ CƠ CHẾ XÁC
THỰC
GIỚI THIỆU LẬP TRÌNH XÁC THỰC
TRÊN MÔI TRƯỜNG LOCAL
QUÁ TRÌNH XÁC THỰC TRÊN
LOCAL
HỆ THỐNG API XÁC THỰC TRÊN
LOCAL
GIỚI THIỆU LẬP TRÌNH XÁC
THỰC TRÊN LOCAL
LÀ QUÁ TRÌNH XÁC MINH THÔNG TIN
ĐĂNG NHẬP CỦA MỘT TÀI KHOẢN NÀO
ĐÓ TRÊN WINDOWS
TÀI KHOẢN ĐĂNG NHẬP LÀ TÀI KHOẢN
ĐƯỢC LƯU TẠI LOCAL
SỬ DỤNG TIẾN TRÌNH ĐỂ QUẢN LÝ XÁC
THỰC GỌI LÀ LOCAL SECURITY
SUBSYSTEM SERVICE (LSA)
QUÁ TRÌNH XÁC THỰC
TRÊN LOCAL
1. KHỞI ĐỘNG MÁY, NHẤN CTRL-ALTDELETE
2. TIẾN TRÌNH DÀNH CHO VIỆC ĐĂNG NHẬP
HOẠT ĐỘNG, WINLOGON.EXE CẤM TẤT CẢ
CÁC TIẾN TRÌNH KHÁC.
3. GINA NHẬN USERNAME VÀ PASSWORD
TỪ NGƯỜI DÙNG, GỬI TỚI LSA
QUÁ TRÌNH XÁC THỰC
TRÊN LOCAL
4. LSA CHUYỂN THÔNG TIN XÁC THỰC TỚI
KERBEROS
5. KERBEROS KHÔNG XÁC THỰC ĐƯỢC VÌ
KHÔNG TÌM THẤY KDC (KHÔNG CÓ
DOMAIN CONTROLLER)
6. KERBEROS CHUYỂN LẠI GÓI XÁC THỰC
CHO LSA
QUÁ TRÌNH XÁC THỰC
TRÊN LOCAL
7. LSA NHẬN LẠI VÀ CHUYỂN GÓI XÁC
THỰC QUA GIAO THỨC NTLM ĐỂ XỬ LÝ
8. NTLM KIỂM TRA THÔNG TIN XÁC THỰC
DỰA VÀO CƠ SỞ DỮ LIỆU FILE SAM. NẾU
KHÔNG THÀNH CÔNG GỬI KẾT QUẢ ĐẾN
LSA. LSA GỌI GINA BÁO NGƯỜI DÙNG
USERNAME KHÔNG HỢP LỆ, YÊU CẦU
NHẬP LẠI.
QUÁ TRÌNH XÁC THỰC
TRÊN LOCAL
9. NẾU XÁC THỰC THÀNH CÔNG, LSA TẠO
RA MỘT ACCESS TOKEN CHO PHIÊN
LOGON CỦA USER
10. DỰA VÀO ACCESS TOKEN ĐỂ XUẤT
TRẠNG THÁI HỆ THỐNG PHÙ HỢP VỚI
USER
API XÁC THỰC VÀ QUẢN
LÝ TÀI KHOẢN
ĐỐI VỚI VIỆC XÁC THỰC BẰNG LSA, CÓ 2
HÀM XÁC THỰC QUAN TRỌNG:
LogonUser
LsaLogonUser
API QUẢN LÝ TÀI KHOẢN
Tên hàm
Ý nghĩa hàm
NetUserAdd
Thêm một tài khoản người dùng vào hệ thống Server. Hàm này
nhận về các thông tin gồm tên Server sẽ chứa tài khoản
người dùng đó, mật khẩu cũng như quyền hạn ban đầu của
người dùng. Nếu thực hiện hàm này thành công, giá trị
được trả về là NERR_Success. Nếu không thành công sẽ trả
về giá trị lỗi (Xin mời xem tham khảo để biết thêm thông tin
chi tiết).
NetUserDel
Xóa một tài khoản người dùng trên Server. Hàm này nhận về
các thông tin gồm tên Server sẽ chứa tài khoản đó, tên tài
khoản muốn xóa. Nếu thực hiện thành công, hàm này sẽ trả
về lỗi (Xin mời xem tham khảo để biết thêm thông tin chi
tiết)
NetUserGetInfo
Lấy thông tin của một tài khoản người dùng trên Server. Hàm
này nhận về các thông tin gồm tên của Server, tên tài khoản
người dùng cần lấy thông tin, cấp độ của dữ liệu (dữ liệu ở
đây là thông tin về tài khoản người dùng).
NetUserSetInfo
Thiết lập các thông tin đối với một tài khoản người dùng.
NetUserEnum
Lấy về danh sách tài khoản người dùng trên Server. Nếu Server
là NULL thì sẽ lấy về danh sách tài khoản người dùng trên
máy local
API QUẢN LÝ QUYỀN HẠN
TÀI KHOẢN
NetAccessAdd
Thêm quyền hạn cho một User đối với một tài nguyên
cụ thể
NetAccessDel
Xóa một quyền hạn nào đó trên tài nguyên đối với
người dùng hoặc nhóm người dùng trên Server.
NetAccessEnum
Lấy về danh sách các quyền của người dùng hoặc
nhóm người dùng đối với một tài nguyên cụ thể.
NetAccessCheck
Kiểm tra người dùng hoặc nhóm người dùng cụ thể
có quyền đối với một tài nguyên cụ thể hay không
NetAccessGetInf
o
Lấy về danh sách quyền đối với một tài nguyên cụ thể
NetAccessSetInfo Hàm thiết lập quyền đọc và ghi trên tài nguyên cụ thể
cho tất cả người dùng và nhóm người dùng.
SỬ DỤNG API QUẢN LÝ TÀI
KHOẢN
#include <Lm.h>
#pragma comment(lib, "Netapi32.lib")
MSDN/Win32 and Com
Development/Networking/Networking
Management/Networking Management
Reference/Network Management Function
LẬP TRÌNH XÁC THỰC VỚI
SSPI
SSPI LÀ BỘ THƯ VIỆN API WINDOWS
TÍCH HỢP TRONG WS2003
CUNG CẤP INTERFACE CHUẨN HỖ TRỢ
BẢO MẬT CHO ỨNG DỤNG PHÂN TÁN
BẢO MẬT ĐƯỜNG TRUYỀN, CẤP
QUYỀN GIỮA CÁC ỨNG DỤNG TỪ XA
GIÚP BẢO MẬT ỨNG DỤNG NHƯNG
KHÔNG CẦN BIẾT CHI TIẾT CÁCH
TRUYỀN NHẬN CỦA GIAO THỨC
MỘT SỐ GÓI BẢO MẬT CỦA
SSPI
MICROSOFT NEGOTIATE
MICROSOFT NTLM
MICROSOFT KERBEROS
MICROSOFT DIGEST SSP
SECURE CHANNEL
CÁC SỬ DỤNG SSPI
TRONG ỨNG DỤNG
1. LẤY VỀ HÀM BẢO MẬT TRONG SSPI,
DÙNG HÀM LOADLIBRARY ĐỂ GỌI THƯ
VIỆN SECUR32.DLL
2. LƯU TRỮ LẠI NHỮNG THÔNG TIN VỀ
HÀM BẢO MẬT ĐÓ
XÁC THỰC GIỮA CLIENT
VÀ SERVER
1. CLIENT KẾT NỐI VÀ GỬI THÔNG TIN XÁC THỰC ĐẾN SERVER
GỌI HÀM: InitializeSecurityContext
2. SERVER NHẬN PHẢN HỒI LẠI, GỌI HÀM: AcceptSecurityContext
3. LSA TRÊN SERVER TẠO TOKEN CHO PHIÊN LÀM VIỆC CỦA
CLIENT DỰA VÀO THÔNG TIN XÁC THỰC CỦA CLIENT
4. ỨNG DỤNG SERVER GỌI HÀM ImpersonateSecurityContext ĐỂ
GẮN TOKEN CHO TIẾN TRÌNH QUẢN LÝ CLIENT. ĐÓNG VAI TRÒ VỚI
QUYỀN HẠN CLIENT ĐỂ THỰC HIỆN NHỮNG HÀNH ĐỘNG CỦA
CLIENT TRÊN SERVER.
MÔ HÌNH XÁC THỰC GIỮA
CLIENT VÀ SERVER
HỆ THỐNG CUNG CẤP NHIỀU MÔ HÌNH
XÁC THỰC GIỮA CLIENT VÀ SERVER
- XÁC THỰC MỘT CHIỀU GIỮA CLIENT
VÀ SERVER
- XÁC THỰC QUA LẠI GIỮA CLIENT VÀ
SERVER
XÁC THỰC MỘT CHIỀU
GIỮA CLIENT VÀ SERVER
GỌI: INITIALIZESECURITYCONTEXT – THAM SỐ 2
PHCONTEXT LÀ NULL
KHỞI TẠO TOKEN TẠM GỬI TỚI SERVER. SERVER NHẬN
TOKEN VÀ ĐƯA VÀO HÀM ACCEPTSECURITYCONTEXT
ĐỂ XÁC THỰC
HÀM ACCEPTSECURITYCONTEXT TRẢ VỀ MỘT TOKEN
SERVER VÀ GỬI TỚI CLIENT. CLIENT CÓ THỂ XÁC THỰC
SERVER BẰNG CÁCH TRUYỀN TOKEN NÀY VÀO HÀM:
INITIALIZESECURITYCONTEXT NẾU NHƯ LẦN GỌI HÀM
INITIALIZESECURITYCONTEXT ĐẦU TIÊN TRẢ VỀ:
SEC_I_CONTINUE_NEEDED
XÁC THỰC QUA LẠI GIỮA
CLIENT VÀ SERVER
TƯƠNG TỰ BƯỚC 1, 2, 3 TRONG CƠ CHẾ XÁC THỰC
MỘT CHIỀU
KHI GỌI HÀM INITIALIZESECURITYCONTEXT PHÍA
CLIENT, SẼ TRẢ VỀ GIÁ TRỊ SEC_I_CONTINUE_NEEDED
HÀM ACCEPTSECURITYCONTEXT TRẢ VỀ MỘT TOKEN
SERVER VÀ GỬI TỚI CLIENT.
CLIENT NHẬN TOKEN TỪ SERVER, TRUYỀN VÀO HÀM
INITIALIZESECURITYCONTEXT LẦN 2 ĐỂ XÁC THỰC
SERVER, THAM SỐ PINPUT CHỨA TOKEN NHẬN ĐƯỢC
TỪ SERVER
GÓI XÁC THỰC SECURE
CHANNEL
SECURE CHANNEL CÒN GỌI LÀ SCHANNEL
LÀ MỘT TẬP GIAO THỨC HỖ TRỢ XÁC THỰC, BẢO MẬT,
CŨNG NHƯ TRUYỀN THÔNG AN TOÀN THÔNG QUA MÃ
HÓA.
XÁC THỰC THÔNG QUA CERTIFICATE X509
CERTIFICATE STORES
LÀ NƠI LƯU TRỮ CERTIFICATE ĐỂ CÁC ỨNG DỤNG
CLIENT VÀ SERVER TRUY CẬP ĐẾN
VÍ DỤ ỨNG DỤNG CLIENT NHƯ TRÌNH DUYỆT INTERNET
EXPLORER SỬ DỤNG MY STORE CHO CERTIFICATE
CỦA USER ĐANG LOGON TRONG HỆ THỐNG
ỨNG DỤNG SERVER NHƯ IIS DÙNG MY STORE CHO
CERTIFICATE CỦA MÁY TÍNH ĐANG CHẠY IIS
CLIENT AUTHENTICATION
LÀ QUÁ TRÌNH ƯNG DỤNG SERVER YÊU CẦU ƯNG
DỤNG CLIENT CUNG CẤP CERTIFICATE ĐỂ XÁC THỰC.
MẶC ĐỊNH SCHANNEL KHÔNG YÊU CẦU XÁC THỰC
CERTIFICATE CỦA CLIENT.
ĐỂ YÊU CẦU XÁC THỰC CLIENT, ƯNG DỤNG SERVER
GỌI HÀM ACCEPTSECURITYCONTEXT VỚI THAM SỐ
fContextReg LÀ ASC_REQ_MUTUAL_AUTH
CƠ CHẾ XÁC THỰC
SCHANNEL
SCHANNEL KHÔNG TỰ ĐỘNG XÁC THỰC CLIENT DỰA
TRÊN CERTIFICATE
SCHANNEL TÌM TRONG CƠ SỞ DỮ LiỆU TÀI KHOẢN, ĐỂ
KiỂM TRA CÓ TÀI KHOẢN NÀO PHÙ HỢP VỚI
CERTIFICATE HAY KHÔNG
GỌI HÀM QuerySecurityContextToken ĐỂ LẤY VỀ TOKEN
TRUY CẬP CỦA CLIENT SAU KHI ViỆC ÁNH XẠ THÀNH
CÔNG.
SERVER CÓ THỂ DÙNG HÀM
ImpersonateSecurityContext ĐỂ ĐẠI DiỆN CHO CLIENT
THỰC HiỆN NHỮNG CÔNG ViỆC CỦA CLIENT.
SERVER AUTHENTICATION
LÀ QUÁ TRÌNH SERVER CUNG CẤP CERTIFICATE CỦA
NÓ CHO ỨNG DỤNG CLIENT.
SCHANNEL PHÍA CLIENT XÁC THỰC CERTIFICATE CỦA
SERVER BẰNG HÀM: WinVerifyTrust
CÀI ĐẶT CHO Ứng DỤNG CLIENT TỰ XÁC THỰC
CERTIFICATE CỦA SERVER BẰNG CÁCH DÙNG CỜ
ISC_REQ_MANUAL_CRED_VALIDATION TRONG HÀM
InitializeSecurityContext
API SCHANNEL
InitializeSecurityContext
AcceptSecurityContext
InitializeSecurityContext
TẠO NGỮ CẢNH XÁC THỰC GiỮA CLIENT
VÀ SERVER
ĐƯỢC KHỞI TẠO PHÍA CLIENT TỪ THÔNG
TIN XÁC THỰC CỦA CLIENT
(CREDENTIAL)
InitializeSecurityContext
SECURITY_STATUS SEC_Entry InitializeSecurityContext
(
PCredHandle phCredential,
PCtxtHandle phContext,
SEC_CHAR* pszTargetName,
ULONG fContextReq,
ULONG Reserved1,
ULONG TargetDataRep,
PSecBufferDesc pInput,
ULONG Reserved2,
PCtxtHandle phNewContext,
PSecBufferDesc pOutput,
PULONG pfContextAttr,
PTimeStamp ptsExpiry
);
InitializeSecurityContext
phCredential: Handle của credential. Handle này nhận được
bằng cách gọi hàm AcquireCredentialsHandle (General)
phContext: Con trỏ tới cấu trúc CtxHandle, lần gọi đầu tiên
tham số này bằng NULL, lần gọi thứ 2 tham số này là handle
nhận được từ tham số phNewContext trong lần gọi đầu tiên.
Đối với Digest SSP tham số này có thể được đặt bằng NULL
pszTargetName: Con trỏ tới chuỗi cho biết tên server là gì,
thường tham số này trong lần gọi đầu tiên sẽ là tên server, lần
gọi thứ 2 có thể là NULL.
fContextReq: Cờ hiệu dùng để báo cho server biết về yêu
cầu ngữ cảnh ở đây là gì. Tham số này có thể là một trong
các giá trị sau:
InitializeSecurityContext
Giá trị
Ý nghĩa
ISC_REQ_ALLOCATE_MEMORY
Gói bảo mật sẽ cấp phát vùng nhớ
(output buffer) cho ứng dụng, sau
khi ứng dụng kết thúc việc dùng
vùng nhớ này thì nên giải phóng đi
bằng cách gọi hàm
FreeContextBuffer.
ISC_REQ_CONFIDENTIALITY
Chỉ thị cho biết sẽ sử dụng mã hóa
thông điệp để đảm bảo tính bảo mật
bằng việc dùng hàm
EncryptMessage.
ISC_REQ_EXTENDED_ERROR
Cờ này được dùng để khi có một lỗi
xảy ra trong quá trình xác thực thì
bên còn lại cũng được thông báo.
InitializeSecurityContext
ISC_REQ_HTTP Dùng digest cho HTTP
ISC_REQ_INTE
GRITY
Chỉ thị cho biết sẽ sử dụng việc ký và xác
thực chữ ký để đảm bảo tính toàn vẹn bằng
việc dùng hàm EncryptMessage và hàm
MakeSignature.
ISC_REQ_MUT
UAL_AUTH
Yêu cầu cả client và server đều được bên còn
lại xác thực
ISC_REQ_REPL
AY_DETECT
Chống replay attach bằng cách dùng hàm mã
hóa, ký như EncryptMessage và
MakeSignature.
InitializeSecurityContext
ISC_REQ_SEQUENCE_DETEC
T
Chống việc tấn công trên
chuỗi sequence.
ISC_REQ_STREAM
Hỗ trợ kết nối hướng luồng
(stream-oriented)
InitializeSecurityContext
Reserved1: Tham số dành riêng, đặt bằng 0
TargetDataRep: Tham số này có một trong hai giá trị
SECURITY_NATIVE_DREP hoặc SECURITY_NETWORK_DREP. Dùng
để máy biết cách sắp xếp dữ liệu trong thông điệp phản hồi. Tham số này
không dùng với Digest và Schannel, và đặt bằng 0.
pInput: Con trỏ tới cấu trúc SecBufferDesc, con trỏ này bằng NULL trong
lần gọi đầu tiên của hàm. Trong các lần gọi tiếp theo này, con trỏ này trỏ tới
vùng nhớ được cấp phát đủ lớn để nhận về token từ server.
Reserved2: Tham số dành riêng, đặt bằng 0
phNewContext: Con trỏ tới cấu trúc CtxHandle, lần gọi hàm này lần đầu
tiên thì tham số này nhận về handle của ngữ cảnh mới (new context)
pOutput: Con trỏ tới cấu trúc SecBufferDesc, chứa dữ liệu nhận được từ
server
InitializeSecurityContext
pfContextAttr: Giá trị con trỏ trỏ tới vùng nhớ nhận từ server cho biết các
thuộc tính của ngữ cảnh vừa được thiết lập. Cờ dùng cho giá trị này
thường có ký hiệu đầu tiên là ISC_RET, ví dụ ISC_RET_DELEGATE
ptsExpiry: Con trỏ tới cấu trúc TimeStamp, để nhận về thời gian hết hiệu
lực của ngữ cảnh này. Đối với ngữ cảnh sử dụng Digest SSP thì không có
thời gian này (thời gian hết hạn).
InitializeSecurityContext
Giá trị trả về
Giá trị trả về
Ý nghĩa
SEC_E_INCOMPLETE_ME Dùng với Schannel. Cho biết buffer chứa
SSAGE
những dữ liệu không đầy đủ
SEC_E_OK
Ngữ cảnh bảo mật được khởi tạo thành công và
không cần gọi hàm này lần nữa
SEC_I_COMPLETE_AND_ Client phải gọi ngay hàm CompleteAuthToken
CONTINUE
để hoàn thiện token, sau đó đợi lấy token và
gửi trả lại server trong lời gọi khác của hàm
InitializeSecurityContext
InitializeSecurityContext
Giá trị trả về
SEC_I_COMPLETE_NEEDED
Client dừng việc tạo thông
điệp gửi cho server, và gọi
hàm CompleteAuthToken để
hoàn thiện xác thực token
SEC_I_CONTINUE_NEEDED
Client phải gửi output token
cho server và đợi token của
server để xác thực server
SEC_I_INCOMPLETE_CREDENTIALS
Dùng với Schannel,
credentials không bao gồn
certificate hoặc certificate do
CA mà server không tin tưởng
tạo ra.
AcceptSecurityContext
ĐƯỢC SỬ DỤNG PHÍA SERVER
SERVER CÓ THỂ GỌI MỘT HOẶC NHIỀU
LẦN HÀM NÀY CHO ĐẾN KHI THIẾT LẬP
ĐƯỢC NGỮ CẢNH BẢO MẬT.
AcceptSecurityContext
SECURITY_STATUS SEC_Entry AcceptSecurityContext
(
PCredHandle phCredential,
PCtxtHandle phContext,
PSecBufferDesc pInput,
ULONG fContextReq,
ULONG TargetDataRep,
PCtxtHandle phNewContext,
PSecBufferDesc pOutput,
PULONG pfContextAttr,
PTimeStamp ptsTimeStamp
);
MỘT SỐ HÀM PHỔ BiẾN HỖ
TRỢ CƠ CHẾ XÁC THỰC
SCHANNEL
AcquireCredentialsHandle
Hàm này lấy về handle của những thông tin
xác thực (credentials) của đối tượng tham gia
vào quá trình bảo mật này (trên server hoặc
client). Handle này được dùng cho 2 hàm
InitializeSecurityContext và
AcceptSecurityContext sử dụng
QuerySecurityPackageInfo Nhận thông tin về một gói bảo mật cụ thể,
những thông tin lấy về được, được dùng trong
hàm khởi tạo và chấp nhận ngữ cảnh bảo mật
(hàm InitializeSecurityContext và
AcceptSecurityContext)
CompleteAuthToken
Hàm này dùng hoàn thiện token xác
thực, hàm này được sử dụng bởi
giao thức bên dưới cập nhật lại
những thông tin bảo mật Khi mà quá
trình xác thực không nhận đủ các
thông tin để xác thực
QueryContextAttributes
Hàm này dùng để lấy những thông tin
về ngữ cảnh bảo mật đã được thiết
lập trước đó. Tùy thuộc vào các
tham số khác nhau thì hàm này sẽ
trả về các loại thông tin khác nhau.
ImpersonateSecurityContext
Hàm này cho phép ứng dụng Server
dùng token lấy được sau khi bắt tay
với client, đóng vai client trên trên
máy server để truy xuất các tài
nguyên, với quyền hạn của client.
RevertToSelf
Hàm này hủy bỏ việc thủ vai cho ứng dụng client, hàm
này thường được sử dụng sau khi đã gọi hàm
ImpersonateSecurityContext và thực hiện xong những
nhiệm vụ cần đóng vai.
EncryptMessage
Hàm này dùng để mã hóa một thông điệp trước khi gửi
thông điệp đó lên đường truyền để đảm bảo tính bảo
mật của thông điệp. Hàm này cho phép ứng dụng chọn
những thuật toán mã hóa trong những thuật toán mã
hóa mà cơ chế xác thực đã chọn.
Hàm này truyền vào ngữ cảnh bảo mật đã được chọn
lựa trong quá trình xác thực
DecryptMessage
Giải mã thông điệp đã được mã hóa trước đó bằng
hàm EncryptMessage
Hàm này truyền vào ngữ cảnh bảo mật đã được chọn
lựa trong quá trình xác thực
API HỖ TRỢ PHÂN QUYỀN
ACCESS TOKEN
SECURITY DESCRIPTOR
ACCESS TOKEN
CHỨA THÔNG TIN ĐỊNH DANH, ĐỊNH
DANH NHÓM.
CHỨA DANH SÁCH QUYỀN HẠN CỦA TÀI
KHOẢN VÀ NHÓM MÀ TÀI KHOẢN ĐÓ LÀ
THÀNH VIÊN.
SECURITY DESCRIPTOR
KHI MỘT ĐỐI TƯỢNG ĐƯỢC WINDOWS
CHỈ ĐỊNH MỘT SECURITY DESCRIPTOR
ĐỂ CHỨA THÔNG TIN BẢO MẬT VỀ ĐỐI
TƯỢNG NHƯ:
Discretionary access control list (DACL): Tài
khoản, nhóm nào được quyền truy xuất đối
tượng
System access control list (SACL):
Thông tin điều khiển hệ thống ghi nhận lại những
hành động truy cập tới đối tượng.
XỬ LÝ PHÂN QUYỀN TRONG
ỨNG DỤNG CLIENT SERVER
KHI CLIENT KẾT NỐI ĐẾN SERVER, SAU
ĐÓ YÊU CẦU SERVER THỰC HiỆN MỘT
HÀNH ĐỘNG NÀO ĐÓ, SERVER SẼ CÓ 2
LỰA CHỌN:
- SỬ DỤNG NGỮ CẢNH SERVER ĐỂ THỰC HIỆN
HÀNH ĐỘNG CHO CLIENT
- SỬ DỤNG NGỮ CẢNH CLIENT ĐỂ THỰC HiỆN
HÀNH ĐỘNG CHO CLIENT
SERVER SỬ DỤNG NGỮ
CẢNH CỦA SERVER
XÉT HÀNH ĐỘNG CỦA CLIENT TÁC ĐỘNG LÊN
ĐỐI TƯỢNG(TÀI NGUYÊN) BẢO MẬT NÀO.
XEM XÉT CLIENT CÓ QUYỀN HẠN TRÊN ĐỐI
TƯỢNG MÀ CLIENT TÁC ĐỘNG HAY KHÔNG
NẾU KHÔNG THÌ KHÔNG ĐƯỢC QUYỀN. TỰ GHI
LẠI AUDIT HÀNH ĐỘNG CỦA CLIENT VÀ NÓ ĐÃ
THỰC HiỆN CHO CLIENT
SERVER SỬ DỤNG NGỮ
CẢNH CỦA CLIENT
CÁCH 1:
LOGON CLIENT VÀO HỆ THỐNG BẰNG WINDOWS BẰNG
HÀM LOGONUSER SẼ TẠO RA TOKEN CHO PHIÊN ĐĂNG
NHẬP CỦA CLIENT
GỌI HÀM ImpersonateLoggedOnUser
SỬ DỤNG TOKEN TRUY CẬP CỦA CLIENT ĐỂ KiỂM TRA
QUYỀN HẠN TRÊN ĐỐI TƯỢNG MÀ CLIENT TÁC ĐỘNG
CÓ THỂ TẠO RA MỘT TiẾN TRÌNH XỬ LÝ VỚI NGỮ CẢNH
BẢO MẬT CỦA CLIENT BẰNG HÀM CreateProcessAsUser
SERVER SỬ DỤNG NGỮ
CẢNH CỦA CLIENT
CÁCH 2:
ĐẠI DiỆN USER BẰNG HÀM:
ImpersonateNamedPipeClient
GỌI HÀM OpenThreadToken ĐỂ LẤY VỀ TOKEN CỦA
CLIENT ĐẠI DiỆN
GỌI HÀM DuplicateToken ĐỂ TẠO RA MỘT TOKEN TRUY
CẬP TỪ TOKEN ĐẠI DiỆN
GỌI HÀM CreateProcessAsUser ĐỂ TẠO TiẾN TRÌNH XỬ
LÝ VỚI NGỮ CẢNH BẢO MẬT CỦA CLIENT
PHÂN QUYỀN TRÊN TÀI
NGUYÊN CỦA ỨNG DỤNG
ACCESS CONTROL LIST (ACL)
SỬ DỤNG SECURITY DESCRIPTOR ĐỂ ĐiỀU KHIỂN TRUY
CẬP TỚI NHỮNG ĐỐI TƯỢNG HỆ THỐNG
SỬ DỤNG CÁC HÀM InitializeSecurityDescriptor và
SetSecurityDescriptorDacl…
Để XÁC MINH QUYỀN HẠN MỘT TRUY CẬP, ỨNG DỤNG
CÓ THỂ SỬ DỤNG CÁC NHÓM HÀM AccessCheck,
AccessCheckByType, AccessCheckByTypeResultList…
API QUẢN LÝ QUYỀN HẠN
TÀI KHOẢN
NetAccessAdd
Thêm quyền hạn cho một User đối với một tài nguyên
cụ thể
NetAccessDel
Xóa một quyền hạn nào đó trên tài nguyên đối với
người dùng hoặc nhóm người dùng trên Server.
NetAccessEnum
Lấy về danh sách các quyền của người dùng hoặc
nhóm người dùng đối với một tài nguyên cụ thể.
NetAccessCheck
Kiểm tra người dùng hoặc nhóm người dùng cụ thể
có quyền đối với một tài nguyên cụ thể hay không
NetAccessGetInf
o
Lấy về danh sách quyền đối với một tài nguyên cụ thể
NetAccessSetInfo Hàm thiết lập quyền đọc và ghi trên tài nguyên cụ thể
cho tất cả người dùng và nhóm người dùng.
API HỖ TRỢ CƠ CHẾ THEO
DÕI HỆ THỐNG
CÁC BƯỚC ĐỂ CÀI ĐẶT EVENT LOG TRÊN
WINDOWS CHO ỨNG DỤNG:
1. TẠO EVENT SOURCE TRONG REGISTRY ĐỂ CHỨA
CÁC EVENT LOG SẼ ĐƯỢC GHI XUỐNG ỨNG DỤNG.
2. TẠO EVENT MESSAGE FILE ĐƯỢC EVENT SOURCE
LIÊN KẾT ĐẾN.
3. GHI EVENT MESSAGE FILE XUỐNG
4. ĐỌC NHỮNG THÔNG TIN TRONG EVENT, CÙNG
NHỮNG THÔNG TIN LIÊN QUAN ĐỂ THEO DÕI HỆ THỐNG
TẠO EVENT SOURCE TRONG
REGISTRY
SỬ DỤNG API ĐỂ GHI XUỐNG REGISTRY
TẠI NƠI:
HKEY_LOCAL_MACHINE
SYSTEM
CurrentControlSet
Services
Eventlog
Application
Security
System
UngDung
TẠO EVENT MESSAGE FILE
BƯỚC 1: TẠO FILE LOG.MC VỚI CẤU
TRÚC NHƯ SAU:
MessageId=1
Facility=Application
Severity=Success
SymbolicName=EV_START_SUCCESS
Language=English
Ung dung server khoi dong thanh cong
.
MessageId=2
Facility=Application
Severity=Success
SymbolicName=EV_SHUTDOWN_SUCCESS
Language=English
Ung dung server dong
TẠO EVENT MESSAGE FILE
BƯỚC 2: TÌM CHƯƠNG TRÌNH mc.exe,
rc.exe TRONG PLATFORM SDK WIN
BƯỚC 3: CHẠY CHƯƠNG TRÌNH
MESSAGE COMPILER VỚI CÁC LỆNH:
mc LOG.mc (có unicode thì mc –u LOG.mc)
BƯỚC 4: SAU KHI CHẠY LỆNH TRÊN, SẼ
TẠO RA CÁC FILE: LOG.rc, LOG.h,
LOG.bin và MSG00001.bin
TẠO EVENT MESSAGE FILE
BƯỚC 5: DÙNG RESOURCE COMPILER
BIÊN DỊCH FILE LOG.rc VỚI LỆNH:
rc –r LOG.rc
BƯỚC 6: LỆNH TRÊN SẼ TẠO RA FILE:
LOG.res, BIÊN DỊCH FILE NÀY ĐỂ TẠO RA
FILE DLL BẰNG LỆNH:
link -dll -noentry -out: LOG.dll LOG.res
BƯỚC 7: VÀO REGISTRY ĐĂNG KÝ MỤC:
EventMessageFile TRỎ TỚI LOG.DLL
API LOG FILE
BackupEventLog
Hàm này dùng để lưu những event log trong registry ra
một tập tin back up. Những event log được backup vẫn còn
trong registry.
ClearEventLog
Hàm này xóa tất cả những event đã được ghi của một
event log, chúng ta có thể có chọn lưa lưu lại tất cả những
event log trong tham số lpBackupFileName.
CloseEventLog
Hàm này đóng một event log đã được mở bởi hàm
OpenEventLog hoặc OpenBackupEventLog
DeregisterEventSource
Hàm này đóng handle của một event soure đã được đã
đăng ký sử dụng trước đó
API LOG FILE
GetEventLogInformation
Lấy thông tin về một event cụ thể trong event log
GetNumberOfEventLogRecords
Nhận về số lượng các event được ghi trong event
log
GetOldestEventLogRecord
Lấy về con số thể hiện cho event đã được ghi lâu
nhất trong event log
NotifyChangeEventLog
Hàm này dùng cho ứng dụng khi muốn nhận một
thông báo rằng có event đã được ghi
OpenBackupEventLog
Mở một tập tin event log đã được backup trước.
Tập tin được backup bằng hàm BackupEventLog.
Khi chúng ta mở một tập tin backup cũng như
chúng ta mở một event log trong registry bằng hàm
RegisterEventLog, kết quả là sẽ nhận được handle
của event log.
API LOG FILE
OpenEventLog
Hàm này dùng để mở một event log và lấy về một handle
của event log đó. Sau khi sử dụng xong event log này, cần
đóng lại handle của event log bằng cách gọi hàm
CloseEventLog
ReadEventLog
Hàm này đọc toàn bộ những thông tin trong một event log
đã được ghi trước trong hệ thống
RegisterEventSource Hàm này dùng để lấy về handle của một event source đã
được đăng ký trước trong registry. Sau khi mở và sử dụng
xong cần đóng handle của event source bằng cách gọi hàm
DeregisterEventSource
ReportEvent
Ghi một event tới event log
API HỖ TRỢ CƠ CHẾ MÃ
HÓA
SỬ DỤNG CÁC HÀM CỦA CRYPTOAPI
TRONG CÁC FILE: Advapi32.dll VÀ
Crypt32.dll
ĐỂ THỰC HIỆN VIỆC MÃ HÓA VÀ BẢO
MẬT
API HỖ TRỢ CƠ CHẾ MÃ
HÓA
Tên hàm
CryptAcquireContext
Ý nghĩa và cách sử dụng
Hàm này dùng để lấy handle của container dùng để
lưu key, của một CSP. Handle này lấy về dùng để
những hàm trong CryptoAPI sử dụng cho quá trình
mã hóa.
CryptDecrypt
Hàm này dùng để giải mã dữ liệu đã được mã hóa
bằng hàm CryptEncrypt
CryptDeriveKey
Hàm này dùng để tạo ra một khóa mã hóa bí mật từ
một dữ liệu nào đó (ví dụ password)
CryptDestroyKey
Hàm này dùng để giải phóng handle của một khóa đã
được sử dụng trước đó. Sau khi gọi hàm này, khóa sẽ
không còn sử dụng được nữa.
CryptEncrypt
Hàm này dùng để mã hóa dữ liệu
CryptExportKey
Hàm này dùng để đưa một khóa (cặp khóa) từ CSP ra để
ứng dụng khác có thể sử dụng, theo một cách thức bảo
mật. Đầu tiên handle của khóa sẽ được đưa tới hàm này,
sau đó hàm này sẽ trả về một key BLOB. Key BLOB
này có thể được gửi trên mạng internet tới cho thành
phần khác sử dụng mà vẫn đảm bảo được độ an toàn, bí
mật của khóa. Key BLOB này sẽ không có ích gì cho
đến khi người nhận dùng hàm CryptImportKey để đưa
khóa (cặp khóa) vào CSP của họ.
CryptGenKey
Hàm này tạo ra một khóa mã hóa bí
mật hoặc một cặp khóa public/private
dùng cho CSP trong việc mã hóa
CryptGetUserKey
Hàm này dùng để lấy handle của một
cặp khóa public/private của user
CryptImportKey
Hàm này chuyển khóa mã hóa từ
BLOB sang CSP
CryptReleaseContext
Hàm này giải phóng handle của CSP
vào key container