소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // SW 보안약점 진단과 같이 다양한 이름으로 불리는 진단 과업 중 하나이다.
SW개발보안은 해킹 등 사이버공격의 원인인 보안약점을 SW개발단계에서 사전에 제거하고 SW 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 SW를 개발·운영하기 위한 목적으로 적용하는 개발체계이다.
해당 내용은 KISA에서 발간하는 취약점 진단 가이드 항목을 기준으로 작성한다.
1. 개요
안전한 소프트웨어를 만들기 위해서는 분석단계에서부터 보안요구항목을 식별해야 하며 발생 가능 한 위협을 최소화할 수 있도록 설계, 구현하도록 노력해야 한다. 이러한 개발단계에서 적절한 보안 활동이 수행되었는지 점검하기 위한 활동을 “소프트웨어 개발보안 진단”으로 정의할 수 있다.
분석·설계단계의 진단 활동은 분석단계에 보안항목이 명확하게 식별되고, 설계단계에 이러한 보안 항목들이 적용되어 소프트웨어가 안전하게 동작되도록 설계되었는지를 점검하는 작업이다. 이 단계 에서의 진단 대상은 분석과 설계 과정에서 만들어진 설계 산출물이다.
프로젝트에 적용되는 개발방법론에 따라 분석·설계단계에서 만들어지는 산출물의 종류나 내용의 범위가 다양할 수 있다. 하지만 진단가이드를 통해 분석·설계단계의 진단 시점, 대상 산출물, 진단 방법들을 표준화하기 위한 노력을 하였으며, 이를 통해 분석·설계단계에 보안을 고려하여 소프트웨어 를 설계할 수 있도록 하고자 하였다.
분석·설계단계에서 설계항목들이 적절히 반영되었는지 여부는 일반적으로 설계가 완료되고 구현이 시작되거나 구현을 준비하는 시점에 진단하는 것이 적절하다. 보안요구항목 적용에 대한 진단은 착수 → 진단 → 보고서 작성 및 제출 → 종료 의 순서로 수행하며 진단대상 산출물은 한국정보화 진흥원에서 배포한 “CBD SW개발 표준 산출물 가이드“에서 제시하고 있는 분석·설계단계 산출물 종류와 이름을 기반으로 하였다.
구현단계에서의 진단활동은 구현된 소스코드에 대한 잠재적인 보안약점들이 소스코드 보안약점진단 도구와 진단원의 수동진단을 통해 진단하고, 검출된 보안약점 제거를 위한 대응방법을 제시하여 구현 단계에서 안전한 소프트웨어를 만들 수 있도록 지원한다.
2. 설계단계 진단 항목
가. 입력데이터 검증 및 표현
- 사용자, 프로그램 입력 데이터에 대한 유효성 검증 체계를 갖추고, 실패시 처리할 수 있도록 설계
번호 | 항목명 | 설명 | 비고 |
SR1‐1 | DBMS 조회 및 결과 검증 | DBMS 조회를 위한 질의문(SQL) 생성시 사용되는 입력 값과 조회 결과에 대한 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리방법 설계 | 입출력 값 검증 |
SR1‐2 | XML조회 및 결과 검증 | XML 조회를 위한 질의문(XPath, XQuery 등) 생성시 사용되는 입력 값과 조회결과에 대한 검증방법 (필터링 등) 설계 및 유효하지 않은 값에 대한 처리 방법 설계 | |
SR1‐3 | 디렉터리 서비스 조회 및 결과 검증 | 디렉터리 서비스 조회(LDAP 등)시 사용되는 입력값과 조회결과에 대한 검증방법(필터링 등) 설계 및 유효하지 않은 값에 대한 처리 방법 설계 | |
SR1‐4 | 시스템 자원 접근 및 명령어 수행 입력값 검증 | 시스템 자원접근 및 명령어 수행을 위해 사용되는 입력 값에 대한 유효성 검증방법과 유효하지 않은 값에 대한 처리방법 설계 | |
SR1‐5 | 웹 서비스 요청 및 결과 검증 | 웹 서비스(게시판 등) 요청(스크립트 게시 등)과 응답 결과(스크립트 포함 웹 페이지 등)에 대한 검증방법과 적절하지 않은 데이터에 대한 처리방법 설계 | |
SR1‐6 | 웹 기반 중요기능 수행요청 유효성 검증 | 사용자 권한확인(인증 등)이 필요한 중요기능(결제 등)에 대한 웹 서비스 요청에 대한 유효성 검증방법과 유효하지 않은 요청에 대한 처리방법 설계 | |
SR1‐7 | HTTP 프로토콜 유효성 검증 | 비정상적인 HTTP 헤더, 자동연결 URL 링크 등 사용자가 원하지 않은 결과를 생성할 수 있는 HTTP 헤더 및 응답결과에 대한 유효성 검증방법과 유효하지 않은 값에 대한 처리방법 설계 | |
SR1‐8 | 허용된 범위내 메모리 접근 | 허용된 범위의 메모리 버퍼에만 접근하여 저장 또는 읽기가 수행 되어 버퍼오버플로우가 발생하지 않도록 처리방법 설계 | |
SR1‐9 | 보안기능 동작에 사용되는 입력값 검증 | 보안기능(인증, 인가, 권한부여 등) 동작을 위해 사용 되는 입력값과 함수(또는 메서드)의 외부입력값 및 수행결과에 대한 처리방법 설계 | |
SR1‐10 | 업로드·다운로드 파일 검증 | 업로드·다운로드 파일의 무결성, 실행권한 등에 관 한 유효성 검사 방법을 설계하고, 검사 실패시 대응 방안 설계 방안 설계 | 파일 관리 |
나. 보안기능
- 인증, 접근통제, 권한관리, 비밀번호 등의 정책이 반영될 수 있도록 설계
번호 | 항목명 | 설명 | 비고 |
SR2‐1 | 인증 대상 및 방식 | 중요정보·기능과 인증방식을 정의하고, 정의된 중요정보 접근 및 중요기능 수행 허용을 위해 인증 기능이 우회되지 않고 수행 될 수 있도록 설계 | 인증관리 |
SR2‐2 | 인증 수행 제한 | 인증 반복시도 제한 및 인증실패 등에 대한 인증제한 기능 설계 | |
SR2‐3 | 비밀번호 관리 | 안전한 비밀번호 조합규칙(비밀번호 길이, 허용문자 조합 등)을 설정하고, 안전한 저장 정책, 재설정 및 변경 정책, 패스워드 관리 규칙(주기적 변경 등)이 적용되도록 설계 | |
SR2‐4 | 중요자원 접근통제 | 중요자원(프로그램 설정, 민감한 사용자 데이터 등)을 정의하고, 정의된 중요자원에 대한 접근을 통제하는 신뢰할 수 있는 방법(권한 관리 포함) 및 접근통제 실패시 대응방안 설계 | 권한관리 |
SR2‐5 | 암호키 관리 | 암호키 생성, 분배, 접근, 파기 등 안전하게 암호키 생명주기를 관리 할 수 있는 방법 설계 | 암호화 |
SR2‐6 | 암호연산 | 국제표준 또는 검증필 프로토콜로 등재된 안전한 암호 알고리즘을 선정하여 충분한 암호키 길이, 솔트, 충분한 난수값을 기반으로 암호 연산 수행방법 설계 | |
SR2‐7 | 중요정보 저장 | 중요정보(비밀번호, 개인정보 등) 저장시 안전한 저장 및 관리 방법 설계 | 중요 정보 처리 |
SR2‐8 | 중요정보 전송 | 중요정보(비밀번호, 개인정보, 쿠키 등) 전송시 안전한 전송방법 설계 |
다. 에러처리
- 에러 또는 오류상황을 처리하지 않거나 불충분하게 처리되어 중요정보 유출 등 보안약점이 발생하지 않도록 설계
번호 | 항목명 | 설명 | 비고 |
SR3‐1 | 예외처리 | 오류메시지에 중요정보(개인정보, 시스템 정보, 민감 정보 등)가 포함되어 출력되거나, 에러 및 오류가 부적절하게 처리되어 의도치 않은 상황이 발생하는 것을 막기 위한 안전한 방안 설계 |
라. 세션통제
- 다른 세션간 데이터 공유 금지 등 세션을 안전하게 관리할 수 있도록 설계
번호 | 항목명 | 설명 | 비고 |
SR4-1 | 세션통제 | 다른 세션 간 데이터 공유금지, 세션 ID 노출금지, (재)로그인시 세션ID 변경, 세션종료(비활성화, 유효기간 등) 처리 등 세션을 안전하게 관리할 수 있는 방안 설계 |
3. 구현단계 진단 항목
구분 | 번호 | 취약점 항목 |
입력데이터 검증 및 표현 (15개) | 1 | SQL 삽입 |
2 | 경로 조작 및 자원 삽입 | |
3 | 크로스사이트 스크립트 | |
4 | 운영체제 명령어 삽입 | |
5 | 위험한 형식 파일 업로드 | |
6 | 신뢰되지 않는 URL 주소로 자동접속 연결 | |
7 | XQuery 삽입 | |
8 | XPath 삽입 | |
9 | LDAP 삽입 | |
10 | 크로스사이트 요청 위조 | |
11 | HTTP 응답분할 | |
12 | 정수형 오버플로우 | |
13 | 보안기능 결정에 사용 되는 부적절한 입력값 | |
14 | 메모리 버퍼 오버플로우 | |
15 | 포맷 스트링 삽입 | |
보안기능(16개) | 16 | 적절한 인증 없는 중요기능 허용 |
17 | 부적절한 인가 | |
18 | 중요한 자원에 대한 잘못된 권한 설정 | |
19 | 취약한 암호화 알고리즘 사용 | |
20 | 중요정보 평문저장 | |
21 | 중요정보 평문전송 | |
22 | 하드코드된 비밀번호 | |
23 | 충분하지 않은 키 길이 사용 | |
24 | 적절하지 않은 난수 값 사용 | |
25 | 하드코드된 암호화 키 | |
26 | 취약한 비밀번호 허용 | |
27 | 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 | |
28 | 주석문 안에 포함된 시스템 주요정보 | |
29 | 솔트 없이 일방향 해쉬함수 사용 | |
30 | 무결성 검사없는 코드 다운로드 | |
31 | 반복된 인증시도 제한 기능 부재 | |
시간 및 상태(2개) | 32 | 경쟁조건: 검사 시점과 사용 시점(TOCTOU) |
33 | 종료되지 않는 반복문 또는 재귀 함수 | |
에러처리(3개) | 34 | 오류 메시지를 통한정보 노출 |
35 | 오류 상황 대응 부재 | |
36 | 부적절한 예외 처리 | |
코드오류(4개) | 37 | Null Pointer 역참조 |
38 | 부적절한 자원 해제 | |
39 | 해제된 자원 사용 | |
40 | 초기화되지 않은 변수 사용 | |
캡슐화(5개) | 41 | 잘못된 세션에 의한 데이터 정보 노출 |
42 | 제거되지 않고 남은 디버그 코드 | |
43 | 시스템 데이터 정보노출 | |
44 | Public 메서드부터 반환된 Private 배열 | |
45 | Private 배열에 Public 데이터 할당 | |
API 악용(2개) | 46 | DNS lookup에 의존한 보안결정 |
47 | 취약한 API 사용 |
4. 구현단계 기준과의 관계
구분 | 분석/설계 단계 보안요구항목 | 구현단계 보안약점 |
입력 데이터 검증 및 표현 | DBMS 조회 및 결과 검증 | SQL 삽입 |
XML 조회 및 결과 검증 | Xquery 삽입 Xpath 삽입 |
|
디렉터리 서비스 조회 및 결과 검증 | LDAP 삽입 | |
시스템 자원 접근 및 명령어 수행 입력값 검증 | 경로조작 및 자원삽입 운영체제 명령어 삽입 |
|
웹 서비스 요청 및 결과 검증 | 크로스사이트 스크립트 | |
웹 기반 중요기능 수행 요청 유효성 검증 | 크로스사이트 요청 위조 | |
HTTP프로토콜 유효성 검증 | 신뢰되지 않은 URL 주소로 자동접속 연결 HTTP 응답분할 |
|
허용된 범위내 메모리 접근 | 포맷스트링 삽입 메모리 버퍼 오버플로우 |
|
보안기능 동작에 사용되는 입력값 검증 | 보안기능 결정에 사용되는부적절한 입력값 정수형 오버플로우 Null Pointer 역참조 |
|
업로드·다운로드 파일 검증 | 위험한 형식 파일 업로드 무결성 검사 없는 코드 다운로드 |
|
보안 기능 | 인증대상 및 방식 | 적절한 인증 없는 중요기능 허용 DNS lookup에 의존한 보안결정 |
인증수행 제한 | 반복된 인증시도 제한 기능 부재 | |
비밀번호 관리 | 하드코드된 비밀번호 취약한 비밀번호 허용 |
|
중요자원 접근통제 | 부적절한 인가 중요한 자원에 대한 잘못된 권한 설정 |
|
암호키 관리 | 하드코드된 암호화 키 주석문 안에 포함된 시스템 주요 정보 |
|
암호연산 | 취약한 암호화 알고리즘 사용 충분하지 않은 키 길이 사용 적절하지 않은 난수 값 사용 솔트없이 일방향 해시함수 사용 |
|
중요정보 저장 | 중요정보 평문저장 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출 |
|
중요정보 전송 | 중요정보 평문전송 | |
에러 처리 | 예외처리 | 오류메시지를 통한 정보노출 시스템 데이터 정보노출 |
세션 통제 | 세션통제 | 잘못된 세션에 의한데이터 정보노출 |
'보안 공부 > 소스코드 보안약점 진단' 카테고리의 다른 글
소스코드 보안약점 진단 - 위험한 형식 파일 업로드 (0) | 2021.12.02 |
---|---|
소스코드 보안약점 진단 - 운영체제 명령어 삽입 (0) | 2021.11.30 |
소스코드 보안약점 진단 - 크로스사이트 스크립트 (0) | 2021.11.28 |
소스코드 보안약점 진단 - 경로 조작 및 자원 삽입 (0) | 2021.11.19 |
소스코드 보안약점 진단 - SQL 삽입(SQL Injection) (0) | 2021.11.02 |