المحتويات
المقدمة
معظم الفرق التي تطلق ميزات ذكاء اصطناعي لا تشغّل النموذج بنفسها. بل ترسل الأوامر إلى مزود عبر 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 Bedrock | Azure OpenAI | Vertex AI |
|---|---|---|---|---|
| المصادقة | مفاتيح API محددة بالمؤسسة أو المشروع أو مساحة العمل | أدوار وسياسات IAM | Entra ID مع الهويات المُدارة، أو مفاتيح API | IAM مع حسابات الخدمة |
| مسار شبكة خاص | عادة الإنترنت العام فقط | نقطة اتصال VPC من نوع واجهة (PrivateLink) | نقطة اتصال خاصة | Private Service Connect وVPC Service Controls |
| تدقيق مستوى التحكم | سجلات وحدة الإدارة لدى المطور | CloudTrail | سجل نشاط Azure | Cloud Audit Logs |
| تسجيل الطلبات | تطبيقك فقط | تسجيل استدعاءات النموذج إلى S3 أو CloudWatch | إعدادات التشخيص إلى Log Analytics | تسجيل الطلبات والإجابات إلى BigQuery |
| موقع البيانات | حسب المطور والخطة | إقليمي، مع استدلال عبر المناطق اختياريا | عمليات نشر إقليمية أو عالمية أو حسب نطاق البيانات | إقليمي، مع نقطة اتصال عالمية اختياريا |
غالبا ما تحصل الواجهة المباشرة على النماذج والميزات الجديدة أولا. أما المنصة السحابية فتتفوق عادة في الشبكات الخاصة والهوية. وإذا استخدمت الاثنين، فضعهما خلف البوابة الداخلية نفسها، الموصوفة أدناه، حتى لا تعتمد السياسة على المسار الذي سلكه الطلب.
بيانات الاعتماد: لا مفاتيح طويلة العمر في تطبيقاتك
مفتاح API للنموذج رمز حامل لفاتورتك ولأي بيانات مخزنة في الحساب. تعامل معه ككلمة مرور قاعدة بيانات. لا ترسله أبدا إلى متصفح أو تطبيق جوال، حيث يمكن استخراجه في دقائق. تطبيقات العميل تستدعي خادمك الخلفي، والخادم الخلفي وحده يتحدث إلى المزود.
على المنصة السحابية، استغن عن المفاتيح تماما واستخدم هوية أحمال العمل. امنح دور الخدمة صلاحية استدعاء النماذج التي يحتاجها فقط، في المناطق التي يحتاجها، وعبر نقطة الاتصال الخاصة بك فقط.
{
"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" }
}
}
]
}# 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 حتى لا يمكن إرسال البيانات إلى مشروع خارجه.
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واجهات المطورين المباشرة نقاط اتصال عامة، لذلك تحكّم في الطرف الآخر: خروج الحركة من أحمال عملك. مرّر الحركة الصادرة عبر وكيل لا يسمح إلا بأسماء مضيفي المزودين الذين تستخدمهم. هذا يمنع خدمة مخترقة من استدعاء نقطة نموذج يملكها مهاجم ببياناتك، ويجعل أي اعتماد جديد على الذكاء الاصطناعي مرئيا، لأنه يفشل حتى يضيفه أحد.
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. البوابة هي مكان السياسة، لذلك تُطبَّق بالطريقة نفسها على كل الفرق.
- الهوية. يحمل كل طلب الخدمة المستدعية والمستخدم النهائي، فتكون السجلات والحدود لكل مستخدم، لا لكل مفتاح مشترك.
- قائمة النماذج المسموحة. لا تصل كل خدمة إلا إلى النماذج والإصدارات المعتمدة لها.
- ضوابط البيانات. يعمل الإخفاء وفحوص تصنيف البيانات قبل أن يغادر الطلب شبكتك.
- الحدود. ميزانيات رموز لكل مستخدم ولكل خدمة، وحدود لحجم الطلب، ومهل زمنية.
- التوجيه. التحويل إلى مزود ثان أو منطقة أخرى، ومفتاح إيقاف يعطّل ميزة دون نشر.
- التسجيل. سجل تدقيق واحد متسق لكل استدعاء، أيا كان المزود الذي خدمه.
تحكّم في ما يدخل إلى الأمر
كل ما يوضع في الأمر يجب اعتباره مكشوفا للمزود، وقابلا للاسترجاع من المستخدم الذي أرسل الطلب ما لم تثبت العكس. وتقليل البيانات هو الضابط الوحيد الذي يظل فعالا إذا اختُرق المزود، لذلك طبّقه أولا واعتمد على العقود ثانيا.
- صنّف قبل الإرسال. حدد لكل ميزة فئات البيانات التي يمكن أن تصل إلى كل مزود. يجب ألا تكون الأسرار وبيانات الاعتماد وأرقام بطاقات الدفع في أي أمر.
- أخف أو استخدم أسماء مستعارة. استبدل الأسماء والبريد الإلكتروني وأرقام الهواتف وأرقام الحسابات بعلامات ثابتة قبل الاستدعاء، وأعدها في خدمتك أنت إذا احتاجت الإجابة إليها.
- لا أسرار في أوامر النظام. افترض أن أمر النظام سيُستخرج. يمكنه وصف السلوك، لكن يجب ألا يحتوي مفاتيح، ولا عناوين داخلية تعتمد على بقائها خاصة، ولا قواعد وصول لا تطبقها في أي مكان آخر.
- قلّص السياق. أرسل الحقول القليلة التي تحتاجها المهمة، لا سجل العميل كاملا ولا الملف كاملا.
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) هو الطريق الأكثر شيوعا لتسرب البيانات بين المستخدمين. تحتوي قاعدة المتجهات على مقاطع من كل المستندات، ويجد البحث بالتشابه أقربها، ثم يلخص النموذج بسهولة مستندا لم يكن مسموحا للمستخدم بفتحه أصلا. لا يستطيع النموذج فرض التحكم في الوصول. يجب أن يفعل ذلك استعلام الاسترجاع لديك.
خزّن العميل وقائمة الوصول مع كل مقطع، وخذ هوية المستخدم من الجلسة الموثقة، ورشّح داخل الاستعلام قبل الترتيب. لا ترشّح أبدا بعد عودة أفضل النتائج، لأن ذلك يعيد نتائج أقل ويظل يسرّب المعلومات عبر التوقيت والأعداد. ولا تدع النموذج يختار قيم الترشيح أبدا.
-- $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 عام.
- أبق الهوية خارج النموذج. معرفات المستخدمين والعملاء والأدوار تأتي من خادمك، لا من وسائط أدوات يملؤها النموذج.
- أكّد الآثار الجانبية. الإرسال والدفع والحذف والمشاركة تحتاج إلى تأكيد صريح من الإنسان، يُعرض خارج مخرجات النموذج.
- افصل القراءة عن الكتابة. استخدم استدعاء نموذج أو وكيلا منفصلا وأضيق نطاقا للمهام التي تقرأ محتوى غير موثوق، دون أدوات تكتب أو ترسل.
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: 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'حدود المعدل والميزانيات واستنزاف المحفظة
كل استدعاء لنموذج مستضاف يكلف مالا، وميزة الذكاء الاصطناعي العامة صنبور مفتوح. يستغل المهاجمون الفئات المجانية آليا لإعادة بيع الوصول، وحلقة واحدة خاطئة في وكيل قد تنفق ميزانية شهر في ساعة. حدود المعدل لدى المزود تحمي المزود لا أنت، لذلك ضع حدودك الخاصة تحتها.
- حدّد حجم المدخلات. ارفض الطلبات التي تتجاوز عددا ثابتا من الرموز أو الأحرف قبل أن تصل إلى البوابة.
- حدد دائما الحد الأقصى لرموز المخرجات. اختر قيمة لكل ميزة بدل الاعتماد على القيمة الافتراضية للنموذج.
- ميزانية لكل مستخدم. تتبّع الرموز لكل مستخدم يوميا وفي الدقيقة، وأعد خطأ واضحا عند نفاد الميزانية.
- قيّد حلقات الوكلاء. حدد عدد استدعاءات الأدوات وجولات النموذج لكل مهمة، وأوقفها عند تكرار استدعاءات متطابقة.
- نبّه على الإنفاق. ضع حدود إنفاق لكل مشروع لدى المزود ونبّه على التكلفة بالساعة، لا على الفاتورة الشهرية فقط.
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 توليد كثير من هذه الهجمات وتقييمها.
# 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 والإضافات قبل ربطها، لأن كلا منها شيفرة تعمل بالصلاحيات التي تمنحها لها، وأدرجها في فحص الاعتمادات.
عندما يتسرب مفتاح أو يمر المزود بيوم سيئ
اكتب دليل التشغيل قبل أن تحتاج إليه. يُكتشف مفتاح النموذج المسرب عادة من ارتفاع مفاجئ في الفاتورة أو إشعار إساءة من المزود، ويكون عندها قد نُشر غالبا في منتديات تعيد بيع الوصول المسروق. في الساعة الأولى، السرعة أهم من السبب الجذري.
- ألغ أولا. عطّل المفتاح أو افصل سياسة الدور، ثم أصدر بيانات اعتماد جديدة عبر مدير الأسرار. لا تنتظر انتهاء التحقيق.
- حدد نطاق التعرض. اسحب سجلات الاستخدام والتدقيق لدى المزود الخاصة بالمفتاح: عناوين المصدر، والنماذج المستدعاة، وحجم الرموز، وأي وصول إلى الملفات المخزنة أو النماذج المضبوطة أو مخرجات الدفعات.
- افحص الحساب. ابحث عن مفاتيح أو أعضاء أو مشاريع أو webhooks جديدة، أو إعدادات احتفاظ وتسجيل تغيّرت باستخدام الوصول المسروق.
- اعثر على المصدر. ابحث عن المفتاح في المستودعات وسجلات CI وصور الحاويات وحزم العملاء وتقارير الأعطال، وأصلح المسار الذي تسرب منه.
- احتو الإنفاق. اخفض حدود إنفاق المشروع واسأل المزود عن أرصدة تعويض للاستخدام الاحتيالي، مع جاهزية الجدول الزمني والأدلة.
- قيّم الأثر على البيانات. إذا كانت الأوامر أو الملفات أو المخرجات المخزنة قابلة للوصول، فتعامل مع الأمر كاختراق محتمل لبيانات شخصية وأشرك فريق الخصوصية في واجبات الإخطار.
عند تعطل المزود أو اختراقه، تكون الضوابط هي التي بنيتها سابقا. البوابة ذات مفتاح الإيقاف تتيح لك تعطيل ميزة أو الانتقال إلى مزود ثان في دقائق. وتقليل البيانات يحد مما قد يكشفه اختراق لدى المزود. وجرد الأنظمة يخبرك بالميزات والبيانات المتأثرة عندما ينشر المزود إشعاره.
ربط الضوابط بقائمة OWASP LLM Top 10
| الخطر | الضوابط الرئيسية |
|---|---|
| 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
- بوابة الذكاء الاصطناعي
- حماية البيانات