Захист сценаріїв powershell, windows it pro

Прийнявши зазначені заходи безпеки, ви виключіть можливість виконання в середовищі PowerShell сценаріїв, які не засвідчених вашої цифровим підписом, і тим самим уникнете атаки зловмисників на свою систему. Розповідаючи про це, я виходжу з того, що читач вже знайомий із середовищем PowerShell

ARUBA INSTANT WI-FI: ПРОСТІ, ПОТУЖНІ, ДОСТУПНІ

Одне з важливих міркувань, які при виконанні сценаріїв Windows PowerShell слід брати до уваги в контексті забезпечення безпеки, це необхідність запобігати несанкціонований запуск сценаріїв на системі. За замовчуванням виконання сценаріїв в середовищі PowerShell не передбачено. Однак сценарії є ефективним засобом адміністрування Windows, тому, якщо ви експлуатуєте оболонку PowerShell, вам, швидше за все, трапляється ними користуватися.

Сценарій PowerShell - це звичайний текстовий файл з розширенням. ps1. Файл містить одну або кілька інструкцій PowerShell, які виконуються при виклику сценарного файлу з консолі. PowerShell дає користувачеві можливість визначати, чи припустимо виконання сценаріїв, і якщо так - вказувати, які сценарії можуть виконуватися. Щоб керувати виконанням сценаріїв і забезпечити більш високий рівень захисту системи, слід:

  • сформувати політику виконання PowerShell;
  • створити сертифікат X.509;
  • засвідчувати сценарії цифровим підписом.

Формування політики виконання

Політика виконання PowerShell визначає, чи припустимо виконання сценаріїв і чи будуть завантажуватися файли конфігурації при запуску оболонки PowerShell. Для формування політики виконання потрібно скористатися складовою командою Set-ExecutionPolicy і вказати з її допомогою один з наступних параметрів виконання.

  • Restricted: файли конфігурації PowerShell не завантажуються і сценарії не виконуються. Цей забезпечує найжорсткіші обмеження параметр застосовується за умовчанням. В результаті після того, як ви встановили PowerShell, ненавмисне виконання сценаріїв, а також завантаження даних конфігурації виключаються. У той же час ви можете виконувати окремі команди з консолі PowerShell.
  • AllSigned: всі сценарії і файли конфігурації повинні бути засвідчені підписом користується довірою видавця. Для підпису сценарію ви повинні задіяти сертифікат підпису коду. Як буде показано нижче, такий сертифікат можна створити самостійно.
  • RemoteSigned: всі сценарії і файли конфігурації, завантажені з Інтернету, повинні бути засвідчені цифровим підписом. Однак сценарії, що зберігаються на вашому комп'ютері, можуть виконуватися, а локальні файли конфігурації завантажуватися і в тому випадку, якщо вони не мають цифрового підпису.
  • Unrestricted: виконуються всі сценарії і завантажуються всі файли конфігурації. Цей варіант пов'язаний з найменшими обмеженнями і, отже, пов'язаний з найбільшим ризиком.

Таким чином, якщо ви хочете захистити систему, але в той же час забезпечити можливість виконання сценаріїв і завантаження файлів конфігурації, слід визначити політику виконання як AllSigned. Для цього введіть у вікні командного рядка PowerShell наступну команду:

Створення сертифіката X.509

Якщо для політики виконання зазначено параметр AllSigned, це означає, що ви повинні підписувати свої файли; інакше кажучи, вам необхідний сертифікат підпису коду X.509. X.509 - криптографічний стандарт, який визначає формат для таких пов'язаних із забезпеченням безпеки пристроїв, як сертифікати відкритих ключів та списки відкликаних сертифікатів. Ви можете або придбати сертифікат X.509, випущений загальнодоступним підтверджуючий центр, або створити власний засвідчує центр і сертифікат. Повний опис стандарту X.509 і загальнодоступних центрів сертифікації не відноситься безпосередньо до теми даної статті. Однак я поясню, як ви можете створити власний локальний засвідчує центр і сертифікат.

