본문 바로가기
Etc2026년 4월 27일9분 읽기

보안 코딩 체크리스트 2026 — OWASP Top 10·Supply Chain·Secret Management

YS
김영삼
조회 14
보안 코딩 체크리스트 2026 — OWASP Top 10·Supply Chain·Secret Management

핵심 요약

2024~2026년 사이 보안 위협의 무게중심이 변했다. SQL Injection·XSS는 여전하지만 새로 등장한 것은 (1) 공급망 공격 (npm·PyPI 악성 패키지), (2) secret leak (GitHub·CI), (3) AI 생성 코드의 보안 취약점.

  • OWASP Top 10 2024 갱신
  • 공급망 공격 — npm·PyPI 악성 사례 다수
  • SBOM 의무화 (EU CRA, US Executive Order)
  • SLSA 프레임워크 표준화

1. OWASP Top 10 2024

  1. Broken Access Control (1위 유지)
  2. Cryptographic Failures
  3. Injection (SQL·NoSQL·Command)
  4. Insecure Design
  5. Security Misconfiguration
  6. Vulnerable and Outdated Components
  7. Identification and Authentication Failures
  8. Software and Data Integrity Failures
  9. Security Logging and Monitoring Failures
  10. Server-Side Request Forgery

2. SQL Injection — 여전히 흔함

// ❌ 절대 금지
const user = await db.query(`SELECT * FROM users WHERE id = ${req.params.id}`)

// ✅ Parameterized
const user = await db.query('SELECT * FROM users WHERE id = $1', [req.params.id])

// ✅ ORM (자동 escape)
const user = await prisma.user.findUnique({ where: { id: parseInt(req.params.id) } })

3. XSS

// React — 기본 안전
<div>{userInput}</div> // 자동 escape

// ❌ 위험
<div dangerouslySetInnerHTML={{ __html: userInput }} />

// ✅ 외부 HTML은 sanitize
import DOMPurify from 'isomorphic-dompurify'
<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(userInput) }} />

4. CSRF

# Next.js Server Actions는 자동 CSRF 보호 (2026)

# 일반 API는 명시적 토큰
<form>
  <input type="hidden" name="_csrf" value={csrfToken} />
  ...
</form>

# 또는 SameSite cookie
Set-Cookie: session=...; SameSite=Strict; HttpOnly; Secure

5. Authentication 베스트 프랙티스

  • password: bcrypt rounds 12+ (또는 argon2id)
  • session: HttpOnly + Secure + SameSite
  • JWT는 refresh token 쌍, refresh는 쿠키만
  • MFA 강제 (admin 계정)
  • OAuth 2.1 (PKCE 필수)
  • password reset: 1회용 토큰, 짧은 TTL (15분)

6. 공급망 공격 — npm·PyPI

방어 1) lockfile 정확성

# package.json 변경 시 항상 lockfile 함께 commit
# CI에서 npm ci (npm install 아님)

# pnpm은 더 엄격
pnpm install --frozen-lockfile

방어 2) audit 자동화

# GitHub Actions
- run: npm audit --audit-level=high
- run: pnpm audit

# 또는 Snyk·Dependabot
# main에 매주 PR 자동 생성

방어 3) 새 패키지 검증

  • 다운로드 수 (1만+ 권장)
  • 출시 후 30일 이상 (악성 패키지는 빨리 발견됨)
  • 유지보수 활동성
  • 의존성 트리 깊이 (5+ 의심)

7. Secret Management

절대 금지

# ❌ 코드에 하드코딩
const API_KEY = 'sk-...'

# ❌ .env를 git에 commit
# ❌ Slack·Discord에 공유
# ❌ Docker 이미지에 빌드 타임 ARG로 주입

권장

# 1) 환경변수 (개발)
import { config } from 'dotenv'
config()

# 2) 클라우드 secret manager (운영)
# AWS Secrets Manager, GCP Secret Manager, Azure Key Vault
import { SecretsManager } from '@aws-sdk/client-secrets-manager'
const sm = new SecretsManager()
const { SecretString } = await sm.getSecretValue({ SecretId: 'app/db' })

# 3) 1Password Connect / Vault (멀티클라우드)

8. 코드에서 Secret 자동 검출

# pre-commit hook
npm install -D @secretlint/secretlint-rule-preset-recommend
npx secretlint "**/*"

# CI에서
- name: TruffleHog
  uses: trufflesecurity/trufflehog@v3
  with:
    extra_args: --only-verified

9. SBOM (Software Bill of Materials)

# Syft로 생성
syft yourimage:tag -o spdx-json > sbom.spdx.json
syft yourimage:tag -o cyclonedx-json > sbom.cdx.json

# 컨테이너에 첨부
cosign attest --predicate sbom.cdx.json yourimage:tag

# 검증
cosign verify-attestation yourimage:tag

10. SLSA Framework

Level요구사항
1빌드 process 문서화
2버전 관리 + 빌드 서비스
3출처 검증 가능 (provenance)
4이중 리뷰 + 봉인된 빌드

EU CRA·미국 정부 계약은 SLSA 3 이상 요구.

11. AI 생성 코드 보안

Copilot·Cursor 등으로 생성된 코드의 보안 검토:

  • SQL string concatenation 자주 발생 (특히 helper 함수)
  • password hashing 없이 평문 비교 사례
  • JWT secret 하드코딩
  • open redirect 패턴
# 권장 — AI 생성 코드 자동 검토
# .github/workflows/ai-security-review.yml
# Claude·GPT로 보안 관점 자동 리뷰

12. 컨테이너 보안

# 베이스 이미지 minimal
FROM node:20-alpine  # 풀 ubuntu 대신

# non-root 사용자
USER 1000

# 빌드 시점 보안 스캔
# .github/workflows/...
- name: Trivy
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: yourimage:latest
    severity: CRITICAL,HIGH

13. 운영 모니터링

  • 실패한 인증 5회 연속 → 알림
  • 관리자 권한 변경 → 즉시 알림
  • 새 IP에서의 admin 로그인 → 알림
  • 비정상 outbound 트래픽 (Falco)

14. 네트워크

  • 모든 외부 노출은 TLS (Let's Encrypt 자동)
  • internal 통신도 mTLS (service mesh)
  • WAF (Cloudflare·AWS WAF)
  • rate limiting (10 req/sec/IP 기본)

15. 보안 체크리스트 — 신규 서비스

  • [ ] HTTPS 강제 (HSTS preload)
  • [ ] 모든 입력 validation·sanitization
  • [ ] Parameterized queries
  • [ ] CSP 헤더
  • [ ] X-Frame-Options: DENY
  • [ ] 인증·인가 RBAC
  • [ ] 패스워드 bcrypt 12+ 또는 argon2id
  • [ ] Session HttpOnly + Secure + SameSite
  • [ ] CSRF 토큰 또는 SameSite
  • [ ] secret manager (코드에 절대 하드코딩 안 함)
  • [ ] 의존성 자동 업데이트 (Dependabot)
  • [ ] SBOM 생성·검증
  • [ ] 로깅 (PII는 마스킹)
  • [ ] WAF + rate limit
  • [ ] 침해 대응 매뉴얼

자주 묻는 질문

모든 항목 적용은 부담?한 번에 X. 우선순위로 SQL injection·secret 노출·인증부터.

AI 생성 코드 정말 위험한가?일부 패턴 반복 발견. 인간 리뷰 + 자동 보안 검사 둘 다 필수.

SLSA 인증 받아야 하나?정부 계약·EU 시장이면 필수. 일반 SaaS도 세일즈 자료로 활용 가능.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록