• Thứ Ba, 29/07/2008 15:57 (GMT+7)

    Bảo mật hệ thống mạng dùng API của Microsoft NAP

    Network Access Protection (NAP) là công nghệ mới của Microsoft đảm bảo các máy trạm khi truy cập tài nguyên mạng tuân thủ cơ chế bảo vệ mạng. Người quản trị hệ thống dùng NAP có thể định ra các mức độ truy cập tài nguyên mạng cho các máy trạm tùy theo mức độ tuân thủ chính sách truy cập mạng (CSTCM) của nó. Ví dụ, nếu máy khách không mở Firewall thì NAP sẽ không cho phép truy cập Internet.

    Bên cạnh đó NAP còn cung cấp bộ thư viện API cho phép lập trình viên triển khai những chính sách tăng cường bảo mật đặc thù cho từng doanh nghiệp. Bài viết này tập trung vào cơ chế phát triển CSTCM đặc thù dựa trên các API của NAP được cung cấp trên hệ thống Windows Vista và Window Server 2008.

    SƠ LƯỢC VỀ MICROSOFT NAP

    Công việc của các nhà quản trị hệ thống mạng Microsoft hiện nay mất nhiều thời gian trong việc đảm bảo các máy tính truy cập vào mạng phải có được bản cập nhật hệ điều hành mới nhất, hoặc bản cập nhật cho phần mềm chống virus mới nhất, hoặc firewall của máy trạm phải được mở... Với khó khăn đó, NAP ra đời để cung cấp giải pháp hỗ trợ cho các nhà quản trị mạng. Thực tế cho thấy có rất nhiều tình huống xâm nhập phá hoại hệ thống mạng dựa trên các máy trạm chưa có đủ phần mềm bảo vệ cơ bản hoặc chưa được cập nhật phiên bản mới nhất... Việc ứng dụng NAP để triển khai các CSTCM sẽ giúp giảm thiểu những rủi ro trên và tăng cường bảo mật hệ thống mạng.

    Bên cạnh đó, NAP còn cung cấp cơ chế tự động cập nhật để máy trạm đáp ứng yêu cầu CSTCM trước khi cho phép máy đó truy cập tài nguyên mạng một cách bình thường. Nếu máy trạm không đáp ứng được chính sách đặt ra thì sẽ bị giới hạn truy cập mạng, lúc này máy trạm chỉ có thể liên lạc được với một số giới hạn các máy tính khác.

    NAP thường được ứng dụng trong các tình huống sau:

    • Kiểm tra khả năng tự bảo vệ của các MTXT: giúp bảo vệ MTXT của nhân viên đi làm bên ngoài có nhu cầu truy cập tài nguyên mạng trong công ty. Hoặc giới hạn mức độ truy cập tài nguyên mạng của máy tính được người ngoài công ty sử dụng.

    • Kiểm tra khả năng tự bảo vệ của các máy trạm trong mạng nội bộ...

    Hiện nay NAP đã hỗ trợ triển khai trên các dịch vụ mạng sau:

    • Dynamic Host Configuration Protocol (DHCP): dịch vụ cấp phát và cấu hình địa chỉ IP động.

    • Terminal Server Gateway connections: dịch vụ chứng thực máy từ xa kết nối vào mạng nội bộ.

    • Virtual Private Network (VPN), IEEE 802.1X-authenticated network và Internet Protocol security-protected traffic.

    MỤC TIÊU

    Bài viết này dựa trên ví dụ SDK Sample có tại Samples\NetDs\NAP sau khi cài đặt bộ SDK for Windows Vista. SDK Sample được phát triển bằng Visual C++. Trong bài này chúng ta sẽ thấy SDK Sample được triển khai với dịch vụ mạng DHCP và có một CSC TM giản đơn. Tuy nhiên trong thực tế ta có thể tạo các CSTCM khác như:

    • Kiểm tra phần mềm nào đó đã được cài đặt trên máy tính chưa.

    • Kiểm tra chương trình chống virus đã cập nhật bản mới nhất hay chưa.

    • Kiểm tra các khóa trong Registry hoặc process nào đó đang chạy trên máy...

    MÔI TRƯỜNG PHÁT TRIỂN

    Trước hết, bạn nên tham khảo hướng dẫn Demonstrate DHCP NAP Enforcement in a Test Lab của Microsoft để có thể hình dung nhanh cách cấu hình và ứng dụng giải pháp NAP. Sau đây là môi trường liên quan tới quá trình triển khai và phát triển giải pháp tăng cường bảo mật mạng dùng NAP API.

    Môi trường

    Mô tả

    Windows Server 2008 Server đóng vai trò quản lý các chính sách và dịch vụ mạng.
    Windows Vista
    Windows XP SP3
    Client hỗ trợ chức năng NAP, nếu dùng Vista chúng ta nên cập nhật các Hotfix hoặc cài Service Pack 1 để NAP hoạt động tốt.
    SDK for Windows Vista Thư viện để phát triển ứng dụng trên Windows, trong đó có API NAP.
    Visual Studio 2005 (VS2005) Công cụ phát triển.

    NGUYÊN TẮC HOẠT ĐỘNG

    Kiến trúc NAP gồm những thành phần quan trọng sau:

    • System Health Agent (SHA): Thành phần chạy trên client, làm chức năng thu thập tình trạng CSTCM trên máy trạm mà SHV yêu cầu hoặc thực thi yêu cầu từ SHV để làm máy trạm tuân thủ CSTCM.

    • SHA Service: Dịch vụ trên máy client quản lý tất cả các SHA và đăng ký SHA vào hệ thống khi máy tính mới khởi động.

    • System Health Validator (SHV): Thành phần chạy trên server, thực thi chức năng kiểm tra CSTCM. Thông thường đây là thành phần có cung cấp giao diện cho phép quản trị hệ thống thiết lập chính sách.

    • Statement of Health (SoH): Tình trạng máy client mà CSTCM yêu cầu cần tuân thủ.

    Sau đây là hình minh họa hoạt động của các thành phần trong kiến trúc NAP.

    1. Windows Vista đã được cấu hình NAP-Enabled DHCP, khi máy yêu cầu lấy địa chỉ IP, đầu tiên nó sẽ gửi yêu cầu lấy SoH tới NAP Client.

    2. NAP Client gửi yêu cầu cho SHA Service để được phân phối tới tất cả các SHA đã đăng ký vào hệ thống.

    3. Từng SHA kiểm tra tình trạng máy so với CSTCM tương ứng.

    4. DHCP Client gửi yêu cầu lấy địa chỉ IP có kèm theo SoH tới DHCP Server.

    5. DHCP Server gửi SoH tới Network Policy Server (NPS). NPS sẽ phân phối SoH tới SHV tương ứng nhờ kiểm tra mức độ tuân thủ CSTCM. Dựa vào kết quả kiểm tra NPS có thể sẽ hướng dẫn cho DHCP Server:

    - Cấp phát hoặc không cấp phát địa chỉ IP cho client.

    - Cấp phát địa chỉ IP nằm trong vùng không có toàn quyền truy cập tài nguyên mạng...

    Để mở rộng hệ thống NAP và tạo ra các chính sách kiểm tra khả năng tự bảo vệ của các máy trạm, chúng ta cần phát triển hai thành phần, đó là SHA cho NAP client và SHV tương ứng cho NPS.

    Tuy nhiên cũng có trường hợp hệ thống chỉ cần xây dựng SHV mà không cần SHA: SHV sẽ liên lạc với hệ thống phát hiện tấn công mạng Intrusion Detection System (IDS) và đưa ra quyết định máy trạm nào cần được giới hạn truy cập mạng. Lúc này SHV không cần lấy SoH từ bất kỳ SHA của máy trạm nào.

    PHÁT TRIỂN HỆ THỐNG

    Để có thể chạy SDK Sample chúng ta phải sửa những lỗi sau:

    • Sửa biến MicrosoftVendorId thành QuarSampleSystemHealthId trong 2 hàm sau:

    - SHA\EXE\CallBack.cpp:ShaCallBack::FillSoHRequest(...)

    - SHV\SampleShv.cpp:CSampleShv::CheckRequestSoHHealth(...)

    • Xóa dòng 348 "goto Cleanup;" trong file SHV\SampleShv.cpp

    Việc phát triển một cặp SHA và SHV giúp tạo ra một chính sách linh hoạt để bảo vệ hệ thống mạng theo yêu cầu riêng biệt mà không bị giới hạn về sự hỗ trợ của những chính sách có sẵn trong Windows. Sau đây chúng ta sẽ tiếp tục tìm hiểu về cách phát triển SHA và SHV.

    1. System Health Agent (SHA)

    • Đăng ký SHA với NAP Client, SHA này có mã duy nhất trong tập các SHA.

    HRESULT CSdkShaModule::RegisterSdkSha() { // SHA\EXE\SdkShaModule.cpp
    // 1. Khai báo và khởi tạo con trỏ tới interface của NAP Client
    CComPtr m_pNAPClientMgmt = NULL;
    hr = m_pNAPClientMgmt.CoCreateInstance(CLSID_NapClientManagement, ...);
    // 2. Khai báo và khởi tạo thông tin về SHA
    NapComponentRegistrationInfo m_shaInfo;
    hr = FillShaComponentRegistrationInfo(&m_shaInfo);
    // 3. Đăng ký thông tin SHA với NAP Client
    hr = m_pNAPClientMgmt->RegisterSystemHealthAgent(&m_shaInfo);
    }

    • SHA có thể trả lời khi nhận yêu cầu về SoH hoặc thông báo SoH có sự thay đổi trên máy trạm cho NAP Client. Thông qua cơ chế callback interface, SHA sẽ có các hàm tương ứng được gọi tùy theo loại yêu cầu. Trong bảng mã sau, ShaCallback là callback interface, hoạt động trong môi trường COM.

    void DoSHAExecution() throw() { // Tham khảo SHA\EXE\Sha.cpp
    // 1. Khởi tạo biến trỏ tới interface quản lý SHA
    CComPtr binding = NULL;
    hr = binding.CoCreateInstance(CLSID_NapSystemHealthAgentBinding, ...);
    // 2. Khởi tạo callback interface, nó gồm tập các hàm bên trong để xử lý yêu cầu
    IShaCallbackPtr callback = NULL;
    callback = ShaCallback::CreateInstance(binding);
    // 3. Đăng ký callback interface với một SHA có mã QuarSampleSystemHealthId
    hr = binding->Initialize(QuarSampleSystemHealthId,callback);
    }

    2. System Health Validator (SHV)

    SHV, được phát triển theo COM DLL, chính là nơi giúp người quản trị mạng thiết lập các chính sách về an toàn truy cập tài nguyên mạng. Tuy nhiên, trong ví dụ SDK Sample chưa có hỗ trợ giao diện để soạn thảo CSTCM. Chúng ta sẽ tìm hiểu hướng phát triển để hỗ trợ vấn đề này ở phần sau.

    • Đăng ký SHV với NPS, SHV này có mã trùng với mã của SHA, điều này giúp từng cặp SHA và SHV có thể liên lạc với nhau.

    HRESULT CSdkShvModule::RegisterSdkShv() throw()
    { // Tham khảo SHV\SdkShvModule.cpp
    // 1. Khai báo và khởi tạo biến trỏ tới interface của NPS
    CComPtr pSHVMgmt = NULL;
    hr = pSHVMgmt.CoCreateInstance(CLSID_NapServerManagement, ...);
    // 2. Khai báo và khởi tạo thông tin về SHV
    NapComponentRegistrationInfo shvInfo;
    hr = FillShvComponentRegistrationInfo(&shvInfo);
    // 3. Đăng ký SHV với NPS, CSampleShv chứa các hàm xử lý yêu cầu
    hr = pSHVMgmt->RegisterSystemHealthValidator(&shvInfo,
    (CLSID*)&__uuidof(CSampleShv));
    }

    • SHV được cài đặt trên server và có nhiệm vụ kiểm tra những yêu cầu về khả năng tự bảo vệ từ nhiều máy trạm cùng lúc. Do đó SHV trong thực tế sẽ phải nhận và xử lý nhiều yêu cầu kiểm tra chính sách cùng lúc. Bên cạnh đó cũng có rất nhiều trường hợp việc kiểm tra chính sách đòi hỏi SHV phải liên lạc với server khác, và mất nhiều thời gian cho từng yêu cầu kiểm tra chính sách. Để giải quyết vấn đề trên SHV đã tạo ra từng thread xử lý cho từng yêu cầu kiểm tra chính sách.

    STDMETHODIMP CSampleShv::Validate(
    INapSystemHealthValidationRequest* pShvRequest,
    UINT32 hintTimeOutInMsec, INapServerCallback* pCallback) throw()
    { // Tham khảo SHV\SampleShv.cpp
    // 1. Chuẩn bị thông tin cho một yêu cầu kiểm tra chính sách
    asyncDataItems* requestData = NULL;
    requestData->pthis = this;
    requestData->piShvRequest = pShvRequest;
    requestData->piCallback = pCallback;
    // 2. Tạo thread mới để xử lý yêu cầu kiểm tra chính sách
    hr = QShvCreateThread( requestData );
    }

    • Để tạo giao diện cho người quản trị mạng thiết lập chính sách, chúng ta viết thêm hàm sau trong SHV\SampleShv.cpp.

    HRESULT CSampleShv::InvokeUI(HWND hParent) {
    // 1. Khai báo class dialog có chức năng cho phép soạn thảo chính sách
    CNetPolicyDlg dlg;
    // 2. Đăng ký giao diện xử lý với SHV, với hàm xử lý thông điệp HandleMessage
    INT_PTR rtn = ::DialogBoxParamW( ghThisModule,
    (LPCWSTR)MAKEINTRESOURCE(IDD_POLICY_DIALOG), hParent,
    CNetPolicyDlg::HandleMessage, reinterpret_cast (&dlg));
    }

    Ở đoạn mã trên trong hàm CNetPolicyDlg::HandleMessage chúng ta sẽ thực hiện mở giao diện soạn thảo CSTCM. Tham khảo phần triển khai SHV để biết thêm các bước mở giao diện đó khi SHV đang chạy.

    • Tùy theo yêu cầu cụ thể mà chúng ta sẽ thực hiện kiểm tra CSTCM một cách chính xác bằng cách chỉnh sửa hàm CSampleShv::CheckRequestSoHHealth.

    3. Liên lạc giữa SHA và SHV

    Phần trên chúng ta đã tìm hiểu cách đăng ký bộ đôi SHA và SHV vào trong kiến trúc NAP, phần sau đây mô tả cách thức trao đổi thông điệp giữa các thành phần trong kiến trúc NAP khi được triển khai cùng với dịch vụ mạng DHCP.

    • DHCP Client trước khi lấy địa chỉ IP nó sẽ gửi yêu cầu lấy SoH tới NAP Client và yêu cầu tiếp tục được chuyển đến tất cả các SHA hiện đang có trên hệ thống, bước (1) và (2). Hàm được gọi trên SHA mà SDK Sample phát triển là ShaCallback::GetSoHRequest.

    • NAP Client sẽ gom toàn bộ SoH để chuyển cho DHCP Client, sau đó bộ SoH sẽ được đóng gói cùng với yêu cầu lấy địa chỉ IP để gửi tới DHCP Server, bước (3) đến (5). DHCP Server sẽ chuyển bộ SoH tới NPS để nhờ kiểm tra việc tuân thủ CSTCM, NPS có thể nằm trên một server khác hoặc trên cùng máy với DHCP Server, bước (6). NPS có nhiệm vụ phân phối từng SoH tới đúng cặp SHV của nó để nhờ kiểm tra, bước (7). Hàm được gọi trên SHV là CSampleShv::Validate.

    • Trường hợp bộ SoH không tuân thủ CSTCM thì trạng thái yêu cầu sửa chữa (Not healthy) và thông tin về cách sửa chữa được chuyển cho SHA, bước (8) tới (12). Lúc này hàm được gọi trên SHA để xử lý trả lời là ShaCallback::ProcessSoHResponse. Từ đây hàm ShaCallback::GetFixupInfo sẽ đảm nhận vai trò cung cấp thông tin về trạng thái sửa lỗi và hướng dẫn người dùng biết làm thế nào để máy trạm đó có thể tuân thủ CSTCM. Ở giai đoạn này người quản trị mạng có thể cấu hình NPS để yêu cầu DHCP Server không cấp phát địa chỉ IP cho máy trạm hoặc cấp phát IP nhưng máy trạm chỉ có thể liên lạc giới hạn với server cung cấp những bản cập nhật chương trình. Trong trường hợp này máy trạm có thể cài đặt chương trình cập nhật để phục hồi ở trạng thái đã tuân thủ CSTCM.

    • Sau khi người dùng sửa hoặc SHA tự sửa để máy trạm tuân thủ CSTCM thì SoH hiện tại sẽ được gửi tới SHV, bước (13) tới (17). Khi bộ SoH được kiểm tra là đã tuân thủ CSTCM, DHCP Server sẽ cấp địa chỉ IP cho máy trạm, bước (18) đến (20) và đồng thời thông báo cho SHA về trạng thái máy trạm đã tuân thủ CSTCM, bước (21) và (22). Lúc này người dùng sẽ thấy máy trạm đã được toàn quyền truy cập mạng.

    4. Tự động phục hồi khả năng bảo vệ của máy trạm

    Đây là chức năng quan trọng, được gọi là Auto-Remediation và được cấu hình trên SHV. Khi chức năng này hoạt động, SHV sẽ yêu cầu SHA trên những máy trạm chưa tuân thủ CSTCM tự động chỉnh sửa, cập nhật nhằm làm cho máy trạm đạt được trạng thái tuân thủ CSTCM. SHA sẽ nhận yêu cầu Auto-Remediation trừ SHV trong hàm ShaCallback::GetFixupInfo.

    Ví dụ: Ta có CSTCM là yêu cầu các máy trạm phải có file C:\nap.txt thì mới có quyền truy cập mạng. Khi chức năng Auto-Remediation được mở và nếu ở máy trạm không có file C:\nap.txt thì SHV sẽ ra lệnh cho SHA tự động tạo ra file đó mà không cần người sử dụng can thiệp. Nếu tạo file thành công thì SHA sẽ cập nhật trạng thái với SHV nhờ kiểm tra về việc tuân thủ CSTCM để được toàn quyền truy cập mạng.

    Trong thực tế, chức năng này thường dùng để tự động cập nhật bản sửa lỗi Windows, cập nhật phiên bản mới nhất của phần mềm chống virus, hoặc mở firewall...

    TRIỂN KHAI

    Trước tiên chúng ta tham khảo và triển khai NAP với dịch vụ DHCP như trong hướng dẫn lab DHCP NAP của Microsoft. Hướng dẫn của Mircosoft thực hiện trên 3 máy, tuy nhiên để đơn giản chúng ta chỉ cần dùng 2 máy: Một là Windows Server 2008 có dịch vụ Active Directory, DNS, DHCP và NPS; hai là máy trạm dùng Windows Vista.

    Sau đó chúng ta dùng VS2005 để biên dịch SDK Sample. Nếu thành công chúng ta sẽ có hai file SdkShv.dll và SdkSha.exe. Những yêu cầu trên bắt buộc phải được làm xong sau đó mới thực hiện các bước sau.

    1. SHA

    Trên máy trạm Windows Vista, việc triển khai SHA như sau:

    - Dùng lệnh SdkSha.exe /register để đăng ký SHA với NAP Client.

    - Để kiểm tra việc đăng ký thành công, dùng lệnh: netsh > nap > client > show state. Chúng ta sẽ thấy có SHA mới tên là SHA SDK Sample đã xuất hiện trong hệ thống.

    2. SHV

    Trên máy Windows Server 2008, việc triển khai SHV như sau:

    - Chép file SdkShv.dll vào thư mục System32 của hệ thống.

    - Dùng lệnh regsvr32.exe SdkShv.dll để đăng ký SHV với NPS mang tên SDK SHV Sample.
    Sau khi triển khai DHCP NAP mặc định trên NPS sẽ có SHV Windows Security Health Validator. Hệ thống NAP lúc này đang áp dụng SHV mặc định này, để hệ thống chuyển qua dùng SDK SHV Sample chúng ta thực hiện theo các bước sau:

    - Chọn menu Start > Run, gõ nps.msc, chọn OK.

    - Chọn Policies > Health Policies

    Trong danh sách bên phải nhấn đúp chính sách NAP DHCP Compliant, và chỉ chọn SDK SHV Sample là SHV được tham gia trong chính sách này. Tiếp đến ta làm tương tự đối với chính sách NAP DHCP Noncompliant.

    Trường hợp chúng ta phát triển SHV có hỗ trợ giao diện soạn thảo CSTCM thì các bước sau sẽ giúp mở giao diện đó:

    - Chọn Network Access Protection > System Health Validators.

    - Nhấn phải lên SDK SHV Sample, chọn Properties, chọn Configure.

    3. Kiểm tra hoạt động

    Để kiểm tra hoạt động của hệ thống NAP đã triển khai, dưới đây là các bước thực hiện trên máy trạm - Windows Vista:

    • Mở màn hình Command Prompt, thực hiện lệnh SdkSha.exe /execute để chạy SHA.

    • Nhập phím 3 để SoH ở trạng thái không tuân thủ CSTCM, và nhập tiếp phím 1 để SHA gửi SoH tới SHV nhờ kiểm tra.

    • Mở Command Prompt khác và gõ lệnh ipconfig /renew.

    Quan sát:
    Lúc này cấu hình DNS Suffix, Subnet Mask, Default Gateway của máy trạm đã được cấu hình ở chế độ bị giới hạn quyền truy cập mạng tài nguyên mạng như hình sau. Đồng thời có thông báo cho người dùng về trạng thái này của máy, khi xem chi tiết thông báo ta có thể thấy được hướng dẫn về cách chỉnh sửa để SoH phù hợp với CSTCM.

    • Trong màn hình SHA, nhập phím 4 để SoH ở trạng thái đã tuân thủ CSTCM, nhập phím 1 để SHA thông báo gửi SoH tới SHV nhờ kiểm tra.

    • Ở Command Prompt còn lại, gõ lệnh ipconfig.

    Quan sát
    : Cấu hình DNS Suffix, Subnet Mask, Default Gateway của máy trạm sẽ được cấu hình lại ở chế độ toàn quyền truy cập mạng tài nguyên mạng giống như hình sau. Bên cạnh đó, chúng ta nhận được thông báo của hệ thống về trạng thái này giống phần dưới của hình sau.


    4. Vấn đề bảo mật

    NAP được xem là giải pháp tăng cường bảo mật mạng chứ không phải là giải pháp bảo mật mạng. Lý do là nó chỉ đảm bảo các máy toàn quyền truy cập tài nguyên mạng là những máy tuân thủ CSTCM, mà không cung cấp cơ chế ngăn chặn tấn công từ những máy đã tuân thủ CSTCM.

    Bên cạnh đó, khi triển khai NAP trên dịch vụ DHCP, chúng ta nhận thấy thông tin trao đổi giữa SHA và SHV chưa được bảo vệ. Điều này có thể dẫn đến khi có sự thay đổi trái phép yêu cầu Auto-Remediation cho SoH khi nó chuyển từ SHV tới SHA, nó có thể yêu cầu SHA thực hiện những việc gây hại cho máy trạm. Để giải quyết vấn đề này, SHA và SHV phải tự thực hiện cơ chế bảo vệ thông tin trao đổi hoặc không mở chức năng Auto-Remediation trong môi trường không có bảo vệ thông tin đường truyền. Các dịch vụ có sẵn hỗ trợ môi trường bảo vệ thông tin đường truyền là: IPSec, 802.1x, VPN.

    Vấn đề quan tâm tiếp theo là việc có thể tạo SHA trái phép, nhằm mục đích thay thế SHA có sẵn nào đó trong hệ thống thực hiện trả lời SoH cho NPS. Điều này có thể làm cho NPS kiểm tra những SoH sai lệnh và xem như máy trạm đã tuân thủ CSTCM. Để giải quyết vấn đề này, chúng ta không nên cấp cho người sử dụng có toàn quyền trên máy trạm để đăng ký và thay đổi SHA.

    LỜI KẾT

    Thông qua bài viết này chúng ta có thể thấy được vai trò API của Microsoft NAP cho phép phát triển giải pháp tăng cường bảo mật hoặc mở ra hướng kết hợp giải pháp bảo mật của riêng mình với giải pháp NAP. Đây cũng là bước khởi đầu nhằm chuẩn bị cho việc ứng dụng và phát triển một công nghệ mới về tăng cường bảo mật dựa trên Windows 2008 và Windows Vista/XP SP3.

    Hoàng Phi
    Công ty Global CyberSoft Vietnam
    ----------------------------------------------
    Tài liệu tham khảo:
    * www.microsoft.com
    * Demonstrate DHCP NAP Enforcement in a Test Lab

    Từ khóa: NAP, security
    ID: A0807_135