دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

مقدمة إلى ARTEX: بناء نظام اختبار اختراق ذاتي بالذكاء الاصطناعي وفهم بنية الاستكشاف ذات الرسمين البيانيين

كيقدّم هاد المقال القدرات الأساسية ديال ARTEX، وطريقة التثبيت، وإعداد قاعدة البيانات وLLM، ومراقبة المهام، ومزامنة الأصول، وإعادة اختبار الثغرات، ومسار الترقية، وكيشرح آلية الاستكشاف الذاتي المبنية على planner وworker ونموذج الرسمين البيانيين.

مقدمة إلى ARTEX وبنية الاستكشاف ذات الرسمين البيانيين

أوّل حاجة: عرف حدود الاستعمال

ARTEX مخصّص غير للتعلّم الشخصي، ودراسة الكود، والتحقّق التقني فبيئة محلية ومعزولة. حسب التصريح ديال المشروع، ممنوع تستعملو فالسكان، الاستكشاف، الاستغلال ولا الهجوم على أي سيستيم أونلاين، موقع، سيستيم مربوط بالإنترنت ولا بيئة الإنتاج، حتى إلا كان الهدف ديالك ولا عندك الترخيص. قبل ما تبدا، تأكّد بلي فاهم وملتازم برخصة AGPL-3.0 ديال المشروع، وبقوانين الأمن السيبراني فالمكان اللي نتا فيه، وبقيود الاستعمال والتنبيهات القانونية اللي كاينة فالمستودع.

هاد المقال غادي يشرح، انطلاقاً من نشر محلي وبيئة معزولة وآمنة، كيفاش تركّب ARTEX، تهيّأ PostgreSQL وLLM، تراقب المهام من الواجهة، وتستعمل وظائف مزامنة الأصول وإعادة اختبار الثغرات.

ARTEX هو سيستيم ديال AI متعدد الـagents، فيه backend بـGo وfrontend بـNext.js. المشروع كيوفّر Demo أونلاين باش تشوف كيفاش كتخدم الواجهة. فالتشغيل الرسمي، الواجهة الأمامية تقدر تكون مضمّنة فـbinary واحد باستعمال go:embed.

شنو كيقدر يدير ARTEX

ARTEX مبني على الاستكشاف الذاتي، تنظيم المهام، وتسجيل جميع مراحل الخدمة. السيستيم فيه dashboard، لائحة المهام، مراحل تنفيذ الجلسات، مسار الاستكشاف، الاكتشافات، الأصول، خريطة تغطية الأصول، تسجيل الترافيك، حوارات الإنسان داخل الحلقة، تدبير الـAgent، وإعدادات LLM.

لوحة القيادة
  • استكشاف متعدد الـagents: أدوار بحال goals وplanner وworker وmainagent كيتعاونو باش يقدّمو المهمة.
  • نموذجان ديال الرسوم البيانية: رسم الأصول كيحفظ معطيات الأصول المشتركة بين المهام، ورسم الاستكشاف كيسجّل الأهداف والنيات والحقائق والتلميحات والاكتشافات ديال كل مهمة.
  • تبادل المعلومات على مستوى المراحل: الـworker يقدر يقلب فمراحل التنفيذ ديال workers خرين ويعاود يستعمل الملاحظات ديالهم.
  • الإنسان داخل الحلقة: كتشارك فاستدعاء الأدوات وقرارات العمليات المهمة عن طريق الحوار والموافقة على الاعتراضات.
  • تدفّق الأنشطة فالحين: الـbackend كيدفع معلومات الأنشطة باستعمال SSE، وتقدر تراقب تنفيذ المهمة باستمرار من الواجهة.
  • تسجيل الترافيك: بروكسي MITM للتسجيل كيحتافظ بالترافيك والأدلة الناتجة عن تنفيذ الأدوات.
  • مزامنة الأصول: تقدر تزامن الدومينات، النطاقات الفرعية، عناوين IP، المنافذ، المواقع ونقاط النهاية من ScopeSentry.
  • إعادة اختبار الثغرات: تقدر تنشئ جلسة Agent مستقلة لإعادة اختبار ثغرة موجودة، وتحفظ الخلاصة والدليل ورابط الجلسة.
