โ† IaC/Terraform Management

ISMS-P 2.9.6 ์‹œ๊ฐ„ ๋™๊ธฐํ™” High Risk

์‹œ๊ฐ„ ๋™๊ธฐํ™”๊ฐ€ ์ ์ ˆํžˆ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ๋Š”๊ฐ€?

ISMS-P 2.9.6์€ ๋กœ๊ทธ ๋ฐ ์ ‘์†๊ธฐ๋ก์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด์‹œ์Šคํ…œ์˜ ์‹œ๊ฐ„์„ ํ‘œ์ค€์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๋„๋ก ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ๋Š” Amazon Time Sync Service์™€ chrony๋ฅผ ํ†ตํ•ด ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์ •ํ™•ํ•œ ์‹œ๊ฐ„ ๋™๊ธฐํ™”๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“‹

ISMS-P ์ธ์ฆ ๊ธฐ์ค€

ISMS-P 2.9.6 ์‹œ๊ฐ„ ๋™๊ธฐํ™” ์š”๊ตฌ์‚ฌํ•ญ

2.9.6

์‹œ๊ฐ„ ๋™๊ธฐํ™”

์ธ์ฆ ๊ธฐ์ค€ ์ •์˜

"๋กœ๊ทธ ๋ฐ ์ ‘์†๊ธฐ๋ก์˜ ์ •ํ™•์„ฑ์„ ๋ณด์žฅํ•˜๊ณ  ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋กœ๊ทธ ๋ถ„์„์„ ์œ„ํ•˜์—ฌ ์ •๋ณด์‹œ์Šคํ…œ์˜ ์‹œ๊ฐ„์„ ํ‘œ์ค€์‹œ๊ฐ„์œผ๋กœ ๋™๊ธฐํ™”ํ•˜๊ณ  ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜์—ฌ์•ผ ํ•œ๋‹ค."

๐Ÿ“Œ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ ์šฉ ํฌ์ธํŠธ

  • Amazon Time Sync Service ํ™œ์šฉ
  • chrony ๊ธฐ๋ฐ˜ ์‹œ๊ฐ„ ๋™๊ธฐํ™”
  • Launch Template ์ž๋™ํ™”
  • ์ •๊ธฐ์  ์‹œ๊ฐ„ ์ ๊ฒ€ ์ฒด๊ณ„

โš ๏ธ ๋ฏธ์ค€์ˆ˜ ์‹œ ์‹ฌ์‚ฌ ์˜ํ–ฅ

  • ๊ฒฐํ•จ: NTP ์„œ๋ฒ„ ๋ฏธ์„ค์ •
  • ๊ฒฐํ•จ: ์‹œ์Šคํ…œ ๊ฐ„ ์‹œ๊ฐ„ ๋ถˆ์ผ์น˜
  • ๊ถŒ๊ณ : ์ฃผ๊ธฐ์  ์ ๊ฒ€ ์ ˆ์ฐจ ๋ฏธํก
๐Ÿ“„ KISA ISMS-P ์ธ์ฆ๊ธฐ์ค€ ์•ˆ๋‚ด์„œ โ†— โ˜๏ธ AWS Time Sync ๊ฐ€์ด๋“œ โ†—
๐Ÿ“ฐ

์‹ค์ œ ๋ณด์•ˆ ์‚ฌ๊ณ  ์‚ฌ๋ก€

์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋ฏธํก์œผ๋กœ ๋ฐœ์ƒํ•œ ์‹ค์ œ ์‚ฌ๊ณ 

2021

๊ตญ๋‚ด ๊ธˆ์œต์‚ฌ ์นจํ•ด์‚ฌ๊ณ  ๋Œ€์‘ 2์ฃผ ์ง€์—ฐ

์„œ๋ฒ„ ๊ฐ„ ์‹œ๊ฐ„ ๋ถˆ์ผ์น˜(์ตœ๋Œ€ 15๋ถ„)๋กœ ์ธํ•ด ๊ณต๊ฒฉ ํƒ€์ž„๋ผ์ธ ๋ถ„์„ ์‹คํŒจ. ๋กœ๊ทธ ์ƒ๊ด€๊ด€๊ณ„ ๋ถ„์„ ๋ถˆ๊ฐ€๋กœ ํฌ๋ Œ์‹ ์กฐ์‚ฌ 2์ฃผ ์ง€์—ฐ.

