Co-authored-by: Cursor <cursoragent@cursor.com>
37 KiB
راهنمای ساختار و نگارش اسکریپتهای ممیزی FAVA
مخزن:
Domains/
مسیر تحویل:Auditing/FAVA/(و در برخی دامنهها root دامنه برای Windows Service)
مخاطب: تیم Hardening & Resilience — ICT Security Department of Isfahan Municipality
نسخهٔ سند: 1.0.0
تاریخ: ۱۴۰۵/۰۴/۰۷ (۲۰۲۶-۰۶-۲۷)
جفت سند:AUDIT_GUIDELINE_SCRATCH.md
فهرست مطالب
- هدف و تعریف FAVA
- نقشهٔ دامنهها و موجودی canonical
- ساختار پوشهای و نامگذاری فایل
- الزامات هدر و metadata
- معماری داخلی اسکریپت
- پارامترهای CLI و متغیرهای محیطی
- پیادهسازی کنترلهای CIS
- ثبت نتیجه — نقطهٔ واحد
- گزارشدهی و Schema JSON
- ماژولهای Enterprise
- Hardent Orchestration
- کدهای خروج (Exit Codes)
- مسیرهای خروجی و آرشیو
- امنیت اجرا و رفتار پیشفرض
- الگو به تفکیک دامنه
- نسخهگذاری، آرشیو و deprecate
- چکلیست تحویل FAVA
- منابع و مراجع داخلی
۱. هدف و تعریف 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 - 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 اضافی:
CISProfileL1/L2/AllTreatWarningAsFail,NoAutoRun- اتصال اجباری vCenter/ESXi
IIS V5.3.1:
BasePath,Service,SplunkUserSelfDestruct(پیشفرض ON),KeepScriptNonInteractive,Force
SQL v5.0.1:
ConfigFile,IncludeRemediationSelfDestructپیشفرض 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
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):
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
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
output_result() {
# id, status, expected, actual, remediation
# → JSON finding object + TXT row + Splunk NDJSON
}
همراه با json_escape() برای تمام interpolationهای JSON.
۸.۳ Bash Linux Service v3 — register_finding
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 شواهد:
["sshd -T output: permitrootlogin no", "/etc/ssh/sshd_config: PermitRootLogin no"]
۹. گزارشدهی و Schema JSON
۹.۱ اصل JSON-First
اجرای چکها → ساخت JSON کامل → derive TXT/CSV/HTML/Splunk
HTML viewer خالص — بدون منطق audit:
<script id="audit-data" type="application/json">{...}</script>
۹.۲ نسخههای 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)
{
"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: <sha256-hex>
HTML: checksum چندفایلی via Calculate-AllReportHashes.
۹.۸ لاگینگ ساختاریافته
[{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:
"system_inventory": {
"os": {},
"firewall": {},
"security_agents": {},
"patch_management": {},
"persistence": {}
}
Linux Service v3: بلوک enterprise_modules (در صورت پیادهسازی) یا enrichment در environment.
۱۰.۳ Disaster Recovery (ESXi)
هر کنترل automated: capture مقدار فعلی برای بازگردانی پس از hardening:
"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:
function Emit-HardentTaskOutput { ... }
# فعال با -EmitHardentMarkers (پیشفرض $true)
پشتیبانی فعلی:
- Windows 10/11 FAVA ✓
- ESXi V2.2.1 ✓
- Windows Server 2022 — در انتظار ✗
- IIS/SQL — در انتظار ✗
- Linux Service v3 — در انتظار ✗
۱۱.۲ پارامتر
[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 باقی مانده |
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
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
{
"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در PowerShellDEBIAN_FRONTEND=noninteractiveدر bash (در صورت apt)
۱۴.۳ Timeout Protection
run_with_timeout() { ... } # Rocky
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)
# 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
CISProfileL1/L2/AllAssessmentStatusper 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-EffectivePolicyValueauthority 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/--parallelperformance modes- HTML viewer از embedded JSON
- DNF/CVE، SELinux deep، auditd dashboard
- Splunk + remediation generator (
--remediation)
۱۵.۵ LinuxService v3
register_finding()از framework v3manifest.yamlرجیستری canonical--help→show_controls_help()لیست کاتالوگ--diff→ regression detection vs baseline JSONaudit_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:
# 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.
۱۷. چکلیست تحویل 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 منعکس میشوند.