Як і будь-яку іншу утиліту командного рядка, програму Makecert можна виконувати в рядку із запрошеннями PowerShell. Наприклад, коли ви створюєте засвідчує центр (що необхідно зробити перед тим, як приступати до створення сертифіката), потрібно вказати ім'я утиліти (Makecert), а також необхідні параметри. У наступному прикладі я створюю засвідчує центр з ім'ям PowerShell CA в кореневому сховищі сертифікатів:

Ця команда включає ряд параметрів. У наведеній таблиці міститься їх короткий опис.

Таблиця. Параметри команди Makecert, використані в прикладі

Захист сценаріїв powershell, windows it pro

При запуску даної команди відкривається діалогове вікно Create Private Key Password (екран 1) з пропозицією ввести пароль.

Захист сценаріїв powershell, windows it pro

Екран 1. Діалогове вікно Create Private Key Password

Після того як ви двічі введете пароль і натиснути кнопку ОК, на екрані з'явиться діалогове вікно Enter Private Key Password (екран 2) з пропозицією ввести пароль, який ви тільки що вказали в діалоговому вікні Create Private Key Password.

Захист сценаріїв powershell, windows it pro

Екран 2. Діалогове вікно Enter Private Key Password

Коли ви натиснете ОК, на екрані з'явиться вікно повідомлення Security Warning (подібне показаному на екрані 3), що містить попередження про те, що ви збираєтеся встановити засвідчує центр PowerShell CA.

Захист сценаріїв powershell, windows it pro

Екран 3. Вікно повідомлення Security Warning

Коли ви натиснете кнопку Yes, утиліта Makecert створить засвідчує центр в вашому локальному сховищі сертифікатів.

Як і у випадку з попередньою командою, ця команда включає ряд параметрів Makecert. Описи цих параметрів теж наводяться в таблиці. Треба відзначити, що параметру -ss (який визначає сховище сертифікатів) я задав значення My, а не значення Root, яке було використано мною при створенні центру сертифікації. Значення My вказує на те, що сертифікат буде розміщений в сховище сертифікатів папки Personal сховища Current User. Сховище Current User використовується за умовчанням. Ви також можете задіяти параметр -sr LocalMachine, щоб помістити сертифікат в сховищі сертифікатів Local Computer.

Коли ви запускаєте команду Makecert з метою створення сертифіката, система знову пропонує ввести пароль. Йдеться про пароль закритого ключа, який ви встановили, створюючи засвідчує центр. Потім створюється сертифікат в сховищі Trusted Root Certification Authorities поточного користувача.

Переглядати сертифікат можна у вікні оснащення Certificates консолі Microsoft Management Console (MMC; см. Екран 4).

Захист сценаріїв powershell, windows it pro

Екран 4. Оснащення MMC Certificates

Засвідчення сценаріїв PowerShell підписом

Засвідчення сценарію підписом - процес досить простий. Потрібно взяти складову команду Set-AuthenticodeSignature і вказати підлягає засвідченню сценарний файл, а також сертифікат підпису коду, який буде використовуватися для запевнення файлу. Наприклад, ви хочете запевнити сценарний файл C: \ Audit \ SecurityAudit.ps1, представлений у фрагменті A лістингу. Цей сценарій виводить 20 останніх подій, перерахованих в журналі безпеки.

Наступні інструкції спочатку вказують сценарний файл і сертифікат, а потім виконують складову команду Set-AuthenticodeSignature:

У першій інструкції я призначаю повне ім'я файлу у вигляді рядка змінної $ file. У другій інструкції я використовую команду Get-ChildItem для зчитування сертифіката підпису коду зі сховища сертифікатів і привласнюю його змінної $ cert. Щоб вважати сертифікат, я вказую як маршрут cert: \ CurrentUser \ My. Префікс cert: - це накопичувач, який використовується для звернення до сховища сертифікатів. Далі слід CurrentUser, який вказує на каталог всередині сховища сертифікатів. Параметр My вказує на сертифікати, що знаходяться в папці Personal. При використанні складовою команди Get-ChildItem для зчитування сертифіката необхідно також включати параметр-перемикач -CodeSigningCert для зчитування тільки тих сертифікатів, які мають санкцію на підпис коду.