لائحة المهام

تركيب ARTEX

الطريقة الأولى: استعمال سكريبت التركيب بنقرة وحدة

هاد الطريقة هي اللي كينصح بها المشروع. السكريبت كيفحص Docker ولا كيطلّبو، وكيعطيك الاختيار بين تشغيل كلشي بـDocker ولا البناء والتشغيل محلياً.

لوحة القيادة

git clone https://github.com/Autumn-27/ARTEX.git
cd ARTEX
./install.sh

إلا اخترتي التشغيل الكامل بـDocker، خاصك تدخل كلمة السر ديال PostgreSQL، وتقدر حتى تضغط Enter مباشرة باش السكريبت يولّد كلمة سر عشوائية. من بعد كيكتب السكريبت ملف .env وكيشغّل docker compose up -d.

فالتشغيل المحلي، تقدر تربط بقاعدة بيانات موجودة من قبل، ولا تخلي Docker يشغّل قاعدة بيانات. السكريبت كيولّد config.json، كيبني binary واحد فيه الواجهة، وكيشغّل الخدمة.

منين يكمل التركيب، دخل لـ http://localhost:8787. فالمرة الأولى دخل لـ /setup وعيّن كلمة سر المدير.

الطريقة الثانية: استعمال Docker Compose يدوياً

git clone https://github.com/Autumn-27/ARTEX.git
cd ARTEX
cp .env.example .env
docker compose up -d

عدّل .env وعمّر على الأقل POSTGRES_PASSWORD؛ وإذا بغيتي تهيّأ Anthropic عبر متغيرات البيئة، تقدر تعمّر حتى ANTHROPIC_API_KEY. صورة الحاوية فيها الأدوات الشائعة، و./skills و./data كيبقاو محفوظين بفضل bind mounts.

من بعد التشغيل، دخل لـ http://localhost:8787. إلا احتجتي MCP عن بعد، اختار http ولا sse من إعدادات السيستيم. النسخة القديمة ديال SSE كتستعمل غالباً /sse لإنشاء تدفق الأحداث، وكتستقبل طلبات JSON-RPC عبر /message?sessionId=... اللي كيرجع، وكتتهيّأ ترويسة المصادقة بهاد الشكل: Authorization=Bearer <token>.

الطريقة الثالثة: استعمال binary مبني من قبل

حمّل الحزمة المضغوطة المناسبة للمنصة ديالك من Releases. من بعد فك الضغط، غادي تلقى غالباً artex وstart.sh ولا start.bat فـWindows، وskills/ وconfig.example.json.

المهام

cp config.example.json config.json
./start.sh

استعمل start.sh ولا start.bat للتشغيل، وما تشغّلش ./artex مباشرة. سكريبت التشغيل مسؤول على مراقبة العملية، وكيعاود يشغّل الخدمة من بعد التحديث بنقرة وحدة من الصفحة. إلا بغيتيها خدامة فالخلفية، استعمل:

nohup ./start.sh >artex.log 2>&1 &

الطريقة الرابعة: البناء من الكود المصدري

إلا بغيتي تبني binary واحد فيه الواجهة مضمّنة، خاصك أولاً تولّد الملفات الثابتة ديال Next.js، ومن بعد تنسخها لمجلد الواجهة المضمّنة فالـbackend.

cd web && npm ci && npm run build:static && cd ..
cp -r web/out server/webui/dist
CGO_ENABLED=0 go build -tags embedui -o artex ./cmd/artex
./start.sh

كمّل الإعدادات الأساسية

تهيئة PostgreSQL

ARTEX محتاج PostgreSQL. فالتشغيل المحلي، تقدر تعمّر معلومات الاتصال بقاعدة البيانات فـ config.json، ولا تعوّض الإعداد باستعمال ARTEX_PG_DSN.

{
  "database": {
    "host": "127.0.0.1",
    "port": 5432,
    "user": "artex",
    "password": "yourpass",
    "dbname": "artex",
    "sslmode": "disable"
  }
}

