시큐어 코딩
IT 위키
더 많은 작업
- Secure Coding
안전한 소프트웨어 개발을 위해 소스코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야 할 보안 활동
- 해킹 공격의 상당수가 소프트웨어의 보안약점을 악용하므로, 개발 단계에서 원인을 제거하여 침해 사고를 예방한다.
- 운영 중 취약점을 수정하는 것보다 개발 단계에서 제거하는 편이 비용이 적게 든다.
- 국내에서는 '소프트웨어 개발보안'이라는 이름으로 제도화되어 있다. 관련 문서: 소프트웨어 개발 보안, Secure SDLC
행정안전부·한국인터넷진흥원 「소프트웨어 개발보안 가이드」(2021)는 구현단계 보안약점 49개를 7개 유형으로 나눈다.
| 유형 | 대표 보안약점 |
|---|---|
| 입력데이터 검증 및 표현 (17개) | SQL 삽입, 코드 삽입, 경로 조작 및 자원 삽입, 크로스사이트 스크립트, 운영체제 명령어 삽입, 위험한 형식 파일 업로드, 크로스사이트 요청 위조, 서버사이드 요청 위조, HTTP 응답분할, 정수형 오버플로우, 메모리 버퍼 오버플로우, 포맷 스트링 삽입 |
| 보안기능 (16개) | 적절한 인증 없는 중요 기능 허용, 부적절한 인가, 중요한 자원에 대한 잘못된 권한 설정, 취약한 암호화 알고리즘 사용, 암호화되지 않은 중요정보, 하드코드된 중요정보, 충분하지 않은 키 길이 사용, 적절하지 않은 난수값 사용, 취약한 비밀번호 허용, 솔트 없이 일방향 해쉬 함수 사용, 반복된 인증시도 제한 기능 부재 |
| 시간 및 상태 (2개) | 경쟁조건: 검사 시점과 사용 시점(TOCTOU), 종료되지 않는 반복문 또는 재귀 함수 |
| 에러처리 (3개) | 오류 메시지 정보노출, 오류상황 대응 부재, 부적절한 예외 처리 |
| 코드오류 (5개) | Null Pointer 역참조, 부적절한 자원 해제, 해제된 자원 사용, 초기화되지 않은 변수 사용, 신뢰할 수 없는 데이터의 역직렬화 |
| 캡슐화 (4개) | 잘못된 세션에 의한 데이터 정보 노출, 제거되지 않고 남은 디버그 코드, Public 메서드로부터 반환된 Private 배열, Private 배열에 Public 데이터 할당 |
| API 오용 (2개) | DNS lookup에 의존한 보안결정, 취약한 API 사용 |
- 이전 가이드의 '하드코드된 비밀번호'는 2021년 가이드에서 '하드코드된 중요정보'로 바뀌었다.
- 설계단계 보안약점 20개는 입력데이터 검증 및 표현, 보안기능, 에러처리, 세션통제의 4개 유형으로 나뉜다.
SQL 삽입을 막으려면 입력값을 쿼리 문자열에 직접 붙이지 않고 매개변수화된 쿼리를 사용한다.
// 취약: 입력값이 SQL 문에 그대로 연결됨
String sql = "SELECT * FROM users WHERE id = '" + id + "'";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
// 안전: PreparedStatement로 입력값을 바인딩
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE id = ?");
ps.setString(1, id);
ResultSet rs2 = ps.executeQuery();
- 관련 문서: 자바 PreparedStatement
- 「전자정부법」과 「행정기관 및 공공기관 정보시스템 구축·운영 지침」: 공공 부문 SW 개발보안 적용 근거
- 「소프트웨어 개발보안 가이드」: 설계·구현 단계 보안약점과 대응 방법
- 「소프트웨어 보안약점 진단가이드」: 진단 기준과 절차
- 국제 기준: CWE, OWASP Top 10
- 개별 보안약점이 7개 유형 중 어디에 속하는지 묻는다. 예: 경쟁조건은 시간 및 상태, Null Pointer 역참조는 코드오류, DNS lookup에 의존한 보안결정은 API 오용
- SQL 삽입의 대응 방법(PreparedStatement 등 매개변수화된 쿼리)을 설명한다.
- 에러처리 유형 3개(오류 메시지 정보노출, 오류상황 대응 부재, 부적절한 예외 처리)를 기억한다.