تخطَّ إلى المحتوى

الأمان

أمان TelegramOS: عزل المستأجرين (tenants)، المصادقة، التشفير أثناء التخزين، سجل التدقيق، وضوابط الطلبات الصادرة.

تطبّق المنصة ضوابط أمنية على عدة طبقات لحماية بيانات المستأجرين (tenants)، ومنع الوصول غير المصرّح به، وضمان التشغيل الآمن. تصف هذه الصفحة ما يُطبَّق فعلياً في الكود قيد التشغيل.

عزل المستأجرين

الطبقةالآليةما تمنعه
حدود المستأجر (tenant)يحمل كل صف مورد (حساب، بروكسي، بوت، محادثة، محفظة) معرّف المستخدم المالك. تُحصر استعلامات القراءة والكتابة في مستأجر المُستدعي نفسه إضافةً إلى أي مستأجري فرق يمنحون الصلاحية المحددة (مثلاً inbox:read وaccounts:delete)؛ وعند فشل البحث يعود النطاق إلى المالك فقط. المعرّف الأجنبي أو المشوّه يُرجع 404، لا 403.قراءة مستأجر لبيانات مستأجر آخر أو تغييرها عبر واجهة API أو واجهة المستخدم.
وقت التشغيل لكل حسابيعمل كل حساب نشط كعملية فرعية خاصة به داخل مدير العمّال (worker manager)، بجلسته المفكوكة التشفير الخاصة، واتصال MTProto الخاص، وبصمة الجهاز الخاصة، وبروكسيه الخاص. لا يُشارَك أي اتصال بين الحسابات. يتشارك كل العمّال حدود CPU والذاكرة لحاوية مدير العمّال؛ ولا يوجد sandbox لكل عملية.رصد جلسة Telegram لحساب ما أو إعادة استخدامها من قِبل عامل حساب آخر.
بروكسي لكل حسابيُربط الحساب ببروكسي واحد بالضبط؛ ويُرفض تعيين عدة حسابات إلى البروكسي نفسه. البروكسيات المستأجرة من المنصة تُزوَّد كمستخدم فرعي لدى المزوّد لكل حساب وتُفكَّك عند إعادة الحساب. التدوير لكل حساب.ربط Telegram بين الحسابات عبر IP خروج مشترك.
إعادة تدوير الحسابات المستأجرةلا يستلم المستأجر إلا حساباً غير مخصَّص حالياً في المجمّع. عند انتهاء الإيجار (انتهاء الاشتراك أو الحزمة زائد فترة سماح 5 أيام، أو إعادة صريحة)، يحذف عامل الاستصلاح كل محادثة من الطرفين، ويمسح ربط المستأجر، ويُعيد الحساب إلى المجمّع بجلسته سليمة، ليستلمه مستأجر لاحق. الحسابات التي ماتت جلستها تُعزل في الحجر ولا تُباع مجدداً أبداً. الحذف الدائم المدفوع (⁦$1⁩) يسجّل خروج الجلسة، ويمسح كتلة الجلسة المشفّرة، ويُحيل الحساب إلى التقاعد نهائياً.وراثة مستأجر جديد لمحادثات مستأجر سابق، واحتفاظ مستأجر سابق بطريقة للعودة إلى الحساب.
فرض الجلسات النشطةكل 6 ساعات، ولكل حساب مستأجر، تسرد المنصة جلسات Telegram النشطة للحساب. الجلسات غير المعروفة تُطلق إشعاراً أمنياً بإجراءين، «هذا أنا» و«إنهاء». لا يُنهى شيء حتى تقرر، باستثناء الجلسات التي وافق عليها مستأجر سابق، فتُبطَل عند انتقال الحساب إلى مستأجر آخر.الوصول غير المصرّح به إلى حساب مستأجر عبر جلسة مفتوحة خارج المنصة.
نظراء الخدمة المخفيونالمحادثات مع حساب نظام Telegram (النظير 777000، إضافةً إلى أي معرّفات في جدول hidden_telegram_peers) تُفلتَر من واجهة API لصندوق الوارد للحسابات المستأجرة فقط. الحسابات المملوكة تراها دائماً. يُطبَّق الفلتر عند القراءة؛ أما الصفوف نفسها فتُخزَّن.قراءة حامل الإيجار لرموز الدخول لرقم الهاتف الأساسي.

