الانتقال إلى المحتوى

بياناتك ونموذجهم: تأمين ذكاء اصطناعي لا تستضيفه

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

ABYSSS Security Teamقراءة 17 دقيقة

حدود تطبيق ترسل طلبا عبر نقاط تفتيش في بوابة للهوية والإخفاء والحماية والميزانية إلى نموذج لدى مزود خلف اتصال خاص.
المحتويات

المقدمة

معظم الفرق التي تطلق ميزات ذكاء اصطناعي لا تشغّل النموذج بنفسها. بل ترسل الأوامر إلى مزود عبر HTTPS، إما مباشرة إلى مطور نماذج مثل OpenAI أو Anthropic أو Google، أو عبر منصة سحابية مثل Amazon Bedrock أو Azure OpenAI أو Vertex AI. يملك المزود وحدات GPU والأوزان ومنظومة التشغيل. أما أنت فما زلت تملك كل ما يحدد محتوى الطلب، ومن يحق له إرساله، وما يفعله نظامك بالإجابة. وفي هذا النصف الثاني وقعت تقريبا كل الحوادث الحقيقية المرتبطة بالذكاء الاصطناعي المستضاف حتى الآن.

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

أين تنتهي مسؤولية المزود وتبدأ مسؤوليتك

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

المسؤولية المشتركة لواجهة نموذج مستضاف
الطبقةمسؤولية المزودمسؤوليتك
النموذج والأوزانبيانات التدريب، وضبط السلامة، وتخزين الأوزان والوصول إليهااختيار النموذج وتثبيت إصدار
بنية التشغيلالعتاد، والعزل بين العملاء، والتحديثات، والتوافرالبديل عند تعطل المزود أو بطئه
الوصول إلى APIخدمة المصادقة، وآليات المفاتيح والأدوار، ونقطة اتصال TLSتخزين المفاتيح، وتدويرها، وأقل الصلاحيات، ومن يمكنه الاستدعاء
معالجة البياناتالاحتفاظ، والتشفير أثناء التخزين، والاستخدام في التدريب، ومنطقة المعالجةاختيار الشروط التي توقّعها والبيانات التي ترسلها
محتوى الأمرلا شيءالتحقق من صلاحية كل مستند وسجل يوضع في السياق
مخرجات النموذجمرشحات المحتوى، حيث تتوفرالتحقق، والترميز، وكل إجراء يُتخذ بناء على المخرجات
المراقبةسجلات تدقيق المنصة، حيث تتوفرسجلات التطبيق، واكتشاف الإساءة، وتنبيهات الإنفاق

نموذج تهديدات للاستدلال المستضاف

قائمة OWASP Top 10 for LLM Applications (إصدار 2025) قائمة تحقق جيدة، لكن الأفضل أن تبدأ من بنيتك أنت. ارسم مسار الطلب من المستخدم إلى المزود وعودته، وحدد كل موضع يدخل منه نص غير موثوق، وكل موضع تؤدي فيه مخرجات النموذج إلى حدوث شيء. وتغطي التهديدات التالية معظم ما سيظهره هذا الرسم.

  • سرقة بيانات الاعتماد. مفتاح API في مستودع أو حزمة تطبيق جوال أو حزمة متصفح أو سجل CI يتيح لأي شخص استهلاك حصتك وقراءة كل ما يصل إليه حسابك، مثل الملفات المخزنة والنماذج المضبوطة ومخرجات الدفعات.
  • كشف البيانات الحساسة. توضع بيانات شخصية أو أسرار أو سجلات عميل آخر في أمر، ثم يحتفظ بها المزود، أو تُكتب في سجلاتك أنت، أو تُعاد إلى المستخدم الخطأ.
  • حقن الأوامر. تعليمات مخفية في مدخلات المستخدم أو صفحات الويب أو الرسائل أو المستندات المسترجعة تغيّر ما يفعله النموذج، بما في ذلك الأدوات التي يستدعيها وما يرسله إلى الخارج.
  • الصلاحيات المفرطة. يُعطى النموذج أدوات بصلاحيات أكثر من المستخدم الحالي، فيتحول الحقن الناجح إلى كتابة أو حذف أو دفع أو رسالة حقيقية.
  • المعالجة غير السليمة للمخرجات. تُعرض مخرجات النموذج كـ HTML، أو كـ Markdown مع صور خارجية، أو تُمرَّر إلى SQL أو إلى سطر الأوامر دون ترميز أو تحقق.
  • الاستهلاك غير المحدود. أوامر كبيرة أو مخرجات طويلة أو حركة آلية ترفع التكلفة أو تستنفد حدود المعدل، وهو نمط يُسمى غالبا استنزاف المحفظة.
  • سلسلة التوريد والانحراف. ينتقل اسم مستعار لنموذج إلى إصدار جديد، أو تُخترق حزمة SDK أو إضافة، أو يغيّر المزود شروط البيانات، فيتغير السلوك دون أي نشر من جانبك.
  • اختراق المزود أو تعطله. اختراق أو تعطل طويل لدى المزود. لا يمكنك منعه، لذلك تستعد له بتقليل البيانات وبوجود بديل.

