تأكد من التعتيم على الثنائيات إذا كانت تحتوي على معلومات حساسة
العنوان
التفاصيل
المكون
حد ثقة الجهاز
مرحلة SDL
التوزيع
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تأكد من التعتيم على الثنائيات إذا كانت تحتوي على معلومات حساسة مثل البيانات السرية التجارية ومنطق العمل الحساس الذي لا ينبغي عكسه. هذا لوقف الهندسة العكسية للتجمعات. يمكن استخدام أدوات مثل CryptoObfuscator لهذا الغرض.
ضع في اعتبارك استخدام نظام تشفير الملفات (EFS) الذي يُستخدم لحماية البيانات السرية الخاصة بالمستخدم
العنوان
التفاصيل
المكون
حد ثقة الجهاز
مرحلة SDL
إنشاء
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
ضع في اعتبارك استخدام نظام تشفير الملفات (EFS) الذي يُستخدم لحماية البيانات السرية الخاصة بالمستخدم من الخصوم الذين لديهم وصول مادي إلى الكمبيوتر.
تأكد من تشفير البيانات الحساسة المخزنة بواسطة التطبيق على نظام الملفات
العنوان
التفاصيل
المكون
حد ثقة الجهاز
مرحلة SDL
التوزيع
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تأكد من أن البيانات الحساسة المخزنة بواسطة التطبيق على نظام الملفات مشفرة (على سبيل المثال، باستخدام DPAPI)، إذا كان لا يمكن فرض EFS
تأكد من عدم تخزين المحتوى الحساس في ذاكرة التخزين المؤقت على المتصفح
العنوان
التفاصيل
المكون
تطبيق ويب
مرحلة SDL
إنشاء
التقنيات المعمول بها
عام، نماذج الويب، MVC5، MVC6
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
يمكن للمتصفحات تخزين المعلومات لأغراض التخزين المؤقت والمحفوظات. يتم تخزين هذه الملفات المخزنة مؤقتاً في مجلد، مثل مجلد Temporary Internet Files في حالة Internet Explorer. عندما تتم إحالة هذه الصفحات مرة أخرى، يعرضها المستعرض من ذاكرة التخزين المؤقت الخاصة به. إذا تم عرض معلومات حساسة للمستخدم (مثل العنوان أو تفاصيل بطاقة الائتمان أو رقم الضمان الاجتماعي أو اسم المستخدم)، يمكن تخزين هذه المعلومات في ذاكرة التخزين المؤقت للمتصفح، وبالتالي يمكن استردادها من خلال فحص ذاكرة التخزين المؤقت للمتصفح أو ببساطة عن طريق الضغط على زر "الخلف" بالمتصفح. عيّن قيمة رأس استجابة التحكم في ذاكرة التخزين المؤقت على "no-store" لجميع الصفحات.
يمكن تنفيذ ذلك من خلال مرشح. يمكن استخدام المثال التالي:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext == null || (filterContext.HttpContext != null && filterContext.HttpContext.Response != null && filterContext.HttpContext.Response.IsRequestBeingRedirected))
{
//// Since this is MVC pipeline, this should never be null.
return;
}
var attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(System.Web.Mvc.OutputCacheAttribute), false);
if (attributes == null || **Attributes**.Count() == 0)
{
filterContext.HttpContext.Response.Cache.SetNoStore();
filterContext.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);
filterContext.HttpContext.Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
if (!filterContext.IsChildAction)
{
filterContext.HttpContext.Response.AppendHeader("Pragma", "no-cache");
}
}
base.OnActionExecuting(filterContext);
}
تشفير أقسام ملفات تكوين تطبيقات الويب التي تحتوي على بيانات حساسة
غالباً ما تُستخدم ملفات التكوين مثل Web.config وappsettings.json للاحتفاظ بالمعلومات الحساسة، بما في ذلك أسماء المستخدمين وكلمات المرور وسلاسل اتصال قاعدة البيانات ومفاتيح التشفير. إذا لم تقم بحماية هذه المعلومات، فإن التطبيق الخاص بك يكون عرضة للمهاجمين أو المستخدمين الضارين الذين يحصلون على معلومات حساسة مثل أسماء المستخدمين وكلمات المرور وأسماء قواعد البيانات وأسماء الخوادم. استناداً إلى نوع التوزيع (azure/on-prem)، قم بتشفير الأقسام الحساسة لملفات التكوين باستخدام DPAPI أو خدمات مثل Azure Key Vault.
تعطيل سمة HTML للإكمال التلقائي بشكل صريح في النماذج والإدخالات الحساسة
تحدد سمة الإكمال التلقائي ما إذا كان يجب تشغيل الإكمال التلقائي للنموذج أو إيقاف تشغيله. عند تشغيل الإكمال التلقائي، يكمل المتصفح تلقائياً القيم بناءً على القيم التي أدخلها المستخدم من قبل. على سبيل المثال، عند إدخال اسم وكلمة مرور جديدين في نموذج وتقديم النموذج، يسأل المتصفح عما إذا كان يجب حفظ كلمة المرور، وبعد ذلك عند عرض النموذج، يتم ملء الاسم وكلمة المرور تلقائياً أو يتم إكمالهما باسم تم إدخال الاسم. يمكن للمهاجم الذي لديه وصول محلي الحصول على كلمة مرور النص الواضح من ذاكرة التخزين المؤقت للمتصفح. بشكل افتراضي، يتم تمكين الإكمال التلقائي، ويجب تعطيله بشكل صريح.
تأكد من إخفاء البيانات الحساسة المعروضة على شاشة المستخدم
العنوان
التفاصيل
المكون
تطبيق ويب
مرحلة SDL
إنشاء
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
يجب إخفاء البيانات الحساسة مثل كلمات المرور وأرقام بطاقات الائتمان وSSN وما إلى ذلك عند عرضها على الشاشة. هذا لمنع الأفراد غير المصرح لهم من الوصول إلى البيانات (على سبيل المثال، كلمات مرور تصفح الكتف، وموظفي الدعم الذين يشاهدون عدد مستخدمي SSN). تأكد من أن عناصر البيانات هذه غير مرئية في نص عادي وأنها مقنعة بشكل مناسب. يجب توخي الحذر عند قبولها كمدخلات (على سبيل المثال، نوع الإدخال = "كلمة المرور") بالإضافة إلى عرضها مرة أخرى على الشاشة (على سبيل المثال، عرض آخر 4 أرقام فقط من رقم بطاقة الائتمان).
تنفيذ إخفاء البيانات الديناميكية للحد من تعرض البيانات الحساسة للمستخدمين غير المتميزين
الغرض من إخفاء البيانات الديناميكي هو الحد من تعرض البيانات الحساسة، ومنع المستخدمين الذين لا ينبغي أن يكون لديهم حق الوصول إلى البيانات من عرضها. لا يهدف إخفاء البيانات الديناميكي إلى منع مستخدمي قاعدة البيانات من الاتصال مباشرة بقاعدة البيانات وتشغيل استعلامات شاملة تعرض أجزاء من البيانات الحساسة. يُعد إخفاء البيانات الديناميكي مكملاً لميزات أمان SQL Server الأخرى (التدقيق والتشفير والأمان على مستوى الصف ...) ويوصى بشدة باستخدام هذه الميزة جنباً إلى جنب معهم بالإضافة إلى حماية البيانات الحساسة في قاعدة البيانات بشكل أفضل. يرجى ملاحظة أن هذه الميزة مدعومة فقط بواسطة SQL Server بدءاً من 2016 وAzure SQL Database.
تأكد من تخزين كلمات المرور بتنسيق تشفير الرسالة العشوائي
لا يجب تخزين كلمات المرور في قواعد بيانات مخزن المستخدم المخصص. يجب تخزين تجزئات كلمة المرور مع قيم الملح بدلاً من ذلك. تأكد من أن الملح للمستخدم فريد دائماً وأنك تقوم بتطبيق b-crypt أو s-crypt أو PBKDF2 قبل تخزين كلمة المرور، مع حد أدنى لعدد تكرار عامل العمل يبلغ 150000 حلقة للقضاء على إمكانية التأثير الغاشم.
تأكد من تشفير البيانات الحساسة في أعمدة قاعدة البيانات
يجب تشفير البيانات الحساسة مثل أرقام بطاقات الائتمان في قاعدة البيانات. يمكن تشفير البيانات باستخدام تشفير على مستوى العمود أو بواسطة وظيفة تطبيق باستخدام وظائف التشفير.
تأكد من تمكين التشفير على مستوى قاعدة البيانات (TDE)
تساعد ميزة تشفير البيانات الشفافة (TDE) في خادم SQL في تشفير البيانات الحساسة في قاعدة البيانات وحماية المفاتيح المستخدمة لتشفير البيانات بشهادة. هذا يمنع أي شخص دون المفاتيح من استخدام البيانات. تحمي TDE البيانات "غير المستقرة"، أي البيانات وملفات السجل. يوفر القدرة على الامتثال للعديد من القوانين واللوائح والمبادئ التوجيهية الموضوعة في مختلف الصناعات.
SQL Server لديه القدرة على تشفير البيانات أثناء إنشاء نسخة احتياطية. من خلال تحديد خوارزمية التشفير والتشفير (شهادة أو مفتاح غير متماثل) عند إنشاء نسخة احتياطية، يمكن للمرء إنشاء ملف نسخ احتياطي مشفر.
تأكد من عدم تخزين البيانات الحساسة ذات الصلة بواجهة برمجة تطبيقات الويب في تخزين المتصفح
العنوان
التفاصيل
المكون
واجهة API للويب
مرحلة SDL
إنشاء
التقنيات المعمول بها
MVC 5، MVC 6
السمات
موفر الهوية - ADFS، موفر الهوية - معرف Microsoft Entra
المراجع
غير متوفر
الخطوات
في بعض التطبيقات، يتم تخزين الأدوات الحساسة ذات الصلة بمصادقة Web API في التخزين المحلي للمتصفح. على سبيل المثال، عناصر مصادقة Microsoft Entra مثل adal.idtoken، adal.nonce.idtoken، adal.access.token.key، adal.token.keys، adal.state.login، adal.session.state، adal.expiration.key وما إلى ذلك.
كل هذه البيانات الاصطناعية متاحة حتى بعد تسجيل الخروج أو إغلاق المتصفح. إذا تمكن الخصم من الوصول إلى هذه البيانات الاصطناعية، يمكنه/يمكنها إعادة استخدامها للوصول إلى الموارد المحمية (واجهات برمجة التطبيقات). تأكد من عدم تخزين جميع البيانات الاصطناعية الحساسة المتعلقة بواجهة برمجة تطبيقات الويب في تخزين المتصفح. في الحالات التي يكون فيها التخزين من جانب العميل أمراً لا مفر منه (على سبيل المثال، تطبيقات الصفحة الواحدة (SPA) التي تستفيد من تدفقات OpenIdConnect/OAuth الضمنية التي تحتاج إلى تخزين رموز الوصول محلياً)، استخدم خيارات التخزين مع عدم وجود ثبات. على سبيل المثال، تفضل SessionStorage إلى LocalStorage.
مثال
مقتطف JavaScript أدناه هو من مكتبة مصادقة مخصصة تخزن البيانات الاصطناعية المصادقة في التخزين المحلي. يجب تجنب مثل هذه التطبيقات.
ns.AuthHelper.Authenticate = function () {
window.config = {
instance: 'https://login.microsoftonline.com/',
tenant: ns.Configurations.Tenant,
clientId: ns.Configurations.AADApplicationClientID,
postLogoutRedirectUri: window.location.origin,
cacheLocation: 'localStorage', // enable this for Internet Explorer, as sessionStorage does not work for localhost.
};
تشفير البيانات الحساسة المخزنة في Azure Cosmos DB
العنوان
التفاصيل
المكون
Azure Cosmos DB
مرحلة SDL
إنشاء
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تشفير البيانات الحساسة على مستوى التطبيق قبل تخزينها في قاعدة بيانات المستند أو تخزين أي بيانات حساسة في حلول التخزين الأخرى مثل Azure Storage أو Azure SQL
استخدام تشفير قرص Azure لتشفير الأقراص المستخدمة من قبل الأجهزة الظاهرية
يعد تشفير قرص Azure ميزة جديدة في الإصدار الأولي حالياً. تتيح لك هذه الميزة تشفير أقراص نظام التشغيل وأقراص البيانات المستخدمة بواسطة جهاز IaaS الظاهري. على سبيل Windows، يتم تشفير محركات الأقراص باستخدام تقنية تشفير BitLocker المتوافقة مع معايير الصناعة. بالنسبة لنظام التشغيل Linux، يتم تشفير الأقراص باستخدام تقنية DM-Crypt. تم دمج هذا مع Azure Key Vault للسماح لك بالتحكم في مفاتيح تشفير القرص وإدارتها. يدعم حل تشفير قرص Azure سيناريوهات تشفير العملاء الثلاثة التالية:
تمكين التشفير على IaaS VMs الجديدة التي تم إنشاؤها من ملفات VHD المشفرة من قبل العميل ومفاتيح التشفير التي يوفرها العميل والمخزنة في Azure Key Vault.
تمكين التشفير على IaaS VMs الجديدة التي تم إنشاؤها من Azure Marketplace.
قم بتمكين التشفير على أجهزة IaaS الافتراضية التي تعمل بالفعل في Azure.
إدارة البيانات السرية المشفرة في تطبيقات Service Fabric
يمكن أن تكون البيانات السرية أي معلومات حساسة، مثل سلاسل اتصال التخزين أو كلمات المرور أو القيم الأخرى التي لا يجب معالجتها في نص عادي. استخدم Azure Key Vault لإدارة المفاتيح والبيانات السرية في تطبيقات Service Fabri.
تنفيذ نمذجة الأمان واستخدام وحدات/فرق العمل عند الحاجة
العنوان
التفاصيل
المكون
Dynamics CRM
مرحلة SDL
إنشاء
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تنفيذ نمذجة الأمان واستخدام وحدات/فرق العمل عند الحاجة
تقليل الوصول إلى ميزة المشاركة على الكيانات الهامة
العنوان
التفاصيل
المكون
Dynamics CRM
مرحلة SDL
التوزيع
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تقليل الوصول إلى ميزة المشاركة على الكيانات الهامة
تدريب المستخدمين على المخاطر المرتبطة بميزة Dynamics CRM Share وممارسات الأمان الجيدة
العنوان
التفاصيل
المكون
Dynamics CRM
مرحلة SDL
التوزيع
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
تدريب المستخدمين على المخاطر المرتبطة بميزة Dynamics CRM Share وممارسات الأمان الجيدة
تضمين قاعدة معايير التطوير التي تظهر تفاصيل التكوين في إدارة الاستثناءات
العنوان
التفاصيل
المكون
Dynamics CRM
مرحلة SDL
التوزيع
التقنيات المعمول بها
العام
السمات
غير متوفر
المراجع
غير متوفر
الخطوات
قم بتضمين قاعدة معايير التطوير التي تحظر إظهار تفاصيل التكوين في إدارة الاستثناءات خارج التطوير. اختبر هذا كجزء من مراجعات التعليمة البرمجية أو الفحص الدوري.
استخدام تشفير خدمة Azure Storage (SSE) للبيانات الثابتة (معاينة)
يساعدك تشفير خدمة التخزين في Azure (SSE) لـ بيانات ثابتة (عدم تنقلها) على حماية بياناتك وحمايتها للوفاء بالتزاماتك المتعلقة بالأمان والتوافق المؤسسي. باستخدام هذه الميزة، يقوم Azure Storage تلقائياً بتشفير بياناتك قبل الاستمرار في التخزين وفك التشفير قبل الاسترداد. التشفير وفك التشفير وإدارة المفاتيح شفافة تماماً للمستخدمين. ينطبق SSE فقط على حظر النقط الكبيرة، والنقاط الكبيرة للصفحة، والنقاط الإلحاق. لن يتم تشفير الأنواع الأخرى من البيانات، بما في ذلك الجداول وقوائم الانتظار والملفات.
سير عمل التشفير وفك التشفير:
يتيح العميل التشفير على حساب التخزين
عندما يكتب العميل بيانات جديدة (PUT Blob، وPUT Block، وPUT Page، وما إلى ذلك) لتخزين Blob؛ يتم تشفير كل عملية كتابة باستخدام تشفير 256-بت AES، وهو إحدى أقوى شفرات الكتلة المتاحة
عندما يحتاج العميل إلى الوصول إلى البيانات (GET Blob، وما إلى ذلك)، يتم فك تشفير البيانات تلقائياً قبل العودة إلى المستخدم
إذا تم تعطيل التشفير، فلن يتم تشفير عمليات الكتابة الجديدة وتظل البيانات المشفرة الحالية مشفرة حتى يعيد المستخدم كتابتها. أثناء تمكين التشفير، سيتم تشفير عمليات الكتابة إلى وحدة تخزين Blob. لا تتغير حالة البيانات مع قيام المستخدم بالتبديل بين تمكين/تعطيل التشفير لحساب التخزين
يتم تخزين جميع مفاتيح التشفير وتشفيرها وإدارتها بواسطة Microsoft
يرجى ملاحظة أنه في هذا الوقت، تدير Microsoft المفاتيح المستخدمة للتشفير. تنشئ Microsoft المفاتيح في الأصل، وتدير التخزين الآمن للمفاتيح بالإضافة إلى التدوير المنتظم كما هو محدد في نهج Microsoft الداخلية. في المستقبل، سيحصل العملاء على القدرة على إدارة مفاتيح التشفير الخاصة بهم ، وتوفير مسار الترحيل من المفاتيح التي تديرها Microsoft إلى المفاتيح التي يديرها العميل.
استخدام تشفير من جانب العميل لتخزين البيانات الحساسة في Azure Storage
تدعم مكتبة Azure Storage Client Library لحزمة .NET Nuget تشفير البيانات داخل تطبيقات العميل قبل التحميل إلى Azure Storage، وفك تشفير البيانات أثناء التنزيل إلى العميل. تدعم المكتبة أيضًا التكامل مع Azure Key Vault لإدارة مفاتيح حساب التخزين. فيما يلي وصف مختصر لكيفية عمل التشفير من جانب العميل:
يُنشئ Azure Storage Client SDK مفتاح تشفير المحتوى (CEK)، وهو مفتاح متماثل يستخدم لمرة واحدة
يتم تشفير بيانات العميل باستخدام CEK
ثم يتم التفاف CEK (مشفرة) باستخدام مفتاح تشفير المفتاح (KEK). يتم تعريف KEK بواسطة معرّف مفتاح ويمكن أن يكون مفتاح مزدوج غير متماثل أو مفتاح متماثل ويمكن إدارته محليًا أو تخزينه في Azure Key Vault. لم يتمكن عميل وحدة التخزين نفسه من الوصول إلى KEK. إنه يستدعي فقط خوارزمية التفاف المفاتيح التي يوفرها Key Vault. يمكن للعملاء اختيار استخدام موفري مخصصين لتغليف/فك المفتاح إذا رغبوا في ذلك
ثم يتم تحميل البيانات المشفرة إلى خدمة Azure Storage. تحقق من الروابط الموجودة في قسم المراجع للحصول على تفاصيل التنفيذ منخفضة المستوى.
تشفير البيانات الحساسة أو معلومات تحديد الهوية الشخصية المكتوبة في التخزين المحلي للهواتف
إذا كان التطبيق يكتب معلومات حساسة مثل معلومات تحديد الهوية الشخصية للمستخدم (البريد الإلكتروني ورقم الهاتف والاسم الأول واسم المجموعة والتفضيلات وما إلى ذلك) - على نظام ملفات الهاتف المحمول، يجب تشفيرها قبل الكتابة إلى نظام الملفات المحلي. إذا كان التطبيق تطبيقاً خاصاً بالمؤسسات، فاستكشف إمكانية نشر التطبيق باستخدام Windows Intune.
مثال
يمكن تكوين Intune باستخدام نُهج الأمان التالية لحماية البيانات الحساسة:
Require encryption on mobile device
Require encryption on storage cards
Allow screen capture
مثال
إذا لم يكن التطبيق تطبيقاً مؤسسياً، فاستخدم مخزن مفاتيح النظام الأساسي، وسلاسل المفاتيح لتخزين مفاتيح التشفير، باستخدام أي عملية تشفير يمكن إجراؤها على نظام الملفات. يوضح قصاصة برمجية التعليمة البرمجية التالية كيفية الوصول إلى المفتاح من سلسلة المفاتيح باستخدام xamarin:
protected static string EncryptionKey
{
get
{
if (String.IsNullOrEmpty(_Key))
{
var query = new SecRecord(SecKind.GenericPassword);
query.Service = NSBundle.MainBundle.BundleIdentifier;
query.Account = "UniqueID";
NSData uniqueId = SecKeyChain.QueryAsData(query);
if (uniqueId == null)
{
query.ValueData = NSData.FromString(System.Guid.NewGuid().ToString());
var err = SecKeyChain.Add(query);
_Key = query.ValueData.ToString();
}
else
{
_Key = uniqueId.ToString();
}
}
return _Key;
}
}
تعتيم الثنائيات التي تم إنشاؤها قبل التوزيع على المستخدمين النهائيين
يؤدي استخدام UsernameToken مع كلمة مرور نص عادي عبر قناة غير مشفرة إلى كشف كلمة المرور للمهاجمين الذين يمكنهم شم رسائل SOAP. قد يقبل مقدمو الخدمة الذين يستخدمون UsernameToken كلمات المرور المرسلة في نص عادي. يمكن أن يؤدي إرسال كلمات مرور النص العادي عبر قناة غير مشفرة إلى كشف معلومات تسجيل الدخول للمهاجمين الذين يمكنهم شم رسالة SOAP.
لم يتم تحديد أمان النقل أو الرسائل. لا يمكن للتطبيقات التي تنقل الرسائل دون نقل أو أمان الرسائل أن تضمن سلامة الرسائل أو سريتها. عند تعيين ربط أمان WCF على بلا، يتم تعطيل أمان النقل والرسائل.
وضع الأمان يوجد خمسة أوضاع أمان محتملة في جميع عمليات ربط الخدمة:
لا يوجد. يوقف الأمن.
المواصلات. يستخدم أمن النقل للمصادقة المتبادلة وحماية الرسائل.
الرسالة. يستخدم أمان الرسائل للمصادقة المتبادلة وحماية الرسائل.
كلاهما. يسمح لك بتوفير إعدادات النقل والأمان على مستوى الرسائل (فقط MSMQ يدعم هذا).
TransportWithMessageCredential. يتم تمرير معلومات تسجيل الدخول مع الرسالة ويتم توفير حماية الرسائل ومصادقة الخادم بواسطة طبقة النقل.
TransportCredentialOnly. يتم تمرير بيانات اعتماد العميل مع طبقة النقل ولا يتم تطبيق حماية الرسائل. استخدم أمان النقل والرسائل لحماية سلامة الرسائل وسريتها. يخبر التكوين أدناه الخدمة باستخدام أمان النقل مع بيانات اعتماد الرسالة.