# راهنمای ساختار و نگارش اسکریپت‌های ممیزی FAVA > **مخزن:** `Domains/` > **مسیر تحویل:** `Auditing/FAVA/` (و در برخی دامنه‌ها root دامنه برای Windows Service) > **مخاطب:** تیم Hardening & Resilience — ICT Security Department of Isfahan Municipality > **نسخهٔ سند:** 1.0.0 > **تاریخ:** ۱۴۰۵/۰۴/۰۷ (۲۰۲۶-۰۶-۲۷) > **جفت سند:** [`AUDIT_GUIDELINE_SCRATCH.md`](./AUDIT_GUIDELINE_SCRATCH.md) --- ## فهرست مطالب 1. [هدف و تعریف FAVA](#۱-هدف-و-تعریف-fava) 2. [نقشهٔ دامنه‌ها و موجودی canonical](#۲-نقشهٔ-دامنه‌ها-و-موجودی-canonical) 3. [ساختار پوشه‌ای و نام‌گذاری فایل](#۳-ساختار-پوشه‌ای-و-نام‌گذاری-فایل) 4. [الزامات هدر و metadata](#۴-الزامات-هدر-و-metadata) 5. [معماری داخلی اسکریپت](#۵-معماری-داخلی-اسکریپت) 6. [پارامترهای CLI و متغیرهای محیطی](#۶-پارامترهای-cli-و-متغیرهای-محیطی) 7. [پیاده‌سازی کنترل‌های CIS](#۷-پیاده‌سازی-کنترل‌های-cis) 8. [ثبت نتیجه — نقطهٔ واحد](#۸-ثبت-نتیجه--نقطهٔ-واحد) 9. [گزارش‌دهی و Schema JSON](#۹-گزارش‌دهی-و-schema-json) 10. [ماژول‌های Enterprise](#۱۰-ماژول‌های-enterprise) 11. [Hardent Orchestration](#۱۱-hardent-orchestration) 12. [کدهای خروج (Exit Codes)](#۱۲-کدهای-خروج-exit-codes) 13. [مسیرهای خروجی و آرشیو](#۱۳-مسیرهای-خروجی-و-آرشیو) 14. [امنیت اجرا و رفتار پیش‌فرض](#۱۴-امنیت-اجرا-و-رفتار-پیش‌فرض) 15. [الگو به تفکیک دامنه](#۱۵-الگو-به-تفکیک-دامنه) 16. [نسخه‌گذاری، آرشیو و deprecate](#۱۶-نسخه‌گذاری-آرشیو-و-deprecate) 17. [چک‌لیست تحویل FAVA](#۱۷-چک‌لیست-تحویل-fava) 18. [منابع و مراجع داخلی](#۱۸-منابع-و-مراجع-داخلی) --- ## ۱. هدف و تعریف FAVA **FAVA** مسیر **تحویل عملیاتی (Production Canonical)** اسکریپت‌های ممیزی CIS در مخزن `Domains` است. | ویژگی | الزام FAVA | |-------|------------| | **هدف** | اجرا روی دارایی‌های واقعی سازمان (سرور، ایستگاه، hypervisor، سرویس) | | **شکل** | اسکریپت **تک‌فایل self-contained** — بدون وابستگی runtime به `_tools/` یا `source` خارجی | | **تعامل** | **Non-interactive** — بدون `Read-Host`؛ مناسب Ansible/SCCM/cron/SSH | | **گزارش** | **JSON-First** — TXT/CSV/HTML/Splunk از JSON تولید می‌شوند | | **benchmark** | هر کنترل به **نسخهٔ مشخص CIS** متصل است | | **هم‌ترازی** | semantics کنترل و exit code با اسکریپت **Hardening** جفت mirror شود | **FAVA نیست:** - محیط آزمایش معماری جدید → [`Scratch`](./AUDIT_GUIDELINE_SCRATCH.md) - orchestration چندمرحله‌ای playbook → `Auditing/Hardent/` (فقط Ubuntu) --- ## ۲. نقشهٔ دامنه‌ها و موجودی canonical ``` Domains/ ├── HyperVisor/Auditing/FAVA/ │ └── Esxi 8/VMware_ESXi_vCenter_Audit-V2.2.1.ps1 ← canonical ESXi 8 ├── LinuxDebianOS/Auditing/FAVA/ ← خالی (Ubuntu در Scratch) ├── LinuxRedhatOS/Auditing/FAVA/ │ └── CIS_Rocky9.x_Audit_v14.1.1.sh ← canonical Rocky 9 ├── LinuxService/Auditing/FAVA/ │ ├── manifest.yaml │ ├── lib/benchmark_guard.sh │ ├── Apache/CIS-v2.1.0/CIS_Linux_Apache_Audit_v3.0.0.sh │ ├── NGINX/CIS-v2.0.1/CIS_Linux_NGINX_Audit_v3.0.0.sh │ ├── Docker/CIS-v1.8.0/CIS_Linux_Docker_Audit_v3.0.0.sh │ ├── PostgreSQL/18/CIS_Linux_PostgreSQL_Audit_v3.0.0.sh │ └── PostgreSQL/17/CIS_Linux_PostgreSQL17_Audit_v1.0.0.sh ├── WindowsOS/Auditing/FAVA/ │ ├── CIS_Audit_Windows_10-v1.0.0.ps1 │ ├── CIS_Audit_Windows_11-v1.0.0.ps1 │ └── CIS_Audit_Windows_Server_2022-v15.1.1.ps1 ├── WindowsService/ ← root دامنه (بدون زیرپوشه FAVA) │ ├── CIS_IIS_10_Benchmark_Audit_V5.3.1.ps1 │ └── CIS_SQL_Server_2022_Audit-v5.0.1.ps1 └── Infrastructure/Auditing/ ← بدون پیاده‌سازی ``` | دامنه | فایل canonical | Benchmark CIS | Schema JSON | خطوط تقریبی | |-------|----------------|---------------|-------------|-------------| | HyperVisor | `VMware_ESXi_vCenter_Audit-V2.2.1.ps1` | ESXi 8 v1.1.0 (133) | 1.0.0 | ~۶۳۵۰ | | WindowsOS Win10 | `CIS_Audit_Windows_10-v1.0.0.ps1` | Win10 Enterprise v4.0.0 | 1.0.0 unified | ~۱۶۸۰۰ | | WindowsOS Win11 | `CIS_Audit_Windows_11-v1.0.0.ps1` | Win11 Enterprise v5.0.1 | 1.0.0 unified | ~۱۵۸۰۰ | | WindowsOS Server | `CIS_Audit_Windows_Server_2022-v15.1.1.ps1` | Server 2022 v5.0.0 (482) | 1.0.0 unified | ~۱۱۰۰۰ | | WindowsService IIS | `CIS_IIS_10_Benchmark_Audit_V5.3.1.ps1` | IIS 10 v1.2.1 (55) | 2.1.0 | ~۳۱۰۰ | | WindowsService SQL | `CIS_SQL_Server_2022_Audit-v5.0.1.ps1` | SQL 2022 v1.2.0 | additive | ~۵k+ | | LinuxRedhatOS | `CIS_Rocky9.x_Audit_v14.1.1.sh` | Rocky 9 v2.0.0 | 1.0.0 | ~۱۳۳۰۰ | | LinuxService Apache | `CIS_Linux_Apache_Audit_v3.0.0.sh` | Apache 2.4 v2.1.0 | **3.0.0** | ~۴۳۰۰ | | LinuxService NGINX | `CIS_Linux_NGINX_Audit_v3.0.0.sh` | NGINX v2.0.1 | **3.0.0** | ~۳۰۰۰ | | LinuxService Docker | `CIS_Linux_Docker_Audit_v3.0.0.sh` | Docker v1.8.0 (118) | **3.0.0** | ~۵۵۰۰ | | LinuxService PG18 | `CIS_Linux_PostgreSQL_Audit_v3.0.0.sh` | PostgreSQL 18 | **3.0.0** | ~۳۱۰۰ | | LinuxService PG17 | `CIS_Linux_PostgreSQL17_Audit_v1.0.0.sh` | PostgreSQL 17 | 3.0.0 | fork PG18 | --- ## ۳. ساختار پوشه‌ای و نام‌گذاری فایل ### ۳.۱ قرارداد نام فایل ``` CIS_{Platform}_{Component}_Audit_v{ScriptVersion}.{ps1|sh} ``` | بخش | قانون | مثال | |-----|-------|------| | `Platform` | OS یا hypervisor | `Windows_10`, `Rocky9.x`, `Linux_Apache` | | `Component` | اختیاری برای سرویس | `PostgreSQL`, `Docker` | | `ScriptVersion` | **نسخهٔ داخلی اسکریپت** (semver) | `v14.1.1`, `v3.0.0` | | پسوند | `.ps1` (Windows/ESXi) یا `.sh` (Linux) | | **استثناها:** - ESXi: `VMware_ESXi_vCenter_Audit-V2.2.1.ps1` (سنت قدیمی — نسخهٔ فایل = نسخهٔ داخلی) - IIS/SQL: `CIS_IIS_10_Benchmark_Audit_V5.3.1.ps1` ### ۳.۲ Linux Service — محور benchmark در `LinuxService/Auditing/FAVA/` محور اصلی **نسخهٔ CIS benchmark** است: ``` FAVA/ ├── manifest.yaml ← رجیستری canonical ├── lib/ │ └── benchmark_guard.sh ← --strict preflight ├── Apache/ │ └── CIS-v2.1.0/ ← محور = CIS v2.1.0 │ ├── CIS_Linux_Apache_Audit_v3.0.0.sh │ └── _archive/ ← semver قدیمی اسکریپت └── PostgreSQL/ └── 18/ ← محور = major PostgreSQL └── CIS_Linux_PostgreSQL_Audit_v3.0.0.sh ``` ### ۳.۳ تفکیک نسخهٔ اسکریپت از نسخهٔ benchmark | مفهوم | محل | مثال | |-------|-----|------| | `script_version` | header + JSON `script_version` | `14.1.1` | | `benchmark_version` | header + JSON `benchmark_version` | `CIS Rocky Linux 9 v2.0.0` | | نام فایل | `v{ScriptVersion}` | `CIS_Rocky9.x_Audit_v14.1.1.sh` | **هرگز** نسخهٔ benchmark را به‌جای نسخهٔ اسکریپت در نام فایل نگذارید (مگر سنت ثابت‌شدهٔ دامنه مثل ESXi). --- ## ۴. الزامات هدر و metadata هر اسکریپت FAVA **باید** با بلوک هدر سازمانی شروع شود. ### ۴.۱ فیلدهای اجباری هدر ``` - نام اسکریپت و مسیر فایل - سازمان: ICT Security Department of Isfahan Municipality - تیم: Network Security Team / Hardening & Resilience Unit - نویسنده: M.A.Fardani - Cybersecurity Specialist - benchmark_version (نسخهٔ CIS) - script_version (نسخهٔ داخلی) - last_updated (تاریخ ISO) - توضیح یک‌خطی: standalone / non-interactive / privilege requirement ``` ### ۴.۲ بلوک‌های اجباری پس از هدر | بلوک | محتوا | |------|-------| | `USAGE` | دستورات نمونه اجرا | | `OPTIONS` / `PARAMETERS` | تمام پارامترهای CLI | | `ENVIRONMENT VARIABLES` | متغیرهای محیطی | | `VERSION HISTORY` / `CHANGELOG` | تاریخچهٔ تغییرات خط‌به‌خط | | `SCRIPT_EXECUTION_GUIDE` | (PowerShell بزرگ) prerequisites، quick start | ### ۴.۳ قالب changelog هر ورژن جدید **حداقل** شامل: - تاریخ (ISO) - دسته‌بندی تغییر: `fix` | `feat` | `docs` | `refactor` - تأثیر روی کنترل‌ها (اگر ID مشخص است ذکر شود) - تغییر schema (اگر breaking) ### ۴.۴ کامنت روی دستورات audit از نسخه‌های اخیر (مثلاً ESXi V2.2.1، Rocky v14.1.1، Win10 v1.0.0): - کامنت‌های **لاتین (انگلیسی)** روی بلوک‌های `cis_check_*` / `Check-*` / `LogResult` - هدف: خوانایی برای automation review و تیم بین‌المللی --- ## ۵. معماری داخلی اسکریپت ### ۵.۱ الگوی کلی (همهٔ دامنه‌ها) ``` ┌─────────────────────────────────────────────────────────┐ │ 01 — Header, param(), readonly constants │ ├─────────────────────────────────────────────────────────┤ │ 02 — CLI parse, output path init, colors │ ├─────────────────────────────────────────────────────────┤ │ 03 — Helper functions (timeout, json_escape, logging) │ ├─────────────────────────────────────────────────────────┤ │ 04 — Preflight (root/admin, deps, OS version, service) │ ├─────────────────────────────────────────────────────────┤ │ 05 — Enterprise modules (inventory, CVE, AV, …) │ ├─────────────────────────────────────────────────────────┤ │ 06 — Control catalog (embedded یا associative array) │ ├─────────────────────────────────────────────────────────┤ │ 07 — Check implementations (per chapter / per control) │ ├─────────────────────────────────────────────────────────┤ │ 08 — Main orchestration (profile filter, chapter loop) │ ├─────────────────────────────────────────────────────────┤ │ 09 — Report generation (JSON → TXT/CSV/HTML/Splunk) │ ├─────────────────────────────────────────────────────────┤ │ 10 — Archive, hash manifest, optional GPG/CMS signing │ ├─────────────────────────────────────────────────────────┤ │ 11 — Hardent markers (در صورت پشتیبانی) │ ├─────────────────────────────────────────────────────────┤ │ 12 — Exit code + optional self-destruct │ └─────────────────────────────────────────────────────────┘ ``` ### ۵.۲ PowerShell — `#region` (Windows OS / ESXi) ``` #region Configuration_and_Globals #region Helper_Functions #region Enterprise_Modules #region Audit_Check_Functions #region Embedded_Catalogs ← Windows 10/11 #region Chapter_01 .. Chapter_N #region Main_Execution #region Reporting_and_Export ``` **Windows 10/11 FAVA:** کاتالوگ embedded در `#region Embedded_Catalogs` — **بدون JSON خارجی در runtime**. ### ۵.۳ Bash — `#region` (Linux Service v3) الگوی مرجع: `_shared/bash/cis-audit-framework.sh` (کپی regionها در اسکریپت — **source نکنید در production**) ``` #region 01_HEADER_METADATA #region 02_CLI_AND_PARAMETERS #region 04_GLOBAL_STATE #region 05_FRAMEWORK_FUNCTIONS ← register_finding, build_audit_json #region 06_CONTROL_CATALOG ← declare -A CIS_CONTROLS #region 07_SERVICE_CONTEXT ← detection Apache/NGINX/Docker/PG #region 08_CHECK_IMPLEMENTATIONS #region 09_ENTERPRISE_MODULES #region 10_MAIN_EXECUTION #region 11_REPORT_GENERATION #region 12_FOOTER_DOCUMENTATION ``` ### ۵.۴ Bash — Rocky FAVA (monolithic OS) ``` SECTION 0 — Shebang + shellcheck + header SECTION 1 — Global constants (readonly) SECTION 2 — Directory structure + colors SECTION 3 — Core utilities (json_escape, output_result, timeout) SECTION 4 — Enterprise modules SECTION 5 — CIS chapter checks SECTION 6 — Report generation (JSON-first HTML viewer) SECTION 7 — Main execution + self-destruct ``` مرجع: `LinuxRedhatOS/Auditing/FAVA/RockyARCHITECTURE.md` --- ## ۶. پارامترهای CLI و متغیرهای محیطی ### ۶.۱ PowerShell — پارامترهای مشترک (الزام برای اسکریپت‌های جدید) | پارامتر | نوع | پیش‌فرض | توضیح | |---------|-----|---------|-------| | `OutputPath` / `BasePath` | string | OS-specific | مسیر پایهٔ گزارش | | `CISProfile` | enum | `L1` یا `All` | L1/L2/BL/NG/All | | `NonInteractive` | switch | implicit | بدون prompt | | `EmitHardentMarkers` | switch | `$true` | مارکرهای orchestration | | `StrictExit` | switch | `$false` | exit غیرصفر در FAIL | | `NoColor` | switch | `$false` | خروجی بدون رنگ | | `NoAutoRun` | switch | `$false` | فقط تعریف توابع (CI) | | `RetentionDays` | int | `90` | پاک‌سازی آرشیو | **Windows 10/11 اضافی:** - `MinPasswordLength`, `MaxDaysWithoutBackup`, `MaxInactivityDays`, `MaxScreenLockTimeout` — آستانه‌های CAM **ESXi V2.2.1 اضافی:** - `CISProfile` L1/L2/All - `TreatWarningAsFail`, `NoAutoRun` - اتصال اجباری vCenter/ESXi **IIS V5.3.1:** - `BasePath`, `Service`, `SplunkUser` - `SelfDestruct` (پیش‌فرض ON), `KeepScript` - `NonInteractive`, `Force` **SQL v5.0.1:** - `ConfigFile`, `IncludeRemediation` - `SelfDestruct` پیش‌فرض **OFF** (حفظ شواهد forensic) ### ۶.۲ Bash — پارامترهای مشترک | پارامتر / ENV | معادل PowerShell | |---------------|------------------| | `-o, --output DIR` | `OutputPath` | | `--profile L1\|L2\|ALL` / `CIS_PROFILE` | `CISProfile` | | `--no-color` / `NO_COLOR=1` | `NoColor` | | `--verbose` / `VERBOSE=1` | verbose | | `--strict` | `benchmark_guard` فعال | | `--diff FILE` | مقایسه با baseline JSON | | `--no-html` | بدون HTML | | `SELF_DESTRUCT=0` | نگه‌داشتن اسکریپت | | `DEBUG_MODE=1` | لاگ debug | | `CREATE_ZIP=0` | بدون آرشیو | | `SIGN_REPORTS=1` | امضای GPG | | `COMMAND_TIMEOUT=N` | timeout دستورات (Rocky) | **Rocky FAVA اضافی:** - `--fast` — فقط CIS، بدون inventory گسترده - `--parallel` — collectors موازی - `--remediation` — تولید اسکریپت remediation (opt-in) ### ۶.۳ متغیرهای مسیر خروجی | لایه | پیش‌فرض | |------|---------| | Windows / ESXi | `C:\Windows\Logs\CIS-Audit` | | Linux OS (Rocky) | `/var/log/cis-audit` | | Linux Service | `/var/log/cis-audit/{apache\|nginx\|docker\|postgresql}` | زیرساخت استاندارد: ``` {base}/ ├── reports/{hostname}_{ip}_{service}_{timestamp}/ │ ├── *.json │ ├── *.txt │ ├── *.csv │ └── *.html ├── archives/ ├── splunk/ └── metadata/ ``` --- ## ۷. پیاده‌سازی کنترل‌های CIS ### ۷.۱ استخراج از benchmark برای هر کنترل ثبت کنید: | فیلد | منبع | |------|------| | `id` | شمارهٔ CIS (مثلاً `1.1.2`) | | `title` | عنوان recommendation | | `level` | L1 / L2 | | `chapter` | شماره و نام فصل | | `assessment_type` | Automated / Manual (طبق تعریف CIS) | | `expected` | مقدار مورد انتظار | | `remediation` | دستور یا مرجع remediation | | `severity` | Critical / High / Medium / Low | | `mitre` | تکنیک ATT&CK (در صورت نگاشت) | | `cis_v8` | CIS Controls v8 mapping | ### ۷.۲ کاتالوگ کنترل — Linux Service v3 ```bash declare -A CIS_CONTROLS # فرمت: title|level|chapter_num|severity|mitre|cisv8|description CIS_CONTROLS["1.2"]="Ensure the server is not a multi-use system|L1|1|Medium|T1190|4.1|Verify ..." ``` ### ۷.۳ کاتالوگ embedded — Windows کاتالوگ JSON در `#region Embedded_Catalogs`: - Registry checks از OVAL/XCCDF - Service checks از XCCDF Chapter 5 - ساخت در build-time از `Domains/_tools/` (نه runtime) ### ۷.۴ Multi-Source Verification (MSV) برای کنترل‌های حساس، **حداقل دو منبع** تأیید کنید: | لایه | منابع | |------|-------| | Windows | Registry `\Policies\` → SecEdit → non-Policies registry | | Linux sysctl | runtime (`sysctl -n`) + فایل‌های `/etc/sysctl.d/` | | SSH | `sshd -T` effective + فایل config | | Rocky | Runtime + config + CIS cross-check + confidence score | **Windows Policy Authority (Win10 v4):** | اولویت | منبع | کاربرد | |--------|------|--------| | 1 | Registry `\Policies\` | GPO admin templates | | 2 | SecEdit export | Account policies, user rights | | 3 | Machine registry | خارج از GPO hive | GPResult/RSoP فقط `SecondaryCheck` — **هرگز** PASS/FAIL را override نمی‌کند. ### ۷.۵ Profile filter قبل از ثبت نتیجه، کنترل را با profile فیلتر کنید: **PowerShell:** `Test-ProfileIncludesControl -ControlId $id` **Bash (framework v3):** ```bash case "${CIS_PROFILE:-ALL}" in L1) [[ "$level" == "L2" ]] && return 0 ;; L2) [[ "$level" == "L1" ]] && return 0 ;; esac ``` ### ۷.۶ وضعیت‌های مجاز (Status enum) | Status | معنی | شمارش compliance | |--------|------|------------------| | `PASS` | مطابق انتظار | passed | | `FAIL` | ناقض | failed | | `WARN` | انحراف جزئی | warn (v3) | | `SKIP` / `N/A` | غیرقابل اجرا | skip — **خارج از compliance** | | `MANUAL` | نیاز به بررسی انسانی | manual — **خارج از compliance** | ### ۷.۷ SKIP شرطی — قوانین SKIP فقط وقتی: - سرویس/پکیج نصب نیست (و کنترل به آن وابسته است) - نقش سیستم متفاوت است (DC vs workstation — `role_filter`) - محیط container/WSL و کنترل نامربوط است - profile mismatch (بدون ثبت در آمار) **همیشه** دلیل SKIP را در `actual` یا `skip_reason` بنویسید. ### ۷.۸ جلوگیری از duplicate control ID **Windows:** `$script:ExecutedCisIds` — inline checks بر embedded catalog اولویت دارند. **Bash v3:** `register_finding` یک‌بار per ID در loop اصلی. --- ## ۸. ثبت نتیجه — نقطهٔ واحد **هرگز** مستقیماً به فایل گزارش ننویسید. همیشه از تابع مرکزی استفاده کنید. ### ۸.۱ PowerShell — `LogResult` ```powershell function LogResult { param ( [string]$check_id, [string]$status, # PASS | FAIL | N/A | MANUAL [string]$description, [string]$expected, [string]$actual, [string]$location ) # 1. Profile filter # 2. Update counters + chapter stats # 3. Get severity + impact # 4. Append TXT, CSV, JSON buffer, Splunk } ``` مسیر: `WindowsOS/Auditing/FAVA/CIS_Audit_Windows_10-v1.0.0.ps1` (~خط 10869) ### ۸.۲ Bash Rocky — `output_result` ```bash output_result() { # id, status, expected, actual, remediation # → JSON finding object + TXT row + Splunk NDJSON } ``` همراه با `json_escape()` برای تمام interpolationهای JSON. ### ۸.۳ Bash Linux Service v3 — `register_finding` ```bash register_finding() { local id="$1" status="$2" actual="${3:-}" expected="${4:-}" remediation="${5:-}" local evidence_json="${6:-[]}" # normalize_status → update AUDIT_STATS → append to AUDIT_FINDINGS[] } ``` مرجع: `_shared/bash/cis-audit-framework.sh` ### ۸.۴ فیلد evidence در v3، آرایهٔ JSON شواهد: ```json ["sshd -T output: permitrootlogin no", "/etc/ssh/sshd_config: PermitRootLogin no"] ``` --- ## ۹. گزارش‌دهی و Schema JSON ### ۹.۱ اصل JSON-First ``` اجرای چک‌ها → ساخت JSON کامل → derive TXT/CSV/HTML/Splunk ``` HTML **viewer خالص** — بدون منطق audit: ```html ``` ### ۹.۲ نسخه‌های Schema موجود | schema_version | دامنه‌ها | |----------------|----------| | `1.0.0` | Windows OS unified, Rocky FAVA, ESXi | | `2.0.0` | Apache legacy (v2.0.x) | | `2.1.0` | IIS V5.3 | | `3.0.0` | Linux Service v3 — **هدف یکسان‌سازی** | مرجع رسمی v3: `_shared/schemas/cis-audit-report-3.0.0.json` ### ۹.۳ ساختار JSON v3.0.0 (الزام Linux Service) ```json { "schema_version": "3.0.0", "script_version": "3.0.0", "benchmark_version": "CIS Apache HTTP Server 2.4 v2.1.0", "benchmark_name": "CIS Apache HTTP Server 2.4 Benchmark", "layer": "SERVICE", "execution": { "started_at": "2026-06-27T10:00:00Z", "finished_at": "2026-06-27T10:05:00Z", "hostname": "web01", "ip_address": "10.0.0.5", "duration_seconds": 300, "auditor": "...", "user": "root" }, "environment": { "os_family": "rhel", "os_name": "Rocky Linux", "service_version": "2.4.62" }, "summary": { "total": 100, "passed": 85, "failed": 10, "warn": 0, "skip": 3, "manual": 2, "compliance_percent": 89, "weighted_compliance_percent": 82, "by_chapter": {}, "by_severity": {} }, "controls": [ { "id": "1.2", "title": "...", "chapter": "Planning and Installation", "chapter_num": 1, "level": "L1", "status": "PASS", "severity": "Medium", "assessment_type": "Automated", "expected": "...", "actual": "...", "remediation": "...", "evidence": [], "mitre": "T1190", "cis_v8_control": "4.1" } ], "diff": null, "artifacts": { "txt": "/var/log/cis-audit/apache/reports/.../....txt", "json": "...", "html": "..." } } ``` ### ۹.۴ فرمت‌های خروجی اجباری | فرمت | الزام | توضیح | |------|-------|-------| | JSON | **بله** | منبع حقیقت | | TXT | **بله** | گزارش انسانی + executive summary | | CSV | توصیه‌شده | import به Excel/SIEM | | HTML | **بله** | viewer از embedded JSON | | Splunk/NDJSON | توصیه‌شده | یک خط per control/event | | ZIP/tar.gz archive | توصیه‌شده | تمام artifacts + hash manifest | ### ۹.۵ نام‌گذاری فایل گزارش ``` {hostname}_{ip}_{service_slug}_{YYYYMMDD_HHMMSS}.{ext} ``` مثال: ``` web01_10.0.0.5_cis_apache_20260627_143022.json ``` ### ۹.۶ امتیازدهی (Scoring) | متریک | فرمول | |-------|-------| | `compliance_percent` | `passed / (total - skip - manual) * 100` | | `weighted_compliance_percent` | وزن: Critical=4, High=3, Medium=2, Low=1 | | Executive risk score | `100 - weighted_compliance` با سقف per-category (ESXi/Ubuntu) | ### ۹.۷ یکپارچگی گزارش (Windows) پس از نوشتن TXT، hash append کنید: ``` Report-SHA256: ``` HTML: checksum چندفایلی via `Calculate-AllReportHashes`. ### ۹.۸ لاگینگ ساختاریافته ```text [{ISO8601}] [{LEVEL}] [{ScriptVersion}] [{ControlId}] {Message} ``` سطوح: `INFO`, `PASS`, `FAIL`, `WARN`, `MANUAL`, `ERROR` **Splunk — فیلدهای اجباری:** `control_id`, `status`, `benchmark_version`, `schema_version`, `host`, `layer` --- ## ۱۰. ماژول‌های Enterprise فراتر از checklist CIS — **الزام در اسکریپت‌های OS و hypervisor**، **توصیه‌شده در Service**. ### ۱۰.۱ ماژول‌های استاندارد | ماژول | تابع نمونه | خروجی JSON | |-------|------------|------------| | Antivirus detection | `audit_antivirus_comprehensive` | per-vendor cards | | Patch/CVE management | `audit_security_patches_cve` | RHSA/CVE list | | Network exposure | `audit_network_exposure` | open ports + risk | | Persistence mechanisms | `audit_persistence_mechanisms` | cron/timers/services | | Repository security | `audit_repository_security` | HTTPS/GPG status | | Defensive tools | `Get-DefensiveToolsStatus` | Fail2Ban, AIDE, CrowdSec | | User/session inventory | `Get-DetailedUserAudit` | last login, sessions | | Resource monitoring | `Get-ResourceSnapshot` | CPU/RAM before/after | | Virtualization detection | `Get-VirtualizationPlatform` | VM/hypervisor type | | SELinux/AppArmor deep | `audit_selinux_deep` | MAC posture | ### ۱۰.۲ محل در JSON Windows unified schema: ```json "system_inventory": { "os": {}, "firewall": {}, "security_agents": {}, "patch_management": {}, "persistence": {} } ``` Linux Service v3: بلوک `enterprise_modules` (در صورت پیاده‌سازی) یا enrichment در `environment`. ### ۱۰.۳ Disaster Recovery (ESXi) هر کنترل automated: capture **مقدار فعلی** برای بازگردانی پس از hardening: ```json "disaster_recovery": { "control_id": "3.1.1", "current_value": "...", "setting_path": "..." } ``` --- ## ۱۱. Hardent Orchestration ### ۱۱.۱ مارکر استاندارد (الزام برای اسکریپت‌های جدید Windows/ESXi) ``` ###HARDENT_TASK_OUTPUT_BEGIN### [Task Name: CIS Audit Summary] [CIS Control: ALL] ... structured output ... {Result:True|False} ###HARDENT_TASK_OUTPUT_END### ``` **PowerShell:** ```powershell function Emit-HardentTaskOutput { ... } # فعال با -EmitHardentMarkers (پیش‌فرض $true) ``` **پشتیبانی فعلی:** - Windows 10/11 FAVA ✓ - ESXi V2.2.1 ✓ - Windows Server 2022 — **در انتظار** ✗ - IIS/SQL — **در انتظار** ✗ - Linux Service v3 — **در انتظار** ✗ ### ۱۱.۲ پارامتر ```powershell [switch]$EmitHardentMarkers = $true ``` برای CI خاموش کنید: `-EmitHardentMarkers:$false` --- ## ۱۲. کدهای خروج (Exit Codes) ### ۱۲.۱ Linux Service v3 (استاندارد `_shared`) | کد | ثابت | معنی | |----|------|------| | 0 | `EXIT_SUCCESS` | همهٔ automatedها PASS | | 1 | `EXIT_ERROR_GENERAL` | خطای عمومی | | 2 | `EXIT_ERROR_SERVICE_NOT_FOUND` | سرویس نصب نیست | | 3 | `EXIT_ERROR_PRIVILEGE` | نیاز به root | | 4 | `EXIT_ERROR_CONFIG_NOT_FOUND` | فایل config یافت نشد | | 5 | `EXIT_ERROR_DEPENDENCY` | وابستگی گم‌شده | | 10 | `EXIT_COMPLIANCE_FAIL` | یک یا چند FAIL | | 11 | `EXIT_COMPLIANCE_PARTIAL` | WARN/MANUAL باقی مانده | ```bash framework_exit_code() { [[ ${AUDIT_STATS[failed]} -gt 0 ]] && echo 10 [[ ${AUDIT_STATS[warn]} -gt 0 || ${AUDIT_STATS[manual]} -gt 0 ]] && echo 11 echo 0 } ``` ### ۱۲.۲ IIS V5.3.1 | کد | معنی | |----|------| | 0 | All controls passed | | 1 | Controls failed | | 2 | Runtime error | | 3 | IIS not installed | | 4 | Invalid configuration | | 5 | Permission denied | | 6 | Unsupported platform | | 7 | User aborted | ### ۱۲.۳ Windows — StrictExit ```powershell if ($StrictExit -and $script:FAILED_COUNT -gt 0) { exit 1 } ``` ### ۱۲.۴ Rocky / Ubuntu | کد | معنی | |----|------| | 0 | Success | | 1 | Critical failure | | 2 | Partial / error | | 3 | Not root | --- ## ۱۳. مسیرهای خروجی و آرشیو ### ۱۳.۱ ساختار دایرکتوری گزارش ``` {BASE_PATH}/ └── {service_slug}/ ├── reports/ │ └── {hostname}_{ip}_{slug}_{timestamp}/ │ ├── {basename}.json │ ├── {basename}.txt │ ├── {basename}.csv │ ├── {basename}.html │ └── {basename}.splunk.log ├── archives/ │ └── {basename}.tar.gz (یا .zip در Windows) ├── splunk/ └── metadata/ └── hashes.json ``` ### ۱۳.۲ Hash manifest ```json { "algorithm": "SHA256", "files": { "report.json": "abc123...", "report.html": "def456..." }, "generated_at": "2026-06-27T10:05:00Z" } ``` SHA256 **اجباری** — MD5 فقط legacy (deprecated). ### ۱۳.۳ Retention پارامتر `RetentionDays` (پیش‌فرض 90): پاک‌سازی archives قدیمی‌تر در پایان اجرا. --- ## ۱۴. امنیت اجرا و رفتار پیش‌فرض ### ۱۴.۱ سطح دسترسی | پلتفرم | الزام | |--------|-------| | Windows | `#Requires -RunAsAdministrator` + runtime assert | | Linux OS/Service | `EUID=0` — exit `EXIT_ERROR_PRIVILEGE` | | ESXi | PowerCLI + credentials vCenter/ESXi | ### ۴.۲ Non-Interactive - بدون `Read-Host` - `-NonInteractive` در PowerShell - `DEBIAN_FRONTEND=noninteractive` در bash (در صورت apt) ### ۱۴.۳ Timeout Protection ```bash run_with_timeout() { ... } # Rocky ``` ```powershell Invoke-WithTimeout { ... } # Windows ``` پیش‌فرض Rocky: `COMMAND_TIMEOUT=60` ### ۴.۴ Self-Destruct | اسکریپت | پیش‌فرض | override | |---------|---------|----------| | Windows 10/11 | ON | `$env:SELF_DESTRUCT = "0"` | | IIS V5.3.1 | ON | `-SelfDestruct:$false` / `-KeepScript` | | SQL v5.0.1 | **OFF** | — | | Rocky FAVA | env-controlled | `SELF_DESTRUCT=0` | | Linux Service v3 | OFF | — | ### ۴.۵ Redaction - License key ESXi: redact در گزارش - رمزعبور: هرگز در `actual`/`evidence` - PII: محدود به نیاز audit ### ۱۴.۶ `benchmark_guard` (Linux Service) ```bash # lib/benchmark_guard.sh cis_benchmark_guard # با --strict → exit در mismatch نسخه ``` مثال: PostgreSQL major 17 روی host ولی benchmark 18 → WARN یا FAIL در strict mode. --- ## ۱۵. الگو به تفکیک دامنه ### ۱۵.۱ HyperVisor — ESXi V2.2.1 - PowerCLI اجباری؛ اتصال vCenter/ESXi در preflight - کاتالوگ مرکزی ۱۳۳ کنترل CIS ESXi 8 v1.1.0 - `CISProfile` L1/L2/All - `AssessmentStatus` per CIS Automated/Manual - Executive Risk Engine (۸ دسته) - Disaster Recovery capture - خروجی: TXT/CSV/JSON/HTML/Splunk + CIS control matrix CSV ### ۱۵.۲ WindowsOS **Win10/11 FAVA (monolith v1.0.0):** - Embedded OVAL registry + service catalogs - `Get-EffectivePolicyValue` authority model - CAM IG1 — ۱۴ کنترل supplemental (Chapter 0) - Chapters 1–19 inline + supplemental OVAL catalog - `Emit-HardentTaskOutput` **Server 2022 v15.1.1:** - ۴۸۲ کنترل CIS v5.0.0 - Multi-source Registry+GPO+WMI - **فاقد** Hardent markers (بدهی فنی) ### ۱۵.۳ WindowsService **IIS:** مرجع schema 2.1.0 — `Test-AuditJsonSchema`, OWASP 2025, attack-chain risk **SQL:** data-driven dispatch engine, STIG enrichment, `-IncludeRemediation` opt-in ### ۱۵.۴ LinuxRedhatOS — Rocky v14.1.1 - `output_result()` + `json_escape()` JSON-first - `--fast` / `--parallel` performance modes - HTML viewer از embedded JSON - DNF/CVE، SELinux deep، auditd dashboard - Splunk + remediation generator (`--remediation`) ### ۱۵.۵ LinuxService v3 - `register_finding()` از framework v3 - `manifest.yaml` رجیستری canonical - `--help` → `show_controls_help()` لیست کاتالوگ - `--diff` → regression detection vs baseline JSON - `audit_qa.sh` برای QA قبل از تحویل --- ## ۱۶. نسخه‌گذاری، آرشیو و deprecate ### ۱۶.۱ bump نسخه | نوع تغییر | bump | |-----------|------| | fix کنترل (بدون schema break) | PATCH: `14.1.1` → `14.1.2` | | کنترل جدید / enterprise module | MINOR: `14.1.x` → `14.2.0` | | schema breaking / معماری جدید | MAJOR: `14.x` → `15.0.0` | ### ۱۶.۲ آرشیو نسخهٔ قبلی ``` FAVA/{Service}/CIS-v{X}/_archive/CIS_Linux_{Service}_Audit_v{old}.sh ``` همراه با `README.md`: ```markdown # DEPRECATED Superseded by: ../CIS_Linux_Apache_Audit_v3.0.0.sh Archived: 2026-06-07 Reason: schema 3.0.0 migration ``` ### ۱۶.۳ promote از Scratch فقط پس از تکمیل [چک‌لیست Scratch → FAVA](./AUDIT_GUIDELINE_SCRATCH.md#۹-چک‌لیست-promote-scratch--fava). --- ## ۱۷. چک‌لیست تحویل FAVA ### ۱۷.۱ ساختار و metadata - [ ] نام فایل مطابق قرارداد `CIS_{Platform}_Audit_v{X}.{ext}` - [ ] `script_version` در هدر = نسخهٔ فایل - [ ] `benchmark_version` صحیح و مطابق PDF/XCCDF - [ ] CHANGELOG ورژن جدید کامل - [ ] USAGE + OPTIONS + ENV documented - [ ] کامنت لاتین روی بلوک‌های audit ### ۱۷.۲ اجرا - [ ] Non-interactive — بدون prompt - [ ] Privilege check (root/admin) با exit code صحیح - [ ] Preflight: OS version, service presence, dependencies - [ ] Timeout روی دستورات کند - [ ] `-NoAutoRun` / `--help` کار می‌کند ### ۱۷.۳ کنترل‌ها - [ ] تمام control IDهای benchmark پوشش داده شده - [ ] Profile filter (L1/L2) صحیح - [ ] Automated/Manual مطابق CIS - [ ] MSV برای کنترل‌های حساس - [ ] SKIP با دلیل معتبر - [ ] بدون duplicate ID در گزارش نهایی ### ۱۷.۴ گزارش - [ ] JSON معتبر و کامل - [ ] `schema_version` صحیح - [ ] `compliance_percent` + `weighted_compliance_percent` - [ ] HTML viewer از embedded JSON (بدون logic audit) - [ ] TXT + CSV تولید می‌شود - [ ] Splunk log با فیلدهای استاندارد - [ ] نام فایل: hostname_ip_service_timestamp - [ ] Archive + SHA256 manifest ### ۱۷.۵ Enterprise (در صورت applicable) - [ ] Inventory modules اجرا و در JSON - [ ] MITRE mapping روی کنترل‌های کلیدی - [ ] Executive risk score (OS/hypervisor) ### ۱۷.۶ Automation - [ ] Exit codes documented و تست‌شده - [ ] `EmitHardentMarkers` (Windows/ESXi) - [ ] `StrictExit` کار می‌کند - [ ] `manifest.yaml` به‌روز (Linux Service) ### ۱۷.۷ امنیت - [ ] بدون secret در گزارش - [ ] Self-destruct behavior documented - [ ] `benchmark_guard --strict` (Linux Service) --- ## ۱۸. منابع و مراجع داخلی | سند / فایل | مسیر | |------------|------| | نقشه راه یکسان‌سازی | `Domains/AUDIT_UNIFICATION_ROADMAP.md` | | Framework bash v3 | `Domains/_shared/bash/cis-audit-framework.sh` | | Schema JSON v3 | `Domains/_shared/schemas/cis-audit-report-3.0.0.json` | | manifest Linux Service | `LinuxService/Auditing/FAVA/manifest.yaml` | | benchmark guard | `LinuxService/Auditing/FAVA/lib/benchmark_guard.sh` | | Win10 architecture | `WindowsOS/Documents/Win10_AUDIT_ARCHITECTURE.md` | | Win11 architecture | `WindowsOS/Documents/Win11_AUDIT_ARCHITECTURE.md` | | Rocky architecture | `LinuxRedhatOS/Auditing/FAVA/RockyARCHITECTURE.md` | | PostgreSQL guide | `LinuxService/Documents/PostgreSQL-Security-Audit-Guide.md` | | راهنمای Scratch | `Documents/AUDIT_GUIDELINE_SCRATCH.md` | --- *این سند مرجع ساختاری برای **تمام** نگارش‌های آینده در مسیر FAVA است. تغییرات معماری عمومی ابتدا در Scratch آزمایش و سپس به این سند و FAVA منعکس می‌شوند.*