الإطار الأمني: أمان الاتصالات | التخفيفات
المنتج /الخدمة | مقال |
---|---|
مركز الحدث Azure | |
Dynamics CRM | |
Azure Data Factory | |
Identity Server | |
تطبيق ويب | |
قاعدة بيانات | |
تخزين Azure | |
عميل الجوال | |
WCF | |
واجهة برمجة تطبيقات الويب | |
ذاكرة التخزين المؤقت Azure ل Redis | |
بوابة حقل IoT | |
بوابة سحابة IoT |
الاتصال الآمن بمركز الأحداث باستخدام SSL/TLS
العنوان | التفاصيل |
---|---|
المكون | Azure Event Hub |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | نظرة عامة على نموذج الأمان ومصادقة مراكز الأحداث |
الخطوات | تأمين اتصالات AMQP أو HTTP إلى Event Hub باستخدام SSL / TLS |
تحقق من امتيازات حساب الخدمة وتحقق من أن الخدمات المخصصة أو صفحات ASP.NET تحترم أمان CRM
العنوان | التفاصيل |
---|---|
المكون | Dynamics CRM |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | غير متاح |
الخطوات | تحقق من امتيازات حساب الخدمة وتحقق من أن الخدمات المخصصة أو صفحات ASP.NET تحترم أمان CRM |
استخدام بوابة إدارة البيانات في أثناء توصيل SQL Server المحلية بـ Azure Data Factory
العنوان | التفاصيل |
---|---|
المكون | Azure Data Factory |
مرحلة SDL | التوزيع |
التقنيات المعمول بها | العام |
السمات | أنواع الخدمات المرتبطة - Azure والمحلي |
المراجع | نقل البيانات بين المحلي وAzure Data Factory |
الخطوات | أداة بوابة إدارة البيانات (DMG) مطلوبة للاتصال بمصادر البيانات المحمية خلف شبكة corpnet أو جدار الحماية.
|
تأكد من أن نسبة استخدام الشبكة بأكملها إلى تمثل Identity Server عبر اتصال HTTPS
العنوان | التفاصيل |
---|---|
المكون | خادم الهوية |
مرحلة SDL | التوزيع |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | IdentityServer3 - المفاتيح والتوقيعات والتشفير، IdentityServer3 - النشر |
الخطوات | بشكل افتراضي، يتطلب IdentityServer أن تأتي جميع الاتصالات الواردة عبر HTTPS. من الضروري تمامًا أن يتم الاتصال باستخدام IdentityServer عبر وسائل النقل الآمنة فحسب. هناك بعض سيناريوهات التوزيع مثل إلغاء تحميل TLS حتى يمكن تخفيف هذا المطلب. راجع صفحة نشر Identity Server في المراجع لمزيد من المعلومات. |
تحقق من شهادات X.509 المستخدمة لمصادقة اتصالات SSL وTLS وDTLS
العنوان | التفاصيل |
---|---|
المكون | تطبيق ويب |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | غير متاح |
الخطوات | يجب أن تتحقق التطبيقات التي تستخدم SSL أو TLS أو DTLS بشكل كامل من شهادات X.509 للكيانات التي تتصل بها. يتضمن ذلك التحقق من الشهادات من أجل:
|
تكوين شهادة TLS/SSL للمجال المخصص في Azure App Service
العنوان | التفاصيل |
---|---|
المكون | تطبيق ويب |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | EnvironmentType - Azure |
المراجع | تمكين HTTPS لتطبيق في Azure App Service |
الخطوات | بشكل افتراضي، يقوم Azure بالفعل بتمكين HTTPS لكل تطبيق مع شهادة حرف بدل لمجال *.azurewebsites.net. مع ذلك، مثل جميع مجالات أحرف البدل، فإنه ليس آمنًا مثل استخدام مجال مخصص مع الشهادة الخاصة الرجوع. يوصى بتمكين TLS للمجال المخصص الذي سيتم الوصول إلى التطبيق المنشور من خلاله |
فرض جميع نسبة استخدام الشبكة إلى Azure App Service عبر اتصال HTTPS
العنوان | التفاصيل |
---|---|
المكون | تطبيق ويب |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | EnvironmentType - Azure |
المراجع | فرض HTTPS على Azure App Service |
الخطوات | على الرغم من أن Azure يقوم بالفعل بتمكين HTTPS لخدمات تطبيقات Azure مع شهادة حرف بدل للمجال *.azurewebsites.net، فإنه لا يفرض HTTPS. لا يزال بإمكان الزائرين الوصول إلى التطبيق باستخدام HTTP، ما قد يعرض أمان التطبيق للخطر، ومن ثم يجب فرض HTTPS بشكل صريح. يجب أن تستخدم تطبيقات ASP.NET MVC عامل التصفية RequireHttps الذي يفرض إعادة إرسال طلب HTTP غير آمن عبر HTTPS. بدلاً من ذلك، يمكن استخدام وحدة إعادة كتابة عنوان URL المضمنة مع Azure App Service لفرض HTTPS. تمكن وحدة إعادة كتابة URL المطورين من تحديد القواعد التي يتم تطبيقها على الطلبات الواردة قبل تسليم الطلبات إلى التطبيق الخاص بك. يتم تعريف قواعد إعادة كتابة URL في ملف web.config مخزن في جذر التطبيق |
مثال
يحتوي المثال التالي على قاعدة إعادة كتابة URL الرئيسة التي تفرض على نسبة استخدام الشبكة بأكملها الواردة استخدام HTTPS
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Force HTTPS" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
تعمل هذه القاعدة من خلال عرض رمز حالة HTTP لـ 301 (إعادة توجيه دائمة) عندما يطلب المستخدم صفحة باستخدام HTTP. يعيد 301 توجيه الطلب إلى نفس عنوان URL الذي طلبه الزائر، ولكنه يستبدل جزء HTTP من الطلب بـ HTTPS. على سبيل المثال، HTTP://contoso.com
ستتم إعادة توجيهك إلى HTTPS://contoso.com
.
تمكين أمان النقل الصارم (HSTS)
العنوان | التفاصيل |
---|---|
المكون | تطبيق ويب |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | ورقة المعلومات المرجعية الأمنية الصارمة لأمان النقل لـ OWASP HTTP |
الخطوات | HTTP Strict Transport Security (HSTS) هو تحسين أمان اختياري يتم تحديده بواسطة تطبيق ويب من خلال استخدام عنوان استجابة خاص. بمجرد أن يتلقى المستعرض المدعوم هذا العنوان، سيمنع المستعرض إرسال أي اتصالات عبر HTTP إلى المجال المحدد، وسيرسل بدلاً من ذلك جميع الاتصالات عبر HTTPS. كما أنه يمنع نقر HTTPS عبر المطالبات على المتصفحات. لتنفيذ HSTS، يجب تكوين عنوان الاستجابة التالي لموقع ويب عالميًا، إما في التعليمات البرمجية أو في التكوين. أمن النقل الصارم: الحد الأقصى للعمر = 300 ؛ includeSubDomains HSTS يعالج التهديدات التالية:
|
تأكد من تشفير اتصال خادم SQL والتحقق من صحة الشهادة
العنوان | التفاصيل |
---|---|
المكون | قاعدة بيانات |
مرحلة SDL | بناء |
التقنيات المعمول بها | SQL Azure |
السمات | إصدار SQL - الإصدار 12 |
المراجع | أفضل الممارسات حول كتابة سلاسل الاتصال الآمنة لقاعدة بيانات SQL |
الخطوات | يتم تشفير جميع الاتصالات بين قاعدة بيانات SQL وتطبيق العميل باستخدام بروتوكول أمان طبقة النقل (TLS)، المعروف سابقًا باسم طبقة مآخذ التوصيل الآمنة (SSL)، في جميع الأوقات. لا تدعم قاعدة بيانات SQL الاتصالات غير المشفرة. للتحقق من صحة الشهادات باستخدام رمز التطبيق أو الأدوات، اطلب صراحةً اتصالاً مشفرًا ولا تثق في شهادات الخادم. إذا لم تطلب التعليمات البرمجية للتطبيق أو الأدوات اتصالاً مشفرًا، فستظل تتلقى اتصالات مشفرة مع ذلك، قد لا يتحققون من صحة شهادات الخادم ومن ثم سيكون عرضة لهجمات "الرجل في الوسط". للتحقق من صحة الشهادات باستخدام التعليمات البرمجية للتطبيق ADO.NET، قم بتعيين |
فرض الاتصال المشفر على خادم SQL
العنوان | التفاصيل |
---|---|
المكون | قاعدة بيانات |
مرحلة SDL | بناء |
التقنيات المعمول بها | OnPrem |
السمات | إصدار SQL - MsSQL2016، إصدار SQL - MsSQL2012، إصدار SQL - MsSQL2014 |
المراجع | تمكين الاتصالات المشفرة إلى محرك قاعدة البيانات |
الخطوات | يؤدي تمكين تشفير TLS إلى زيادة أمان البيانات المنقولة عبر الشبكات بين مثيلات SQL Server والتطبيقات. |
تأكد من أن الاتصال بـ Azure Storage عبر HTTPS
العنوان | التفاصيل |
---|---|
المكون | تخزين Azure |
مرحلة SDL | التوزيع |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | تشفير Transport-Level تخزين Azure - باستخدام HTTPS |
الخطوات | لضمان أمان بيانات Azure Storage في أثناء نقلها، استخدم دائمًا بروتوكول HTTPS عند استدعاء واجهات برمجة تطبيقات REST أو الوصول إلى الكائنات الموجودة في التخزين. أيضًا، تتضمن توقيعات الوصول المشترك، التي يمكن استخدامها لتفويض الوصول إلى كائنات Azure Storage، خيارًا لتحديد أنه يمكن استخدام بروتوكول HTTPS فحسب عند استخدام توقيعات الوصول المشترك، مما يضمن أن أي شخص يرسل ارتباطات مع رموز SAS المميزة سيستخدم البروتوكول المناسب. |
التحقق من صحة تجزئة MD5 بعد تنزيل كائن ثنائي كبير الحجم إذا تعذر تمكين HTTPS
العنوان | التفاصيل |
---|---|
المكون | تخزين Azure |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | StorageType - Blob |
المراجع | نظرة عامة على Windows Azure Blob MD5 |
الخطوات | توفر خدمة Windows Azure Blob آليات لضمان تكامل البيانات في كل من طبقات التطبيق والنقل. إذا كنت بحاجة لأي سبب من الأسباب إلى استخدام HTTP بدلاً من HTTPS وكنت تعمل مع الكائنات الثنائية كبيرة الحجم للكتلة، يمكنك استخدام التحقق من MD5 للمساعدة في التحقق من تكامل الكائنات الثنائية كبيرة الحجم التي يتم نقلها سيساعد هذا في الحماية من أخطاء طبقة الشبكة/النقل، لكن ليس بالضرورة مع الهجمات الوسيطة. إذا كان يمكنك استخدام HTTPS، الذي يوفر أمانًا على مستوى النقل، فإن استخدام التحقق من MD5 متكرر وغير ضروري. |
استخدام عميل متوافق مع SMB 3 لضمان تشفير البيانات أثناء النقل إلى مشاركات ملفات Azure
العنوان | التفاصيل |
---|---|
المكون | عميل الجوال |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | StorageType - ملف |
المراجع | Azure Files، دعم Azure Files SMB لعملاء Windows |
الخطوات | تدعم ملفات Azure HTTPS عند استخدام واجهة برمجة تطبيقات REST، ولكنها تستخدم بشكل أكثر شيوعًا كمشاركة ملف SMB مرفقة بجهاز ظاهري. لا يدعم SMB 2.1 التشفير، لذلك لا يُسمح بالاتصالات إلا داخل نفس المنطقة في Azure. ومع ذلك، يدعم SMB 3.x التشفير، ويمكن استخدامه مع Windows Server 2012 R2، Windows 8، Windows 8.1، Windows 10، ما يسمح بالوصول عبر المناطق وحتى الوصول على سطح المكتب. |
تنفيذ تثبيت الشهادة
العنوان | التفاصيل |
---|---|
المكون | تخزين Azure |
مرحلة SDL | بناء |
التقنيات المعمول بها | عام، Windows Phone |
السمات | غير متاح |
المراجع | تثبيت الشهادة والمفتاح العام |
الخطوات | تدافع شهادة التثبيت ضد هجمات Man-In-The-Middle (MITM). التثبيت هو عملية إقران مضيف بشهادة X509 المتوقعة أو المفتاح العام. بمجرد معرفة شهادة أو مفتاح عام أو رؤيته لمضيف، يتم إقران الشهادة أو المفتاح العام أو "تثبيته" بالمضيف. ومن ثم، عندما يحاول الخصم القيام بهجوم TLS MITM، في أثناء تأكيد اتصال TLS سيكون المفتاح من خادم المهاجم مختلفًا عن مفتاح الشهادة المثبتة، وسيتم تجاهل الطلب، ومن ثم يمكن منع تثبيت شهادة MITM عن طريق تنفيذ مفوض ServicePointManager |
مثال
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography;
namespace CertificatePinningExample
{
class CertificatePinningExample
{
/* Note: In this example, we're hardcoding the certificate's public key and algorithm for
demonstration purposes. In a real-world application, this should be stored in a secure
configuration area that can be updated as needed. */
private static readonly string PINNED_ALGORITHM = "RSA";
private static readonly string PINNED_PUBLIC_KEY = "3082010A0282010100B0E75B7CBE56D31658EF79B3A1" +
"294D506A88DFCDD603F6EF15E7F5BCBDF32291EC50B2B82BA158E905FE6A83EE044A48258B07FAC3D6356AF09B2" +
"3EDAB15D00507B70DB08DB9A20C7D1201417B3071A346D663A241061C151B6EC5B5B4ECCCDCDBEA24F051962809" +
"FEC499BF2D093C06E3BDA7D0BB83CDC1C2C6660B8ECB2EA30A685ADE2DC83C88314010FFC7F4F0F895EDDBE5C02" +
"ABF78E50B708E0A0EB984A9AA536BCE61A0C31DB95425C6FEE5A564B158EE7C4F0693C439AE010EF83CA8155750" +
"09B17537C29F86071E5DD8CA50EBD8A409494F479B07574D83EDCE6F68A8F7D40447471D05BC3F5EAD7862FA748" +
"EA3C92A60A128344B1CEF7A0B0D94E50203010001";
public static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://azure.microsoft.com");
request.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
if (certificate == null || sslPolicyErrors != SslPolicyErrors.None)
{
// Error getting certificate or the certificate failed basic validation
return false;
}
var targetKeyAlgorithm = new Oid(certificate.GetKeyAlgorithm()).FriendlyName;
var targetPublicKey = certificate.GetPublicKeyString();
if (targetKeyAlgorithm == PINNED_ALGORITHM &&
targetPublicKey == PINNED_PUBLIC_KEY)
{
// Success, the certificate matches the pinned value.
return true;
}
// Reject, either the key or the algorithm does not match the expected value.
return false;
};
try
{
var response = (HttpWebResponse)request.GetResponse();
Console.WriteLine($"Success, HTTP status code: {response.StatusCode}");
}
catch(Exception ex)
{
Console.WriteLine($"Failure, {ex.Message}");
}
Console.WriteLine("Press any key to end.");
Console.ReadKey();
}
}
}
تمكين HTTPS - قناة النقل الآمن
العنوان | التفاصيل |
---|---|
المكون | WCF |
مرحلة SDL | بناء |
التقنيات المعمول بها | NET Framework 3 |
السمات | غير متاح |
المراجع | MSDN، Fortify Kingdom |
الخطوات | يجب أن يضمن تكوين التطبيق استخدام HTTPS لجميع عمليات الوصول إلى المعلومات الحساسة.
من وجهة نظر عملية، لا يتعقب الأشخاص المسؤولون عن تأمين الشبكة دائمًا المتطلبات الأمنية للتطبيق في أثناء تطورها. |
WCF: تعيين مستوى حماية أمان الرسائل إلى EncryptAndSign
العنوان | التفاصيل |
---|---|
المكون | WCF |
مرحلة SDL | بناء |
التقنيات المعمول بها | .NET Framework 3 |
السمات | غير متاح |
المراجع | Msdn |
الخطوات |
ضع في اعتبارك إيقاف تشغيل التشفير وتوقيع رسالتك فحسب عندما لا تحتاج سوى إلى التحقق من سلامة المعلومات دون مخاوف بشأن السرية. قد يكون هذا مفيدًا للعمليات أو عقود الخدمة التي تحتاج فيها إلى التحقق من صحة المرسل الأصلي ولكن لا يتم إرسال أي بيانات حساسة. عند تقليل مستوى الحماية، كن حذرًا من أن الرسالة لا تحتوي على أي بيانات شخصية. |
مثال
يتم عرض تكوين الخدمة والعملية لتوقيع الرسالة في الأمثلة التالية فحسب. مثال على عقد الخدمة لـ ProtectionLevel.Sign
: فيما يلي مثال على استخدام ProtectionLevel.Sign على مستوى عقد الخدمة:
[ServiceContract(Protection Level=ProtectionLevel.Sign]
public interface IService
{
string GetData(int value);
}
مثال
مثال على عقد العملية لـ ProtectionLevel.Sign
(لعنصر التحكم متعدد المستويات): فيما يلي مثال على استخدام ProtectionLevel.Sign
على مستوى OperationContract:
[OperationContract(ProtectionLevel=ProtectionLevel.Sign]
string GetData(int value);
WCF: استخدم حسابًا أقل امتيازًا لتشغيل خدمة WCF
العنوان | التفاصيل |
---|---|
المكون | WCF |
مرحلة SDL | بناء |
التقنيات المعمول بها | .NET Framework 3 |
السمات | غير متاح |
المراجع | Msdn |
الخطوات |
إذا كانت خدمتك تحتاج إلى الوصول إلى موارد محددة نيابة عن المتصل الأصلي، فاستخدم انتحال الهوية والتفويض لتدفق هوية المتصل للتحقق من التفويض في نهاية المطاف. في سيناريو التطوير، استخدم حساب خدمة الشبكة المحلية، وهو حساب مضمن خاص له امتيازات مخفضة. في سيناريو الإنتاج، قم بإنشاء حساب خدمة مجال مخصص أقل امتيازًا. |
فرض نسبة استخدام الشبكة بأكملها إلى واجهات برمجة تطبيقات الويب عبر اتصال HTTPS
العنوان | التفاصيل |
---|---|
المكون | واجهة API للويب |
مرحلة SDL | بناء |
التقنيات المعمول بها | MVC5، MVC6 |
السمات | غير متاح |
المراجع | فرض SSL في وحدة تحكم واجهة برمجة تطبيقات الويب |
الخطوات | إذا كان التطبيق يحتوي على كل من HTTPS وربط HTTP، فلا يزال بإمكان العملاء استخدام HTTP للوصول إلى الموقع. لمنع ذلك، استخدم عامل تصفية الإجراء للتأكد من أن طلبات واجهات برمجة التطبيقات المحمية دائما عبر HTTPS. |
مثال
تظهر التعليمات البرمجية التالية عامل تصفية مصادقة واجهة برمجة تطبيقات الويب الذي يتحقق من TLS:
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}
أضف عامل التصفية هذا إلى أي إجراءات واجهة برمجة تطبيقات ويب تتطلب TLS:
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
تأكد من أن الاتصال بـ Azure Cache for Redis عبر TLS
العنوان | التفاصيل |
---|---|
المكون | ذاكرة التخزين المؤقت في Azure لـ Redis |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | دعم Azure Redis TLS |
الخطوات | لا يدعم خادم Redis TLS خارج الصندوق، لكن Azure Cache لـ Redis يدعم ذلك. إذا كنت تتصل بـ Azure Cache for Redis وكان عميلك يدعم TLS، مثل StackExchange.Redis، فاستخدم TLS. افتراضيًا، يتم تعطيل منفذ غير TLS لذاكرة التخزين المؤقت Azure الجديدة لمثيلات Redis. تأكد من عدم تغيير الإعدادات الافتراضية الآمنة ما لم يكن ثمة تبعية على دعم TLS لعملاء redis. |
يُرجى ملاحظة أن Redis مصمم للوصول إليه من قبل عملاء موثوق بهم داخل بيئات موثوق بها. هذا يعني أنه عادةً يكون من غير الجيد عرض مثيل Redis مباشرة على الإنترنت أو، بشكل عام، إلى بيئة يمكن فيها للعملاء غير الموثوق بهم الوصول مباشرة إلى منفذ Redis TCP أو مأخذ توصيل UNIX.
تأمين اتصال الجهاز ببوابة المجال
العنوان | التفاصيل |
---|---|
المكون | بوابة حقل IoT |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | غير متاح |
الخطوات | بالنسبة إلى الأجهزة القائمة على IP، يمكن عادةً تغليف بروتوكول الاتصال في قناة SSL / TLS لحماية البيانات في أثناء النقل. بالنسبة إلى البروتوكولات الأخرى التي لا تدعم SSL/TLS تحقق مما إذا كانت هناك إصدارات آمنة من البروتوكول توفر الأمان في طبقة النقل أو الرسالة. |
تأمين اتصال الجهاز بالبوابة السحابية باستخدام SSL / TLS
العنوان | التفاصيل |
---|---|
المكون | بوابة سحابة IoT |
مرحلة SDL | بناء |
التقنيات المعمول بها | العام |
السمات | غير متاح |
المراجع | اختر بروتوكول الاتصال |
الخطوات | بروتوكولات HTTP/AMQP أو MQTT الآمنة باستخدام SSL/TLS. |