اقرأ شروط البيانات قبل التوثيق

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

  • الاستخدام في التدريب. هل تُستخدم مدخلات API ومخرجاتها افتراضيا لتدريب النماذج أو تحسينها؟ تقول معظم فئات الأعمال وAPI لا، لكن تأكد من ذلك في الاتفاقية، لا في تدوينة.
  • الاحتفاظ. كم مدة تخزين الأوامر والإجابات، ولأي غرض؟ يحتفظ بها كثير من المزودين لفترة محدودة، غالبا نحو 30 يوما، لمراقبة الإساءة. اسأل عن توفر الاحتفاظ الصفري أو الإعفاء من المراقبة وعن متطلباته.
  • المراجعة البشرية. في أي ظروف يمكن لموظفي المزود قراءة أوامرك، مثلا عندما تضع مصنفات الإساءة علامة على طلب؟
  • الميزات ذات الحالة. الملفات والمساعدون والمحادثات وقواعد المتجهات والذاكرة المؤقتة ومهام الدفعات تُخزَّن لدى المزود. وهي عادة خارج نطاق الاحتفاظ الصفري وتحتاج إلى عملية حذف خاصة بها.
  • المنطقة. أين يُعالَج الاستدلال وأين تُخزَّن البيانات؟ قد توجّه نقاط الاتصال العالمية الطلب إلى أي منطقة بحثا عن سعة، وهذا مهم بموجب GDPR والقواعد القطاعية.
  • الضمانات. تحقق من وجود تقرير SOC 2 Type II حديث، وشهادة ISO/IEC 27001، وشهادة ISO/IEC 42001 لإدارة الذكاء الاصطناعي. واقرأ قائمة المعالجين من الباطن وبند الإخطار بالاختراق.

واجهة المطور المباشرة أم منصة سحابية

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

الضوابط الأمنية حسب مسار الوصول
الضابطواجهة المطور المباشرةAmazon BedrockAzure OpenAIVertex AI
المصادقةمفاتيح API محددة بالمؤسسة أو المشروع أو مساحة العملأدوار وسياسات IAMEntra ID مع الهويات المُدارة، أو مفاتيح APIIAM مع حسابات الخدمة
مسار شبكة خاصعادة الإنترنت العام فقطنقطة اتصال VPC من نوع واجهة (PrivateLink)نقطة اتصال خاصةPrivate Service Connect وVPC Service Controls
تدقيق مستوى التحكمسجلات وحدة الإدارة لدى المطورCloudTrailسجل نشاط AzureCloud Audit Logs
تسجيل الطلباتتطبيقك فقطتسجيل استدعاءات النموذج إلى S3 أو CloudWatchإعدادات التشخيص إلى Log Analyticsتسجيل الطلبات والإجابات إلى BigQuery
موقع البياناتحسب المطور والخطةإقليمي، مع استدلال عبر المناطق اختيارياعمليات نشر إقليمية أو عالمية أو حسب نطاق البياناتإقليمي، مع نقطة اتصال عالمية اختياريا

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

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

مفتاح API للنموذج رمز حامل لفاتورتك ولأي بيانات مخزنة في الحساب. تعامل معه ككلمة مرور قاعدة بيانات. لا ترسله أبدا إلى متصفح أو تطبيق جوال، حيث يمكن استخراجه في دقائق. تطبيقات العميل تستدعي خادمك الخلفي، والخادم الخلفي وحده يتحدث إلى المزود.

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

