معهد ماساتشوستس للتكنولوجيا بالطبع "أمن أنظمة الكمبيوتر". محاضرة 21: تتبع البيانات ، الجزء 1

معهد ماساتشوستس للتكنولوجيا. دورة محاضرة # 6.858. "أمن أنظمة الكمبيوتر." نيكولاي زيلدوفيتش ، جيمس ميكينز. 2014 سنة


أمان أنظمة الكمبيوتر هو دورة حول تطوير وتنفيذ أنظمة الكمبيوتر الآمنة. تغطي المحاضرات نماذج التهديد والهجمات التي تهدد الأمن وتقنيات الأمان القائمة على العمل العلمي الحديث. تشمل الموضوعات أمان نظام التشغيل (OS) ، والميزات ، وإدارة تدفق المعلومات ، وأمن اللغات ، وبروتوكولات الشبكة ، وأمن الأجهزة ، وأمن تطبيق الويب.

المحاضرة 1: "مقدمة: نماذج التهديد" الجزء 1 / الجزء 2 / الجزء 3
محاضرة 2: "السيطرة على هجمات القراصنة" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 3: "تجاوزات المخزن المؤقت: المآثر والحماية" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 4: "الفصل بين الامتيازات" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 5: "من أين تأتي أنظمة الأمن؟" الجزء 1 / الجزء 2
المحاضرة 6: "الفرص" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 7: "صندوق حماية العميل الأصلي" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 8: "نموذج أمان الشبكة" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 9: "أمان تطبيق الويب" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 10: "الإعدام الرمزي" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 11: "أور / لغة برمجة الويب" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 12: الجزء 1 من أمان الشبكة / الجزء 2 / الجزء 3
المحاضرة 13: "بروتوكولات الشبكة" الجزء 1 / الجزء 2 / الجزء 3
محاضرة 14: "SSL و HTTPS" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 15: "البرامج الطبية" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 16: "هجمات القناة الجانبية" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 17: "مصادقة المستخدم" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 18: "تصفح الإنترنت الخاص" الجزء 1 / الجزء 2 / الجزء 3
محاضرة 19: "شبكات مجهولة" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 20: "أمن الهاتف المحمول" الجزء 1 / الجزء 2 / الجزء 3
محاضرة 21: "تتبع البيانات" الجزء 1 / الجزء 2 / الجزء 3

جيمس ميكينز: عظيم ، لنبدأ. شكرا لحضوركم المحاضرة في هذا اليوم الخاص قبل عيد الشكر. أنا سعيد يا شباب لأنك مخلص للغاية لأمن الكمبيوتر وأنا متأكد من أنك ستكون في الطلب في سوق العمل. لا تتردد في الإشارة إلي كمصدر للتوصيات. اليوم سنتحدث عن تتبع عدوى تتبع Taint ، على وجه الخصوص ، عن نظام يسمى TaintDroid ، والذي يوفر هذا النوع من تحليل تدفق المعلومات في سياق الهواتف الذكية التي تعمل بنظام Android.



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

بمعنى عالمي ، تقدم مقالة حول TaintDroid مثل هذا الحل: مراقبة البيانات السرية أثناء مرورها عبر النظام ، وإيقافها بشكل أساسي قبل إرسالها عبر الشبكة. بمعنى آخر ، يجب أن نمنع إمكانية تمرير البيانات كوسيطة لمكالمات نظام الشبكة. على ما يبدو ، إذا استطعنا القيام بذلك ، يمكننا إيقاف التسرب بشكل صحيح في الوقت الذي يبدأ فيه حدوثه.

قد تتساءل لماذا لا تكفي أذونات Android التقليدية لمنع استخراج هذا النوع من البيانات. السبب هو أن هذه الأذونات لا تملك القواعد الصحيحة لوصف نوع الهجوم الذي نحاول منعه. تتعامل أذونات Android عادة مع أذونات التطبيق لكتابة أو قراءة شيء ما من جهاز معين. ولكن الآن نحن نتحدث عن ما هو على مستوى الدلالي مختلفة. حتى إذا تم منح التطبيق الحق في قراءة المعلومات أو كتابة البيانات إلى جهاز مثل الشبكة ، فقد يكون من الخطر السماح للتطبيق بقراءة أو كتابة بيانات سرية معينة إلى جهاز لديه إذن للتفاعل معه.

