معهد ماساتشوستس للتكنولوجيا. محاضرة رقم 6.858. "أمن أنظمة الكمبيوتر." نيكولاي زيلدوفيتش ، جيمس ميكنز. 2014 سنة
أمان أنظمة الكمبيوتر هي دورة حول تطوير وتنفيذ أنظمة الكمبيوتر الآمنة. تغطي المحاضرات نماذج التهديد ، والهجمات التي تهدد الأمن ، وتقنيات الأمان بناءً على العمل العلمي الحديث. تشمل الموضوعات أمان نظام التشغيل (OS) ، والميزات ، وإدارة تدفق المعلومات ، وأمان اللغة ، وبروتوكولات الشبكة ، وأمان الأجهزة ، وأمان تطبيقات الويب.
المحاضرة 1: "مقدمة: نماذج التهديد"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 2: "السيطرة على هجمات القراصنة"
الجزء 1 /
الجزء 2 /
الجزء 3المحاضرة 3: "تجاوزات العازلة: المآثر والحماية"
الجزء 1 /
الجزء 2 /
الجزء 3 ومن المثير للاهتمام أن المهاجم لا يمكنه القفز إلى عنوان محدد ، على الرغم من حقيقة أننا نستخدم عناوين مشفرة بشكل أساسي. ما يفعله يسمى "هجوم الكومة" ، وإذا كنت شخصًا سيئًا ، فسيكون الأمر ممتعًا بالنسبة لك. مع مثل هذا الهجوم ، يبدأ القراصنة في تخصيص أطنان من كود القشرة ديناميكيًا وإدخاله بشكل عشوائي في الذاكرة. يكون هذا فعالًا بشكل خاص إذا كنت تستخدم لغات عالية المستوى ديناميكيًا مثل JavaScript. وبالتالي ، فإن قارئ العلامات في حلقة ضيقة ويقوم ببساطة بإنشاء عدد كبير من أسطر كود الصدفة ثم يملأ مجموعة منها.
لا يمكن للمهاجم تحديد الموقع الدقيق للخطوط ، فهو ببساطة يختار 10 ميجا بايت من كود القشرة ويقوم بقفزة عشوائية. وإذا تمكن من التحكم بطريقة ما في أحد مؤشرات
الارتداد ، فهناك احتمال أن "يهبط" في كود القشرة.

يمكنك استخدام خدعة واحدة تسمى
NOP slide ، أو
مزلقة NOP أو
منحدر NOP ، حيث
NOP هي
تعليمات عدم التشغيل ، أو أوامر فارغة فارغة. هذا يعني أن تدفق تنفيذ أمر المعالج "ينزلق" إلى وجهته النهائية المرغوبة كلما انتقل البرنامج إلى عنوان الذاكرة في أي مكان على الشريحة.
تخيل أنه إذا كان لديك سطر من كود الصدفة وذهبت إلى مكان عشوائي على هذا الخط ، فقد لا يعمل هذا ، لأنه لا يسمح لك بنشر الهجوم بالطريقة الصحيحة.
ولكن ربما تكون الأشياء التي تضعها في كومة الذاكرة المؤقتة في الأساس مجرد طن من
NOP ، وفي النهاية ، يكون لديك كود صدفة. هذا في الواقع ذكي جدًا ، لأنه يعني أنه يمكنك الآن الوصول إلى المكان الصحيح حيث تقفز. لأنه إذا قفزت إلى واحدة من هذه
الأصداف ، فهذا يحدث فقط "بوم ، بوم ، بوم ، بوم ، بوم ، بوم ، بوم" ، ومن ثم تدخل في كود الصدفة.
يبدو أن الناس توصلوا إلى هذا الأمر ، والذي ربما تراه في فريقنا. إنهم يخترعون شيئًا كهذا ، وهذه هي المشكلة. لذا فهذه طريقة أخرى للتغلب على بعض الأشياء العشوائية عن طريق جعل التوزيع العشوائي لرموزك قويًا ، إذا كان ذلك منطقيًا.
لذا ، ناقشنا بعض أنواع العشوائية التي يمكنك استخدامها. هناك بعض الأفكار الغبية التي ظهرت أيضًا في الناس. إذاً الآن أنت تعرف أنه عندما تريد إجراء مكالمة نظام ، على سبيل المثال ، باستخدام وظيفة
syscall libc ، فأنت في الأساس تقوم بتمرير أي رقم فريد يمثل استدعاء النظام الذي تريد
إجراءه . لذا ربما تكون وظيفة
الشوكة 7 أو
النوم 8 أو شيء من هذا القبيل.
وهذا يعني أنه إذا تمكن المهاجم من معرفة عنوان تعليمات
المكالمة هذه
والوصول إليها بطريقة أو بأخرى ،
فيمكنه في الواقع استبدال رقم استدعاء النظام الذي يريد استخدامه مباشرة. يمكنك أن تتخيل أنه في كل مرة يتم فيها تشغيل البرنامج ، تقوم في الواقع بإنشاء تعيين ديناميكي لأرقام
syscall إلى syscalls صالحة ، من أجل تعقيد التقاط المهاجم.