سياسة IAM: استدعاء نموذجين مثبتين في Bedrock عبر نقطة اتصال VPC واحدة
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "InvokePinnedModels",
      "Effect": "Allow",
      "Action": [
        "bedrock:InvokeModel",
        "bedrock:InvokeModelWithResponseStream"
      ],
      "Resource": [
        "arn:aws:bedrock:eu-west-1::foundation-model/anthropic.claude-sonnet-4-5-20250929-v1:0",
        "arn:aws:bedrock:eu-west-1::foundation-model/amazon.titan-embed-text-v2:0"
      ],
      "Condition": {
        "StringEquals": { "aws:SourceVpce": "vpce-0a1b2c3d4e5f67890" }
      }
    }
  ]
}
Azure OpenAI: هوية مُدارة فقط، والمفاتيح معطلة
# Give the app's managed identity data-plane access to one resource
az role assignment create \
  --assignee-object-id "$APP_PRINCIPAL_ID" \
  --assignee-principal-type ServicePrincipal \
  --role "Cognitive Services OpenAI User" \
  --scope "/subscriptions/$SUB/resourceGroups/rg-ai/providers/Microsoft.CognitiveServices/accounts/aoai-prod"

# Turn off key authentication so a leaked key is worthless
az resource update \
  --ids "/subscriptions/$SUB/resourceGroups/rg-ai/providers/Microsoft.CognitiveServices/accounts/aoai-prod" \
  --set properties.disableLocalAuth=true

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

العثور على مفاتيح النماذج التي سبق إيداعها في مستودع
# Scans every commit; --redact keeps found secrets out of the output
gitleaks detect --source . --redact -v

# Quick manual check for common key prefixes in the working tree
git grep -nE 'sk-(proj|ant|svcacct)-[A-Za-z0-9_-]{20,}|AIza[0-9A-Za-z_-]{35}'

مسارات الشبكة والتحكم في الخروج

تُبقي نقاط الاتصال الخاصة حركة النماذج بعيدا عن الإنترنت العام وتتيح لك رفض أي مسار آخر. على AWS، أنشئ نقطة اتصال من نوع واجهة لـ Bedrock runtime وأرفق بها سياسة؛ وعلى Azure، أضف نقطة اتصال خاصة وعطّل الوصول من الشبكة العامة؛ وعلى Google Cloud، ضع Vertex AI داخل نطاق VPC Service Controls حتى لا يمكن إرسال البيانات إلى مشروع خارجه.

Bedrock runtime عبر PrivateLink
aws ec2 create-vpc-endpoint \
  --vpc-id vpc-0123456789abcdef0 \
  --vpc-endpoint-type Interface \
  --service-name com.amazonaws.eu-west-1.bedrock-runtime \
  --subnet-ids subnet-0aaa1111 subnet-0bbb2222 \
  --security-group-ids sg-0ccc3333 \
  --private-dns-enabled

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

قائمة سماح للخروج في Squid لواجهات النماذج
acl llm_apis dstdomain api.openai.com api.anthropic.com generativelanguage.googleapis.com
acl SSL_ports port 443
acl CONNECT method CONNECT

http_access deny CONNECT !SSL_ports
http_access allow CONNECT llm_apis
http_access deny all

ضع بوابة بين شيفرتك والنموذج

بمجرد أن تستدعي أكثر من خدمة واحدة نموذجا ما، انقل الوصول إلى المزود إلى بوابة ذكاء اصطناعي داخلية واحدة. تصادق الخدمات مع البوابة بهوية أحمال العمل المعتادة؛ والبوابة وحدها تحمل بيانات اعتماد المزود. يمكنك بناؤها على بوابة API تشغّلها أصلا، أو استخدام وكيل مخصص مثل LiteLLM أو Envoy AI Gateway أو إضافات الذكاء الاصطناعي في Kong. البوابة هي مكان السياسة، لذلك تُطبَّق بالطريقة نفسها على كل الفرق.

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