بمعنى آخر ، باستخدام سياسات أمان Android التقليدية ، من الصعب التحدث عن أنواع معينة من البيانات. من الأسهل بكثير التحدث عما إذا كان التطبيق يصل إلى الجهاز أم لا. ربما يمكننا حل هذه المشكلة باستخدام حل بديل ، وسأقوم بتعيينها بنجمة.



هذا الحل البديل هو عدم تثبيت التطبيقات التي يمكنها قراءة البيانات الحساسة و / أو الوصول إلى الشبكة. للوهلة الأولى ، يبدو أن المشكلة قد تم حلها. لأنه إذا تعذر على التطبيق تنفيذ هذين الأمرين في نفس الوقت ، فلن يكون بإمكانه الوصول إلى البيانات الحساسة ، أو سيكون قادرًا على قراءتها ، لكنه لن يكون قادرًا على إرسالها عبر الشبكة. ما رأيك هو الصيد؟

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

إذا قلنا فقط أننا سنمنع هذا النوع من النشاط ، فسنحظر فعلًا عمل العديد من التطبيقات على الهاتف ، والتي ربما لا يرغب المستخدمون في ذلك.
هناك مشكلة أخرى هنا - حتى لو قمنا بتنفيذ هذا الحل ، فلن يمنع تسرب البيانات من خلال مجموعة من الآليات المختلفة لقنوات الجهات الخارجية. على سبيل المثال ، في المحاضرات السابقة ، اعتبرنا أن ذاكرة التخزين المؤقت للمتصفح ، على سبيل المثال ، يمكن أن تسهم في تسرب المعلومات عن مستخدم يزور موقعًا معينًا. لذلك ، حتى مع تطبيق سياسة الأمان هذه ، لن نتمكن من التحكم في جميع قنوات الجهات الخارجية. بعد قليل سنتحدث عن قنوات الجهات الخارجية.

لن يوقف الحل المقترح تواطؤ التطبيقات عندما يعمل تطبيقان معًا لكسر نظام الأمان. على سبيل المثال ، ماذا لو لم يكن لدى تطبيق ما وصول إلى شبكة ، لكن يمكنه الاتصال بالتطبيق الثاني الذي لديه؟ بعد كل شيء ، من الممكن أن يستخدم التطبيق الأول آليات IPC Android لنقل البيانات السرية إلى تطبيق لديه أذونات شبكة ، ويمكن لهذا التطبيق الثاني تحميل هذه المعلومات إلى الخادم. لكن حتى لو لم تكن التطبيقات متواطئة ، فقد يكون هناك بعض الحيل عندما يستطيع أحد التطبيقات فرض تطبيقات أخرى على إعطاء بيانات حساسة عن طريق الخطأ.



من المحتمل أن يكون هناك نوع من الخلل في برنامج البريد الإلكتروني نظرًا لأنه يستقبل الكثير من الرسائل العشوائية من المكونات الأخرى للنظام. بعد ذلك ، يمكننا إنشاء هدف خاص لـ Intent لخداع برنامج البريد الإلكتروني ، وسوف يجبر تطبيق Gmail على إرسال شيء مهم عبر البريد الإلكتروني خارج الهاتف. لذلك هذا الحل البديل لا يعمل بشكل جيد بما فيه الكفاية.

لذلك ، نحن قلقون للغاية من أن البيانات السرية تغادر الهاتف. ضع في اعتبارك ما تفعله التطبيقات الضارة في Android من الناحية العملية. هل هناك أي هجمات في العالم الحقيقي يمكن الوقاية منها عن طريق تتبع إصابات تتبع الشوائب؟ الجواب نعم. أصبحت البرامج الضارة مشكلة متزايدة بالنسبة للهواتف المحمولة. أول شيء يمكن أن تفعله التطبيقات الضارة هو استخدام موقعك أو IMEI للإعلان عن الخدمات أو فرضها.