المصادقة

متطلبات كلمة المرور

المتطلبالقيمة
الطول الأدنى12 حرفاً
الطول الأقصى72 بايت (حد bcrypt)؛ الأحرف غير الإنجليزية والرموز التعبيرية تأخذ أكثر من بايت
تنوّع الأحرفلا قواعد تركيب؛ يجب ألا تطابق كلمة المرور بريدك الإلكتروني أو اسمك
كلمات المرور المسرّبةتُفحص كلمات المرور الجديدة مقابل قائمة Have I Been Pwned؛ تُرسل أول 5 أحرف فقط من تجزئة SHA-1، ويُتجاوز الفحص إذا لم تُجب تلك الخدمة خلال ثانيتين
كلمات المرور الحاليةكلمات المرور المعيّنة وفق القواعد السابقة تبقى صالحة حتى تُغيَّر
التخزينbcrypt، معامل تكلفة 12
حسابات تسجيل الدخول الاجتماعيقد لا تملك كلمة مرور حتى يُعيَّن واحدة في الإعدادات

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

الجلسات والرموز

العنصرالقيمة
رمز الوصولRS256 JWT، 15 دقيقة
رمز التحديثرمز عشوائي 512 بت، 7 أيام، يُدوَّر عند كل استخدام مع سماح إعادة استخدام 30 ثانية
الكوكيزHttpOnly وSecure وSameSite=None؛ كوكي التحديث محصور في /auth
سجلات الجلسات على جانب الخادمتُحذف السجلات المنتهية بعد 7 أيام
مفاتيح APIبادئة tgp_، تُخزَّن كتجزئة SHA-256، انتهاء افتراضي 90 يوماً، 20 مفتاحاً كحد أقصى لكل مستخدم
المستخدمون المعطَّلونالمستخدم ذو is_active = false يُرفض عند تسجيل الدخول والتحديث والمصادقة بمفتاح API

المصادقة الثنائية (TOTP)

الإعدادالقيمة
الخوارزميةTOTP (RFC 6238)، 6 أرقام، خطوة 30 ثانية، تُقبل خطوة واحدة من انحراف الساعة
الحماية من إعادة الإرسالالرمز الذي قُبل سابقاً يُرفض لبقية نافذته
الرموز الاحتياطية8 رموز، كل منها صالح لمرة واحدة، تُخزَّن كتجزئات SHA-256
تخزين السرمشفّر بـ Fernet أثناء التخزين عند ضبط مفتاح تشفير TOTP
حد المحاولات10 محاولات فاشلة لكل حساب، ثم قفل 15 دقيقة بصرف النظر عن IP المصدر

تحديد المعدل

نقطة النهايةالحد
POST /auth/login10 طلبات في الدقيقة لكل IP
POST /auth/register5 طلبات في الدقيقة لكل IP، إضافةً إلى سقف إرسال البريد أدناه
POST /auth/forgot-password, /resend-verification5 رسائل بريد في الساعة لكل IP؛ لكل عنوان: إرسال واحد كل 60 ثانية، 10 في اليوم
POST /auth/reset-password, /verify-email30 طلباً في الدقيقة لكل IP؛ كل رمز صالح 10 دقائق ويبطل بعد 5 محاولات خاطئة
تعديلات الفريق (دعوة، تحديث، إزالة)محدِّد تعديلات لكل مستخدم

تستخدم الحدود نافذة منزلقة ذرّية في Redis. عند تجاوز حد، تُرجع المنصة HTTP 429 مع ترويسة Retry-After تساوي طول النافذة. لا يوجد قفل على مستوى التطبيق بعد تكرار 429. عند الحافة، تقع المنصة خلف Cloudflare، ويُنهي nginx اتصال TLS 1.2/1.3 مع HSTS، ويحظر fail2ban المضيفين الذين يولّدون طلبات مشوّهة.

التشفير

أثناء التخزين