تحكّم في ما يدخل إلى الأمر

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

  • صنّف قبل الإرسال. حدد لكل ميزة فئات البيانات التي يمكن أن تصل إلى كل مزود. يجب ألا تكون الأسرار وبيانات الاعتماد وأرقام بطاقات الدفع في أي أمر.
  • أخف أو استخدم أسماء مستعارة. استبدل الأسماء والبريد الإلكتروني وأرقام الهواتف وأرقام الحسابات بعلامات ثابتة قبل الاستدعاء، وأعدها في خدمتك أنت إذا احتاجت الإجابة إليها.
  • لا أسرار في أوامر النظام. افترض أن أمر النظام سيُستخرج. يمكنه وصف السلوك، لكن يجب ألا يحتوي مفاتيح، ولا عناوين داخلية تعتمد على بقائها خاصة، ولا قواعد وصول لا تطبقها في أي مكان آخر.
  • قلّص السياق. أرسل الحقول القليلة التي تحتاجها المهمة، لا سجل العميل كاملا ولا الملف كاملا.
إخفاء البيانات الشخصية باستخدام Microsoft Presidio قبل استدعاء النموذج
from presidio_analyzer import AnalyzerEngine
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import OperatorConfig

analyzer = AnalyzerEngine()
anonymizer = AnonymizerEngine()
ENTITIES = ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER", "IBAN_CODE", "CREDIT_CARD"]

def redact(text: str) -> str:
    findings = analyzer.analyze(text=text, entities=ENTITIES, language="en")
    return anonymizer.anonymize(
        text=text,
        analyzer_results=findings,
        operators={"DEFAULT": OperatorConfig("replace", {"new_value": "<REDACTED>"})},
    ).text

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

يجب أن يحترم الاسترجاع صلاحيات المستخدم

التوليد المعزز بالاسترجاع (RAG) هو الطريق الأكثر شيوعا لتسرب البيانات بين المستخدمين. تحتوي قاعدة المتجهات على مقاطع من كل المستندات، ويجد البحث بالتشابه أقربها، ثم يلخص النموذج بسهولة مستندا لم يكن مسموحا للمستخدم بفتحه أصلا. لا يستطيع النموذج فرض التحكم في الوصول. يجب أن يفعل ذلك استعلام الاسترجاع لديك.

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

pgvector: التحقق من الصلاحية داخل استعلام التشابه
-- $1 tenant_id and $2 group ids come from the verified session, never from the prompt
SELECT id, document_id, body
FROM document_chunks
WHERE tenant_id = $1
  AND allowed_groups && $2::text[]
  AND deleted_at IS NULL
ORDER BY embedding <=> $3::vector
LIMIT 8;

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

حقن الأوامر مشكلة صلاحيات

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

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

صمّم الأدوات لمستدع معاد

  • التصرف بصفة المستخدم. تعمل الأدوات بصلاحيات المستخدم النهائي صاحب الطلب، وليس أبدا بحساب خدمة يرى كل العملاء.
  • تحقق من كل وسيط. حلّل وسائط الأدوات بمخطط صارم وتحقق منها مقابل الجلسة، تماما كما تفعل مع طلب API عام.
  • أبق الهوية خارج النموذج. معرفات المستخدمين والعملاء والأدوار تأتي من خادمك، لا من وسائط أدوات يملؤها النموذج.
  • أكّد الآثار الجانبية. الإرسال والدفع والحذف والمشاركة تحتاج إلى تأكيد صريح من الإنسان، يُعرض خارج مخرجات النموذج.
  • افصل القراءة عن الكتابة. استخدم استدعاء نموذج أو وكيلا منفصلا وأضيق نطاقا للمهام التي تقرأ محتوى غير موثوق، دون أدوات تكتب أو ترسل.
TypeScript: استدعاء الأداة مدخل غير موثوق
import { z } from 'zod';

const RefundArgs = z.object({
  orderId: z.string().regex(/^ord_[a-z0-9]{12}$/),
  amountCents: z.number().int().positive().max(50_000),
}).strict();

export async function handleRefundTool(raw: unknown, session: Session): Promise<ToolResult> {
  const args = RefundArgs.parse(raw);
  const order = await orders.findForCustomer(args.orderId, session.customerId);
  if (!order) return { error: 'Order not found' };
  if (args.amountCents > order.refundableCents) return { error: 'Amount exceeds refundable total' };
  return { pendingConfirmation: await confirmations.create(session.userId, 'refund', args) };
}

تعامل مع مخرجات النموذج كمدخلات غير موثوقة