حتى أن هناك بعض الاقتراحات الطليعية لتغيير الأجهزة بحيث تحتوي المعدات على مفتاح تشفير
xor ، والذي يُستخدم لوظائف
xor الديناميكية. تخيل أنه في كل مرة تقوم فيها بتجميع برنامج ، تحصل جميع أكواد التعليمات على مفتاح
xor معين. يتم تخزين هذا المفتاح في سجل المعدات عندما تقوم بتنزيل البرنامج في البداية ، وبعد ذلك ، كلما قمت بتنفيذ التعليمات ، يقوم الجهاز تلقائيًا بإجراء عملية
xor معه قبل متابعة هذه التعليمات. الشيء الجيد في هذا النهج هو أنه الآن ، حتى لو تمكن المهاجم من إنشاء كود صدفة ، فلن يتعرف على هذا المفتاح. لذا سيكون من الصعب عليه معرفة ما يجب وضعه في الذاكرة بالضبط.
الجمهور: ولكن إذا كان بإمكانه الحصول على الرمز ،
فيمكنه أيضًا استخدام
xor لتحويل الرمز مرة أخرى إلى تعليمات.
الأستاذ: نعم ، هذه هي المشكلة القانونية ، صحيح. يشبه هذا إلى حد ما ما يحدث أثناء هجمات
BROP ، عندما يبدو أننا
نسرع موقع الشفرة بشكل عشوائي ، ولكن يمكن للمهاجم "الشعور" به ومعرفة ما يحدث. يمكن للمرء أن يتخيل أنه ، على سبيل المثال ، إذا كان المهاجم يعرف تسلسلًا فرعيًا من التعليمات البرمجية التي يتوقع العثور عليها في ملف ثنائي ، فسيحاول استخدام عملية
xor لهذا الملف لاستخراج المفتاح.
في الأساس ، ناقشنا جميع أنواع هجمات التعشية التي أردت أن أخبرك عنها اليوم. قبل أن ننتقل إلى البرمجة ، يجدر مناقشة أي من طرق الحماية هذه المستخدمة في الممارسة. اتضح أن كلاً من
دول مجلس التعاون الخليجي و Visual Studio
يشتملان على نهج
كومة الكناري بشكل افتراضي . هذا مجتمع مشهور جدا ومشهور جدا. إذا نظرت إلى Linux و Windows ، فإنها تستفيد أيضًا من أشياء مثل الذاكرة غير القابلة للتنفيذ وعشوائية مساحة العنوان. صحيح أن نظام
الحدود الفضفاضة لا يحظى بشعبية كبيرة معهم ، ربما بسبب تكلفة الذاكرة والمعالج والإنذارات الكاذبة وما إلى ذلك ، والتي تحدثنا عنها بالفعل. لذلك قمنا في الأساس بفحص كيف ستمنع الأشياء مشكلة تجاوز سعة المخزن المؤقت.
الآن سنتحدث عن
ROP ، البرمجة ذات الاتجاه العكسي. لقد أخبرتك اليوم بالفعل بما تمثله من حيث العشوائية في مساحة العنوان ومنع تنفيذ البيانات - إنها القراءة والكتابة والتنفيذ. هذه في الواقع أشياء قوية للغاية. لأن التوزيع العشوائي يمنع إمكانية فهم المهاجم أين توجد عناويننا المشفرة. وتضمن القدرة على منع تنفيذ البيانات أنه حتى إذا وضعت رمز القشرة على المكدس ، فلن يتمكن المهاجم من القفز إليه وتنفيذه.
كل هذا يبدو تقدميًا تمامًا ، لكن المتسللين يطورون باستمرار طرق هجوم ضد مثل هذه الحلول الدفاعية التقدمية.
إذن ما هو جوهر البرمجة العكسية؟
ماذا لو استطاع المهاجم ، بدلاً من مجرد إنشاء رمز جديد أثناء الهجوم ، الجمع بين الأجزاء الحالية من التعليمات البرمجية ثم دمجها معًا بطريقة غير طبيعية؟ بعد كل شيء ، نحن نعلم أن البرنامج يحتوي على الكثير من هذه التعليمات البرمجية.

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

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

