Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ скриптам Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ β€” это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π±Ρ€Π΅ΡˆΡŒ Π² бСзопасности систСмы. Π‘Π΅Π· ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройки Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€Π°Π²Π° ΠΌΠΎΠ³ΡƒΡ‚ привСсти ΠΊ ΡƒΡ‚Π΅Ρ‡ΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π·Π°Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ врСдоносным ПО ΠΈΠ»ΠΈ нСсанкционированному доступу ΠΊ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΌ рСсурсам. Однако Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сцСнариях β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с CI/CD-ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ инфраструктурой β€” эти возмоТности становятся критичСски Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Ρ‘ΠΌ, ΠΊΠ°ΠΊ Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа для скриптов Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… (Windows, Linux, macOS), ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ бСзопасности стоит Π·Π°Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ риски. ОсобоС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠ΄Π΅Π»ΠΈΠΌ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°ΠΌ выполнСния скриптов, изоляции ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Ρƒ активности. Если Π²Ρ‹ администратор, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΠ»ΠΈ просто ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΡƒΡ‚ΠΈΠ½Π½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ β€” этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это бСзопасно.

ΠŸΠΎΡ‡Π΅ΠΌΡƒ скриптам Π½ΡƒΠΆΠ½Ρ‹ ΠΏΡ€Π°Π²Π° Π½Π° запись Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ доступ ΠΊ сСти?

Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° запись Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ сСтСвой доступ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² самых Ρ€Π°Π·Π½Ρ‹Ρ… сцСнариях:

  • πŸ“¦ Автоматизация развёртывания: скрипты ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡŽΡ‚ зависимости ΠΈΠ»ΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ сСрвСры (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ansible, Terraform).
  • πŸ“Š ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…: парсинг Π²Π΅Π±-страниц, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π»ΠΎΠ³ΠΎΠ² ΠΈΠ»ΠΈ гСнСрация ΠΎΡ‚Ρ‡Ρ‘Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Python-скрипты с requests ΠΈ pandas).
  • πŸ”„ Π Π΅Π·Π΅Ρ€Π²Π½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: автоматичСскоС созданиС бэкапов Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π² ΠΎΠ±Π»Π°ΠΊΠΎ.
  • πŸ› οΈ ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ систСм: скрипты ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ сСрвисов, Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Π»ΠΎΠ³ΠΈ ошибок ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ увСдомлСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· Telegram Bot API).

Однако ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих случаСв Ρ‚Π°ΠΈΡ‚ Π² сСбС риски. НапримСр, скрипт с ΠΏΡ€Π°Π²Π°ΠΌΠΈ Π½Π° запись Π² систСмныС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (/etc/ Π² Linux ΠΈΠ»ΠΈ C:\Windows\) ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ скомпромСтирован ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для установки Ρ€ΡƒΡ‚ΠΊΠΈΡ‚ΠΎΠ². А доступ ΠΊ сСти позволяСт Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌ ΡΠΊΡΡ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ C2-сСрвСрам (command-and-control).

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Богласно исслСдованию Verizon DBIR 2023, 82% ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚ΠΎΠ² бСзопасности связаны с чСловСчСским Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠΌ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ настройку ΠΏΡ€Π°Π² доступа. Π”Π°ΠΆΠ΅ Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΉ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ инструмСнтом Π°Ρ‚Π°ΠΊΠΈ, Ссли Π΅Π³ΠΎ ΠΏΡ€Π°Π²Π° Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹.

ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ контроля доступа Π² Ρ€Π°Π·Π½Ρ‹Ρ… ОБ

КаТдая опСрационная систСма прСдоставляСт свои инструмСнты для управлСния ΠΏΡ€Π°Π²Π°ΠΌΠΈ скриптов. Рассмотрим ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹:

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ контроля ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ инструмСнтов Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ гибкости
Windows ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ выполнСния (ExecutionPolicy), ACL, AppLocker Set-ExecutionPolicy, Group Policy, Windows Defender Application Control Высокий
Linux ΠŸΡ€Π°Π²Π° доступа (chmod), SELinux/AppArmor, sudoers chmod 750, setfacl, firejail ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ
macOS Gatekeeper, XProtect, TCC (Transparency, Consent, and Control) spctl, tccutil, Little Snitch Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ

НапримСр, Π² Windows ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Restricted ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скриптов, Π° AllSigned Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи. Π’ Linux ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ capabilities для дСлСгирования ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π°Π² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CAP_NET_RAW для сСтСвых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ) Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ root-доступа.

πŸ“Š ΠšΠ°ΠΊΡƒΡŽ ОБ Π²Ρ‹ Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ?
  • Windows
  • Linux
  • macOS
  • Π”Ρ€ΡƒΠ³ΡƒΡŽ

Пошаговая настройка ΠΏΡ€Π°Π² Π² Windows

Π’ Windows основной инструмСнт управлСния ΠΏΡ€Π°Π²Π°ΠΌΠΈ скриптов β€” PowerShell Execution Policy. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΠ½Π° установлСна Π² Restricted, Ρ‡Ρ‚ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ всС скрипты. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅:

  1. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ PowerShell ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ администратора.
  2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ:
    Get-ExecutionPolicy -List
  3. УстановитС Π½ΡƒΠΆΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, RemoteSigned для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… скриптов):
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
  4. Для сСтСвого доступа ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ настройка Windows Defender Firewall ΠΈΠ»ΠΈ AppLocker.

Если скрипт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C:\Program Files\), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ACL:

icacls "C:\Scripts\output" /grant Users:(OI)(CI)W
⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Unrestricted ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” это эквивалСнт запуска скриптов с ΠΏΡ€Π°Π²Π°ΠΌΠΈ администратора. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Ρ‘ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… срСдах (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Windows Sandbox).

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΡƒ Π½Π΅ Π½ΠΈΠΆΠ΅ RemoteSigned|

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° Π½Π° запись Ρ‡Π΅Ρ€Π΅Π· icacls|

ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ AppLocker для Π±Π΅Π»ΠΎΠ³ΠΎ списка скриптов|

Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Event Viewer (ΠΆΡƒΡ€Π½Π°Π» Windows PowerShell)

-->

Π˜Π·ΠΎΠ»ΡΡ†ΠΈΡ скриптов Π² Linux: chroot, containers, ΠΈ capabilities

Π’ Linux для ограничСния ΠΏΡ€Π°Π² скриптов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ нСсколько ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ²:

  • πŸ”’ Minimal privileges: запуск ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ (chmod 700 script.sh).
  • 🐳 ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹: изоляция Π² Docker ΠΈΠ»ΠΈ Podman с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ volumes ΠΈ сСтСвыми ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ.
  • πŸ›‘οΈ SELinux/AppArmor: созданиС ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, запись Π² /var/log/app/).
  • πŸ”§ Capabilities: Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€Π°Π² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, CAP_NET_BIND_SERVICE для привязки ΠΊ ΠΏΠΎΡ€Ρ‚Ρƒ <1024).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ограничСния скрипта с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ firejail:

firejail --net=eth0 --private ./network_script.sh

ΠšΡ€ΠΈΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π΄Π΅Ρ‚Π°Π»ΡŒ: Π΄Π°ΠΆΠ΅ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ скрипт ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ хостовой систСмС, Ссли смонтированы критичСскиС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, /dev ΠΈΠ»ΠΈ /proc). ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π»Π°Π³ --read-only для Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡƒΡ‚Π΅ΠΉ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Linux Capabilities?

Capabilities Π² Linux ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Ρ€Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΡΡƒΠΏΠ΅Ρ€ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (root) Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ CAP_CHOWN (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Ρ„Π°ΠΉΠ»ΠΎΠ²) ΠΈΠ»ΠΈ CAP_NET_ADMIN (сСтСвая администрированиС). Π­Ρ‚ΠΎ позволяСт Π΄Π°Π²Π°Ρ‚ΡŒ скриптам Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€Π°Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½Ρ‹, вмСсто ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ root-доступа.