يمكن أن تحدد البرامج الضارة موقعك الفعلي. على سبيل المثال ، أنت لست بعيدًا عن الحرم الجامعي لمعهد ماساتشوستس للتكنولوجيا ، لذلك أنت طالب جائع ، فلماذا لا تزور العشاء الخاص بي ، والذي يقع بالقرب منك؟

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

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

ربما يكون أسوأ شيء يمكن أن تفعله البرامج الضارة ، على الأقل بالنسبة لي ، هو تحويل هاتفك إلى روبوت.



هذه ، بالطبع ، مشكلة لم يواجهها آباؤنا. الهواتف الحديثة قوية للغاية بحيث يمكن استخدامها لإرسال البريد العشوائي. هناك العديد من البرامج الضارة التي تستهدف بعض بيئات الشركات التي تقوم بذلك. بمجرد الدخول إلى هاتفك ، يبدأون في استخدامه كجزء من شبكة البريد العشوائي.

الطالب: هل هي برامج ضارة تهدف بشكل خاص إلى اختراق نظام التشغيل أندرويد ، أم أنها مجرد تطبيق نموذجي؟ إذا كان هذا تطبيقًا نموذجيًا ، فربما يمكننا تأمينه بالأذونات؟

الأستاذ: هذا سؤال جيد للغاية. هناك كلا النوعين من البرامج الضارة. كما اتضح ، من السهل جدًا حث المستخدمين على النقر فوق أزرار مختلفة. سأقدم لك مثالاً لا يتعلق بالبرنامج الضار بقدر ما يتعلق بسلوك الناس المهمل.
هناك لعبة شائعة Angry Birds ، تذهب إلى App Store وابحث عنها في شريط البحث عن التطبيق. الأول في نتائج البحث سوف تحصل على لعبة Angry Birds الأصلية ، وقد يحتوي السطر الثاني على تطبيق Angry Birdss ، مع وجود ثانيتين في النهاية. ويفضل الكثير من الناس تنزيل هذا التطبيق الثاني ، لأنه قد يكلف أقل من الإصدار الأصلي. علاوة على ذلك ، أثناء التثبيت ، سيكتب هذا التطبيق أنه بعد التثبيت ، سوف تسمح له بالقيام بذلك وما إلى ذلك ، وستقول: "بالطبع ، لا مشكلة!" بعد هذا "الازدهار" - وأنت على ربط المتسلل!

لكن أنت محق تمامًا عندما تفترض أنه إذا كان نموذج أمان Android صحيحًا ، فسوف يعتمد تثبيت البرامج الضارة تمامًا على غباء أو سذاجة المستخدمين الذين يوفرون له إمكانية الوصول إلى الشبكة ، على سبيل المثال ، عندما لا يكون بإمكان لعبة "Tic Tac Toe" الوصول إلى الشبكة.

وبالتالي ، يمكنك تحويل هاتفك إلى روبوت. هذا أمر فظيع لعدة أسباب ، ليس فقط لأن هاتفك يرسل رسائل غير مرغوب فيها ، ولكن أيضًا لأنك ربما تدفع ثمن بيانات كل تلك الرسائل التي يتم إرسالها من هاتفك. بالإضافة إلى ذلك ، تنفد البطارية بسرعة ، لأن هاتفك مشغول باستمرار في إرسال الرسائل غير المرغوب فيها.

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



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

وبالتالي ، لا يعد تتبع Taint لوحده حلاً كافيًا لمنع أي موقف يهدد بالاستيلاء على هاتفك.

دعونا نرى كيف يعمل TaintDroid. كما ذكرت ، ستقوم TaintDroid بتتبع جميع معلوماتك الحساسة أثناء انتشارها عبر النظام. لذلك ، TaintDroid يميز بين ما يسمى "مصادر المعلومات" مصادر المعلومات و "المصارف المعلومات" المصارف المعلومات. مصادر المعلومات تولد بيانات حساسة. عادة ما تكون هذه أجهزة استشعار - GPS ، التسارع وما شابه ذلك. يمكن أن تكون قائمة جهات الاتصال الخاصة بك ، IMEI ، كل شيء يمكنه توصيلك ، مستخدم معين ، بهاتفك الحقيقي. هذه هي الأجهزة التي تنشئ معلومات مصابة ، تسمى مصادر البيانات المصابة - مصدر Taint.

