0Pricing
Security+ Academy · บทเรียน

การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด

สแกน Terraform, CloudFormation และแผนผัง Helm ด้วยเครื่องมือความปลอดภัย IaC (Checkov, tfsec) เพื่อค้นหาการกำหนดค่าผิดพลาดก่อนนำขึ้นใช้งานจริง

การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด เป็นบทเรียน Security+ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Security+ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Security+ Academy มีบทเรียนทั้งหมด 4 บทเรียน

ภาพรวมความปลอดภัยของโครงสร้างพื้นฐานในรูปแบบโค้ด

เครื่องมือ โครงสร้างพื้นฐานในรูปแบบโค้ด (IaC) เช่น Terraform, AWS CloudFormation, Ansible และ Helm ช่วยให้กำหนดโครงสร้างพื้นฐานในไฟล์การกำหนดค่าที่ควบคุมเวอร์ชันได้ วิธีนี้ให้ประโยชน์อย่างมาก ได้แก่ ความทำซ้ำได้ ความสามารถในการตรวจสอบย้อนหลัง และระบบอัตโนมัติ แต่ก็ก่อให้เกิดความเสี่ยงด้านความปลอดภัยที่สำคัญ นั่นคือ การกำหนดค่าผิดพลาดในไฟล์ IaC ทำให้เกิดโครงสร้างพื้นฐานที่ไม่ปลอดภัยในวงกว้าง โมดูล Terraform ที่กำหนดค่าผิดเพียงรายการเดียวซึ่งนำไปใช้งานใน 50 สภาพแวดล้อม จะสร้างระบบที่มีช่องโหว่พร้อมกัน 50 ระบบ การสแกนความปลอดภัยของ IaC แก้ปัญหานี้ด้วยการตรวจสอบไฟล์การกำหนดค่าก่อนนำไปใช้ ทำให้ย้ายการรักษาความปลอดภัยไปตั้งแต่ระยะแรกในกระบวนการทำงานของนักพัฒนา

การกำหนดค่า IaC ที่ผิดพลาดที่พบบ่อย

เครื่องมือสแกนความปลอดภัยจะค้นหาการกำหนดค่า IaC ที่ผิดพลาดและพบได้บ่อยที่สุดในสภาพแวดล้อมคลาวด์จริง ได้แก่ บัคเก็ต S3 ที่เปิดใช้การเข้าถึงแบบสาธารณะหรือไม่มีการเข้ารหัสขณะจัดเก็บ กลุ่มความปลอดภัย ที่มีกฎขาเข้า 0.0.0.0/0 บนพอร์ตสำคัญ (22, 3389, 1433) ฐานข้อมูลที่ไม่มีการเข้ารหัสหรือเปิดให้เข้าถึงแบบสาธารณะ นโยบาย IAM ที่ใช้อักขระตัวแทนของ Resource หรือ Action เป็น * CloudTrail ที่ปิดใช้งานในภูมิภาคหนึ่ง คีย์ KMS ที่ไม่มีการหมุนเวียนคีย์ และ ตัวจัดสรรภาระงานที่มีตัวรับฟัง HTTP แทน HTTPS ข้อค้นพบเหล่านี้สอดคล้องอย่างใกล้ชิดกับการตรวจสอบของเกณฑ์มาตรฐานความปลอดภัยบนคลาวด์ เช่น CIS AWS Foundations

# Dangerous Terraform: public S3 bucket + no encryption
resource 'aws_s3_bucket' 'data' {
  bucket = 'my-data-bucket'
  # Missing: server_side_encryption_configuration
  # Missing: aws_s3_bucket_public_access_block
}

Checkov: นโยบายในรูปโค้ดสำหรับ IaC

