امن‌سازی Oracle Linux 9 (بخش هفتم): پیکربندی سیاست رمزنگاری سراسری (System-wide Crypto Policy)

در قسمت قبل

امن‌سازی پردازش‌ها (Process Hardening) و مدیریت Core Dump

انجام شد.

۱. الزامات CIS Benchmark (بخش ۱.۶)

این مقاله به پوشش و پیاده‌سازی بندهای زیر از استاندارد CIS در خصوص امن‌سازی و مدیریت متمرکز الگوریتم‌های رمزنگاری اختصاص دارد:

  • 1.6.1 Ensure system wide crypto policy is not set to legacy (Automated)
  • 1.6.2 Ensure system wide crypto policy is not set in sshd configuration (Automated)
  • 1.6.3 Ensure system wide crypto policy disables sha1 hash and signature support (Automated)
  • 1.6.4 Ensure system wide crypto policy disables macs less than 128 bits (Automated)
  • 1.6.5 Ensure system wide crypto policy disables cbc for ssh (Automated)
  • 1.6.6 Ensure system wide crypto policy disables chacha20-poly1305 for ssh (Manual)
  • 1.6.7 Ensure system wide crypto policy disables EtM for ssh (Manual)

 

۲. مفهوم و دلیل (Concept & Rationale)

در Oracle Linux 9، مکانیزم System-wide Crypto Policies معرفی شده است که به جای پیکربندی دستی تک‌تک سرویس‌ها، یک سیاست رمزنگاری واحد و یکپارچه را به تمام سرویس‌های سیستم (از جمله SSH، TLS و IPsec) اعمال می‌کند.

  • الگوریتم‌های منسوخ: الگوریتم‌هایی نظیر SHA1SHA1 (به دلیل آسیب‌پذیری در برابر Collision Attacks)، حالت CBCCBC (مستعد حملات روی متن رمزنگاری‌شده)، و MACهای کمتر از 128128 بیت به عنوان خطرات امنیتی شناخته شده و باید به طور کامل حذف شوند.
  • حذف تنظیمات دستی (Hardcoded): طبق بند ۱.۶.۲ استاندارد CIS، هیچ‌کدام از الگوریتم‌های رمزنگاری نباید مستقیماً داخل فایل پیکربندی sshd_config تعریف شوند (مانند Ciphers یا MACs)، بلکه باید از طریق سیاست کلی سیستم مدیریت شوند.

 

۳. بررسی سازگاری با پایگاه داده Oracle (RAC & Grid)

  • ارتباطات درون‌کلاستر (Inter-Node Communication): کلاستر اوراکل (Oracle RAC و Grid Infrastructure) برای نصب اولیه، اعمال پچ‌ها (Opatchauto) و مدیریت نودها به شدت به ارتباط بدون پسورد SSH متکی است.
  • نسخه‌های مدرن (19c و 23c/23ai): در این نسخه‌ها، ابزارهای اوراکل و کلاینت‌های SSH تعبیه‌شده به‌طور کامل از الگوریتم‌های مدرن (مانند AES-GCM و SHA-2) پشتیبانی می‌کنند و اعمال سیاست‌های سخت‌گیرانه (مانند DEFAULT:NO-SHA1) هیچ تداخلی با ارتباطات Grid ایجاد نمی‌کند.
  • هشدار در مورد محیط‌های قدیمی: اگر در محیط خود از کلاینت‌های بسیار قدیمی (Legacy) برای اتصال به سرور استفاده می‌کنید، ممکن است به دلیل حذف SHA1 یا CBC در برقراری اتصال SSH دچار مشکل شوید. در این صورت کلاینت‌ها باید به‌روزرسانی شوند.

 

۴. نحوه بررسی وضعیت فعلی (Audit Script)

این اسکریپت سیاست فعلی سیستم و همچنین عدم وجود تنظیمات دستی در فایل تنظیمات SSH را بررسی می‌کند.

لینک این اسکریپت در github:

modules/audit_07_System_Crypto_Policy.sh

در صورتی که با bash script  آشنا نیستید، می توانید به آموزشی که برای دیتابیس ادمین ها در سایت گذاشته ام مراجعه کنید.

Bash for Oracle DBAs

#!/bin/bash
# Script: audit_cis_1_6.sh
# Purpose: Audit System-wide Crypto Policy (CIS 1.6)

echo "=========================================================================="
echo " CIS Requirement: 1.6 System-wide Crypto Policy"
echo " - Ensure system-wide crypto policy is set correctly (NO-SHA1, CIS-SSH)."
echo " - Ensure no hardcoded crypto settings exist in sshd_config."
echo " Oracle Context:"
echo " 1. Updating the system crypto policy is generally transparent to"
echo "    Oracle Database and RAC installations."
echo " 2. Removing hardcoded SSH ciphers ensures SSHD uses the system-wide"
echo "    secure policy without disrupting DBA remote access."
echo "=========================================================================="