في هذه الحالة ، تعتبر مصارف المعلومات أماكن يجب ألا تتسرب منها البيانات المصابة. في حالة TaintDroid ، فإن الامتصاص الرئيسي هو الشبكة. سنتحدث لاحقًا عن حقيقة أنه يمكنك تخيل المزيد من الأماكن التي تتسرب فيها المعلومات ، لكن الشبكة تحتل مكانًا خاصًا في TaintDroid. قد يكون هناك مصارف معلومات أخرى في نظام متعدد الأغراض أكثر من الهاتف ، ولكن تم تصميم TaintDroid لمنع تسرب الشبكة.

يستخدم TaintDroid bitvector 32 بت لتمثيل عدوى Taint. هذا يعني أنه لا يمكن أن يكون لديك أكثر من 32 مصدرًا منفصلاً للعدوى.



لذلك ، سيكون لكل معلومات سرية وحدة موجودة في موضع معين إذا كانت مصابة بأي مصدر محدد للعدوى. على سبيل المثال ، تم الحصول عليها من بيانات GPS ، ومن شيء ما من قائمة جهات الاتصال الخاصة بك ، وهكذا دواليك.

ومن المثير للاهتمام ، 32 مصدرا للعدوى في الواقع ليست كثيرة. والسؤال هو ما إذا كان هذا الرقم كبيرًا بما يكفي لهذا النظام المحدد وما إذا كان كبيرًا بما يكفي للأنظمة العامة التي تعاني من تسرب المعلومات. في حالة TaintDroid الخاصة ، هناك 32 مصدرا للعدوى هي كمية معقولة ، لأن هذه المشكلة تتعلق بتدفق محدود من المعلومات.

النظر في جميع أجهزة الاستشعار الموجودة في هاتفك ، وقواعد البيانات السرية وما شابه ذلك ، 32 يبدو أن المبلغ المناسب من حيث تخزين هذه الأعلام المصابة. كما سنرى من تنفيذ هذا النظام ، 32 هو في الواقع رقم مناسب للغاية ، لأنه يتوافق مع 32 بت ، وهو عدد صحيح يمكنك من خلاله بناء هذه الأعلام بشكل فعال.

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

بمعنى تقريبي ، عندما تنظر إلى كيفية تدفق العدوى عبر نظام ما ، بشكل عام ، تحدث من اليمين إلى اليسار. سأقدم مثال بسيط. إذا كان لديك نوع من المشغل ، على سبيل المثال ، فإنك تعلن عن متغير عدد صحيح يساوي قيمة خط العرض لموقعك: Int lat = gps.getLat () ، ثم يقوم الشيء الموجود على يمين علامة المساواة بإنشاء قيمة تحتوي على نوع من الارتباط مع العدوى لها.



لذلك سيتم تعيين علم محدد ، والذي يقول: "مهلا ، هذه القيمة التي أعود إليها تأتي من مصدر سري"! لذلك ستأتي العدوى من هنا ، على الجانب الأيمن ، وتذهب هنا ، إلى اليسار ، لتصيب هذا الجزء من اللات. هذا هو الشكل الذي يظهر في أعين المطور الذي يكتب الكود المصدري. ومع ذلك ، يستخدم الجهاز الظاهري Dalvik تنسيق السجل الصغير لإنشاء البرامج ، وهذا هو في الواقع كيف يتم تنفيذ دلالات الألفاظ في الواقع.

يوجد في جدول أحد مقالات المحاضرة قائمة كبيرة من الأوامر مع وصف لكيفية تأثير العدوى على هذه الأنواع من الأوامر. على سبيل المثال ، يمكنك أن تتخيل أن لديك عملية نقل تشير إلى الوجهة dst و srs المصدر. في جهاز Dalvik الظاهري ، على محرك الحوسبة المجردة ، يمكن اعتبار ذلك سجلات. كما قلت ، تنتقل العدوى من الجانب الأيمن إلى الجانب الأيسر ، لذلك في هذه الحالة ، عندما ينفذ مترجم Dalvik الإرشادات من الجانب الأيمن ، فإنه يأخذ في الاعتبار التسمية الملوثة لمعلمة sourse ويعينها إلى المعلمة dst.