كما قلت ، أثناء الهجوم ،
تم استخدام
GDB لمعرفة ما هو عنوان
قذيفة المدى . وهكذا ، عندما يفيض المخزن المؤقت ، يمكننا ببساطة وضع عنوان
shell run هنا على اليمين. هذا في الواقع امتداد بسيط إلى حد ما لما نعرفه بالفعل كيفية القيام به. بشكل أساسي ، هذا يعني أنه إذا كان لدينا أمر يشغل الصدفة ، وإذا كان بإمكاننا تفكيك الملف الثنائي لمعرفة مكان هذا العنوان ، فيمكننا ببساطة وضعه في هذا الصفيف الفائض الموجود في أسفل المكدس. إنه بسيط للغاية.
لذلك ، كان هذا مثالًا تافهًا للغاية ، لأن المبرمج ، لسبب مجنون ، وضع هذه الوظيفة هنا ، وبالتالي قدم للمهاجم هدية حقيقية.
لنفترض الآن أنه بدلاً من استدعاء هذا الشيء
run_shell ، فإننا سوف نسميه
run_boring ، ثم يقوم ببساطة بتشغيل الأمر
/ bin / ls . ومع ذلك ، لم نفقد أي شيء ، لأنه سيكون لدينا السلسلة
char * bash_path في الأعلى ، والتي ستخبرنا عن المسار إلى هذه السلة
/ bash .

لذا فإن الشيء الأكثر إثارة للاهتمام في هذا الأمر هو أن المهاجم الذي يريد تشغيل
ls يمكنه "تحليل" البرنامج والعثور على موقع
run_boring ، وهذا ليس ممتعًا على الإطلاق. لكن في الواقع ، لدينا خط في الذاكرة يشير إلى مسار الصدفة ، بالإضافة إلى ذلك ، نحن نعرف شيئًا آخر مثيرًا للاهتمام. هذا هو أنه حتى إذا لم يقم البرنامج باستدعاء النظام باستخدام الوسيطة
/ bin / ls ، فإنه لا يزال يقوم بإجراء نوع من المكالمات.
لذا ، نعلم أن النظام يجب أن يكون مرتبطًا بطريقة ما بهذا البرنامج -
النظام ("/ bin / ls") . لذلك ، يمكننا استخدام هاتين العمليتين
الباطلتين لربط النظام
فعليًا بحجة char * bash_path . أول شيء نقوم به هو الذهاب إلى
GDB ومعرفة مكان هذا
النظام ("/ bin / ls") في صورة العملية الثنائية. لذا ، ما عليك سوى الانتقال إلى
GDB ، فقط اكتب
print_system واحصل على معلومات حول
إزالته . هذا بسيط جدًا ، ويمكنك أن تفعل الشيء نفسه مع
bash_path . أي أنك تستخدم
GDB ببساطة لمعرفة أين يعيش هذا الشيء.
بمجرد القيام بذلك ، تحتاج إلى القيام بشيء آخر. لأننا الآن بحاجة حقًا إلى معرفة كيفية استدعاء النظام بطريقة ما باستخدام الحجة التي اخترناها. والطريقة التي نقوم بها بذلك تتلخص بشكل أساسي في تزوير الإطار الداعي للنظام. إذا كنت تتذكر ، فإن الإطار هو ما يستخدمه المترجم والأجهزة لتنفيذ استدعاء المكدس.
نريد أن نرتب على المكدس شيئًا مثل ما صورته في هذا الرقم. في الواقع ، سنقوم بتزييف نظام كان يجب أن يكون على المكدس ، ولكن قبل أن ينفّذ بالفعل التعليمات البرمجية الخاصة به.
لذا ، لدينا هنا حجة النظام ، وهذا هو الخط الذي نريد تنفيذه. في الأسفل لدينا خط حيث يجب أن يعود النظام عند اكتمال الخط مع الوسيطة. يتوقع النظام أن يبدو المكدس بهذه الطريقة قبل بدء التنفيذ.

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

