~3 دقیقه مطالعه • بروزرسانی ۳۰ آذر ۱۴۰۴
1. اهداف امنیتی PowerShell
PowerShell تنها یک هدف امنیتی دارد: جلوگیری از اجرای ناخواسته اسکریپتها توسط کاربران ناآگاه. این ابزار قرار نیست جلوی اقدامات عمدی یا مخرب کاربران دارای مجوز را بگیرد. اگر کاربری اجازه حذف کاربران Active Directory را دارد، PowerShell نیز همان اجازه را خواهد داشت.
PowerShell یک «دروازه امنیتی» نیست، زیرا تقریباً هیچ کاری وجود ندارد که فقط از طریق PowerShell قابل انجام باشد. امنیت واقعی باید از طریق مجوزها، نقشها و سیاستهای ویندوز اعمال شود.
2. مکانیزمهای امنیتی PowerShell
PowerShell سه لایه امنیتی دارد که همگی بهصورت پیشفرض فعال هستند:
2.1 نیاز به مسیر برای اجرای اسکریپت
- PowerShell هرگز اسکریپتها را از مسیر جاری اجرا نمیکند مگر اینکه مسیر مشخص شود.
- اجرای
dirهرگزdir.ps1را اجرا نمیکند. - برای اجرای اسکریپت باید مسیر کامل یا نسبی مانند
.\script.ps1مشخص شود. - این کار از «هک نام فرمان» جلوگیری میکند.
2.2 عدم وابستگی پسوندها به اجرای مستقیم
- فایلهای
.ps1،.psm1،.psd1و… بهصورت پیشفرض قابل اجرا نیستند. - دابلکلیک کردن یک اسکریپت آن را اجرا نمیکند—فقط باز میشود.
- این کار از اجرای ناخواسته فایلهای مخرب جلوگیری میکند.
2.3 سیاست اجرای اسکریپتها (Execution Policy)
مهمترین لایه امنیتی PowerShell است و تعیین میکند چه اسکریپتهایی اجازه اجرا دارند.
3. امضای دیجیتال و Script Signing
PowerShell از امضای دیجیتال برای تضمین دو چیز استفاده میکند:
- هویت نویسنده اسکریپت
- عدم تغییر اسکریپت پس از امضا
3.1 ساخت گواهی امضای دیجیتال
برای تست میتوان از ابزار MakeCert.exe استفاده کرد:
makecert -n "CN=PowerShell Local Certificate Root" -a sha1 -eku 1.3.6.1.5.5.7.3.3 ...
3.2 امضای اسکریپت
Set-AuthenticodeSignature .\script.ps1 -Certificate $cert
اگر حتی یک کاراکتر در اسکریپت تغییر کند، امضا نامعتبر میشود و باید دوباره امضا شود.
4. Execution Policy در PowerShell
Execution Policy تعیین میکند چه اسکریپتهایی اجازه اجرا دارند. این سیاست امنیتی نیست—فقط یک «هشدار اولیه» است.
سطوح مختلف Execution Policy
- Restricted: هیچ اسکریپتی اجرا نمیشود.
- RemoteSigned: اسکریپتهای محلی آزاد؛ اسکریپتهای دانلودی نیازمند امضا.
- AllSigned: همه اسکریپتها باید امضا شده باشند.
- Unrestricted: همه اسکریپتها اجرا میشوند.
- Bypass: بدون هیچ محدودیت.
مشاهده و تغییر Execution Policy
Get-ExecutionPolicy Set-ExecutionPolicy RemoteSigned
این مقدار در رجیستری ذخیره میشود و با Group Policy قابل کنترل است.
5. رفتار PowerShell هنگام اجرای اسکریپتها
PowerShell هنگام اجرای اسکریپتها موارد زیر را بررسی میکند:
- آیا اسکریپت امضا شده است؟
- آیا امضا معتبر است؟
- آیا Execution Policy اجازه اجرا میدهد؟
اگر امضا نامعتبر باشد، خطای HashMismatch نمایش داده میشود.
نتیجهگیری
PowerShell امنیت ویندوز را جایگزین نمیکند؛ بلکه لایهای برای جلوگیری از اشتباهات ناخواسته اضافه میکند. با درک مکانیزمهای امنیتی، امضای دیجیتال و Execution Policy، میتوان محیطی امن، قابل کنترل و حرفهای برای اجرای اسکریپتها ایجاد کرد.
نوشته و پژوهش شده توسط دکتر شاهین صیامی