افترض أن لدينا تعليمة أخرى في شكل عملية ثنائية للعمليات الثنائية التي تقوم بشيء مثل الإضافة. لدينا وجهة واحدة التوقيت الصيفي ومصدران: srs0 و srs1. في هذه الحالة ، عندما يقوم مترجم Dalvik بمعالجة هذه التعليمات ، فإنه يأخذ ملوثًا من كلا المصدرين ، ويجمعهما ، ثم يعين هذا الاتحاد إلى الوجهة dst.



انها بسيطة جدا. يُظهر الجدول الأنواع المختلفة للتعليمات التي ستراها ، ولكن للتقريب الأول ، هذه هي الطرق الأكثر شيوعًا لنشر العدوى في النظام. دعونا نلقي نظرة على بعض الحالات المثيرة للاهتمام بشكل خاص المذكورة في المقالة. إحدى هذه الحالات الخاصة هي المصفوفات.

لنفترض أن لديك أمرًا char c يعيّن قيمة معينة C. في الوقت نفسه ، يعلن البرنامج عن بعض الصفوف العليا [] التي تحتوي على أحرف كبيرة "A" و "B" و "C": char upper [] = ["A "،" ب "،" ج "]

هناك شيء شائع للغاية في الكود وهو فهرسة في صفيف مثل هذا ، باستخدام C مباشرة ، لأنه ، كما نعلم جميعًا ، يتعلم Kernigan و Ritchie أن معظم الأحرف هي أعداد صحيحة. لذلك يمكنك أن تتخيل أن هناك بعض رموز كود UpperC تشير إلى أن الإصدارات الكبيرة من هذه الأحرف "A" ، "B" ، "C" تتوافق مع المؤشرات المحددة في هذا الجدول: char upperC = upper [C]



هذا يثير مسألة ما هي العدوى التي يجب أن تصاب بالمرض في هذه الحالة. يبدو أن كل شيء كان بسيطًا في الحالات السابقة ، ولكن في هذه الحالة ، لدينا الكثير من الأشياء التي تحدث. لدينا مجموعة ["A" ، "B" ، "C"] ، يمكن أن يكون لها نوع من العدوى ولدينا هذا الرمز C ، والذي يمكن أن يكون له أيضًا نوع العدوى الخاص به. Dalvik , binary-op. upperC [C] .

, upperC - upper [ ]. - [C]. , , upperC , .

: , taint move op binary op?

: move op. , srs… -, . , , , , , taint. , , .
, srs , , . srs : « , 2 , srs». .

– , taint. , srs0 srs1, taint, :

\

dst :

\

, , 32- , , . , . taints, , .
, , , binary-op. upperC [C] [«», «», «»]. TaintDroid , taint . , . , 32- , «» , .

, taint. — , , ? , taint , , . , , , , . - , .

, . , , - , , . , , – , , . .

, – , , Native methods, - . Native- . , Dalvik , system.arraycopy(), - , C C++. Native method, .

- JNI. JNI, Java Native Interface — C C++ Java. , Java , Java. x86, ARM , .

- taint , Dalvik. Java-, C C++ . , Native-, TaintDroid , Java.

\

, « », , taint. , – . - , . , Dalvik , system.arraycopy(), , taint. arraycopy() : « , , , , ».

? , , . , , Dalvik , , , .

- JNI , . , , , C C++, .

, , . , - , , , . .

26:25

MIT « ». 21: « », 2


.

, . ? ? , 30% entry-level , : VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps $20 ? ( RAID1 RAID10, 24 40GB DDR4).

VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps , .

Dell R730xd 2 ? لدينا فقط 2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD بسرعة 1 جيجابت في الثانية 100 TV من 249 دولارًا في هولندا والولايات المتحدة الأمريكية!اقرأ عن كيفية بناء البنية التحتية فئة باستخدام خوادم V4 R730xd E5-2650d تكلف 9000 يورو عن بنس واحد؟

Source: https://habr.com/ru/post/ar433376/


All Articles