소프트웨어 개발 보안
IT위키
더 많은 작업
「전자정부 SW 개발·운영자를 위한 소프트웨어 개발보안 가이드」는 분석·설계 단계에서 지킬 보안요구항목 20개를 정하고, 각 항목이 구현 단계에서 어떤 보안약점을 막기 위한 것인지 짝지어 둔다. 설계 항목을 지키지 않으면 그 짝의 보안약점이 코드에 생긴다.
| 유형 | 설계단계 보안요구항목 | 대응하는 구현단계 보안약점(예) |
|---|---|---|
| 입력데이터 검증 및 표현 (10) | DBMS 조회 및 결과 검증 | SQL 삽입 |
| XML 조회 및 결과 검증 | XML 삽입(XQuery·XPath 삽입) | |
| 디렉터리 서비스 조회 및 결과 검증 | LDAP 삽입 | |
| 시스템 자원 접근 및 명령어 수행 입력 데이터 검증 | 코드 삽입, 경로 조작 및 자원 삽입, 운영체제 명령어 삽입 | |
| 웹 서비스 요청 및 결과 검증 | 크로스사이트 스크립트 | |
| 웹 기반 중요 기능 수행 요청 유효성 검증 | 크로스사이트 요청 위조, 서버사이드 요청 위조 | |
| HTTP 프로토콜 유효성 검증 | HTTP 응답분할, 신뢰되지 않은 URL 주소로 자동접속 연결 | |
| 허용된 범위 내 메모리 접근 | 포맷 스트링 삽입, 메모리 버퍼 오버플로우 | |
| 보안기능 동작에 사용되는 입력값 검증 | 보안기능(인증·인가 등) 결정에 사용되는 부적절한 입력값, 정수형 오버플로우 - 쿠키·숨은 필드처럼 사용자가 바꿀 수 있는 값으로 권한을 판단하지 않도록 서버에서 검증한다 | |
| 업로드·다운로드 파일 검증 | 위험한 형식 파일 업로드, 무결성 검사 없는 코드 다운로드 | |
| 보안기능 (8) | 인증 대상 및 방식 | 적절한 인증 없는 중요 기능 허용 |
| 인증 수행 제한 | 반복된 인증시도 제한 기능 부재 | |
| 비밀번호 관리 | 취약한 비밀번호 허용, 하드코드된 중요정보 | |
| 중요자원 접근통제 | 부적절한 인가, 중요한 자원에 대한 잘못된 권한 설정 | |
| 암호키 관리 | 하드코드된 중요정보, 충분하지 않은 키 길이 사용 | |
| 암호연산 | 취약한 암호화 알고리즘 사용, 적절하지 않은 난수값 사용, 솔트 없이 일방향 해시 함수 사용 | |
| 중요정보 저장 | 암호화되지 않은 중요정보(저장) | |
| 중요정보 전송 | 암호화되지 않은 중요정보(전송) | |
| 에러처리 (1) | 예외처리 | 오류 메시지 정보노출, 오류상황 대응 부재, 부적절한 예외 처리 |
| 세션통제 (1) | 세션통제 | 잘못된 세션에 의한 데이터 정보 노출 |
- 솔트 없이 일방향 해시 함수 사용은 비밀번호·중요정보를 해시로 저장할 때 솔트를 붙이지 않아 레인보우 테이블 공격에 약해지는 보안약점이다. 입력값 검증이 아니라 보안기능 유형(암호연산·비밀번호 저장)에 속한다
- 입력데이터 검증 및 표현 유형의 설계 항목은 모두 "외부 입력을 어디에 쓰기 전에 검증하라"는 것이고, 짝이 되는 구현 보안약점은 대부분 삽입(인젝션) 계열이다
- 구현단계 보안약점 49개의 7개 유형 분류는 시큐어 코딩 문서에 있다
- SW보안의 모범 사례를 SDLC(Software Development Life Cycle)에 통합한 소프트웨어 개발 보안 생명주기 방법론