Checkov (โดย Bridgecrew/Prisma Cloud) เป็นเครื่องมือวิเคราะห์แบบสถิติโอเพนซอร์สยอดนิยมสำหรับ IaC ที่รองรับ Terraform, CloudFormation, แมนนิเฟสต์ Kubernetes, แผนภูมิ Helm และ Dockerfile เครื่องมือนี้มาพร้อมนโยบายในตัวมากกว่า 1,000 รายการ ซึ่งเชื่อมโยงกับเกณฑ์มาตรฐาน CIS, GDPR, SOC 2 และ HIPAA การเรียกใช้ checkov -d . จะสแกนไฟล์ IaC ทั้งหมดในไดเรกทอรีปัจจุบัน และสร้างรายงานแยกสีสำหรับการตรวจสอบที่ผ่าน ไม่ผ่าน และถูกข้าม พร้อมเส้นทางทรัพยากรและคำแนะนำในการแก้ไข สามารถผสาน Checkov เข้ากับไปป์ไลน์ CI/CD เพื่อ บล็อกการนำระบบขึ้นใช้งาน เมื่อการตรวจสอบระดับ CRITICAL ไม่ผ่านได้

# Install and run Checkov on Terraform files
pip install checkov
checkov -d ./terraform/ --framework terraform

# Fail CI pipeline on HIGH severity findings
checkov -d ./terraform/ --check HIGH --hard-fail-on HIGH

tfsec: เครื่องมือสแกนความปลอดภัยของ Terraform

tfsec (ปัจจุบันเป็นส่วนหนึ่งของความสามารถด้านการสแกน IaC ของ Trivy) เป็นเครื่องมือสแกนความปลอดภัยของ Terraform ที่ออกแบบมาโดยเฉพาะ โดยเข้าใจไวยากรณ์ HCL อย่างละเอียด จึงสามารถติดตามค่าต่าง ๆ ข้ามโมดูลและไฟล์ตัวแปรได้ ต่างจากเครื่องมือสแกนแบบพื้นฐาน tfsec สามารถตรวจพบการตั้งค่าผิดพลาดที่ปัญหาครอบคลุมหลายไฟล์ได้ เช่น กฎกลุ่มความปลอดภัยที่ดูปลอดภัยเมื่อพิจารณาแยกกัน แต่ถูกผูกกับทรัพยากรในอีกไฟล์หนึ่ง tfsec จะแสดงผลการตรวจพบพร้อมระดับความรุนแรง (CRITICAL, HIGH, MEDIUM, LOW), รหัส CWE และลิงก์โดยตรงไปยังเอกสารการแก้ไข ทำให้นักพัฒนาสามารถนำผลการตรวจพบไปดำเนินการได้ทันที

# Install tfsec and scan Terraform directory
brew install tfsec
tfsec ./terraform/ --format json

# Or use Trivy for unified IaC + container scanning
trivy config ./terraform/

ข้อมูลลับในไฟล์ IaC

ปัญหาความปลอดภัยของ IaC ที่ร้ายแรงที่สุดประการหนึ่งคือ ข้อมูลลับที่เขียนตายตัวในโค้ด ของไฟล์การตั้งค่า เช่น รหัสผ่าน คีย์ API คีย์ส่วนตัว TLS และสตริงการเชื่อมต่อฐานข้อมูลที่ถูกส่งเข้า Git เนื่องจากที่เก็บ IaC มักใช้ร่วมกันระหว่างทีมและจัดเก็บประวัติไว้ในระบบควบคุมเวอร์ชัน ข้อมูลลับที่ถูกส่งเข้าไปแม้เพียงครั้งเดียวก็ถือว่าถูกเปิดเผยอย่างถาวร (ประวัติ Git เปลี่ยนแปลงไม่ได้) เครื่องมืออย่าง Checkov, detect-secrets, git-secrets และ TruffleHog สามารถสแกนหารูปแบบของข้อมูลลับได้ วิธีแก้คือใช้ ตัวแปรอินพุต ที่อ้างอิงจากตัวแปรสภาพแวดล้อมหรือที่จัดเก็บข้อมูลลับ และห้ามเขียนค่าตายตัวไว้ในโค้ด

# Bad: hardcoded password in Terraform
resource 'aws_db_instance' 'main' {
  password = 'supersecret123'  # NEVER DO THIS
}

# Good: read from variable, inject from secrets manager
variable 'db_password' { sensitive = true }
resource 'aws_db_instance' 'main' {
  password = var.db_password
}

