2011년 6월에 최초로 개정된 소프트웨어 개발보안가이드가 2021년 11월에 구현단계 보안약점 기준확대에 따른 내용을 추가하여 개정되었다.
소프트웨어 보안약점 진단하여 제거하는 것은 2011년 전자정부 지원사업을 대상으로 시범사업을 시작으로 현재는 의무화 되어 있다. 설계, 개발단계에서 보안약점을 제거하지 않으면 운영단계에서 제거하기 어려우며 제거 비용도 기하급수적으로 증가하게 된다.
SW개발보안은 SW 개발·변경 시 SW 보안 취약점을 최소화하는 보안 활동이다. 요구사항 분석, 설계, 개발, 테스트, 유지보수 등 SW 개발 생명주기 내 단계별로 요구되는 보안 활동을 수행해 안전한 SW를 개발하는 것이 목표이다. (구현 단계의 보안을 의미하는 시큐어코딩의 넓은 개념)
보안취약점은 SW 실행 시점에 보안약점이 원인이 돼 발생하는 실제적 위협을 가리키며, 보안취약점 근본 원인이 되는 보안약점을 제거하면 해킹 등 보안사고를 원천적으로 차단할 수 있다.
보안약점을 제거하기 위해서는 발주자, 사업자가 SW 기획, 분석, 설계 단계에서부터 보안을 고려하는 것이 필요하다. 실제 코딩을 하는 구현 단계에서도 SW개발보안 가이드, SW보안약점 진단가이드를 참고하여 안전하게 코딩을 해야 한다. 코딩이 완료되면 소스코드에 혹시 남아 있을지도 모르는 보안약점을 제거하기 위해 소스코드 진단도구를 통해 보안약점을 찾아내고, 보안약점을 제거하기 위해 SW개발보안 가이드, SW보안약점 가이드 등을 참고하여소스코드를 수정해야 한다. 프로젝트 착수시 개발 프로젝트 참여 인력에 대한 SW개발보안 교육도 병행해야 한다.
출처 : 인터넷진흥원
소프트웨어 개발보안 가이드 발간 배경
공격자의 초점이 지속적으로 애플리케이션 계층을 향해 이동함에 따라 소프트웨어(SW, Software) 자원 보호가 중요해졌다. 최근 발생되는 사이버공격 시도의 약 75%는 소프트웨어의 보안 취약점을 악용하는 것으로 특히 외부에 공개되어 불특정 다수를 대상으로 사용자의 정보를 처리하는 웹애플리케이션의 취약점으로 인해 중요한 개인정보가 유출되는 침해사고가 빈번하게 발생되고 있다. 보안강화를 위해 구축해놓은 침입차단시스템과 같은 보안장비로는 응용프로그램의 취약점에 대한 공격을 완벽히 방어하는 것은 불가능하다.
‘SW개발보안’은 소프트웨어 개발과정에서 개발자의 실수, 논리적 오류 등으로 인해 발생될 수 있는 보안 취약점, 보안약점들을 최소화하여 사이버 보안 위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동을 의미한다. 즉, SW개발 생명주기(SDLC, Software Development Life Cycle)의 각 단계별로 요구되는 보안활동을 수행함으로써 안전한 소프트웨어를 만들 수 있도록 한다.
SW개발보안의 중요성을 인식한 미국의 경우 국토안보부(DHS)를 중심으로 시큐어코딩(Secure Coding)을 포함한 SW개발 전 과정(설계, 구현, 시험 등)에 대한 보안 활동 연구를 활발히 진행하고 있으며, 이는 2011년 발표한 "안전한 사이버 미래를 위한 청사진(Blueprint for a Secure Cyber Future)"에 나타나 있다.
국내의 경우, 2009년부터 SW개발단계에서 SW보안약점을 진단하여 제거하는 SW개발보안 관련 연구를 진행하면서, 2009년부터 2011년까지 전자정부 지원 사업을 대상으로 SW보안약점 진단 시범사업을 수행하였다. SW보안약점 제거·조치 성과에 따라 2012년 SW개발보안 제도가 도입되어 단계적으로 의무화가 이루어졌다
소프트웨어 개발보안 가이드 목적과 구성
소프트웨어 보안의 목표는 성공적인 사업을 운영하기 위한 정보 자원의 기밀성, 무결성, 가용성을 유지하는 것이다. 이러한 목표를 달성하기 위해서 보안통제 기능의 구현이 요구되며, 이 가이드에서는 소프트웨어의 취약점을 완화시킬 수 있는 소프트웨어의 각 개발 단계별 기술적 통제 항목에 중점을 두고 있다.
개발자와 공격자의 접근방식은 기본적으로 차이가 있다. 개발자는 애플리케이션의 정상적인 의도에 초점을 맞춰 접근하고, 공격자는 정상적인 의도 외에 허용되는 모든 동작하는 것에 관심을 가진다. 즉 위협을 최소화하는 방법은 소프트웨어를 개발하는 초기단계부터 보안요구사항을 정의하고, 설계단계에서 보안을 적용하여 공격자에게 허용되는 위협들을 최소화해야 하는 것이다.
소프트웨어 보안 취약점은
• 보안 요구사항이 정의되지 않았거나,
• 설계에 논리적인 오류가 있거나,
• 보안에 취약한 코딩 규칙을 적용하였거나,
• 소프트웨어 배치가 적절하지 않았거나,
• 발견된 취약점에 대해 적절한 관리 또는 패치를 하지 않은 경우
발견되며, 이러한 취약점으로 인해 시스템이 처리하는 중요정보가 노출되거나 정상적인 서비스가 불가능한 상황이 발생하게 된다.
목차
제1장 개요
제1절 배경 8
제2절 가이드의 목적과 구성 9
제2장 소프트웨어 개발보안
제1절 개요 12
1. 소프트웨어 개발보안 필요성 12
제2절 소프트웨어 개발보안 체계 14
제3절 소프트웨어 개발보안 방법론 16
1. 소프트웨어 개발 생명주기 이해 16
2. 소프트웨어 개발 방법론 이해 17
3. 소프트웨어 개발보안 방법론 이해 20
4. 소프트웨어 개발보안 적용 사례 23
5. 소프트웨어 개발보안 적용 효과 27
제4절 프로젝트 참여 직무별 보안활동 28
1. 역할(Role)별 보안활동 28
제3장 분석∙설계단계 보안강화 활동
제1절 분석·설계단계 주요 보안활동 32
1. 분석·설계단계 개발보안 필요성 32
2. 정보에 대한 보안항목 식별 32
3. 설계단계 보안설계 기준 35
4. 구현단계 기준과의 관계 37
5. 설계단계 개발보안 적용 효과 39
제2절 기능설계 시 보안설계 적용 방법 40
제3절 보안설계 기준 정의 및 설계 시 고려사항 45
1. 입력데이터 검증 및 표현 45
1.1 DBMS 조회 및 결과 검증 45
1.2 XML 조회 및 결과 검증 50
1.3 디렉토리 서비스 조회 및 결과 검증 53
1.4 시스템 자원 접근 및 명령어 수행 입력값 검증 55
1.5 웹 서비스 요청 및 결과 검증 60
1.6 웹 기반 중요기능 수행 요청 유효성 검증 65
1.7 HTTP 프로토콜 유효성 검증 69
1.8 허용된 범위 내 메모리 접근 73
1.9 보안기능 입력값 검증 76
1.10 업로드·다운로드 파일 검증 80
2. 보안기능 86
2.1 인증대상 및 방식 86
2.2 인증수행 제한 91
2.3 비밀번호 관리 94
2.4 중요자원 접근통제 101
2.5 암호키 관리 108
2.6 암호연산 113
2.7 중요정보 저장 119
2.8 중요정보 전송 123
3. 에러처리 126
3.1 예외처리 126
4. 세션통제 131
4.1 세션통제 131
제4장 구현단계 시큐어코딩 가이드
제1절 입력데이터 검증 및 표현 136
1. SQL 삽입 136
2. 코드 삽입 143
3. 경로 조작 및 자원 삽입 146
4. 크로스사이트 스크립트 152
5. 운영체제 명령어 삽입 157
6. 위험한 형식 파일 업로드 162
7. 신뢰되지 않는 URL 주소로 자동접속 연결 166
8. 부적절한 XML 외부 개체 참조 170
9. XML 삽입 174
10. LDAP 삽입 183
11. 크로스사이트 요청 위조 188
12. 서버사이드 요청 위조 191
13. HTTP 응답분할 193
14. 정수형 오버플로우 196
15. 보안기능 결정에 사용되는 부적절한 입력값 200
16. 메모리 버퍼 오버플로우 204
17. 포맷 스트링 삽입 207
제2절 보안기능 211
1. 적절한 인증 없는 중요기능 허용 211
2. 부적절한 인가 214
3. 중요한 자원에 대한 잘못된 권한 설정 218
4. 취약한 암호화 알고리즘 사용 222
5. 암호화되지 않은 중요정보 226
6. 하드코드된 중요정보 235
7. 충분하지 않은 키 길이 사용 243
8. 적절하지 않은 난수값 사용 246
9. 취약한 비밀번호 허용 250
10. 부적절한 전자서명 확인 253
11. 부적절한 인증서 유효성 검증 255
12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 258
13. 주석문 안에 포함된 시스템 주요정보 261
14. 솔트 없이 일방향 해쉬함수 사용 264
15. 무결성 검사 없는 코드 다운로드 268
16. 반복된 인증시도 제한 기능 부재 273
제3절 시간 및 상태 277
1. 경쟁조건: 검사시점과 사용시점(TOCTOU) 277
2. 종료되지 않는 반복문 또는 재귀함수 283
제4절 에러처리 285
1. 오류 메시지 정보노출 285
2. 오류 상황 대응 부재 288
3. 부적절한 예외 처리 291
제5절 코드오류 294
1. Null Pointer 역참조 294
2. 부적절한 자원 해제 299
3. 해제된 자원 사용 304
4. 초기화되지 않은 변수 사용 307
5. 신뢰할 수 없는 데이터의 역직렬화 309
제6절 캡슐화 314
1. 잘못된 세션에 의한 데이터 정보노출 314
2. 제거되지 않고 남은 디버그 코드 319
3. Public 메소드부터 반환된 Private 배열 322
4. Private 배열에 Public 데이터 할당 326
제7절 API 오용 330
1. DNS lookup에 의존한 보안결정 330
2. 취약한 API 사용 334
제5장 부록
제1절 설계단계 보안설계 기준 340
1. 입력데이터 검증 및 표현 340
2. 보안기능 343
3. 에러처리 345
4. 세션통제 345
제2절 구현단계 보안약점 제거 기준 346
1. 입력데이터 검증 및 표현 346
2. 보안기능 347
3. 시간 및 상태 348
4. 에러처리 348
5. 코드오류 348
6. 캡슐화 349
7. API 오용 349
제3절 설계단계 보안설계 적용계획서 350
1. 입력데이터 검증 및 표현(예시) 350
2. 보안기능 (예시) 350
3. 에러처리 (예시) 351
4. 세션통제 (예시) 351
제4절 설계단계 보안설계 적용 산출물 352
1. DB에 데이터를 입력하는 기능(예시) 352
2. 데이터를 조회하는 기능(예시) 355
3. 데이터를 수정/삭제하는 기능(예시) 357
4. 파일을 업로드 하는 기능(예시) 359
5. 파일을 다운로드 하는 기능(예시) 361
6. 웹 에디터를 사용하는 기능(예시) 363
7. 관리자 페이지 기능(예시) 366
제5절 용어정리 368
'보안 > 자료실' 카테고리의 다른 글
개인정보 처리방침 작성지침(2022.3월 개정) (0) | 2022.04.15 |
---|---|
알기 쉬운 개인정보 처리 동의 안내서(2022.03) (0) | 2022.04.14 |
소프트웨어 보안약점 진단가이드 (2021.11) (0) | 2022.04.12 |
가명정보 처리 가이드라인(2020.09, 제정) (0) | 2021.04.14 |
개인정보 보호 법령 및 지침·고시 해설서(2020.12, 개정) (0) | 2021.04.10 |