معهد ماساتشوستس للتكنولوجيا بالطبع "أمن أنظمة الكمبيوتر". محاضرة 20: أمن الهاتف المحمول ، الجزء 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

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



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

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

لذلك ، في نواح كثيرة ، يستخدمون بعض الآليات المألوفة التي تتذكرها من Lab 2 ، حيث استخدمت معرفات المستخدم ومجموعات Unix وأشياء أخرى لفصل التطبيقات عن بعضها البعض. ولكن في حالة Android ، لديهم طريقة مختلفة تمامًا في تحديد هوية المستخدم وأذونات الملفات عن نظام Linux النموذجي.

لنبدأ بمناقشة ما هو مستوى التهديد هنا؟ ما يزعج هؤلاء الرجال على الهاتف؟ ما الذي يحدث هنا؟ ما الذي يحاولون حماية أنفسهم منه؟ ما هو نموذج التهديد في جهاز محمول؟



الطالب: التطبيقات التي يمكن أن تكون ضارة؟

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

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



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

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

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

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

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

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



وبالتالي ، هذه هي فكرة منطقية للغاية عن تطبيقات أندرويد. ولكن في الواقع ، كل هذه مجرد فئات Java أو Java code التي كتبها المطور.

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

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



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

الطالب: هل هناك تسمية تعرف "لا يمكن لهذا التطبيق إجراء مكالمة هاتفية" أو "يمكن لهذا التطبيق إرسال رسالة"؟

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

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



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

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

بالطبع ، في الواقع هذا الخط مع قائمة الملصقات أطول بكثير مما وجهته. يوجد مجال على غرار تطبيق Java يحدد الاسم الصغير للتسمية. على سبيل المثال ، يبدو إذن مكالمة DIALPERM الذي أرسمه مثل com.google.android.dialperm. ولكن بشكل تقريبي ، هذه هي الخطوط التي تظهر في الأذونات. لذلك ، إذا كان لديك تطبيقات حسنة النية ، فلن تتعارض مع خطوط الأذونات هذه.

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

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



كمثال مجرد ، يمكنك أن تتخيل أن هذا المكون هو com.android.dialer / Dial - هذه هي الطريقة التي يشار إليها باسم المكون في Android ، وهذا هو نوع من اسم نطاق Java. لذلك ، com.android.dialer هو اسم التطبيق ككل ، والذي تريد إرسال القصد منه ، ومن خلال شرطة مائلة تكتب اسم مكون التطبيق الهدف الذي ترسل إليه هذه الرسالة - / Dial. بهذه الطريقة يمكنك تسمية المكون المحدد الذي يتم توجيه الرسالة إليه. يمثل الإجراء مجموعة محددة من الإجراءات التي قد تبدو android.intend.Dial.

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



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

دعنا نقول أن لدينا تطبيقًا واحدًا يعمل على Android وتطبيق آخر. هذه المستطيلات هي App1 والتطبيق 2 ، ويمثل كل واحد ما يظهر في الصورة العليا - المكونات ، البيان ، التسميات.



هذه هي جميع العمليات التي تعمل على نواة Linux ، والتي توفر درجة من العزلة بين التطبيقات. هناك أيضًا ما تسميه مقال المحاضرة المراجع المرجعية. سوف يتوسط جميع التفاعلات المتعمدة بين التطبيقات المختلفة. لذلك ، إذا كان الملحق 1 يريد إرسال رسالة إلى الملحق 2 ، فيُرسل أولاً رسالة إلى شاشة الرابط.
وبالتالي ، فإن الطريقة التي ترسل بها جميع نوايا النية إلى Android هي أنك تنشئ إحدى رسائل النوايا هذه وتوجيهها عبر قناة ما إلى هذا المراجع المرجعية.



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

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



: – Reference Monitor?

: , — , . , , , RM, ? ? , 1. ?

: , - , , .

: , . , , , . , , . . , 2?

: , PKI. .

: , , . , , , , RM , App 1. PKI . . , , , . , , . , ?

: , , .

: . , «» , . , , , . , Labels. ?

: , , . , , , , « ».

: , , . , RM , . , - . .

, 2 , . – , . , , , . .

, . , . — , , . , , , . , , - .

Android , , , , . , , , «» . , Google Voice, VoIP, Skype , . : « , - ». , , — , PDF JPEG .



. , PDF , , . RM .

: « , , , , ». , , .

: ?

: . , , . , , . , , .

Android RPC. , , Bind intent, , : « ». , , .



, - , , Bind intent.

: , ?

: , 2. , , 2. , - .

, 2 bind, - , . , , .



, , , , Service, . , , .
: , , . , .

: , , , . . , bind. RPC , .

, . , , RM . , RPC , , , , , RPC .

, , RPC, RPC, RPC .

27:40

معهد ماساتشوستس للتكنولوجيا بالطبع "أمن أنظمة الكمبيوتر". 20: « », 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 Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 $249 ! . c Dell R730xd 5-2650 v4 9000 ?

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


All Articles