مخرجات النموذج نص أُنتج تحت تأثير من كتب المدخلات أيا كان. تعامل معها كما تتعامل مع حقل نموذج أرسله زائر مجهول. ومعظم الثغرات الخطيرة في الذكاء الاصطناعي المستضاف التي ظهرت فعليا كانت ثغرات ويب عادية يتوسطها نموذج.

  • رمّز قبل العرض. اعرض المخرجات كنص، أو مرّر Markdown عبر أداة تنقية بقائمة سماح. لا تدرجها أبدا كـ HTML خام.
  • امنع التسريب عبر الصور والروابط. صورة Markdown تشير إلى خادم مهاجم، مع أسرار في سلسلة الاستعلام، ترسل البيانات لحظة عرضها. قيّد img-src في Content Security Policy، وأعد كتابة الروابط إلى نطاقات غير معروفة أو احذفها.
  • لا تنفذها مباشرة أبدا. لا تمرر المخرجات إلى eval أو سطر أوامر أو نص SQL أو محرك قوالب. وإذا كتب النموذج استعلامات، فنفذها للقراءة فقط، بمعاملات، مع حد للصفوف وبصلاحيات المستخدم نفسه.
  • تحقق من المخرجات المهيكلة. عندما تطلب JSON، حلّله مقابل مخطط وارفض ما لا يطابقه، حتى لو كان المزود يقدم وضعا للمخرجات المهيكلة.
Content Security Policy لصفحة تعرض مخرجات نموذج
Content-Security-Policy: default-src 'self';
  script-src 'self' 'nonce-r4nd0m';
  img-src 'self' https://cdn.example.com;
  connect-src 'self';
  frame-ancestors 'none';
  base-uri 'none';
  form-action 'self'

حدود المعدل والميزانيات واستنزاف المحفظة

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

  • حدّد حجم المدخلات. ارفض الطلبات التي تتجاوز عددا ثابتا من الرموز أو الأحرف قبل أن تصل إلى البوابة.
  • حدد دائما الحد الأقصى لرموز المخرجات. اختر قيمة لكل ميزة بدل الاعتماد على القيمة الافتراضية للنموذج.
  • ميزانية لكل مستخدم. تتبّع الرموز لكل مستخدم يوميا وفي الدقيقة، وأعد خطأ واضحا عند نفاد الميزانية.
  • قيّد حلقات الوكلاء. حدد عدد استدعاءات الأدوات وجولات النموذج لكل مهمة، وأوقفها عند تكرار استدعاءات متطابقة.
  • نبّه على الإنفاق. ضع حدود إنفاق لكل مشروع لدى المزود ونبّه على التكلفة بالساعة، لا على الفاتورة الشهرية فقط.
TypeScript وRedis: ميزانية رموز يومية لكل مستخدم
const DAILY_TOKEN_BUDGET = 200_000;
const DAY_SECONDS = 86_400;

export async function chargeTokens(userId: string, tokens: number): Promise<boolean> {
  const key = 'llm:budget:' + userId + ':' + new Date().toISOString().slice(0, 10);
  const used = await redis.incrby(key, tokens);
  if (used === tokens) await redis.expire(key, DAY_SECONDS);
  return used <= DAILY_TOKEN_BUDGET;
}

سجّل ما يكفي للتحقيق، لا ما يكفي للتسريب

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

سجل تدقيق واحد في البوابة لكل استدعاء نموذج
{
  "ts": "2026-11-03T09:14:22.481Z",
  "request_id": "req_7f3c9a",
  "service": "support-assistant",
  "user_id": "u_18842",
  "tenant_id": "t_311",
  "provider": "bedrock",
  "model": "anthropic.claude-sonnet-4-5-20250929-v1:0",
  "region": "eu-west-1",
  "input_tokens": 1834,
  "output_tokens": 412,
  "latency_ms": 2210,
  "redactions": 3,
  "guard_verdict": "allow",
  "tool_calls": [{ "name": "lookup_order", "status": "ok" }],
  "prompt_sha256": "9b1e0f6c...",
  "content_ref": "s3://ai-audit-restricted/2026/11/03/req_7f3c9a.json"
}

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

ثبّت الإصدارات واختبر قبل كل تغيير في النموذج

النموذج اعتماد يمكن أن يتغير من تحتك. الأسماء المستعارة مثل latest تنتقل إلى إصدارات جديدة، والإصدارات القديمة تُسحب وفق جدول منشور، وسلوك السلامة يختلف بين الإصدارات. ثبّت إصدارات نماذج مؤرخة في الإعدادات، وتابع تواريخ السحب، وتعامل مع ترقية النموذج كترقية رئيسية لمكتبة، مع اختبارات.

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

