시큐어 코딩

시큐어 코딩(Secure Coding)은 소스코드 단계부터 잠재적 취약점을 제거하고, 보안을 고려해 기능을 설계·구현하는 등 개발 전 과정에서 지켜야 할 보안 활동을 말한다. 배포 후 패치로 대응하는 것보다 개발 단계에서 막는 것이 훨씬 저렴하고 효과적이라는 인식에서 출발한다.

왜 필요한가

  • 초기 발견의 비용 효율성: 배포 후 취약점 대응 비용은 초기 대비 수백 배
  • 규제 준수: 개인정보보호법·GDPR·ISMS-P 등이 요구
  • 사용자 신뢰: 보안 사고는 브랜드 자산을 훼손
  • 공급망 보안: 하나의 라이브러리 취약점이 전체를 위협

대표적 취약점과 대응

취약점대응
SQL 인젝션매개변수화 쿼리, ORM 사용
[크로스 사이트 스크립팅]입력·출력 이스케이프, CSP
버퍼 오버 플로우경계 검사, 안전한 함수 사용
디렉터리 트래버설경로 정규화, 화이트리스트
인증·세션 관리 결함안전한 세션, 토큰 만료
민감 정보 노출기밀성, 일방향 암호화 방식
권한 관리 결함RBAC, DAC, 최소 권한

핵심 원칙

  • 입력 검증: 모든 외부 입력을 신뢰하지 않음
  • 출력 인코딩: 렌더링 맥락에 맞게 이스케이프
  • 최소 권한: 필요한 만큼만 권한 부여
  • 안전한 기본값: 보수적으로 시작, 필요 시 개방
  • 심층 방어: 한 층이 뚫려도 다음 층이 막음
  • 실패 시 안전한 상태: 예외 시 덜 위험한 쪽으로 동작
  • 로깅·모니터링: 공격 탐지와 사후 분석

실무 프로세스

  • 개발 단계: 보안 코딩 가이드, 린트 규칙
  • 빌드 단계: SAST(정적 분석), 의존성 취약점 스캔
  • 테스트 단계: DAST(동적 분석), 침투 테스트
  • 배포 후: WAF, SIEM, 취약점 관리

관련 표준·가이드

  • OWASP Top 10: 웹 취약점 대표 목록
  • CWE: 공통 취약점 열거
  • KISA 시큐어 코딩 가이드: 국내 표준
  • SEI CERT: C/C++, Java 등 언어별 규칙

관련 노트