أمن المستندات
أمن المستندات
Section titled “أمن المستندات”صُمّمت منصة ذكاء المستندات على افتراض أن كل مستند عدائي حتى يثبت العكس. توثّق هذه الصفحة بنية الأمان ونموذج التهديد وإجراءات الدفاع في العمق.
ذو صلة: ذكاء المستندات · تشغيل معالجة المستندات · خريطة الأطوار
نموذج التهديد
Section titled “نموذج التهديد”قدرات المهاجم (مُفترضة)
Section titled “قدرات المهاجم (مُفترضة)”- يستطيع رفع مستندات مصنوعة بعناية (PDF، DOCX، XLSX، PPTX، صور، نص عادي، CSV، HTML، RTF).
- يستطيع تضمين محتوى خبيث: حقن التعليمات، وXXE، والماكرو، والمحتوى النشط، والملفات متعددة الصيغ (polyglot)، وقنابل الضغط، وقنابل الأرشفة، والبنى الفاسدة/المشوهة.
- يستطيع محاولة اجتياز المسارات عبر اسم الملف أو المراجع المضمّنة.
- يستطيع محاولة SSRF عبر علاقات OOXML الخارجية.
- يستطيع محاولة تجاوز التنقيح.
قدرات المهاجم (خارج النطاق / مُخفَّفة خارجيًا)
Section titled “قدرات المهاجم (خارج النطاق / مُخفَّفة خارجيًا)”- الوصول إلى نظام الملفات (عزل جذر مساحة العمل لمسارات الاستيراد).
- عزل شبكي كامل على مستوى نظام التشغيل لعمليات المُحلِّلات (راجع ملاحظات الصدق في الطبقة 3).
- القنوات الجانبية للـ GPU/الذاكرة بما يتجاوز حدود الموارد التي يفرضها نظام التشغيل.
طبقات الدفاع
Section titled “طبقات الدفاع”الطبقة 1: بوابة الاستيعاب
Section titled “الطبقة 1: بوابة الاستيعاب”- حدود مُطبَّقة أثناء البث: افتراضات منصة المستندات 50 MiB لكل ملف / 10 ملفات
لكل طلب (
documents.intake.*)؛ ومرفقات بوابة المحادثة 20 MiB لكل ملف / 50 MiB إجمالًا. تُفرض الحدود أثناء البث، قبل التخزين المؤقت غير المحدود. - احتواء مساحة العمل (مسار الاستيراد): تُحلّ الاستيرادات المحلية الآمنة
لمساحة العمل عبر
workspace.binding.resolve_active_root()؛ ويُرفض اجتياز المسارات بـ... - عدم تطابق الامتداد/المحتوى: شمّ MIME يرفض امتدادات الملفات غير المتطابقة قبل أن يرى أي مُحلِّل المحتوى.
الطبقة 2: شمّ المحتوى
Section titled “الطبقة 2: شمّ المحتوى”قبل استدعاء أي مُحلِّل أو مُصيِّر، تفحص طبقة شمّ المحتوى:
| الفحص | الدفاع |
|---|---|
| تحليل بنيوي لـ OOXML | يرفض XXE (<!DOCTYPE، <!ENTITY)، والعلاقات الخارجية (TargetMode="External")، وحمولات الماكرو (vbaProject.bin)، والأرشيفات المتداخلة، وقنابل الضغط (نسبة التمدد > ميزانية قابلة للضبط) |
| سياسة PDF | ترفض ملفات PDF المشفّرة، والمحتوى النشط (JavaScript، وأفعال الإطلاق، والملفات المضمّنة)، والملفات متعددة الصيغ (PDF/ZIP) |
| صلاحية UTF-8 | ترفض تسلسلات البايت غير الصالحة من دون محاولة فك ترميز فقداني |
| التحقق من نوع المحتوى | يرفض ثنائيات تدّعي أنها نص، وHTML يدّعي أنه نص عادي |
| عدد أعضاء الأرشيف | يفرض حدًّا أقصى قابلًا للضبط لعدد أعضاء الأرشيف |
الطبقة 3: تنفيذ معزول في عمليات فرعية
Section titled “الطبقة 3: تنفيذ معزول في عمليات فرعية”كل مهمة تحليل أو OCR أو تصيير أو تعديل تعمل في عملية فرعية على المضيف:
python -I(وضع معزول — لا حزم موقع للمستخدم).- بيئة منقّاة (تُزال أسرار العملية الأب ومتغيرات البيئة غير الآمنة).
- حدّ ذاكرة تفرضه نظام التشغيل حيثما توفر (كائنات المهام في Windows، و
setrlimitفي Unix). - مهلة قابلة للضبط — تُقتل العملية ولا تُتسرَّب.
- stdout/stderr محدودان؛ حجم المخرجات مقيّد.
- عند المهلة/OOM/الخروج الصامت: فشل مغلق — لا يفلت أي جزء من البيانات.
ملاحظة صدق — الشبكة: العزل ليس فضاء أسماء شبكة كاملًا / سجن جدار ناري. الدفاع هو «بيئة منقّاة + لا عملاء شبكة مقصودين في عمال المُحلِّلات + فشل مغلق عند غياب المخرجات». لا تتعامل مع هذا على أنه تنفيذ معزول عن الشبكة تمامًا (air-gapped).
فحص البرمجيات الخبيثة (ClamAV، قابل للتوصيل): يشغّل الاستيعاب
kazma_core.documents.malware.scan_if_configured على البايتات المعزولة
(quarantined).
الوضع (documents.security.malware_scan) | السلوك |
|---|---|
off | لا فحص أبدًا |
auto (الافتراضي) | يفحص عندما يكون clamscan أو clamdscan على PATH؛ وإلا يتخطى (إلا في وضع الفشل المغلق) |
on | يتطلّب ماسحًا؛ والماسح المفقود/المعطوب يفشل مغلقًا |
يعامل documents.security.malware_fail_closed=true غياب الماسح/أخطاءه رفضًا قاطعًا
حتى في auto. والملفات المصابة ترفع malware_detected. ثبّت حزم نظام ClamAV على
حدة (ليست تبعية pip).
الطبقة 4: تسييج التعليمات
Section titled “الطبقة 4: تسييج التعليمات”قراءات المنصة الدائمة/العارضة التي تُظهر متن المستند للنموذج تستخدم سياج بيانات غير موثوقة، مثلًا:
<kazma:data source="document" untrusted="true">[document content]</kazma:data>قد تستخدم المقتطفات التلقائية للمرفقات في المحادثة
source="document_attachment" عبر format_untrusted_block() بعد تحليل
DocumentService بأفضل جهد.
يخبر هذا السياج النموذج بأن المحتوى بيانات ملاحَظة لا تعليمات — ما يخفف حقن التعليمات من نص المستند.
تختبر دلتات تعليمات التحسّن الذاتي آلة السياج نفسها عبر
format_untrusted_block() مع فحص السلامة prompt_fence.
الطبقة 5: التحقق من التنقيح
Section titled “الطبقة 5: التحقق من التنقيح”خط معالجة التنقيح:
- يستخدم مسار تعديل/تنقيح مُتحقَّقًا منه (تتطلّب بعض أوضاع PDF محرّكات اختيارية).
- يطبّق تنقيحًا فيزيائيًا/نقطيًا (raster) متحفظًا (لا صناديق تغطية فقط غير آمنة).
- يتحقق من فحوص السلامة بعد التنقيح (بما فيها توقعات الحجم/البنية).
- ينتج قطعة جديدة غير قابلة للتغيير — لا تُعاد كتابة الأصول بصمت.
نموذج التأكيد:
| المسار | تأكيد تفاعلي؟ |
|---|---|
| صفحة المستندات في واجهة الويب | نعم — kazmaPrompt / kazmaConfirm قبل POST …/redact |
REST API / أداة الوكيل document_redact / البوابة /documents redact | لا حوار واجهة — يُعتمد المستدعي بوصفه فاعلًا مُصدَّقًا؛ وACL ما زال ينطبق |
التنقيح بالتغطية غير الآمن (صناديق معتمة فوق النص من دون إزالة المحتوى الكامن) رُصد في الشيفرة السابقة للمنصة وهو ليس مسار المنصة.
الطبقة 6: ثبات سجل التدقيق
Section titled “الطبقة 6: ثبات سجل التدقيق”يملك document_audit_events مُشغِلات UPDATE/DELETE ترفض أي تعديل بعد الإدراج
(يستخدم مسح الاستبقاء مسار تحكم مُحرَّسًا). سجل التدقيق للإلحاق فقط ومحصور
بالمستأجر. والتفاصيل مقصورة على قائمة سماح من القيم الآمنة — محتوى المستند وأسماء
الملفات ومصطلحات التنقيح والأسرار لا تدخل سجل التدقيق أبدًا.
الطبقة 7: سلامة التخزين
Section titled “الطبقة 7: سلامة التخزين”- تخزين موجَّه بالمحتوى: يُعرَّف كل كائن (blob) بـ SHA-256.
المسار الفيزيائي:
{root}/{kind}/sha256/{aa}/{bb}/{full_hash}. - التحقق من البعثرة عند الترقية: تُتحقَّق البايتات قبل ترقية المعزول إلى الأصول.
- إزالة التكرار: البعثرة نفسها = البايتات نفسها — إزالة تكرار فيزيائية من دون جولات تحقق إضافية.
- رفض الروابط الرمزية/الوصلات: يرفض GC والنسخ الاحتياطي والترحيل اتّباع الروابط أو الحذف عبرها.
شهادة المجموعة العدائية
Section titled “شهادة المجموعة العدائية”يُشغّل كل إصدار مجموعة عدائية حتمية مولَّدة برمجيًا (19 حالة) تغطي:
| الفئة | الحالات |
|---|---|
| قنابل الأرشفة | قنبلة ضغط، وأرشيف متداخل، وإغراق بالأعضاء |
| هجمات XML | XXE، وعلاقات OOXML الخارجية |
| المحتوى النشط | الماكرو، وJavaScript/أفعال الإطلاق في PDF |
| التشفير | PDF بتصريحات /Encrypt |
| متعدد الصيغ | ملف جامع PDF/ZIP |
| الفساد | OOXML مقطوع، ومرجع متقاطع مشوه، وUTF-8 غير صالح |
| هجمات الحدود | تجاوز عدد الصفحات/البكسلات/الخلايا للميزانيات |
| حقن التعليمات | نص شبيه بالتعليمات داخل المستندات |
| يونيكود/BiDi | عربي-إنجليزي بامتدادات ملتبسة وعناصر تحكم bidi |
| انهيار المُحلِّل | اختبار احتواء انهيار تركيبي |
لكل حالة:
- وصف مُراجَع.
- تصرّف متوقع (رفض / تسييج).
- رموز أخطاء متوقعة.
- بعثرة SHA-256 حتمية.
يُتحقَّق من البيان المُودَع
(tests/fixtures/documents/hostile_manifest.json) وقت الشهادة — إن اختلفت المجموعة
المولَّدة، يُحجب الإصدار.
التشغيل: python scripts/certify_documents.py
سلامة التراجع
Section titled “سلامة التراجع”| الإجراء | آمن؟ | التفصيل |
|---|---|---|
ضبط documents.enabled=false | ✅ | يوقف الكتابات الدائمة الجديدة؛ والكائنات والمهام والبيانات والبيانات الوصفية القائمة محفوظة |
ضبط documents.shadow=true | ✅ | وضعية الظل/الكناري؛ لا فقدان بيانات عند التبديل |
ضبط documents.default_authoritative=true | ✅ | يوجّه مسار المنتج إلى المنصة؛ والتراجع يحفظ البيانات |
حذف documents.db | ❌ | يدمّر البيانات الوصفية وحالة المهام وسجل التدقيق — انسخ احتياطيًا أولًا |
| حذف دليل مخزن المحتوى | ❌ | يدمّر جميع الكائنات — غير قابل للاستعادة من دون نسخة احتياطية |
توصيات للإنتاج
Section titled “توصيات للإنتاج”- ثبّت ClamAV (
clamscan/clamdscanعلى PATH) للإنتاج؛ تحقّق من الجهوزيةmalware.availableوفكّر فيsecurity_malware_scan=on+ الفشل المغلق. - اضبط
documents.capacity.storage_free_floor_bytesبتحفّظ (الافتراضي 512 MiB؛ ويفضّل كثير من المشغّلين ≥ 1 GiB). - راجع
documents.retention.*/documents.gc.*لأجل الامتثال. - شغّل
scripts/certify_documents.py --soakقبل أول نشر إنتاجي. - راقب
GET /api/documents/ops/capacityبحثًا عن أسباب التدهور. - دقّق
GET /api/documents/ops/auditدوريًا. - انسخ احتياطيًا النسخة الليلية للمستندات إلى جانب نسختك الاحتياطية الأساسية.
- تعامل مع التنقيح عبر API/الأدوات بوصفه عملًا مُميَّزًا — تأكيد الواجهة ليس بوابة على الخادم في تلك المسارات.