๐Ÿ’ก ๊ตํ›ˆ: ๋ชจ๋“  ์‹œ์Šคํ…œ NTP ๋™๊ธฐํ™” ํ•„์ˆ˜, ์ •๊ธฐ์  ์‹œ๊ฐ„ ์ ๊ฒ€ ์ฒด๊ณ„ ๊ตฌ์ถ•

2023

Kubernetes TLS ์ธ์ฆ์„œ ๊ฒ€์ฆ ์‹คํŒจ

EKS ํด๋Ÿฌ์Šคํ„ฐ ๋…ธ๋“œ ๊ฐ„ ์‹œ๊ฐ„ ๋ถˆ์ผ์น˜๋กœ TLS ์ธ์ฆ์„œ ๊ฒ€์ฆ ์‹คํŒจ. ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์žฅ์• ๋กœ 4์‹œ๊ฐ„ ์„œ๋น„์Šค ์ค‘๋‹จ.

๐Ÿ’ก ๊ตํ›ˆ: ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ์—์„œ๋„ ํ˜ธ์ŠคํŠธ ์‹œ๊ฐ„ ๋™๊ธฐํ™” ํ•„์ˆ˜

โšก

ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ ์œ„ํ—˜

NTP ๋ฏธ์„ค์ •์œผ๋กœ ์ธํ•œ ์œ„ํ—˜ ์ƒํ™ฉ

โœ— ์œ„ํ—˜: NTP ๋ฏธ์„ค์ • ์ƒํƒœ

# NTP ์„ค์ • ์—†๋Š” EC2 ์ธ์Šคํ„ด์Šค
$ timedatectl
NTP service: inactive  # ๋น„ํ™œ์„ฑํ™”!

# ์„œ๋ฒ„ ๊ฐ„ ์‹œ๊ฐ„ ๋ถˆ์ผ์น˜
Server A: 2024-01-15 14:23:45
Server B: 2024-01-15 14:25:12  # 1๋ถ„ 27์ดˆ ์ฐจ์ด!
Server C: 2024-01-15 14:22:03  # 1๋ถ„ 41์ดˆ ๋’ค์ฒ˜์ง

๋กœ๊ทธ ํƒ€์ž„์Šคํƒฌํ”„ ์‹ ๋ขฐ์„ฑ ์—†์Œ, ๋ณด์•ˆ์‚ฌ๊ณ  ์‹œ ํƒ€์ž„๋ผ์ธ ๋ถ„์„ ๋ถˆ๊ฐ€

โœ“ ๊ถŒ์žฅ: Amazon Time Sync ์„ค์ •

# Amazon Time Sync Service + chrony
$ chronyc tracking
Reference ID    : A9FEA97B (169.254.169.123)
System time     : 0.000000021 seconds fast

# ์„œ๋ฒ„ ๊ฐ„ ์‹œ๊ฐ„ ์ผ๊ด€์„ฑ
Server A: 2024-01-15 14:23:45.001
Server B: 2024-01-15 14:23:45.002
Server C: 2024-01-15 14:23:45.001

๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„ ์ •ํ™•๋„, ๋กœ๊ทธ ์‹ ๋ขฐ์„ฑ ํ™•๋ณด

๐Ÿšจ ํ•ต์‹ฌ ๋ฌธ์ œ

Amazon Time Sync Service(169.254.169.123) + chrony๋กœ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„ ์ •ํ™•๋„๋ฅผ ํ™•๋ณดํ•˜๊ณ , Launch Template์— ์„ค์ •์„ ์ž๋™ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”

์‚ฌ์ „ ํƒ์ง€ ๋ฐฉ์•ˆ

IaC ์ฝ”๋“œ ๋ถ„์„ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ ์ „ ์ ๊ฒ€

์‹œ๊ฐ„ ๋™๊ธฐํ™” ์„ค์ • ํƒ์ง€ ๋กœ์ง