FAIL_COUNT=0

echo -e "\n[*] 1. Checking System Crypto Policy..."
CURRENT_POLICY=$(update-crypto-policies --show 2>/dev/null)
if [[ "$CURRENT_POLICY" == *"DEFAULT:NO-SHA1:CIS-SSH"* || "$CURRENT_POLICY" == *"FIPS:NO-SHA1:CIS-SSH"* ]]; then
    echo -e "  \e[32m[PASS]\e[0m System Crypto Policy is $CURRENT_POLICY."
else
    echo -e "  \e[31m[FAIL]\e[0m Crypto Policy is $CURRENT_POLICY (Expected: DEFAULT:NO-SHA1:CIS-SSH)."
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

echo -e "\n[*] 2. Checking sshd_config for hardcoded crypto settings..."
HARDCODED=$(grep -h -E -i '^\s*(Ciphers|MACs|KexAlgorithms|GSSAPIKexAlgorithms|HostKeyAlgorithms|PubkeyAcceptedKeyTypes)' /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null)

if [ -z "$HARDCODED" ]; then
    echo -e "  \e[32m[PASS]\e[0m No hardcoded crypto settings found in SSH config."
else
    echo -e "  \e[31m[FAIL]\e[0m Hardcoded crypto settings found:"
    echo "$HARDCODED"
    FAIL_COUNT=$((FAIL_COUNT + 1))
fi

if [ "$FAIL_COUNT" -eq 0 ]; then
    echo -e "\n\e[32m[+] AUDIT RESULT: PASS\e[0m"
else
    echo -e "\n\e[31m[-] AUDIT RESULT: FAIL ($FAIL_COUNT issues found)\e[0m"
fi

۵. نحوه اعمال تنظیمات (Remediation Bash Script)

این اسکریپت هرگونه تنظیمات دستی در SSH را پاک‌سازی کرده، یک ماژول سفارشی برای محدودیت‌های خاص SSH ایجاد می‌کند و سیاست نهایی را در سطح سیستم اعمال می‌نماید.

لینک این اسکریپت در github:

modules/remediate_07_System_Crypto_Policy.sh

#!/bin/bash
# Script: remediate_cis_1_6.sh
# Purpose: Configure System-wide Crypto Policy based on CIS (CIS 1.6)
# Context: Oracle Linux 9 (Database/RAC compatible)

if [ "$EUID" -ne 0 ]; then echo "Please run as root"; exit 1; fi

echo -e "\n[+] Applying System-wide Crypto Policy (CIS 1.6)..."

# 1. Remove hardcoded crypto settings from SSH configs (CIS 1.6.2)
echo "[*] Cleaning up hardcoded crypto settings from sshd_config..."
sed -ri 's/^\s*(Ciphers|MACs|KexAlgorithms|GSSAPIKexAlgorithms|HostKeyAlgorithms|PubkeyAcceptedKeyTypes)/# \1/' /etc/ssh/sshd_config
if ls /etc/ssh/sshd_config.d/*.conf 1> /dev/null 2>&1; then
    sed -ri 's/^\s*(Ciphers|MACs|KexAlgorithms|GSSAPIKexAlgorithms|HostKeyAlgorithms|PubkeyAcceptedKeyTypes)/# \1/' /etc/ssh/sshd_config.d/*.conf
fi

# 2. Create custom policy module for SSH restrictions (CIS 1.6.4 to 1.6.7)
echo "[*] Creating custom module /etc/crypto-policies/policies/modules/CIS-SSH.pmod..."
cat <<EOF > /etc/crypto-policies/policies/modules/CIS-SSH.pmod
# Disable CBC and ChaCha20-Poly1305 for SSH
cipher@ssh = -*CBC -CHACHA20-POLY1305

# Disable MACs less than 128 bits
mac@ssh = -*MD5* -*UMAC-64*
EOF

# 3. Apply the Crypto Policy (CIS 1.6.1, 1.6.3)
echo "[*] Applying DEFAULT:NO-SHA1:CIS-SSH policy..."
update-crypto-policies --set DEFAULT:NO-SHA1:CIS-SSH

# 4. Restart SSHD to apply changes
echo "[*] Restarting SSHD service..."
systemctl restart sshd

echo -e "\n[+] Crypto policy updated and SSHD restarted successfully."

در قسمت بعد به سراغ:

پیکربندی بنرهای هشدار

می رویم.