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

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


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

المحاضرة 1: "مقدمة: نماذج التهديد" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 2: "السيطرة على هجمات القراصنة" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 3: "تجاوزات العازلة: المآثر والحماية" الجزء 1 / الجزء 2 / الجزء 3
المحاضرة 4: "فصل الامتيازات" الجزء 1 / الجزء 2 / الجزء 3

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



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

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

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



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

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

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

هذا ملخص موجز للغاية عن مشاركة الامتيازات ولماذا يعتبر OKWS مثالًا مثيرًا للاهتمام. ومع ذلك ، فهو مثال أكثر حيوية من برنامج هام.

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

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

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

بعد ذلك ، هناك شيء يعمل من خلال عمليتنا كموضوع. يمكنه تعديل الأشياء وقراءتها ومراقبتها. هناك العديد من الأشياء في نظام التشغيل والتي يجب أن تقلق بشأن حمايتها. ما الأشياء التي تعتقد أننا يجب أن نقلق بشأنها؟

الجمهور: عن الملفات!

الأستاذ: صحيح عن الملفات والدلائل. ماذا ايضا؟



الجمهور: حول مقابس الشبكة!

الأستاذ: نعم ، عظيم حول مآخذ الشبكة. هل هناك أي شيء آخر يحدث في نظامنا؟

الجمهور: عمليات أخرى.

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

الجمهور: متغيرات البيئة.

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

الجمهور: واصفات الملف بشكل عام.

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



الجمهور: أجهزة أو أجهزة.

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

الجمهور: يجب أن تفكر أيضًا في حماية الأجهزة الطرفية!

الأستاذ: نعم! لذا ، أيها الأجهزة الإضافية ، أنت على حق ، خاصة على جهاز كمبيوتر سطح المكتب ، هناك الكثير من الأشياء غير الضرورية: محرك أقراص USB ، وكاميرا ويب ، وربما الشاشة نفسها - ستحتاج إلى حماية بعض هذا ، لأن التطبيقات المتعلقة بها يجب ألا تكون "مشيًا" »في جميع أنحاء الشاشة.

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

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

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

يوجد شيء يسمى User ID ، وهو عدد صحيح 32 بت. يوجد معرف مجموعة ، وهو أيضًا عدد صحيح 32 بت. في الواقع ، لا يوجد سبب محدد يجعلهم مختلفين.



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

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

الجمهور: قطع العلاقات!

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



من أجل أن يقرر أن شخصًا ما يمكنه قراءة أو كتابة ملف ، سنقوم بإدراج بعض الأذونات أو البتات في ملف inode . في نظام Unix ، يحتوي كل مجلد داخلي يكون في النهاية ملفًا أو دليلًا على عدة حقول مثيرة للاهتمام لأسباب أمنية. إليك معرف المستخدم ومعرّف المجموعة ، الذي ، كما نقول ، يمتلك الملف أو يمتلك الدليل. وبالتالي ، يمكنك إدارة جميع الملفات في الدليل الرئيسي الخاص بك لأن Unix لديه uid الخاص بك.
يحتوي Unix أيضًا على مجموعة من بتات الأذونات التي يمكن اعتبارها جزءًا من المصفوفة ، في التصميم الأساسي تبدو مثل r (قراءة) و w (كتابة) و x (تنفيذ). يمكننا تحديد هذه الأذونات للعديد من الكيانات ، وفي Unix يتم تحديدها لمالك المالك ، أي بالنسبة إلى uid inode ، لمجموعة المجموعة التي ينتمي إليها الملف المحدد ، أي للمُدخل ، ولجميع الكيانات الأخرى - أخرى .

يمكنك ملء هذه المصفوفة الثنائية 3 × 3 ، حيث يعني 1 الإذن بتنفيذ إجراء معين ، و 0 يمنع تنفيذه:



هذه هي الطريقة التي يخزن بها يونكس الأذونات. هناك طريقة تقليدية لترميز هذه الأشياء التي ستراها في كثير من الأحيان والتي ربما تستحق الذكر. في Unix ، يتم ترميز هذه المصفوفة كرقم ثماني ، لذلك يجب اعتبار كل صف هنا كرقم أساس من 8 ، لذلك ستبدو المصفوفة في هذا الترميز كما يلي: r هي 4 بت ، w 2 بت ، x هي 1 بت ، على التوالي ، المالك - انها 6 بت ، والمجموعة وكل أخرى تحتوي على 4 بت.



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

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

الجمهور: إذا كان هذا الشخص لديه حق الوصول إلى الملف؟

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

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

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

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

دعونا نلقي نظرة على مثال. ماذا يحدث في Unix إذا أدخلت الأمر open ("/ etc / password") ؟ ما الذي يتحقق من نواة النظام نيابة عني عندما أمرته بإجراء مكالمة للنظام؟

الجمهور: هل يتحقق ما إذا كان لديك إذن بالتنفيذ وما إلى ذلك؟

الأستاذ: نعم ، إلى حد ما هذا هو الحال. أحتاج أن أفعل شيئًا ، إلخ.

الجمهور: ثم قم بتنفيذ الخط المائل المحدد!

الأستاذ: نعم ، في الواقع أنا بحاجة إلى النظر إلى ما يشير إلى / إلخ ؟ لذلك إذا لم أحدد أذونات الجذر - الحقوق ، فلن ينجح ذلك.

الجمهور: فأنت بحاجة لقراءة / etc / password .



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

لنفترض أن لدي 6.858 gid و TAs gid ، لكن لا يمكنني إدراج إلا gid واحد في الملف.

الجمهور: لن تتمكن من القيام بذلك ، لأنك هنا قد يكون لديك TAs وليس 6.858 TAs.

البروفيسور: نعم هذا صحيح. على الرغم من وجود طلاب في المجموعة 6.858 هم مساعدون فنيون لفصول أخرى ، لذلك ربما هذا ليس رائعًا حقًا. ولكن ، مع ذلك ، دعونا نحاول أن نجعل تقاطعات هذه الجماعات بطريقة أو بأخرى. للقيام بذلك ، يمكننا استخدام آلية الإذن.
/foo/bar/grades , foo , gid 6.858 . , , /foo . /bar , gid TAs, . /foo/bar/ , grades . , .



: , , , , 6.858 gid, TA - - 6.858 ?

: , . , , , Unix , , , , , . , MACS — mandatory accesscontrol systems, . , , : , . . , - .

Unix , , , TA - , Unix . , - . - , Unix , , . , , . , , , . , . Unix.

, , , , - , . - , , , .

, , Unix.

, — . OKWS , Unix . Unix , . , «» , .

, : , . , . - , , Unix – , , , , .

– Unix - , .

OKWS , . , , , - , . , , , - . - , .

, . , , .

? ? ? Unix . , , – Unix , ptrace .



. , , , , , . , , web , gid TAs, .

, , . userid . ptraceuid uid .

ptrace Linux . , , , - , , , . - . , ID.

27:50

:

دورة معهد ماساتشوستس للتكنولوجيا "أمن أنظمة الكمبيوتر". 4: « », 2


.

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

Dell R730xd 2 ? 2 Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 $249 ! . الطبقة باستخدام خوادم Dell R730xd E5-2650 v4 بتكلفة 9000 يورو مقابل سنت واحد؟

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


All Articles