ํƒ์ง€ ๋Œ€์ƒ ํŒ๋‹จ ์กฐ๊ฑด ์œ„ํ—˜๋„ ๋Œ€์‘
Launch Template chrony ์„ค์ • ๋ฏธํฌํ•จ High NTP ์„ค์ • ์ž๋™ํ™” ํ•„์š”
User Data 169.254.169.123 ๋ฏธ์‚ฌ์šฉ Medium Amazon Time Sync ๊ถŒ์žฅ
EKS Node Group ์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋ฏธ์„ค์ • High ํด๋Ÿฌ์Šคํ„ฐ ์žฅ์•  ์œ„ํ—˜
Security Group NTP ํฌํŠธ(123) ์ฐจ๋‹จ Medium ๋ฐฑ์—… NTP ์ ‘๊ทผ ๋ถˆ๊ฐ€
๐Ÿ””

์‚ฌํ›„ ๋Œ€์‘ ๋ฐฉ์•ˆ

๋Ÿฐํƒ€์ž„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ์ด์ƒํ–‰์œ„ ํƒ์ง€

์‹œ๊ฐ„ ๋™๊ธฐํ™” ๋Ÿฐํƒ€์ž„ ์ด๋ฒคํŠธ ๋Œ€์‘ ๋กœ์ง

ํƒ์ง€ ์ด๋ฒคํŠธ ํƒ์ง€ ๋ฐฉ๋ฒ• ์ž๋™ ๋Œ€์‘ ์‹ฌ๊ฐ๋„
NTP ๋ฐ๋ชฌ ์ค‘์ง€ CloudWatch Agent Auto SSM Run Command ์„œ๋น„์Šค ์žฌ์‹œ์ž‘ Critical
์‹œ๊ฐ„ ์˜คํ”„์…‹ > 1์ดˆ SSM Run Command Auto ๊ฐ•์ œ ๋™๊ธฐํ™” ์‹คํ–‰ High
NTP ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹คํŒจ SSM Run Command Alert SNS ์•Œ๋ฆผ + ๋„คํŠธ์›Œํฌ ์ ๊ฒ€ High
SSM ๋ฏธ๊ด€๋ฆฌ ์ธ์Šคํ„ด์Šค AWS Config Alert SSM Agent ์„ค์น˜ ์š”์ฒญ Medium
โœ“

์กฐ์น˜ ๊ฐ€์ด๋“œ

์ฆ‰์‹œ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ๊ถŒ์žฅ ์„ค์ •

Amazon Time Sync Service + chrony ์ž๋™ ์„ค์ •
launch-template.tf
# EC2 Launch Template - chrony ์ž๋™ ์„ค์ •
resource "aws_launch_template" "web" {
  name_prefix   = "web-server-"
  image_id      = data.aws_ami.amazon_linux_2023.id
  instance_type = var.instance_type

  user_data = base64encode(<<-EOF
    #!/bin/bash

    # chrony ์„ค์ • - Amazon Time Sync Service
    cat > /etc/chrony.conf << 'CHRONY_CONF'
    # Amazon Time Sync Service (๊ถŒ์žฅ)
    server 169.254.169.123 prefer iburst minpoll 4 maxpoll 4

    # ๋ฐฑ์—…์šฉ ๊ณต์šฉ NTP ํ’€
    pool time.aws.com iburst

    driftfile /var/lib/chrony/drift
    makestep 1.0 3
    rtcsync
    CHRONY_CONF

    systemctl enable chronyd
    systemctl restart chronyd
    timedatectl set-timezone Asia/Seoul
  EOF
  )

  tag_specifications {
    resource_type = "instance"
    tags = {
      NTP    = "Amazon-Time-Sync"
      ISMS-P = "2.9.6"
    }
  }
}

# SSM Document - ์‹œ๊ฐ„ ๋™๊ธฐํ™” ์ ๊ฒ€
resource "aws_ssm_document" "ntp_check" {
  name            = "NTP-Sync-Check"
  document_type   = "Command"
  document_format = "YAML"
  content = <<-DOC
    schemaVersion: '2.2'
    mainSteps:
      - action: aws:runShellScript
        inputs:
          runCommand:
            - 'chronyc tracking'
            - 'chronyc sources -v'
  DOC
}

# ์ •๊ธฐ ์ ๊ฒ€ ์Šค์ผ€์ค„ (๋งค์ผ ์˜ค์ „ 9์‹œ)
resource "aws_ssm_association" "ntp_check_schedule" {
  name = aws_ssm_document.ntp_check.name
  schedule_expression = "cron(0 9 * * ? *)"

  targets {
    key    = "tag:ISMS-P"
    values = ["2.9.6"]
  }
}

