.Net 3.5، الطريقة الأكثر أمانًا لتمرير السلسلة بين العمليات

StackOverflow https://stackoverflow.com/questions/46693

  •  09-06-2019
  •  | 
  •  

سؤال

أود أن أكون قادرًا على تمرير SecureString (عبارة مرور مخبأة) إلى عملية فرعية في C# (.Net 3.5)، لكنني لا أعرف ما هي الطريقة الأكثر أمانًا للقيام بذلك.إذا كنت سأقوم بتحويل SecureString مرة أخرى إلى سلسلة عادية وتمريرها كوسيطة سطر أوامر، على سبيل المثال، فأنا يفكر قد تكون القيمة عرضة لترحيل القرص - مما قد يجعل النص العادي يلمس نظام الملفات ويفسد الهدف من استخدام SecureString.

هل يمكن تمرير IntPtr لـ SecureString بدلاً من ذلك؟هل يمكنني استخدام أنبوب مسمى دون زيادة المخاطر؟

هل كانت مفيدة؟

المحلول

بشكل عام، يجب عليك تحديد نموذج التهديد الخاص بك قبل القلق بشأن المزيد من الهجمات الغريبة.في هذه الحالة:هل أنت قلق من قيام شخص ما بإيقاف تشغيل الكمبيوتر وإجراء تحليل جنائي للقرص الصلب؟يمكن أيضًا تبديل ذاكرة التطبيق، لذا فإن الحقيقة البسيطة هي أن واحد العملية موجودة في الذاكرة، مما يجعل من الممكن أن تنتهي في ملف المبادلة.ماذا عن السبات؟أثناء السبات، تتم كتابة محتوى الذاكرة بالكامل على القرص الصلب (بما في ذلك SecureString - ويفترض أن يكون مفتاح التشفير!).ماذا لو كان المهاجم لديه حق الوصول إلى النظام أثناء تشغيله ويمكن البحث من خلال ذاكرة التطبيقات؟

بشكل عام، يعد الأمان من جانب العميل أمرًا صعبًا للغاية، وما لم يكن لديك أجهزة مخصصة (مثل شريحة TPM)، فمن المستحيل تقريبًا الحصول على الأمان بشكل صحيح.سيكون هناك حلين:

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

نصائح أخرى

ما لم تفهم عملية طفلك أيضًا كيفية العمل مع SecureString، فلا أعتقد أن هناك طريقة لتمريرها مباشرةً.على سبيل المثال، يحتوي الأسلوب Process.Start() على تحميلين زائدين يأخذان سلسلة SecureString، لذلك يتم تقليل خطر استنشاق قيمة السلسلة الفعلية (لا يزال من الممكن لأنه في مكان ما على طول الطريق يجب استرداد/إلغاء تنظيم القيمة الفعلية).

أعتقد أن الكثير من كيفية القيام بذلك سيعتمد على ماهية العملية الفرعية وكيف تبدأ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top