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

در قسمت قبل

امن‌سازی Oracle Linux 9 (بخش ششم): امن‌سازی پردازش‌ها (Process Hardening) و مدیریت Core Dump

انجام شد.

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

این مقاله به پوشش و پیاده‌سازی بندهای زیر از استاندارد CIS در خصوص System-wide Crypto Policy می‌پردازد:

  • 1.6.1 Ensure system-wide crypto policy is not set to LEGACY (Automated)
  • 1.6.2 Ensure system-wide crypto policy is configured correctly (Automated)
  • 1.6.3 Ensure no weak hash algorithms are allowed (Automated)
  • 1.6.4 Ensure SSH uses secure cipher suites (Automated)
  • 1.6.5 Ensure SSH uses secure MAC algorithms (Automated)
  • 1.6.6 Ensure SSH uses secure key exchange algorithms (Automated)
  • 1.6.7 Ensure SSH uses secure host and public key algorithms (Automated)

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

در Oracle Linux 9، سیاست رمزنگاری سراسری سیستم یک لایه متمرکز برای کنترل الگوریتم‌ها و تنظیمات رمزنگاری در کل سیستم است. به‌جای آن‌که هر سرویس تنظیمات رمزنگاری خودش را جداگانه داشته باشد، سیستم از یک policy واحد استفاده می‌کند که امنیت و یکنواختی بیشتری ایجاد می‌کند.

هدف CIS در این بخش، حذف الگوریتم‌های ضعیف مانند SHA1 و جلوگیری از استفاده از تنظیمات hardcoded در SSH است. این کار باعث می‌شود سرویس SSH از سیاست رمزنگاری سراسری سیستم پیروی کند و تنظیمات ناامن در فایل‌های پیکربندی، override نشوند.

از دید امنیتی، این رویکرد چند مزیت مهم دارد:

  • جلوگیری از استفاده ناخواسته از الگوریتم‌های ضعیف
  • یکپارچه‌سازی تنظیمات رمزنگاری در سطح سیستم
  • کاهش ریسک اشتباهات دستی در `sshd_config`
  • افزایش سازگاری با الزامات ممیزی و استانداردهای CIS

۳. سازگاری با Oracle Database و RAC

تغییر System-wide Crypto Policy در Oracle Linux 9 معمولاً برای Oracle Database و Oracle RAC شفاف است و اختلالی در عملکرد پایگاه داده ایجاد نمی‌کند. این تغییر بیشتر روی سرویس‌هایی مانند SSH اثر می‌گذارد و به‌ویژه زمانی مهم است که تنظیمات رمزنگاری به‌صورت hardcoded در `sshd_config` یا فایل‌های drop-in تعریف شده باشند.

در محیط‌های Oracle، حذف تنظیمات hardcoded SSH به این معناست که `sshd` به‌جای override شدن توسط تنظیمات محلی، از policy سراسری امن استفاده می‌کند. این موضوع برای دسترسی راه دور DBAها مهم است، چون هم امنیت حفظ می‌شود و هم اتصال مدیریتی از بین نمی‌رود.

در این مقاله از policy زیر استفاده می‌شود:

DEFAULT:NO-SHA1:CIS-SSH

و در صورت استفاده از FIPS، مقدار زیر نیز قابل قبول است:

FIPS:NO-SHA1:CIS-SSH

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

این اسکریپت وضعیت سیاست رمزنگاری سیستم و همچنین وجود یا عدم وجود تنظیمات hardcoded در SSH را بررسی می‌کند:

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

modules/audit_07_System_Crypto_Policy.sh

#!/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

منطق این اسکریپت ساده است: ابتدا policy فعال سیستم با `update-crypto-policies --show` خوانده می‌شود. اگر مقدار آن برابر `DEFAULT:NO-SHA1:CIS-SSH` یا `FIPS:NO-SHA1:CIS-SSH` باشد، این کنترل پاس می‌شود. سپس فایل‌های SSH بررسی می‌شوند تا هیچ directive سخت‌کد شده‌ای مانند `Ciphers` یا `MACs` باقی نمانده باشد.

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

این اسکریپت تنظیمات ناامن SSH را غیرفعال کرده، یک module اختصاصی برای policy رمزنگاری ایجاد می‌کند و سپس policy را اعمال می‌نماید:

لینک این اسکریپت در 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."

این remediation چهار کار اصلی انجام می‌دهد: ابتدا تنظیمات hardcoded را از `sshd_config` و فایل‌های زیرمجموعه comment می‌کند، سپس فایل policy module به نام `CIS-SSH.pmod` را می‌سازد، بعد policy سراسری `DEFAULT:NO-SHA1:CIS-SSH` را اعمال می‌کند، و در پایان سرویس `sshd` را restart می‌نماید.

محتوای فایل policy سفارشی به‌صورت زیر است:

# Disable CBC and ChaCha20-Poly1305 for SSH
cipher@ssh = -*CBC -CHACHA20-POLY1305

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

۶. جمع‌بندی

در این بخش، سیاست رمزنگاری سراسری Oracle Linux 9 بر اساس CIS 1.6 بررسی و اصلاح شد. نتیجه این تغییر، حذف الگوریتم‌های ضعیف، جلوگیری از تنظیمات hardcoded در SSH، و استفاده از یک policy متمرکز و امن برای کل سیستم است.

از منظر Oracle، این تغییر با Database و RAC سازگار است و در عین حال امنیت دسترسی مدیریتی را نیز حفظ می‌کند. بنابراین این کنترل، هم از نظر Compliance و هم از نظر عملیاتی برای سرورهای Oracle توصیه می‌شود.

در قسمت بعد

پیکربندی هشدارهای ورود از طریق Command Line

انجام خواهد شد.