مراحل التنفيذ

فكل تشغيل، الخدمة كتدير بشكل متكرر وآمن تهيئة بنية قاعدة البيانات وعمليات الترحيل، بما فيها التغييرات الضرورية فالحقول والفهارس. ومع ذلك، قبل الترقية من الأحسن تدير نسخة احتياطية من قاعدة البيانات ومن المجلد ./data.

تهيئة LLM

وظائف الاستكشاف محتاجة LLM. تقدر تستعمل API Key ديال Anthropic ولا OpenAI، ولا تعمّرو من صفحة «إعدادات LLM» فالواجهة.

export ANTHROPIC_API_KEY=sk-...

تقدر حتى تعيّن OPENAI_API_KEY. المشروع كيدعم كذلك ARTEX_LLM_PROVIDER وARTEX_LLM_MODEL وARTEX_LLM_BASE_URL وARTEX_LLM_PROXY باش تبدّل المزوّد والموديل والعنوان والبروكسي.

تعديل التوازي والمنافذ

عدد work agents ديال كل مهمة تقدر تعدّلو من «إعدادات السيستيم»، والقيمة الافتراضية هي 3. معاملات التشغيل كتسمح بتحديد عنوان Web/API ومنفذ بروكسي تسجيل الترافيك:

./start.sh -addr :8787 -proxy :8788

سكريبت التشغيل كيدوز المعاملات كما هي لـ artex.

بدا تستعمل واجهة الويب

مسار الاستكشاف

1. دخل وشوف لوحة القيادة

فأول زيارة، عيّن كلمة سر المدير، ومن بعد دخل للوحة القيادة باش تشوف النظرة العامة، استهلاك Token وتدفّق الأنشطة. لوحة القيادة مناسبة باش تعرف بسرعة واش السيستيم خدام مزيان، وواش المهام ولّدت أنشطة جديدة.

2. شوف المهام ومراحل التنفيذ

من لائحة المهام اختار المهمة المطلوبة، وتقدر تشوف الجلسات ديالها، استدعاءات الأدوات، سجلات الأنشطة ومسار الاستكشاف. صفحة مراحل التنفيذ كتبيّن خطوات خدمة الـagent، بينما مسار الاستكشاف كيساعدك تفهم العلاقة بين الأهداف والنيات والحقائق والاكتشافات.

مراحل تنفيذ المهمةمسار الاستكشاف

منين كتستعمل هاد الصفحات، خاصك تعطي الأولوية للتحقّق من التدفق فبيئة محلية ومعزولة، وتراجع سجلات الأنشطة والترافيك باش تعرف بالضبط شنو الخطوات اللي نفّذها الـagent.

3. شوف الاكتشافات والأصول

صفحة الاكتشافات كتجمع الثغرات ولا الاكتشافات الأخرى اللي نتجات على المهمة، وصفحة الأصول كتعرض معلومات الأصول اللي جمعها السيستيم ودمجها.

لائحة الاكتشافاتلائحة الأصول

خريطة تغطية الأصول تقدر تعرض الأصول الموجودة فالنطاق بتخطيط موجّه بالقوى، وتبرز العقد اللي تجرّبات، مع دعم طيّ العقد وتوسيعها. كتعاونك تشوف بشكل شامل شنو الأصول اللي تستكشفات وشنو اللي باقي ما تغطّاش.

خريطة تغطية الأصول

زامن أصول ScopeSentry

إلا كنت جمعتي الأصول من قبل فـScopeSentry، تقدر تربط مصدر البيانات من صفحة «مزامنة الأصول» فـARTEX، باش ما تعاودش تجمع نفس المعطيات.

الاكتشافات

  1. عمّر عنوان ScopeSentry وAPI Key، وكمّل ربط مصدر البيانات.
  2. اختار الأهداف اللي بغيتي تزامن حسب المشروع ولا المهمة.
  3. اختار نوع الأصل، بحال الدومين، النطاق الفرعي، IP، المنفذ، الموقع ولا نقطة النهاية.
  4. نفّذ الاستيراد باش ARTEX يدمج البيانات حسب نطاق أصول الشركة.
  5. راجع نتيجة الاستيراد فخريطة الأصول، وقدّمها للـagent باش يكمل الاستكشاف.

