أكاديمية رزينRazeen — Cloud Security
LAB-03 · مجاني

الشيفرة التي لم يراجعها أحد

كتب مطوّر ملف Terraform، وسيضغط زر "نشر" بعد قليل. في الملف 4 أخطاء أمنية، فاكتشفها قبل أن يُنشر.

the briefwaha finance

بدأ فريق التطوير في واحة المالية ببناء البيئة بالشيفرة (Terraform) بدلًا من الضغط على الأزرار في الكونسول. وكتب المطوّر خالد ملفًا لبيئة جديدة تضم مستندات العملاء وقاعدة بيانات المعاملات.

وقبل النشر، طلبوا منك مراجعة أمنية سريعة. اقرأ الملف سطرًا سطرًا، ثم أجب.

code reviewmain.tf
main.tfpull request #41 · بانتظار المراجعة
# main.tf  -  new Waha environment  (written by dev-khalid)

provider "aws" {
  region = "eu-central-1"
}

# --- customer documents storage ---
resource "aws_s3_bucket" "customer_docs" {
  bucket = "waha-customer-docs-prod"
}

resource "aws_s3_bucket_public_access_block" "customer_docs" {
  bucket                  = aws_s3_bucket.customer_docs.id
  block_public_acls       = false
  block_public_policy     = false
  ignore_public_acls      = false
  restrict_public_buckets = false
}

# --- transactions database ---
resource "aws_db_instance" "transactions" {
  identifier          = "waha-transactions-db"
  engine              = "postgres"
  instance_class      = "db.t3.micro"
  allocated_storage   = 20
  username            = "waha_admin"
  password            = "RAZEEN{h4rdc0d3d_s3cr3t_1n_t3rr4f0rm}"
  storage_encrypted   = false
  skip_final_snapshot = true
}

# --- network ---
resource "aws_security_group" "app" {
  name = "waha-app-sg"

  ingress {
    description = "HTTPS for customers"
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  ingress {
    description = "temp access - remove later"
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

ملف synthetic dataset لأغراض تعليمية، ولم يُنشر في أي مكان.

review06 steps
01

الـ bucket الخاص بمستندات العملاء: ما المشكلة فيه؟

تلميح

تذكّر LAB-01. ما الإعداد الذي كان سيمنع المشكلة هناك؟

جميع إعدادات Block Public Access معطّلة، ويجب أن تكون كلها true.

02

في الـ Security Group، ما رقم المنفذ الذي لا ينبغي أن يكون مفتوحًا للعالم؟

تلميح

المنفذ 443 مخصص للعملاء، ومن الطبيعي أن يكون مفتوحًا. انظر إلى الآخر، فوصفه يقول "remove later".

المنفذ 22 (SSH)، وهو باب الدخول إلى الخادم نفسه.

03

ماذا يعني 0.0.0.0/0؟

تلميح

الأصفار كلها هنا تعني "دون أي تقييد".

أي جهاز على الإنترنت، أي أن بإمكان أي شخص محاولة الدخول إلى الخادم عبر المنفذ 22.

04

قاعدة بيانات المعاملات: ما الإعداد الخطير فيها؟

تلميح

بيانات مالية… هل هي محمية إذا وصل أحد إلى القرص نفسه؟

التشفير معطّل، والبيانات المالية يجب أن تكون مشفّرة أثناء التخزين (encryption at rest).

05

🚩 ما العلم؟

تلميح

هناك شيء مكتوب في الشيفرة لا ينبغي أن يُكتب فيها أبدًا.

تلميح إضافي (إن احتجت إليه)

انظر إلى سطر password في قاعدة البيانات.

العلم صحيح. ولو كانت البيئة حقيقية لكانت هذه كلمة مرور فعلية، ولأمكن لأي شخص يرى الشيفرة (أو GitHub) الدخول إلى قاعدة البيانات.

06

أين يجب أن توضع كلمة مرور قاعدة البيانات بدلًا من الشيفرة؟

تلميح

base64 ليس تشفيرًا، ويمكن لأي شخص فكّه في ثانية.

خدمة لإدارة الأسرار مثل AWS Secrets Manager. كما أن أدوات مثل Checkov تكتشف كل الأخطاء التي وجدتها هنا تلقائيًا قبل النشر.

أوقفتَ النشر في الوقت المناسب

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

تابعنا لتصلك المختبرات القادمة

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