นโยบายในรูปโค้ด: OPA และ Sentinel

เฟรมเวิร์ก Policy as Code (PaC) ช่วยให้ทีมความปลอดภัยเขียนกฎแบบกำหนดเองในรูปโค้ดและบังคับใช้อย่างสม่ำเสมอ Open Policy Agent (OPA) ร่วมกับ Conftest ช่วยให้เขียนนโยบาย Rego เพื่อตรวจสอบข้อมูลที่มีโครงสร้างได้ทุกประเภท เช่น แผน Terraform, แมนนิเฟสต์ Kubernetes และค่า Helm ภายในไปป์ไลน์ CI/CD ส่วน HashiCorp Sentinel มีอยู่ใน Terraform Enterprise และ Cloud โดยสามารถบังคับใช้นโยบาย เช่น 'บัคเก็ต S3 ทั้งหมดต้องเปิดใช้การเข้ารหัส' ตั้งแต่เวลาสร้างแผน และบล็อกการนำไปใช้หากจะละเมิดนโยบาย เครื่องมือเหล่านี้ช่วยให้กำหนดข้อกำหนดด้านความปลอดภัยเป็นโค้ดและควบคุมเวอร์ชันไว้ควบคู่กับโครงสร้างพื้นฐานที่อยู่ภายใต้การกำกับดูแลได้

# Example Conftest OPA policy: deny public S3
# deny[msg] {
#   input.resource.aws_s3_bucket[name]
#   input.resource.aws_s3_bucket_public_access_block == null
#   msg := sprintf('Bucket %v lacks public access block', [name])
# }

การตรวจจับการเปลี่ยนแปลงจากค่ามาตรฐาน: การตั้งค่าเทียบกับความเป็นจริง

การเปลี่ยนแปลงจากค่ามาตรฐานของการตั้งค่า เกิดขึ้นเมื่อสถานะจริงของโครงสร้างพื้นฐานที่นำไปใช้งานแตกต่างจากคำจำกัดความใน IaC ซึ่งมักเกิดจากมีผู้เปลี่ยนแปลงด้วยตนเองผ่านคอนโซลคลาวด์ กฎกลุ่มความปลอดภัยที่ถูกเพิ่มด้วยตนเองเพื่อปลดบล็อกนักพัฒนาเป็นการชั่วคราว อาจกลายเป็นช่องโหว่ถาวรได้ เครื่องมือ ตรวจจับการเปลี่ยนแปลงจากค่ามาตรฐาน จะเปรียบเทียบสถานะที่ต้องการ (ไฟล์ IaC) กับสถานะจริงที่นำไปใช้งานอย่างต่อเนื่อง และแจ้งเตือนเมื่อพบความแตกต่าง AWS Config, การตรวจจับการเปลี่ยนแปลงจากค่ามาตรฐานของ Terraform Cloud และเครื่องมือ CSPM (Prisma Cloud, Wiz) ล้วนมีความสามารถนี้ การตั้งค่าความปลอดภัยที่ผิดพลาดจากการเปลี่ยนแปลงผ่านคอนโซลจะถูกตรวจพบก่อนที่ผู้โจมตีจะค้นพบ

# Terraform: detect drift between state and actual cloud resources
terraform plan -refresh-only
# If output shows changes, someone modified infrastructure outside Terraform

โครงสร้างพื้นฐานแบบเปลี่ยนแปลงไม่ได้และ GitOps