رسم الأصول هو مستودع الحقيقة العام للأصول المشتركة بين المهام. البرنامج كيتكلف بحساب علاقات الأب والابن ومفاتيح إزالة التكرار، والـagent كيرسل معلومات الأصول الخام.

فهم البنية ديال الرسمتين البيانيّتين فـ ARTEX

رسم الأصول: كيوصف شنو كاين من أصول

العُقد فـ رسم الأصول كتشمل root_domain وsubdomain وip وservice وapp وendpoint وغيرها. النطاقات، والنطاقات الفرعية، والخدمات، ونقط النهاية كيتنظمو بعلاقات الأب والابن، وكينتميو للشركة المناسبة.

رسم الاستكشاف: كيوصف كيفاش كتتقدّم المهمة

رسم الاستكشاف كيتحفظ بشكل مستقل لكل مهمة، وكيشمل عُقد من نوع goal وintent وfact وfinding وhint. النظام كيسجّل مسار التقدّم بعلاقات بحال spawns وderived_from وyields وproves.

الجوج ديال الرسومات مرتبطين عبر نقاط ارتكاز. النوايا والوقائع والثغرات يمكن تربط بأصل محدد، وبالتالي تقدر تشوف الأصول المعنية انطلاقا من اتجاه الاستكشاف، أو ترجع من أصل معيّن وتشوف شنو هي الاتجاهات اللي تجرّبات عليه فالمهمة الحالية.

كيفاش كيتعاونو planner وworker

المحرّك خدام بحلقة مغلقة مدفوعة بالأحداث: منين كيتبدّل الرسم، كيتفيّق planner، كيقرا الوضعية الحالية وكيوزّع النوايا؛ worker كياخذ نية، كيستعمل الأدوات فالتنفيذ، وكيرجع الأصول والوقائع أو الاكتشافات الجديدة لقاعدة البيانات؛ وعملية الكتابة كتعاود كتفعّل planner.

الأصول

planner كيوزّع النوايا غير ملي كيلقى اتجاهات جديدة مازال ما تدارش عليها التغطية. منين كيكمل worker النية اللي خداها، كيوقف، باش يتفادى أن workers مختلفين يعاودو نفس التنفيذ بلا حدود.

بالنسبة للاستكشافات متعددة الخطوات اللي فيها اعتماد بين المراحل، planner كيحافظ على todolist مشتركة ومخصصة لكل مهمة. الخطوة الموالية ما كتتوزعش حتى تكمل الخطوة السابقة وتكون الواقعة المرتبطة بها موجودة. هاد الآلية كتستعمل باش ما يتفتحش المسار كامل بشكل متوازٍ من الأول.

البحث فمسار التنفيذ ديال workers الآخرين

الـ worker اللي كيجي من بعد يقدر يستعمل search_all_worker_traces(q) باش يقلب بالكلمات المفتاحية فعمليات تنفيذ الأعمال الأخرى ديال نفس المهمة، ويقدر حتى يستعمل list_worker_traces باش يشوف الأعمال اللي تنفذات، ومن بعد يستعمل get_worker_trace(intent_id, step_ids=[...]) باش يجيب المحتوى الكامل ديال خطوات محددة. النظام كيستبعد تلقائيا النوايا ديال الـ worker الحالي.

تبادل المعلومات على مستوى المسار كيعاون الـ agent يعاود يستعمل ملاحظات مازال ما تكتباتش رسميا فـ fact، مع الحفاظ على الحد اللي كيخلي كل worker ينفذ غير النية اللي خداها.

تسجيل الترافيك والمصادقة

ARTEX كيوفر بروكسي لتسجيل الترافيك وبابا للمصادقة على الأدوات. صفحة الترافيك كتستعمل باش تشوف السجلات الناتجة عن تنفيذ الأدوات، وصفحة المصادقة على الاعتراضات كتستعمل لمعالجة العمليات اللي كتحتاج تأكيد بشري.