๐Ÿ’ก ํ•ต์‹ฌ: Amazon Time Sync Service(169.254.169.123)๋Š” VPC ๋‚ด์—์„œ ์ถ”๊ฐ€ ๋น„์šฉ ์—†์ด ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„ ์ •ํ™•๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. chrony๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ntpd๋ณด๋‹ค ๋น ๋ฅธ ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“š ์ฐธ๊ณ  ์ž๋ฃŒ

โ˜๏ธ AWS Time Sync ์„ค์ • ๊ฐ€์ด๋“œ โ†— ๐Ÿ“˜ Chrony ๊ณต์‹ ๋ฌธ์„œ โ†—
๐Ÿ“Š

๋ฆฌํฌํŠธ ๋ฐฉ์•ˆ

ISMS-P ์‹ฌ์‚ฌ ์ฆ์  ๋ฐ ์ •๊ธฐ ๋ณด๊ณ 

๐Ÿ“‹ ํ•„์ˆ˜ ์ฆ์  ์ž๋ฃŒ

์ฆ์  ํ•ญ๋ชฉ ์ˆ˜์ง‘ ๋ฐฉ๋ฒ•
NTP ์„ค์ • ํ˜„ํ™ฉ Launch Template User Data
์‹œ๊ฐ„ ๋™๊ธฐํ™” ์ƒํƒœ chronyc tracking ๊ฒฐ๊ณผ
์„œ๋ฒ„ ๊ฐ„ ์ผ๊ด€์„ฑ ์ „์ฒด ์ธ์Šคํ„ด์Šค ์˜คํ”„์…‹
์ •๊ธฐ ์ ๊ฒ€ ์ฆ์  SSM Association ์‹คํ–‰ ์ด๋ ฅ

๐Ÿ”ง ์ฆ์  ์ˆ˜์ง‘ CLI

# ์ „์ฒด ์ธ์Šคํ„ด์Šค ์‹œ๊ฐ„ ์ ๊ฒ€
aws ssm send-command \
  --document-name "NTP-Sync-Check" \
  --targets "Key=tag:ISMS-P,Values=2.9.6"

# SSM Association ์‹คํ–‰ ์ด๋ ฅ
aws ssm list-association-executions \
  --association-id "association-id" \
  --filters "Key=Status,Value=Success"
โšก

BSG ์ฐจ๋ณ„์ 

๊ธฐ์กด ๋„๊ตฌ๊ฐ€ ๋†“์น˜๋Š” ์ ๊ฒ€ ์˜์—ญ

๊ธฐ์กด ๋„๊ตฌ ๋ฐฉ์‹

  • NTP ์„ค์ • ์—ฌ๋ถ€๋งŒ ํ™•์ธ
  • chrony/ntpd ํ”„๋กœ์„ธ์Šค ์กด์žฌ ํ™•์ธ
  • ์‹œ๊ฐ„ ์˜คํ”„์…‹ ์ •ํ™•๋„ ๊ฒ€์ฆ ๋ถˆ๊ฐ€
  • ์„œ๋ฒ„ ๊ฐ„ ์‹œ๊ฐ„ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ ๋ถˆ๊ฐ€
  • Amazon Time Sync ์‚ฌ์šฉ ์—ฌ๋ถ€ ํ™•์ธ ๋ถˆ๊ฐ€

BSG ์ ‘๊ทผ ๋ฐฉ์‹

  • Launch Template + SSM + CloudWatch ํ†ตํ•ฉ ๊ฒ€์ฆ
  • NTP ์„ค์ •, Amazon Time Sync ์‚ฌ์šฉ, ํƒ€์ž„์กด ์„ค์ • ๊ฒ€์ฆ
  • ์‹œ๊ฐ„ ์˜คํ”„์…‹ ๋ชจ๋‹ˆํ„ฐ๋ง, NTP ๋ฐ๋ชฌ ์ƒํƒœ ์•Œ๋ฆผ
  • ์ „์ฒด ์ธ์Šคํ„ด์Šค ์‹œ๊ฐ„ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ
  • IaC ์ž๋™ํ™” + ์ •๊ธฐ ์ ๊ฒ€ + ์‹ฌ์‚ฌ ์ฆ์  ์ž๋™ํ™”
โ† ISMS-P ์ธ์ฆ ๊ธฐ์ค€๋ณ„ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋Œ์•„๊ฐ€๊ธฐ