macOS: Gatekeeper, TCC ΠΈ пСссочница

Π’ macOS ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ скриптами Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Ρ‡Π΅Ρ€Π΅Π· нСсколько ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ²:

  1. Gatekeeper: провСряСт Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ подписи скриптов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π΅Π³ΠΎ (spctl --master-disable) Π½Π΅ рСкомСндуСтся.
  2. TCC (Transparency, Consent, and Control): управляСт доступом ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, ΠΊΠ°ΠΌΠ΅Ρ€Π΅, ΠΌΠΈΠΊΡ€ΠΎΡ„ΠΎΠ½Ρƒ ΠΈ сСти. НастраиваСтся Ρ‡Π΅Ρ€Π΅Π· tccutil ΠΈΠ»ΠΈ Π² БистСмныС настройки β†’ ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.
  3. ΠŸΠ΅ΡΡΠΎΡ‡Π½ΠΈΡ†Π° (Sandbox): ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ процСссы, ограничивая ΠΈΡ… взаимодСйствиС с систСмой (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Automator).

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ скрипту доступ ΠΊ сСти, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Little Snitch ΠΈΠ»ΠΈ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π² pfctl (встроСнный Ρ„Π°Π΅Ρ€Π²ΠΎΠ»). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»Π° для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ исходящих соСдинСний:

sudo pfctl -a com.apple/250.APPLE -f /etc/pf.conf
πŸ’‘

Π’ macOS ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ запуском скрипта систСма запросит ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ доступа ΠΊ рСсурсам (Ρ„Π°ΠΉΠ»Π°ΠΌ, сСти). ВсСгда провСряйтС ΠΏΡƒΡ‚ΡŒ ΠΊ скрипту Π² Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅ β€” Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° врСдоносный.

БСзопасныС ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ: ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ риски

Π”Π°ΠΆΠ΅ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ настроСнными ΠΏΡ€Π°Π²Π°ΠΌΠΈ скрипты ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΡƒΠ³Ρ€ΠΎΠ·ΠΎΠΉ. Π‘Π»Π΅Π΄ΡƒΠΉΡ‚Π΅ этим рСкомСндациям:

  • πŸ” Аудит ΠΊΠΎΠ΄Π°: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ статичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ (Bandit для Python, ShellCheck для bash) для поиска уязвимостСй.
  • πŸ“œ Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅: Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΆΡƒΡ€Π½Π°Π» дСйствий скриптов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· syslog ΠΈΠ»ΠΈ Sentry).
  • πŸ”„ РСгулярныС обновлСния: зависимости скриптов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, npm-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ PyPI-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ для закрытия уязвимостСй.
  • πŸ›‘οΈ БСтСвая сСгмСнтация: ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ доступ скриптов ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌ рСсурсам Ρ‡Π΅Ρ€Π΅Π· VLAN ΠΈΠ»ΠΈ Zero Trust-ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСзопасного запуска Python-скрипта с сСтСвым доступом:

python3 -m venv --clear --without-pip isolated_env

source isolated_env/bin/activate

pip install --no-cache-dir -r requirements.txt

python3 --isolated script.py

⚠️ Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π‘ΠΊΡ€ΠΈΠΏΡ‚Ρ‹, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ с API-ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π°ΠΌΠΈ доступа, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π°Ρ… (AWS Secrets Manager, HashiCorp Vault), Π° Π½Π΅ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ….
πŸ’‘

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ (Principle of Least Privilege) β€” основа бСзопасности скриптов. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΈΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΏΡ€Π°Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ.

ΠœΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹

Π”Π°ΠΆΠ΅ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ настройкой ΠΏΡ€Π°Π² скрипты ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпромСтированы. Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ:

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ Π§Ρ‚ΠΎ отслСТиваСт ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
auditd (Linux) ИзмСнСния Ρ„Π°ΠΉΠ»ΠΎΠ², сСтСвыС соСдинСния auditctl -w /etc/passwd -p wa -k auth_changes
Windows Event Log Запуск скриптов, измСнСния ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊ Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688}
Wireshark/tcpdump Π‘Π΅Ρ‚Π΅Π²ΠΎΠΉ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ скриптов tcpdump -i eth0 -w script_traffic.pcap 'port 80 or port 443'

НастройтС оповСщСния для ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ активности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  • Π‘ΠΊΡ€ΠΈΠΏΡ‚ пытаСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΌ IP-адрСсам.
  • Π—Π°ΠΏΠΈΡΡŒ Π² систСмныС Ρ„Π°ΠΉΠ»Ρ‹ Π²Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΡ‘Π½Π½Ρ‹Ρ… Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ.
  • НСоТиданноС ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ рСсурсов (CPU, ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΡΠ΅Ρ‚ΡŒ).

Для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Prometheus + Grafana (для ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ) ΠΈΠ»ΠΈ OSSEC (для обнаруТСния Π²Ρ‚ΠΎΡ€ΠΆΠ΅Π½ΠΈΠΉ).

FAQ: ЧастыС вопросы ΠΎ ΠΏΡ€Π°Π²Π°Ρ… скриптов

МоТно Π»ΠΈ Π΄Π°Ρ‚ΡŒ скрипту доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Π° Π½Π΅ ΠΊΠΎ всСй Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС?

Π”Π°, Π² Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ chroot ΠΈΠ»ΠΈ ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΠ°ΠΏΠΊΡƒ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ read-only. Π’ Windows настройтС ACL Ρ‡Π΅Ρ€Π΅Π· icacls, Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ² доступ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ дирСкториям. НапримСр:

icacls "C:\Scripts\data" /grant:r User:(OI)(CI)RW

icacls "C:\" /deny User:(OI)(CI)W

Как ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΈΠ΅ сСтСвыС соСдинСния ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ скрипт?

Π’ Linux/macOS ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ lsof -i -P | grep script_name ΠΈΠ»ΠΈ netstat -tulnp. Π’ Windows β€” netstat -ano | findstr PID_скрипта. Для Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Wireshark с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ ΠΏΠΎ процСссу.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ссли скрипт Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ root-ΠΏΡ€Π°Π², Π½ΠΎ это нСбСзопасно?

Π Π°Π·Π±Π΅ΠΉΡ‚Π΅ скрипт Π½Π° части: критичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ root) вынСситС Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈ запускайтС Π΅Π³ΠΎ Ρ‡Π΅Ρ€Π΅Π· sudo с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€Π°Π²Π°ΠΌΠΈ (настройтС /etc/sudoers). НапримСр:

%script_users ALL=(root) NOPASSWD: /usr/local/bin/script_helper *

ΠžΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ΄ выполняйтС ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Как Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ скрипты ΠΎΡ‚ измСнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΠΌΠΈ Π»ΠΈΡ†Π°ΠΌΠΈ?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ подписи (Π² Windows β€” SignTool, Π² Linux β€” gpg) ΠΈ провСряйтС Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ. НапримСр:

gpg --verify script.sh.sig script.sh

Π’Π°ΠΊΠΆΠ΅ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ скрипты Π² ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹Ρ… рСпозиториях с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ суммами (SHA-256).

МоТно Π»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ скриптов ΠΊ сСти?

Π”Π°, Π² Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ firewall-cmd ΠΈΠ»ΠΈ iptables для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ исходящСго Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ запускаСтся скрипт. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

sudo iptables -A OUTPUT -m owner --uid-owner script_user -j DROP

Π’ Windows настройтС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² Windows Defender Firewall для Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎ ΠΏΡƒΡ‚ΠΈ.