سجل الترافيك

أثناء التحقق الأمني، من الأفضل تشوف فآن واحد جلسة المهمة، واستدعاءات الأدوات، وتدفّق الأنشطة، وسجل الترافيك، باش تتأكد أن سلوك النظام مطابق للمتوقّع. الحوار اللي فيه الإنسان داخل الحلقة يقدر حتى هو يكمل السياق ويساهم فالمصادقة.

تنفيذ إعادة اختبار الثغرات

تبويب «إعادة الاختبار» فتفاصيل المهمة كيتيح اختيار ثغرات هاد المهمة على صفحات، ومشاهدة الاستنتاجات والأدلة السابقة، وإطلاق إعادة اختبار بشكل مستقل. لائحة الثغرات، وتفاصيل الثغرة، وعرض مجموعات المهام، وعرض الأصول كاملين فيهم مدخل لإعادة الاختبار.

خريطة تغطية الأصول

  1. كليكي على «إعادة الاختبار» فـ لائحة الثغرات ولا فتفاصيل الثغرة.
  2. عمر، حسب الحاجة، نسخة الإصلاح، وشروط الاختبار ولا القيود.
  3. بدا جلسة مستقلة ديال Agent إعادة الاختبار.
  4. شوف مسار إعادة الاختبار فالجلسة، ومن بعد النهاية شوف الاستنتاج والأدلة.

استنتاجات إعادة الاختبار كتشمل «مازال قابل لإعادة الإنتاج»، و«تصلّح»، و«ما قدرناش نأكدو». إلا سالات إعادة الاختبار بنجاح وكان الاستنتاج هو «تصلّح»، النظام كيحدّث أوتوماتيكيا حالة معالجة الثغرة؛ التنفيذ الجاري، أو الفاشل، أو المتوقّف، أو أي استنتاج آخر ما كيبدّلش الحالة الأصلية أوتوماتيكيا. الأدلة والتقرير الأصليين كيبقاو محفوظين.

النظام كيحضّر مسبقا Agent قابل للتعديل باسم «إعادة اختبار الثغرات» retester. يمكن تهيئة التعليمات، وLLM، وميزانية التشغيل، والأدوات ديالو من إدارة Agents؛ إلا ما كانش مربوط بـ LLM مخصص، كيستعمل الإعداد العام المفعّل. إلا كانت نفس الثغرة كتتعاد عليها الاختبارات، كيعاود يستعمل الجلسة الموجودة؛ ومن بعد التوقيف، أو الفشل، أو إعادة تشغيل الخدمة، يمكن إطلاقها من جديد.

ردّ بالك: توضيحات المشروع كتشير إلى أن تاريخ إعادة الاختبار مازال ما داخلش فتصدير تقارير الثغرات ولا فحزمة أرشيف المهمة، وما كيتربطش أوتوماتيكيا بحزمة الترافيك. وضعية العرض كتولّد غير سجلات محاكاة معلّمة بوضوح، وما كتطلبش أهداف حقيقية.

نقط مهمة فالنشر باستعمال reverse proxy

الواجهة الأمامية، وAPI، وSSE كيتقدمو افتراضيا من نفس منفذ الـ backend، وبالتالي غالبا غير خاص فتح منفذ HTTPS للعموم، مع إبقاء 8787 ديال ARTEX داخل الشبكة الداخلية. تدفّق الأنشطة الآني كيستعمل نفس المصدر، وعادة ما كايناش حاجة لضبط NEXT_PUBLIC_SSE_BASE.

خاص الـ reverse proxy بحال Nginx يطفي التخزين المؤقت ديال SSE ويضبط مهلة قراءة طويلة، وإلا يقدر المتصفح يتصل بنجاح ولكن ما يبقاش يتوصل بأحداث الأنشطة.

location / {
    proxy_pass http://127.0.0.1:8787;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_buffering off;
    proxy_cache off;
    proxy_read_timeout 3600s;
    proxy_http_version 1.1;
    proxy_set_header Connection "";
}