أولاً ، سنقوم بوضع عنوان النظام هنا. وفي الأعلى ،
سنضع بعض
عناوين الإرجاع غير المرغوب فيها . هذا هو المكان الذي سيعود فيه النظام بعد انتهائه. سيكون هذا العنوان مجموعة عشوائية من وحدات البايت. فوقه سنضع العنوان
bash_path . ماذا يحدث عندما يفيض المخزن المؤقت الآن؟
بعد أن يصل
prosess_msg إلى خط النهاية ، سيقول: "حسنًا ، هذا هو المكان الذي يجب أن أعود إليه"! يستمر رمز النظام في العمل ، ويتحرك إلى أعلى ويرى إطار المكالمة المزيف الذي أنشأناه. بالنسبة للنظام ، لن يحدث شيء مذهل ، سيقول: "نعم ، ها هي ، الحجة التي أريد تنفيذها هي
bin / bash " ، ينفذها ، ويتم ذلك - لقد استولى المهاجم على القشرة!
ماذا فعلنا الآن؟ لقد استفدنا من معرفة
اصطلاح الاستدعاء ،
اصطلاح الاستدعاء ، كمنصة لإنشاء إطارات مكدسة وهمية ، أو أسماء إطارات وهمية ، أود أن أقول. باستخدام هذه
الإطارات الاستدعاء وهمية ، يمكننا أداء أي وظيفة المشار إليها والتي تم تعريفها بالفعل من قبل التطبيق.
السؤال التالي الذي يجب أن نطرحه هو: ماذا لو لم يكن
للبرنامج خط
char * bash_path هذا على
الإطلاق ؟ ألاحظ أن هذا الخط موجود دائمًا في البرنامج. ومع ذلك ، لنفترض أننا نعيش في عالم مقلوب ، ولا يزال غير موجود. إذن ما الذي يمكننا فعله لوضع هذا الخط في البرنامج؟
أول شيء يمكنك القيام به لهذا هو تحديد العنوان الصحيح لـ
bash_path ، ووضعه أعلى ، هنا في هذا
الجزء من المكدس الخاص بنا ، وإدراج ثلاثة عناصر ، يبلغ حجم كل منها 4 بايت:
/ 0
/ بات
/ بن
ولكن على أي حال ، يأتي مؤشرنا هنا و- ازدهار! - انتهى الشيء. بهذه الطريقة ، يمكنك الآن استدعاء الحجج ببساطة عن طريق وضعها في كود الصدفة الخاص بك. مرعب ، أليس كذلك؟ وكل هذا تم بناؤه قبل هجوم
BROP الكامل. ولكن قبل أن تشير إلى هجوم
BROP كامل ، عليك أن تفهم كيف تجمع ببساطة الأشياء الموجودة بالفعل داخل الكود. عندما أحصل على عنوان الإرجاع المغرور هنا ، نريد فقط الوصول إلى الغلاف. ولكن إذا كنت مهاجمًا ، فيمكنك توجيه عنوان الإرجاع أو عنوان الإرجاع هذا إلى شيء يمكن استخدامه حقًا. وإذا قمت بذلك ، فيمكنك ربط عدة وظائف في صف في صف ، والعديد من علامات الدالة في صف. هذا بالفعل خيار قوي للغاية.
لأنه إذا قمنا ببساطة بتعيين عنوان الإرجاع للقفزة ، فبعد ذلك يتعطل البرنامج عادةً ، وهو الأمر الذي ربما لا نريده. لذلك ، يجدر ربط بعض هذه الأشياء معًا من أجل القيام بأشياء أكثر إثارة للاهتمام مع البرنامج.
لنفترض أن هدفنا هو أن نطلق على النظام عددًا عشوائيًا من المرات. نحن لا نريد فقط القيام بذلك مرة واحدة ، بل سنقوم بذلك بشكل عشوائي. فكيف يمكن القيام بذلك؟
للقيام بذلك ، نستخدم قطعتين من المعلومات التي نعرف بالفعل كيفية الحصول عليها. نحن نعرف كيفية الحصول على عنوان النظام - ما عليك سوى النظر في
GDB والعثور عليه هناك. نحن نعرف أيضًا كيفية العثور على عنوان هذا السطر ،
bin / bash . الآن ، لبدء هذا الهجوم باستخدام مكالمات متعددة للنظام ، نحتاج إلى استخدام الأدوات. هذا يجعلنا أقرب إلى ما يحدث في
BROP .
لذا ما نحتاجه الآن هو العثور على عنوان عمليتي الكود هاتين:
pop٪ eax و
ret . الأول يزيل الجزء العلوي من المكدس ويضعه في سجل
eax ، والثاني يضعه في
مؤشر تعليمات
eip . هذا ما نسميه الأداة. يبدو أن مجموعة صغيرة من تعليمات التجميع يمكن للمهاجم استخدامها لبناء هجمات أكثر طموحًا.

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

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

