در قسمت قبل
امنسازی 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
انجام خواهد شد.