시큐어 코딩
시큐어 코딩(Secure Coding)은 소스코드 단계부터 잠재적 취약점을 제거하고, 보안을 고려해 기능을 설계·구현하는 등 개발 전 과정에서 지켜야 할 보안 활동을 말한다. 배포 후 패치로 대응하는 것보다 개발 단계에서 막는 것이 훨씬 저렴하고 효과적이라는 인식에서 출발한다.
왜 필요한가
- 초기 발견의 비용 효율성: 배포 후 취약점 대응 비용은 초기 대비 수백 배
- 규제 준수: 개인정보보호법·GDPR·ISMS-P 등이 요구
- 사용자 신뢰: 보안 사고는 브랜드 자산을 훼손
- 공급망 보안: 하나의 라이브러리 취약점이 전체를 위협
대표적 취약점과 대응
| 취약점 | 대응 |
|---|---|
| SQL 인젝션 | 매개변수화 쿼리, ORM 사용 |
| [크로스 사이트 스크립팅] | 입력·출력 이스케이프, CSP |
| 버퍼 오버 플로우 | 경계 검사, 안전한 함수 사용 |
| 디렉터리 트래버설 | 경로 정규화, 화이트리스트 |
| 인증·세션 관리 결함 | 안전한 세션, 토큰 만료 |
| 민감 정보 노출 | 기밀성, 일방향 암호화 방식 |
| 권한 관리 결함 | RBAC, DAC, 최소 권한 |
핵심 원칙
- 입력 검증: 모든 외부 입력을 신뢰하지 않음
- 출력 인코딩: 렌더링 맥락에 맞게 이스케이프
- 최소 권한: 필요한 만큼만 권한 부여
- 안전한 기본값: 보수적으로 시작, 필요 시 개방
- 심층 방어: 한 층이 뚫려도 다음 층이 막음
- 실패 시 안전한 상태: 예외 시 덜 위험한 쪽으로 동작
- 로깅·모니터링: 공격 탐지와 사후 분석
실무 프로세스
- 개발 단계: 보안 코딩 가이드, 린트 규칙
- 빌드 단계: SAST(정적 분석), 의존성 취약점 스캔
- 테스트 단계: DAST(동적 분석), 침투 테스트
- 배포 후: WAF, SIEM, 취약점 관리
관련 표준·가이드
- OWASP Top 10: 웹 취약점 대표 목록
- CWE: 공통 취약점 열거
- KISA 시큐어 코딩 가이드: 국내 표준
- SEI CERT: C/C++, Java 등 언어별 규칙
관련 노트
- 크로스 사이트 스크립팅 · 버퍼 오버 플로우: 대표 취약점
- 기밀성 · 무결성 · 가용성: 보안 3요소
- DAC · RBAC: 접근 통제 모델
- 일방향 암호화 방식 · 세션: 인증·데이터 보호
- SDLC: 시큐어 코딩이 적용되는 전체 과정