애플리케이션 보안

보안 원칙

meellon 2026. 6. 19. 08:00

학습 목표

최소 권한(Least Privilege)을 설명하고 예시를 들 수 있다.

다층 방어(Defense in Depth)를 설명할 수 있다.

실패 시 안전(Fail Secure / Fail Closed)과 기본 거부를 구분할 수 있다.

완전 매체(Complete Mediation)가 왜 필요한지 설명할 수 있다.

문제 상황

  • 프로덕션 DB 계정이 앱 서버 전체에 SUPERUSER
    • SQLi 한 줄이면 전체 스키마 노출
  • WAF만 믿고 앱에서 입력 검증을 생략
    • WAF 우회 시 방어층이 없음
  • 인증 서버 장애 시 모든 API가 열려 버림 (fail open)
  • 한 번 로그인하면 토큰 만료까지 권한 재검사 없음

오리엔테이션에서 CIA와 인증·인가를 봤다. 원칙은 구체 기술(TLS, JWT) 앞에 적용하는 설계 규칙이다.

1. 최소 권한 (Least Privilege)

주체(사용자·프로세스·서비스)에게 업무에 필요한 최소 권한만 부여한다.

계층 나쁜 예 좋은 예
DB 앱이 DROP TABLE 가능 SELECT/INSERT/UPDATE만, 테이블 단위
OS/K8s 컨테이너 root non-root, read-only rootfs
Cloud IAM AdministratorAccess 역할별 정책, workload identity
모든 API가 admin RBAC, 리소스 소유권 검사
  • 권한은 시작을 넓게 주지 않는다
    • 개발 편의로 준 admin이 프로덕션에 그대로 남는 경우가 많음
  • 정기 검토
    • 퇴사·역할 변경 시 즉시 회수
  • JWT·세션에 과도한 scope 넣지 않기 (JWT 편)

2. 다층 방어 (Defense in Depth)

한 통제가 뚫려도 다음 층이 막는다. CIA 각각에 여러 방어.

[Internet]
    → WAF / Rate limit
    → TLS 종료
    → API Gateway 인증
    → 앱 입력 검증·파라미터화 쿼리
    → 비즈니스 로직 인가
    → DB 최소 권한 계정
    → 감사 로그
네트워크 방화벽, SG, private subnet
전송 TLS, mTLS
인증·인가 OAuth, RBAC
OWASP 대응, CSRF 토큰
데이터 암호화 at rest, 마스킹
  • "우리는 HTTPS 쓰니까 안전" — 한 층만으로는 부족
  • 층마다 다른 실패 모드 — 모두 같은 버그에 의존하지 않게

3. 실패 시 안전 (Fail Secure)

오류·장애 시 더 열리지 않고 닫히거나 거부하는 쪽이 기본.

  Fail Open (위험) Fail Closed (권장)
인증 서버 다운 모든 요청 통과 503, 요청 거부
권한 캐시 오류 admin 허용 deny
WAF 파싱 실패 트래픽 bypass block 또는 strict mode
  • 기본 거부 (Deny by Default)
    • 화이트리스트: 명시적으로 허용한 것만
    • API: 인증·인가 없는 엔드포인트 기본 차단
  • 우아한 실패 vs 보안 실패
    • UX는 degraded mode 가능해도, 권한 판단은 불확실하면 deny

4. 완전 매체 (Complete Mediation)

모든 접근마다 권한을 다시 검사한다. 한 번 통과했다고 영구 허용이 아니다.

  • 매 API 요청마다 인가 확인
  • 파일 다운로드 URL도 서명·만료 (presigned URL)
  • 관리자 세션도 재인증 (민감 작업)
위반 예 원칙
로그인 후 URL만 알면 영구 접근 매 요청 검사
숨겨진 admin API 라우팅·인가 일관 적용
캐시된 "admin=true" TTL·무효화

5. 기타 핵심 원칙 (요약)

원칙 한 줄
경제성 of 메커니즘 공격 비용 > 방어 비용이게
심리적 수용성 보안이 너무 불편하면 우회됨 — 균형
개방 설계 비밀에 의존하지 않음 (Kerckhoffs)
최소 공통 공유 컴포넌트·권한 최소화
심층 방어 + 최소 권한 실무에서 가장 자주 인용되는 조합
  • 원칙은 체크리스트로 쓴다
    • 새 API: 인증? 인가? 입력 검증? 로그? 실패 시 closed?
    • 배포 전 보안 체크리스트 편에서 다시 묶는다

다음에 다룰 것

  • TLS 심화
  • cipher suite, mTLS 개요

해당 내용은 OWASP Cheat Sheet Series 및 NIST SP 800-53 Rev. 5 의 내용을 기반으로 합니다.

'애플리케이션 보안' 카테고리의 다른 글

OAuth 2.0  (0) 2026.06.23
JWT  (0) 2026.06.22
인증 기초  (0) 2026.06.21
TLS 심화  (0) 2026.06.20
보안 오리엔테이션  (0) 2026.06.18