البياناتالتشفير
سلاسل جلسات TelegramFernet (AES-128-CBC + HMAC-SHA256) تحت مفتاح جلسات المنصة. صيغة مغلَّف اختيارية: مفتاح بيانات لكل حساب مغلَّف إمّا بمفتاح المنصة (قياسي) أو بمفتاح Argon2id مشتق من عبارة مرور المالك (وضع الخزنة، انظر أدناه).
بيانات اعتماد البروكسيFernet، مفتاح المنصة نفسه
رموز Bot APIAES-256-GCM بمفتاح مشتق عبر HKDF-SHA256 من السر الرئيسي للمنصة
أسرار توقيع Webhook الصادرةFernet
أسرار TOTPFernet، عند ضبط مفتاح تشفير TOTP
كلمات المرور، الرموز الاحتياطية، رموز التحديث، مفاتيح APIتُخزَّن كتجزئات فقط (bcrypt لكلمات المرور، SHA-256 للبقية)
نصوص الرسائل، بيانات المحادثات الوصفية، جهات الاتصالغير مشفّرة على مستوى التطبيق؛ صفوف عادية في Postgres
المرفقات (MinIO، 20 MB لكل ملف)غير مشفّرة على جانب الخادم؛ يمر الوصول عبر نقطة نهاية بث محصورة بالمستأجر
النسخ الاحتياطية لقاعدة البياناتغير مشفّرة؛ مخزّنة على وحدات تخزين محلية على مضيف قاعدة البيانات، ولا توجد نسخة خارج هذا المضيف

لا يوجد KMS خارجي ولا تدوير آلي للمفاتيح. مفاتيح التشفير أسرار بيئة يديرها المشغّلون، وتُحفظ خارج قاعدة البيانات. تدوير المفتاح عملية يدوية.

وضع الخزنة (جلسات مشفّرة بعبارة مرور)

للحسابات المملوكة يمكنك إعادة تغليف الجلسة تحت عبارة مرور (10 أحرف على الأقل). يُشتق مفتاح التغليف بـ Argon2id (t=3, m=64 MiB, p=4)؛ ولا يستطيع مفتاح المنصة بعدها فك تشفير الجلسة، لذا يصبح تفريغ قاعدة البيانات بلا فائدة من دون عبارة المرور. المقابل: لا تعمل الأتمتة إلا أثناء نافذة فتح مفتوحة (افتراضياً ساعة واحدة، وبحد أقصى 24 ساعة). يُسلَّم المفتاح المشتق إلى العامل في الذاكرة ولا يُحفظ أبداً. يُرفض تصدير الجلسة أثناء تفعيل وضع الخزنة. لا يمكن للحسابات المستأجرة استخدام وضع الخزنة.

أثناء النقل

كل الحركة العامة عبر HTTPS (TLS 1.2 أو 1.3، مع HSTS وpreload) خلف Cloudflare. تخرج حركة Telegram عبر بروكسي الحساب كـ MTProto، وهو مشفّر من الطرف إلى الخادم ببروتوكول Telegram الخاص.

مراقبة الاتصال والجلسات

  • تُكتب كل محاولة اتصال بـ Telegram لكل حساب في connection_audit_log مع مضيف البروكسي ومنفذه، ومعرّف API، وطراز الجهاز، ونوع الاتصال، والنجاح أو الخطأ، والمدة، وما إذا كان الاتصال قد جاء من IP خادم.
  • تحصل الحسابات المستأجرة على فحص الجلسات النشطة كل 6 ساعات الموصوف أعلاه؛ تظهر المطالبات المعلّقة تحت الإشعارات بالنوع security.
  • لا توجد تنبيهات مبنية على الموقع الجغرافي، ولا كشف لانحراف بصمة الجهاز، ولا إنهاء تلقائي للجلسة بناءً على درجة الصحة.

سجل التدقيق

السجلما يُسجَّلمن يستطيع قراءتهمدة الاحتفاظ
سجل تدقيق الفريقteam.create وteam.member.invite وteam.member.update وteam.member.remove وteam.member.leave مع الفاعل وعنوان IP ووكيل المستخدم ولقطة قبل/بعدالمالك والمسؤول (audit:logs:read)؛ يستطيع كل مستخدم قراءة إجراءاته الخاصةيُحتفظ به إلى أجل غير مسمى
سجل تدقيق المنصةsession_export، ودورة حياة البروكسي (proxy_created وproxy_updated وproxy_deleted وproxy_assigned وproxy_unassigned وproxy_rotated)، وفرض الجلسات (enforcement_check وprompt_emitted وcheck_failed)المشغّلونيُحتفظ به إلى أجل غير مسمى
تدقيق الاتصالالسجل لكل اتصال الموصوف أعلاهالمشغّلونيُحتفظ به إلى أجل غير مسمى
سجل صحة الحسابمدخلات درجة الصحة لكل حسابالمشغّلون90 يوماً
عمليات تسليم Webhookنوع الحدث، والحمولة، وحالة HTTP، وأول 400 بايت من الاستجابة، والمحاولاتمساحة العمل7 أيام للمُسلَّمة، و30 يوماً للفاشلة

