본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Secure Coding

안전한 소프트웨어 개발을 위해 소스코드 등에 존재할 수 있는 잠재적인 보안 취약점을 제거하고, 보안을 고려하여 기능을 설계 및 구현하는 등 소프트웨어 개발 과정에서 지켜야 할 보안 활동

  • 해킹 공격의 상당수가 소프트웨어의 보안약점을 악용하므로, 개발 단계에서 원인을 제거하여 침해 사고를 예방한다.
  • 운영 중 취약점을 수정하는 것보다 개발 단계에서 제거하는 편이 비용이 적게 든다.
  • 국내에서는 '소프트웨어 개발보안'이라는 이름으로 제도화되어 있다. 관련 문서: 소프트웨어 개발 보안, Secure SDLC

보안약점 7개 유형

편집 원본 편집

행정안전부·한국인터넷진흥원 「소프트웨어 개발보안 가이드」(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();
  • 「행정기관 및 공공기관 정보시스템 구축·운영 지침」(행정안전부 고시)에 따라, 행정기관 등이 「전자정부법 시행령」 제71조제1항에 해당하는 정보화사업(감리 대상 사업)을 추진할 때 적용한다.
  • 적용 범위는 신규 개발의 경우 설계단계 산출물과 소스코드 전체, 유지보수의 경우 변경된 설계단계 산출물과 소스코드 전체이며, 상용 소프트웨어는 제외한다.
  • 2012년부터 사업 규모에 따라 단계적으로 의무화되었고, 2014년부터 감리 대상 정보화사업 전체로 확대되었다.
  • 감리 과정에서 보안약점 제거 여부를 확인한다.
  • 「전자정부법」과 「행정기관 및 공공기관 정보시스템 구축·운영 지침」: 공공 부문 SW 개발보안 적용 근거
  • 「소프트웨어 개발보안 가이드」: 설계·구현 단계 보안약점과 대응 방법
  • 「소프트웨어 보안약점 진단가이드」: 진단 기준과 절차
  • 국제 기준: CWE, OWASP Top 10
  • 개별 보안약점이 7개 유형 중 어디에 속하는지 묻는다. 예: 경쟁조건은 시간 및 상태, Null Pointer 역참조는 코드오류, DNS lookup에 의존한 보안결정은 API 오용
  • SQL 삽입의 대응 방법(PreparedStatement 등 매개변수화된 쿼리)을 설명한다.
  • 에러처리 유형 3개(오류 메시지 정보노출, 오류상황 대응 부재, 부적절한 예외 처리)를 기억한다.