غير إلا كان SSE خاصو يستعمل مصدر مختلف، بحال نطاق فرعي مستقل، غادي تحتاج تضبط NEXT_PUBLIC_SSE_BASE فمرحلة البناء. هاد المتغيّر كيتثبّت فالحزمة الساكنة وقت next build، وضبطو من بعد فمرحلة تشغيل الحاوية ما غاديش يكون عندو مفعول.

الترقية والرجوع للإصدار السابق

الترافيك

الترقية ديال ARTEX كتبدّل البرنامج، ولكن كتخلي volume ديال PostgreSQL، و./data، و./skills. كيتنصح بتنفيذ التحديث بنقرة وحدة من بطاقة «الإصدارات والتحديثات» فصفحة إعدادات النظام. مسار التحديث كيحمّل حزمة الإصدار الخاصة بالمنصة الحالية، وكيحقّق من SHA256SUMS، وكيدير اختبار دخان للبرنامج الثنائي الجديد، ومن بعد سكريبت التشغيل كيكمل الاستبدال.

إلا فشل التحقق ولا اختبار الدخان، البرنامج المؤقت كيتحيد؛ وإلا فشل الإصدار الجديد فالتشغيل ثلاث مرات متتالية، كيرجع النظام أوتوماتيكيا للإصدار السابق. الإصدار السابق كيبقى باسم artex.old. ولكن بنية قاعدة البيانات ما كترجعش مع البرنامج، لذلك خاص دائما تدير نسخة احتياطية من قاعدة البيانات ومن ./data قبل الترقية.

التحديث كيعيد تشغيل الخدمة وكيقطع المهام اللي خدامة، لذلك خاص يتدار فوقت ما فيهش ضغط. فالنشر باستعمال Docker، خاص حتى تنتبه: تحديث الصفحة كيبدّل البرنامج فقط، وما كيبدّلش سلسلة الأدوات الموجودة داخل الصورة. باش ترقي الصورة، نفّذ:

docker compose pull artex
docker compose up -d artex

وتقدر حتى تستعمل سكريبت التحديث الموجود فالمستودع:

cd ARTEX
./update.sh

التطوير والاختبار محليا

بيئة التطوير تقدر تستعمل dev.sh باش تشغّل فآن واحد الـ backend، وبروكسي الترافيك، وخادم تطوير Next.js:

./dev.sh

المنفذ الافتراضي للـ backend هو 8787، ومنفذ بروكسي الترافيك هو 8788، وخادم تطوير الواجهة الأمامية هو 5173. وتقدر حتى تشغّلهم بشكل منفصل:

go run ./cmd/artex
cd web && npm run dev
go test ./...

إلا كنت محتاج غير تعاين الواجهة الأمامية بلا ما تشغّل الـ backend، تقدر تستعمل:

cd web && NEXT_PUBLIC_MOCK=1 npm run dev

الخلاصة

ARTEX كيدمج backend واحد مكتوب بـ Go، وواجهة Next.js، وPostgreSQL، وLLM agents، وتسجيل الترافيك، وآلية المصادقة، وتدبير الأصول فـ نظام واحد. فالبداية تقدر تكمل النشر باستعمال Docker ولا سكريبت التثبيت، ومن بعد تهيّأ PostgreSQL وLLM، ثم تتعرّف بالتدريج على سلوك النظام انطلاقا من المهام، والجلسات، ومسارات الاستكشاف، وخريطة تغطية الأصول، وسجلات الترافيك.

فهم الفرق بين رسم الأصول ورسم الاستكشاف هو المفتاح للتحكم فـ ARTEX: رسم الأصول كيجاوب على «شنو هي الأصول الموجودة»، ورسم الاستكشاف كيجاوب على «كيفاش كتتقدّم المهمة». قبل أي اختبار، خاصك تحصر العمل بصرامة فبيئة محلية معزولة وفالاستعمالات التعليمية اللي كيسمح بها المشروع، وتحترم تصريحات المشروع، والرخصة مفتوحة المصدر، والقوانين المطبقة.