سجل تدقيق الفريق متاح على GET /audit/logs (فلترة حسب team_id وaction وresource_type). راجع واجهة API.

الحماية من SSRF

تُجري المنصة طلبات HTTP صادرة باسمك في أربعة مواضع. لكل منها حارسه الخاص:

المُستدعيالحارس
Webhook الأحداث (صندوق الوارد)يجب أن تكون العناوين الجديدة https://. يُحلّ اسم المضيف عند التسجيل ومرة أخرى قبل كل تسليم، ويُرسل التسليم إلى العنوان الذي تم التحقق منه؛ تُرفض عناوين loopback والخاصة وlink-local وcarrier-NAT والمحجوزة وmulticast (IPv4 وIPv6) وlocalhost و*.local. نقطة النهاية المخزّنة التي تُحلّ الآن إلى عنوان مرفوض تفشل بخطأ واضح بدلاً من تسليمها. لا تتبع عمليات التسليم إعادة التوجيه، وتنتهي مهلتها بعد 10 ثوانٍ، وتُعاد المحاولة حتى 6 مرات خلال نحو 8 ساعات، وتُطفأ نقطة النهاية بعد 5 إخفاقات نهائية متتالية.
عنوان Webhook للبوتيُحلّ عبر DNS عند التسجيل؛ ويُرفض إن كان أي عنوان محلول خاصاً أو loopback أو link-local أو multicast أو غير محدد أو محجوزاً.
عقدة طلب HTTP في التدفقيُحلّ وقت الطلب ويُثبَّت الاتصال على IP العام المُتحقَّق منه (يغلق DNS rebinding)؛ مهلة إجمالية 15 ثانية ومهلة اتصال 5 ثوانٍ. الطلبات غير موقّعة.
موصّلات APIhttp:// أو https:// فقط. يُحلّ اسم المضيف عند حفظ الموصّل واختباره، ويُرسل الطلب إلى العنوان الذي تم التحقق منه؛ تُرفض عناوين loopback والخاصة وlink-local وcarrier-NAT والمحجوزة وmulticast (IPv4 وIPv6، بما فيها IPv4-mapped والصيغ الرقمية) وlocalhost و*.local. لا تُتبع إعادة التوجيه.
عناوين إعادة توجيه الدفعتُحلّ وتُرفض إن وقعت على عنوان خاص أو loopback.

أهداف Webhook بصيغة http:// العادية مقبولة؛ استخدم HTTPS حيثما أمكن.

التحقق من Webhook البوت

تُتحقَّق تحديثات البوت الواردة بسر X-Telegram-Bot-Api-Secret-Token الخاص بكل بوت (راجع البوتات). أما Webhook الأحداث الصادرة فموقّعة: يحمل كل تسليم X-TGP-Signature، وهو HMAC-SHA256 للطابع الزمني والنص الخام تحت سر نقطة النهاية، إضافةً إلى X-TGP-Timestamp وX-TGP-Delivery — راجع واجهة API › Webhooks. الطلبات التي تُجريها عقدة طلب HTTP في التدفق غير موقّعة؛ احمِ تلك النقاط بمسار سري أو قائمة سماح.

الإبلاغ عن ثغرة أمنية

أبلغ عبر الدعم داخل التطبيق (فقاعة الدعم في لوحة التحكم)، أو عبر @TelOsNotif_Bot إن لم يكن لديك حساب. لا يوجد صندوق بريد للأمان. ضمّن خطوات إعادة الإنتاج ونقطة النهاية المتأثرة. لا تختبر على حسابات أو مساحات عمل لا تملكها. النطاق وما هو خارج النطاق وأهداف الاستجابة (الإقرار بالاستلام في غضون 24 ساعة، والمشكلات عالية الخطورة المُتحقَّق منها مستهدفة للمعالجة في غضون 14 يوماً) موجودة على /security. راجع أيضاً الدعم.

الإبلاغ عن مشكلة في هذه الصفحة
⁨الأمان⁩ | مستندات TelegramOS