โครงสร้างพื้นฐานแบบเปลี่ยนแปลงไม่ได้ หมายความว่าเซิร์ฟเวอร์และการตั้งค่าจะไม่ถูกแก้ไขบนทรัพยากรเดิม แต่การเปลี่ยนแปลงจะสร้างทรัพยากรใหม่ (AMI ใหม่ อิมเมจคอนเทนเนอร์ใหม่) แล้วแทนที่ทรัพยากรเก่า เมื่อนำมารวมกับ GitOps (ซึ่งการเปลี่ยนแปลงโครงสร้างพื้นฐานทั้งหมดต้องดำเนินการผ่านคำขอดึงข้อมูลของ Git ทำให้เกิดขั้นตอนการสแกน IaC และการอนุมัติ) แนวทางนี้จะกำจัดการเปลี่ยนแปลงจากค่ามาตรฐานของการตั้งค่าได้ตั้งแต่การออกแบบ เพราะหากไม่สามารถเปลี่ยนแปลงบางสิ่งด้วยตนเองได้ สิ่งนั้นก็จะไม่เกิดการเปลี่ยนแปลงจากค่ามาตรฐาน เครื่องมืออย่าง ArgoCD สำหรับ Kubernetes และ Atlantis สำหรับ Terraform ใช้ขั้นตอนการทำงานแบบ GitOps ซึ่งความแตกต่างใด ๆ จะทำให้เกิดการปรับให้ตรงกันโดยอัตโนมัติหรือการแจ้งเตือน

ความแตกต่างระหว่าง SAST กับการสแกน IaC

บางครั้งมีการสับสนระหว่างการสแกนความปลอดภัยของ IaC กับ SAST (การทดสอบความปลอดภัยของแอปพลิเคชันแบบสถิต) แต่ทั้งสองมุ่งตรวจสอบสิ่งที่แตกต่างกัน SAST วิเคราะห์ซอร์สโค้ดของแอปพลิเคชัน (Python, Java, JavaScript) เพื่อค้นหาช่องโหว่ เช่น SQL injection หรือบัฟเฟอร์ล้น ส่วน การสแกน IaC วิเคราะห์ไฟล์การตั้งค่าโครงสร้างพื้นฐานเพื่อค้นหาการตั้งค่าความปลอดภัยของคลาวด์ที่ผิดพลาด โดยไม่เกี่ยวข้องกับโค้ดแอปพลิเคชัน ไปป์ไลน์ DevSecOps ที่สมบูรณ์ต้องมีทั้งสองอย่าง ได้แก่ SAST กับโค้ดแอปพลิเคชัน และการสแกน IaC กับไฟล์โครงสร้างพื้นฐาน ทั้งสองอย่างทำงานใน CI/CD ก่อนการนำระบบขึ้นใช้งาน แพลตฟอร์มแบบรวมบางประเภท (Snyk IaC, Prisma Cloud) รวมการสแกนแอปพลิเคชันและโครงสร้างพื้นฐานไว้ในเครื่องมือเดียว

การผสานการสแกน IaC เข้ากับ CI/CD

การสแกนความปลอดภัยของ IaC ที่มีประสิทธิผลต้อง ทำงานโดยอัตโนมัติและบังคับใช้ ไม่ใช่ตัวเลือกเสริม การผสาน CI/CD โดยทั่วไปมีขั้นตอนดังนี้ เมื่อมีคำขอดึงข้อมูลแต่ละครั้ง ให้เรียกใช้ Checkov และ tfsec; ทำให้ไปป์ไลน์ไม่ผ่าน หากพบผลการตรวจระดับ CRITICAL; โพสต์ผลการตรวจเป็นความคิดเห็นในคำขอดึงข้อมูลเพื่อให้นักพัฒนามองเห็น; จัดทำรายการผลการตรวจที่ระงับไว้พร้อมเหตุผลที่บันทึกไว้; และสแกนทรัพยากรที่นำไปใช้งานแล้วทุกคืนเพื่อค้นหาการเปลี่ยนแปลงจากค่ามาตรฐาน ฮุกก่อนส่งโค้ด ที่ใช้เครื่องมืออย่าง pre-commit ร่วมกับ Checkov สามารถตรวจพบปัญหาได้ก่อนที่โค้ดจะไปถึงไปป์ไลน์ การจัดการผลบวกลวงมีความสำคัญ เพราะนักพัฒนาที่พบผลการตรวจไม่เกี่ยวข้องมากเกินไปจะเริ่มเพิกเฉยต่อผลเหล่านั้น

# GitHub Actions: IaC security scanning
# - name: Run Checkov IaC Scan
#   uses: bridgecrewio/checkov-action@master
#   with:
#     directory: terraform/
#     framework: terraform
#     soft_fail: false  # fail PR on findings
#     output_format: sarif  # upload to GitHub Security tab