تشغيل اختبارات الفريق الأحمر في CI
# promptfoo: generate and run attacks against your app as configured in promptfooconfig.yaml
npx promptfoo@latest redteam run --output redteam-results.json

# garak: probe a model endpoint for prompt injection and data leakage
python -m garak --model_type openai --model_name gpt-4o-mini --probes promptinject,leakreplay

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

عندما يتسرب مفتاح أو يمر المزود بيوم سيئ

اكتب دليل التشغيل قبل أن تحتاج إليه. يُكتشف مفتاح النموذج المسرب عادة من ارتفاع مفاجئ في الفاتورة أو إشعار إساءة من المزود، ويكون عندها قد نُشر غالبا في منتديات تعيد بيع الوصول المسروق. في الساعة الأولى، السرعة أهم من السبب الجذري.

  1. ألغ أولا. عطّل المفتاح أو افصل سياسة الدور، ثم أصدر بيانات اعتماد جديدة عبر مدير الأسرار. لا تنتظر انتهاء التحقيق.
  2. حدد نطاق التعرض. اسحب سجلات الاستخدام والتدقيق لدى المزود الخاصة بالمفتاح: عناوين المصدر، والنماذج المستدعاة، وحجم الرموز، وأي وصول إلى الملفات المخزنة أو النماذج المضبوطة أو مخرجات الدفعات.
  3. افحص الحساب. ابحث عن مفاتيح أو أعضاء أو مشاريع أو webhooks جديدة، أو إعدادات احتفاظ وتسجيل تغيّرت باستخدام الوصول المسروق.
  4. اعثر على المصدر. ابحث عن المفتاح في المستودعات وسجلات CI وصور الحاويات وحزم العملاء وتقارير الأعطال، وأصلح المسار الذي تسرب منه.
  5. احتو الإنفاق. اخفض حدود إنفاق المشروع واسأل المزود عن أرصدة تعويض للاستخدام الاحتيالي، مع جاهزية الجدول الزمني والأدلة.
  6. قيّم الأثر على البيانات. إذا كانت الأوامر أو الملفات أو المخرجات المخزنة قابلة للوصول، فتعامل مع الأمر كاختراق محتمل لبيانات شخصية وأشرك فريق الخصوصية في واجبات الإخطار.

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

ربط الضوابط بقائمة OWASP LLM Top 10

قائمة OWASP Top 10 for LLM Applications 2025 والضوابط الواردة في هذا الدليل
الخطرالضوابط الرئيسية
LLM01 حقن الأوامرأدوات بأقل الصلاحيات، وتأكيد من المستخدم، ووكلاء منفصلون للقراءة والكتابة
LLM02 كشف المعلومات الحساسةتصنيف البيانات، والإخفاء، وصلاحيات الاسترجاع، وشروط الاحتفاظ لدى المزود
LLM03 سلسلة التوريدإصدارات نماذج وSDK مثبتة، وإضافات وخوادم MCP تمت مراجعتها
LLM04 تسميم البيانات والنموذجمصادر خاضعة للتحكم لبيانات الاسترجاع والضبط الدقيق
LLM05 المعالجة غير السليمة للمخرجاتترميز المخرجات، وCSP، والتحقق بالمخطط، وعدم التنفيذ
LLM06 الصلاحيات المفرطةأدوات تعمل بصفة المستخدم، والتحقق من الوسائط، وحدود الحلقات
LLM07 تسرب أمر النظاملا أسرار ولا قواعد وصول في أوامر النظام
LLM08 نقاط ضعف المتجهات والتضميناتمرشحات العميل وقوائم الوصول داخل استعلام المتجهات
LLM09 المعلومات المضللةالاستناد إلى مصادر مع الاستشهاد، والتقييمات، والمراجعة البشرية للقرارات
LLM10 الاستهلاك غير المحدودحدود المدخلات، والحد الأقصى للرموز، وميزانيات لكل مستخدم، وتنبيهات الإنفاق