من الواضح أنه يمكننا ربط هذا التسلسل لأداء عدد عشوائي من الأشياء. بشكل أساسي ، تحصل النواة على ما يسمى بالبرمجة العكسية. الرجاء ملاحظة أننا لم نقم بإجراء أي شيء على هذا المكدس. لقد فعلنا ما سمح لنا بمنع تنفيذ البيانات دون تدمير أي شيء. لقد قمنا للتو بقفزة غير متوقعة للقيام بما نريد. في الواقع إنه ذكي جدا جدا جدا.
والمثير للاهتمام هو أنه على مستوى عالٍ حددنا هذا النموذج الجديد للحوسبة. , , , . , , . , - . , , . , . . , . , ,
stack canaries., «» , . , , «»
ret address saved %ebp , - , «». ,
ret , , «», , - .
stack canaries .
, «». , . , «»?
, , , .
, , , «» , «» «».
, , , «» , , .
, - , «» , . , ? ?
,
fork . ,
fork . , , ,
fork , , , , «» . ,
stack canaries .
«»? . , , , «». «» . .

, , – , «». , , 0. , «», . , :
«, «»! , 0. «»! 1 – «», 2 – . , 2- . , , «».

, , , .
«», , , . , , «».
57:10
:
دورة معهد ماساتشوستس للتكنولوجيا "أمن أنظمة الكمبيوتر". 3: « : », 3.
شكرا لك على البقاء معنا. هل تحب مقالاتنا؟ هل تريد رؤية مواد أكثر إثارة للاهتمام؟ ادعمنا عن طريق تقديم طلب أو التوصية به لأصدقائك ،
خصم 30 ٪ لمستخدمي Habr على نظير فريد من خوادم مستوى الدخول التي اخترعناها لك: الحقيقة الكاملة حول VPS (KVM) E5-2650 v4 (6 نوى) 10GB DDR4 240GB SSD 1Gbps من 20 $ أو كيفية تقسيم الخادم؟ (تتوفر الخيارات مع RAID1 و RAID10 ، حتى 24 مركزًا وحتى 40 جيجابايت DDR4).
ديل R730xd أرخص مرتين؟ فقط لدينا
2 x Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 TV من 249 دولارًا في هولندا والولايات المتحدة! اقرأ عن
كيفية بناء مبنى البنية التحتية الطبقة باستخدام خوادم Dell R730xd E5-2650 v4 بتكلفة 9000 يورو مقابل سنت واحد؟