Якщо сховище сертифікатів My містить більше одного сертифіката підпису коду, змінна $ cert буде містити ці сертифікати; в подібному випадку потрібно буде вказати бажаний сертифікат при посиланні на змінну $ cert. Один із способів це зробити полягає в тому, щоб додати індекс об'єкта після імені змінної. Наприклад, при виклику першого сертифіката підпису коду потрібно вжити посилання $ cert [0], при виклику другого сертифіката - посилання $ cert [1] і т. Д. Але якщо ви знаєте, що є тільки один сертифікат підпису коду, індекси в квадратних дужках включати не слід.

При запуску сценарію, завіреного підписом, система запропонує засвідчити безпеку його виконання. Ви можете дати команду ніколи не виконувати цей файл, не виконувати його на цей раз, виконати одноразово або виконувати завжди. Якщо ви дасте команду ніколи не виконувати цей файл або завжди виконувати його, в подальшому при спробі запустити сценарій система не буде пропонувати вам засвідчити безпеку. В інших випадках при спробі запустити сценарій ви будете отримувати таку пропозицію.

Підпис сценарію з використанням файлу .pfx

Якщо для підпису файлів ви використовуєте особистий сертифікат, не виключено, що шкідлива програма підпише сценарій з його допомогою, і буде виконаний небажаний сценарій. Уникнути цього і забезпечити вашу систему ще більш надійним захистом можна, експортувавши сертифікат підпису коду в файл .pfx, щоб в подальшому використовувати цей файл для підпису сценарію.

Щоб експортувати сертифікат, відкрийте оснащення Certificates і відшукайте свій сертифікат (екран 4). Правою кнопкою миші на сертифікаті підпису коду і в меню, що розкрилося виділіть пункт All Tasks, а потім - Export. В результаті буде запущено майстер Certificate Export. Для здійснення експорту файлу дотримуйтесь інструкцій майстра. Не забудьте експортувати закритий ключ разом із сертифікатом і забезпечити надійний захист. Можете також вказати, чи слід вносити до маршрут сертифікації всі сертифікати, видалити закритий ключ і експортувати розширені властивості. Буде потрібно ще вказати пароль і місцезнаходження файлу. Для розглянутих прикладів я зберіг файл в каталозі C: ​​\ Audit \ PS_Cert.pfx. Завершивши процедуру експорту сертифіката, обов'язково видаліть його зі сховища сертифікатів і простежте за тим, щоб файл .pfx знаходився в безпечному місці.

Після виконання інструкцій майстра все буде готово до підпису файлу. Як і раніше, перші дві інструкції повинні визначати необхідні змінні - так, наприклад, як в наступному фрагменті коду:

У першій інструкції я привласнюю розташування файлу сценарію змінної $ file. Далі я використовую команду Get-PfxCertificate для зчитування файлу .pfx і зберігаю його в змінній $ cert.

Коли ви запустите другу інструкцію, система запропонує ввести пароль. Йдеться про те паролі, який ви вказали, коли експортували сертифікат в файл. Як і раніше, для підпису файлу використовуйте команду Set-AuthenticodeSignature. При запуску команди вкажіть файли сценарію і .pfx, як в наступному прикладі:

Ось і все, що можна сказати з приводу запевнення файлу цифровим підписом. Як бачите, після того як сценарій створений і, можливо, експортований в файл. pfx, процедура запевнення файлів не повинна викликати труднощів. Тим часом це ефективний спосіб забезпечення безпеки системи. Будь-адміністратор знає, що в даному питанні не можна перестаратися, особливо коли справа стосується захисту сценаріїв PowerShell.

Лістинг. Засвідчення підписом файлу сценарію SecurityAudit.ps1

Поділіться матеріалом з колегами і друзями