Derek Melber
Nếu đã từng nghe thấy PowerShell thì chắc hẳn bạn đang phân vân PowerShell có tác dụng bảo mật như thế nào. Với tất cả sự cố gắng và công sức đã bỏ ra, cỗ máy kịch bản này hiện đang trưởng thành hơn với những tính năng bảo mật nâng cao. PowerShell không chỉ là một ngôn ngữ kịch bản thường trình của bạn. Có nhiều tính năng bảo mật được xây dựng kèm trong nó cũng như một số bảo mật bổ sung mà bạn có thể cấu hình trong PowerShell.
Bảo mật mặc định của PowerShell
Đầu tiên phải vào giao diện của PowerShell trước khi thực hiện những gì bạn muốn. Trong giao diện có một số phương thức bảo mật mặc định được thiết kế để bảo đảm bất cứ ai có mang theo mã độc sẽ bị từ chối mọi cố gắng truy cập.
Nội dung đường dẫn
Phương thức bảo mật đầu tiên mà bạn sẽ bắt gặp là PowerShell sẽ không chạy các kịch bản trong thư mục hiện hành. Điều này nhằm để các kịch bản mã độc đang cố gắng xâm nhập vào nhằm chống phá cmdlet và các lệnh sẽ bị thất bại.
Ví dụ, nếu bạn muốn chạy một kịch bản có tên Example.ps1 từ thư mục C:\scripts, thì bạn cần phải đưa đường dẫn đầy đủ vào kịch bản, thậm chí cả khi bạn đang ở thư mục C:\scripts trong PowerShell. Hình 1 minh chứng cho các bạn thấy những gì xảy ra khi cố gắng chạy Example.ps1 mà không có đường dẫn.
Hãy quan sát những gì xảy ra khi chạy kịch bản có đường dẫn trong kịch bản trong hình 2.
Tại sao lại bị hạn chế?
Thiết lập mặc định khác có liên quan trực tiếp đến bảo mật là tất cả các kịch bản phải được chạy một cách tương tác qua lại. Đây chính là một phương pháp bảo mật để bảo đảm rằng các kịch bản của PowerShell không bị thực thi từ một kịch bản có dính líu tới virus. Điều đó có nghĩa là bạn phải ở trong giao diện PowerShell và chạy kịch bản theo thời gian thực.
Thiết lập mặc định này có liên quan tới ExecutionPolicy thiết lập bên trong PowerShell. ExecutionPolicy được thiết lập mặc định là Restricted (hạn chế), như trong hình 3.
Tầm ảnh hưởng của các bảo mật mặc định
ExecutionPolicy mặc định trong PowerShell ở mức rất an toàn. Nó không cho phép bất kỳ kịch bản nào có thể chạy từ bất cứ một nơi nào. Vì vậy các kịch bản bạn tạo và đặt vào trong một hệ thống sẽ không chạy. Các kịch bản download từ Internet cũng sẽ không chạy. Các kịch bản mà thậm chí đã được xác nhận và bảo mật ở mức độ nào đó cũng sẽ không chạy. Chính bởi vậy bạn cần phải thiết lập lại mức ExecutionPolicy trước khi chạy các kịch bản của mình.
Thiết lập mức bảo mật cho ExecutionPolicy
Có bốn mức bảo mật cho ExecutionPolicy mà bạn có thể thiết lập ó. Bốn mức bảo mật này cung cấp cho bạn những tính năng bảo mật tuyệt vời trên những gì mà kịch bản của bạn có thể chạy và nhu cầu gì cần thiết có liên quan để kịch bản có thể chạy. Bốn mức này và các yêu cầu gồm có:
Restricted
Đây là cấu hình mặc định trong PowerShell. Thiết lập này có nghĩa rằng không một kịch bản nào có thể chạy, không quan tâm đến định danh của nó. Những thứ có thể chạy trong PowerShell với thiết lập này là các lệnh riêng rẽ.
AllSigned
Thiết lập này cho phép các kịch bản có thể chạy trong PowerShell. Tuy nhiên các kịch bản phải có định danh số từ một nhà xuất bản tin cậy. Sẽ có một nhắc nhở trước khi chạy các kịch bản từ nhà xuất bản tin cậy. Điều này cho phép bạn tránh được các kịch bản có chứa mã độc.
RemoteSigned
Kịch bản này cho phép các kịch bản có thể chạy, nhưng yêu cầu kịch bản và file cấu hình phải được download từ Internet có định danh số từ một nhà xuất bản tin cậy. Các kịch bản chạy từ máy tính cục bộ không cần phải ký như vậy. Không có nhắc nhở nào trước khi chạy kịch bản. Tuy nhiên bạn vẫn có thể tránh được các kịch bản mã độc.
Unrestricted
Đây không phải là thiết lập được đề xuất! Mức bảo mật này cho phép các kịch bản không có định danh, có thể gồm tất cả các kịch bản và file cấu hình đã được tải về từ Internet. Rủi ro ở đây chắc hẳn bạn sẽ đoán được, đó là các mã độc có thể xâm nhập một cách dễ dàng.
Để thiết lập bất kỳ mức bảo mật nào, bạn phải nhập vào mức bảo mật như thể hiện trong hình 4.
Sử dụng Group Policy
PowerShell là tuyệt vời, nhưng nếu các kịch bản không thể chạy trên máy tính trong môi trường của bạn thì nó rõ ràng có những hạn chế. Đầu tiên, bạn phải có PowerShell trên mỗi máy tính. Khi PowerShell được đặt thông qua một file EXE, nó rất dễ để cài đặt ứng dụng. Bạn có thể sử dụng một file ZAP và đẩy nó ra bằng Group Policy, hoặc có thể sử dụng phương pháp cài đặt các ứng dụng hiện thời. Tuy nhiên bạn nên lưu ý rằng PowerShell được xem xét như một hotfix, vì vậy Windows Update cũng có thể đẩy ra cài đặt của PowerShell.
Sau khi đã cài đặt PowerShell cho các máy tính, bạn cần phải kích hoạt các kịch bản để chạy. Với ExecutionPolicy được thiết lập ở mức Restricted mặc định, bạn cần phải cấu hình mỗi máy tính để chạy các kịch bản muốn chạy. Điều này có thể mất đến nhiều ngày nếu muốn thực hiện nó một cách thủ công.
Mặc dù bạn cũng có thể sử dụng Group Policy để có được những thực hiện như trên. Tuy nhiên có thể tạo Administrative Template (file ADM) của chính bạn để thực hiện sự thay đổi này, hoặc tải mẫu ADM mà Microsoft cung cấp.
Sau khi download, bạn cần phải cài đặt MSI. Tuy nó không phải là sự cài đặt hiệu quả nhất. Nhưng sau khi cài đặt, file ADM được đưa vào trong thư mục C:\program files\Microsoft Group Policy. Đây là một sự bảo mật tuyệt vời! File cần import vào Group Policy Object Editor là PowerShellExtensionPolicy.ADM. Sau khi import, bạn sẽ có hai nút mới trong Group Policy Object, một ở Computer Configuration\Administrative Templates\Windows Components\Windows PowerShell và một ở User Configuration\Administrative Templates\Windows Components\Windows PowerShell, như trong hình 5.
Khi cấu hình chính sách này, bạn sẽ có 3 tùy chọn cho một thiết lập như trong hình 6.
Kết luận
PowerShell là một thành phần được tích hợp trong sản phẩm Windows Server 2008, hệ điều hành sẽ được phát hành vào đầu năm 2008, và PowerShell sẽ cất cánh giống như một chiếc phi thuyền động cơ tên lửa. Với tất cả những quan tâm mà PowerShell đang cố gắng, mọi người hy vọng rằng nó đã sẵn sàng với các tính năng bảo mật nâng cao.
Sự thật là tất cả các kịch bản được thiết lập để có một chính sách thực thi hạn chế là điều không tưởng. Cho dù bạn có một file .PS1, thì sự tồn tại kịch bản liên quan với Notepad là một bảo mật mặc định tốt. Dù là bạn có thể có giao diện PowerShell, thì sự thật đường dẫn cho kịch bản vẫn cần phải được đánh thêm vào. Ngoài các bảo mật mặc định, bạn còn có thể thiết lập chính sách thực thi và kiểm soát PowerShell thông qua Group Policy để kiểm soát tập trung sự bảo mật của PowerShell.