ความปลอดภัยของสถานะ Terraform

ไฟล์สถานะ ของ Terraform (terraform.tfstate) มีรายการทรัพยากรที่อยู่ภายใต้การจัดการทั้งหมดโดยสมบูรณ์ และมักมี ค่าเอาต์พุตที่ละเอียดอ่อน เช่น รหัสผ่านฐานข้อมูล คีย์ส่วนตัว TLS และรหัสคีย์การเข้าถึง IAM ในรูปข้อความธรรมดา ห้ามส่งไฟล์สถานะเข้า Git โดยเด็ดขาด แต่ให้ใช้ แบ็กเอนด์ระยะไกล (AWS S3 พร้อมการล็อกด้วย DynamoDB, Terraform Cloud หรือสถานะที่จัดการโดย GitLab) โดย เปิดใช้การเข้ารหัสฝั่งเซิร์ฟเวอร์ การเข้าถึงแบ็กเอนด์สถานะต้องควบคุมอย่างเข้มงวดผ่าน IAM เพราะผู้ที่อ่านไฟล์สถานะได้สามารถแจกแจงรายละเอียดโครงสร้างพื้นฐานทั้งหมด และอาจดึงข้อมูลลับที่ฝังอยู่ภายในออกมาได้

# Secure Terraform remote backend
terraform {
  backend 's3' {
    bucket         = 'my-terraform-state'
    key            = 'prod/terraform.tfstate'
    region         = 'us-east-1'
    encrypt        = true
    kms_key_id     = 'arn:aws:kms:us-east-1:123:key/abc'
    dynamodb_table = 'terraform-state-lock'
  }
}

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจแนวคิด CompTIA Security+ (SY0-701) จากบทเรียนนี้

สรุปบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า การตั้งค่า IaC ที่ผิดพลาด เช่น บัคเก็ต S3 ที่เปิดเป็นสาธารณะ กลุ่มความปลอดภัยที่เปิดกว้าง และข้อมูลลับที่เขียนตายตัวในโค้ด จะถูกตรวจพบโดยอัตโนมัติด้วยเครื่องมืออย่าง Checkov และ tfsec ก่อนการนำระบบขึ้นใช้งาน, เฟรมเวิร์กนโยบายในรูปโค้ด (OPA/Conftest, HashiCorp Sentinel) ช่วยให้บังคับใช้ข้อกำหนดด้านความปลอดภัยขององค์กรแบบกำหนดเองเป็นด่านตรวจอัตโนมัติในไปป์ไลน์ได้ และ ไฟล์สถานะ Terraform ต้องจัดเก็บไว้ในแบ็กเอนด์ระยะไกลที่เข้ารหัส พร้อมการควบคุมการเข้าถึงอย่างเข้มงวด เนื่องจากไฟล์เหล่านี้อาจมีรายละเอียดทรัพยากรที่ละเอียดอ่อน บทถัดไปเราจะสำรวจวงจรชีวิตของ APT และวิธีที่ภัยคุกคามขั้นสูงคงอยู่ภายในเครือข่าย

คำถามที่พบบ่อย

บทเรียน “การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Security+ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Security+ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด”

สแกน Terraform, CloudFormation และแผนผัง Helm ด้วยเครื่องมือความปลอดภัย IaC (Checkov, tfsec) เพื่อค้นหาการกำหนดค่าผิดพลาดก่อนนำขึ้นใช้งานจริง คุณปฏิบัติ Security+ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Security+ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Security+ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Security+ Academy นี้ได้ไหม

ได้ บทเรียน Security+ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ความปลอดภัยคอนเทนเนอร์: การเสริมความแข็งแกร่งของอิมเมจและการป้องกันขณะทำงาน
  2. ความปลอดภัย Kubernetes: RBAC นโยบายเครือข่าย และความปลอดภัยของพ็อด
  3. ความปลอดภัยแบบไร้เซิร์ฟเวอร์และความปลอดภัยของฟังก์ชัน
  4. การสแกนความปลอดภัยโครงสร้างพื้นฐานในรูปโค้ด
← กลับไปที่ Security+ Academy