قائمة تحقق قبل الإطلاق

  • الشروط مدوّنة. المزود وإصدار النموذج والمنطقة والاستخدام في التدريب والاحتفاظ مؤكدة كتابيا ومخزنة في جرد الأنظمة.
  • لا مفاتيح لدى العميل. المتصفحات وتطبيقات الجوال تستدعي خادمك الخلفي فقط، وبيانات اعتماد المزود موجودة في البوابة أو كهوية أحمال عمل.
  • مسار خاص. تمر الحركة عبر نقطة اتصال خاصة، أو عبر وكيل خروج لا يسمح إلا بمضيفي المزودين المعتمدين.
  • بيانات بالحد الأدنى. تحمل الأوامر فقط الحقول التي تحتاجها المهمة، مع إخفاء مختبر على عينات حقيقية.
  • استرجاع بصلاحيات. ترشّح استعلامات المتجهات حسب العميل وقائمة الوصول المأخوذة من الجلسة.
  • أدوات محددة النطاق. كل أداة تعمل بصفة المستخدم، وتتحقق من وسائطها، وتحتاج إلى تأكيد للآثار الجانبية.
  • مخرجات محتواة. المخرجات مرمّزة، والروابط والصور مقيدة، ولا يُنفَّذ شيء.
  • الحدود مضبوطة. حدود المدخلات والحد الأقصى للرموز وميزانيات المستخدمين وحدود الحلقات وتنبيهات الإنفاق قائمة.
  • السجلات تتدفق. تصل سجلات البوابة وسجلات تدقيق المزود إلى SIEM، مع حفظ المحتوى الكامل بشكل منفصل.
  • اختبارات في CI. تعمل مجموعة التقييم الأمني مع كل تغيير في الأمر والأداة والنموذج.
  • دليل التشغيل جاهز. جُرّب إلغاء المفاتيح ومفتاح الإيقاف والتحويل بين المزودين مرة واحدة على الأقل.

الخاتمة

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

المصادر

  • OWASP Gen AI Security Project، قائمة Top 10 for LLM Applications 2025.
  • NIST AI 600-1، إطار إدارة مخاطر الذكاء الاصطناعي: ملف الذكاء الاصطناعي التوليدي (يوليو 2024).
  • MITRE ATLAS، مشهد التهديدات العدائية لأنظمة الذكاء الاصطناعي.
  • Simon Willison، «The lethal trifecta for AI agents: private data, untrusted content, and external communication» (يونيو 2025).
  • توثيق AWS: أمن Amazon Bedrock، ونقاط اتصال VPC من نوع واجهة، وتسجيل استدعاءات النماذج.
  • Microsoft Learn: خصوصية البيانات في Azure OpenAI، والهوية المُدارة، وتعطيل المصادقة المحلية.
  • توثيق Google Cloud: VPC Service Controls لـ Vertex AI وحوكمة البيانات.
  • توثيق مشاريع Microsoft Presidio وpromptfoo وNVIDIA garak.
  • أمن الذكاء الاصطناعي
  • LLM
  • حقن الأوامر
  • OWASP LLM Top 10
  • Amazon Bedrock
  • Azure OpenAI
  • Vertex AI
  • RAG
  • بوابة الذكاء الاصطناعي
  • حماية البيانات
  • القيادة الأمنيةقراءة 24 دقيقة

    ستتعرض للاختراق. مهمتك أن تجعل ذلك مكلفًا.

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

  • الاستجابة للحوادثقراءة 14 دقيقة

    كيف تستجيب لهجوم فدية: دليل خطوة بخطوة

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

  • دليل التحصينقراءة 20 دقيقة

    تحصين خادم Linux VPS: دليل عملي كامل

    تحصين خطوة بخطوة لخادم Ubuntu أو Debian أو RHEL مكشوف على الإنترنت: SSH، وجدران الحماية، وإعدادات النواة، والعزل، والتدقيق، ومراقبة السلامة، والنسخ الاحتياطي، والتحقق.

  • الاستجابة للحوادثقراءة 23 دقيقة

    الفرز الجنائي في Windows للاستجابة للحوادث

    دليل عملي لفرز أجهزة Windows المخترقة: التقاط الذاكرة، والاستجابة المباشرة، والبحث عن وسائل الاستمرار، وسجلات الأحداث، وآثار التنفيذ، والجمع عبر KAPE وVelociraptor.

بياناتك ونموذجهم: تأمين ذكاء اصطناعي لا تستضيفه | ABYSSS