본문 바로가기

Study/정보처리기사 실기

[정보처리기사 실기] 소프트웨어 개발 보안 구축 _ 소프트웨어 개발 보안 설계

Secure SDLC (소프트웨어 개발 보안)

Secure SDLC 의미

- SW 개발 과정에서 발생 할 수 있는 보안 취약점 최소화해, 보안 요구사항인 기밀성, 무결성, 가용성 유지하는 일련 활동

- SW 생명 주기 각 단계별로 요구되는 보안활동 모두 포함


Secure SDLC 단계별 보안 활동

요구사항 분석 - 요구사항 중 보안항목 식별
- 요구사항명세서
설계 - 보안설계 검토, 보안설계서 작성
- 보안 통제 수립
구현 - 표준코딩정의서, SW 개발 보안 가이드 준수해 개발
- 소스코드 보안 약점 진단, 개선
테스트 모의침투 테스트 또는 동적 분석 통한 보안 취약점 진단 및 개선
유지보수 - 지속적 개선
- 보안 패치

 

보안 설계 항목

  • 관리적 보안 : 보안정책, 표준, 지침, 절차, 인적 보안, 교육, 훈련 등
  • 기술적 보안 : 접근제어, 방화벽, 암호화 등
  • 물리적 보안 : 시설 보안, 운영 보안

보안 취약점

1) 입력 데이터 검증 및 표현

프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터 잘못된 형식 지정으로 인해 발생할 수 있는 보안 약점

SQL 삽입 웹 응용 프로그램에 SQL 삽입해 내부 데이터베이스 서버 데이터를 유출 및 변조하고
관리자 인증 우회하는 보안 약점
크로스 사이트 스크립팅 (XSS) 웹페이지에 악의적 스크립트 삽입해 방문자들 정보 탈취하거나, 비정상적인 기능 수행 유발
메모리 버퍼 오버플로 - 연속된 메모리 공간 사용하는 프로그램에서 할당된 메모리 범위 넘어선 위치에서
자료 읽고 쓰려고 할 때 발생하는 보안 약점

- 프로그램 오동작 유발시키거나 악의적 코드 실행시켜 공격자가 프로그램 통제할 수 있는
권한 획득하게 함

 

SQL injection

- 클라이언트 입력값 조작해 서버 데이터베이스를 공격할 수 있는 공격 기술

- 웹응용 프로그램에 SQL 삽입해 내부 데이터베이스 서버의 데이터를 유출 및 변조하고 관리자 인증 우회하는 공격 기법

SELECT user FROM user_table
WHERE id = 'admin' AND password = '' OR '1' = '1';

XSS (cross site script)

- 웹에 악성 스크립스 삽입할 수 있는 공격 기술

- 게시판에 악성 스크립트 담긴 글 올리는 형태


2) 보안 기능

보안기능 (인증, 접근제어, 기밀성, 암호화, 권한 관리 등) 적절하지 않게 구현 시 발생할 수 있는 보안 약점

부적절한 인증 보안검사 우회해 인증과정 없이 중요 정보 또는 기능에 접근, 변경 가능
부적절한 인가 접근제어 기능 없는 실행경로 통해 정보, 권한 탈취 가능
잘못된 권한 설정 권한 설정이 잘못된 지원에 접근해 해당 자원 임의 사용 가능
취약한 암호화 알고리즘 설정 암호화된 환경설정 파일 해독해 비밀번호 등 중요 정보 탈취
하드코드된 비밀번호 - 소스코드 유출 시 내부에 하드코드된 패스워드 이용해 관리자 권한 탈취
- 패스워드는 암호화해 별도 파일에 저장하고, 디폴트 패스워드나 키 사용 피함으로써 방지

3) 시간 및 상태

동시 또는 거의 동시 수행 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리해 발생할 수 있는 보안 약점

경쟁 조건 - 검사 시점 (Time of Check)과 사용 시점 (Time of Use) 고려하지 않고 코딩하는
경우 발생

- 프로세스 정보와 실제 자원 상태 일치하지 않는 경우로 동기화, 교착상태 등 문제 발생 가능
종료되지 않는 반복 문제 또는 재귀함수 - 반복문이나 재귀함수에서 종료 조건 정의하지 않았거나 논리구조상 종료될 수
없는 경우 발생

- 반복문이나 재귀함수가 종료되지 않을 경우 시스템 자원이 끊임 없이 사용되어
자원 고갈로 인한 서비스 장애, 시스템 장애 발생

4) 에러 처리

에러 처리하지 않거나, 불충분하게 처리해 에러 정보에 중요정보 (시스템 등)가 포함될 때 발생할 수 있는 보안 약점

오류 메시지 통한 정보 노출 오류 발생으로 인한 실행 환경, 사용자 정보, 디버깅 정보 등 중요 정보를 소프트웨어가 메시지로 외부에 노출하는 보안 약점
오류 상황 대응 부재 소프트웨어 개발 중 예외 처리 하지 않았거나 미비로 발생하는 보안 약점
부적절한 예외 처리 함수 반환값 또는 오류들 세분화해 처리하지 않고 광범위하게 묶어 한 번에 처리하거나, 누락된 예외 존재할 때 발생

5) 코드 오류

타입 변환 오류, 자원 (메모리 등) 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해 유발되는 보안 약점

널 포인터 (Null Pointer) 역참조 널 포인터가 가리키는 메모리에 어떠한 값 저장할 때 발생
부적절한 자원 해제 자원 반환하는 코드 누락하거나 프로그램 오류로 할당된 자원 반환하지 못했을 때 발생
해제된 자원 사용 이미 사용 종료되어 반환된 메모리 참조하는 경우 발생
초기화되지 않은 변수 사용 변수 선언 후 값이 부여되지 않은 변수 사용할 때 발생

6) 캡슐화

중요한 데이터 또는 기능성 불충분하게 캡슐화해 (정보은닉 실패) 비인가자에게 데이터 유출 가능해지는 보안 약점

잘못된 세션에 의한 정보 노출 다중 스레드 (Multi-Thread) 환경에서 멤버 변수에 정보 저장할 때 발생하는 약점
제거되지 않고 남은 디버그 코드 개발 중 버그 수정이나 결과값 확인 위해 남겨둔 코드들로 인해 발생하는 약점
시스템 데이터 정보 노출 시스템 내부 정보를 시스템 메시지 등 통해 외부로 출력하도록 코딩했을 때
발생하는 약점
Public 메소드로부터 반환된 Private 배열 선언된 클래스 내에서만 접근 가능한 Private 배열을 모든 클래스에서 접근 가능한 Public 메소드에서 반환할 때 발생
Private 배열에 Public 데이터 할당 Private 배열에 Public으로 선언된 데이터 또는 메소드 파라미터를 저장할 때 발생

 

접근 제어자

프로그래밍 언어에서 특정 개체를 선언할 때 외부로부터 접근 제한하기 위해 사용되는 예약어

(접근 가능 : O / 불가능 : X)

한정자 클래스 내부 패키지 내부 하위 클래스 패키지 외부
Public O O O O
Protected O O O X
Default O O X X
Private O X X X

7) API 오용

의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API 사용해 발생할 수 있는 보안 약점

DNS Lookup에 의존한 보안 결정 도메인명에 의존해 인증이나 접근 통제 등 보안 결정 내리는 경우 발생하는 보안 약점
취약한 API 사용 사용 금지된 API 사용하거나, 잘못된 방식으로 API 사용했을 때 발생하는 보안 약점

 

API (Application Programming Interface)

응용 프로그램 개발 시 운영체제나 프로그래밍 언어 등에 있는 라이브러리 이용할 수 있도록 규칙 등을 정의해 놓은

인터페이스


Secure SDLC 방법론

CLASP - SDLC 초기 단계에서 보안 강화 위해 개발된 방법론
- 활동 중심, 역할 기반 프로세스로 구성되어 있으며, 현재 운용 중인 시스템에 적용하기에 적합
SDL - 마이크로소프트 사에서 안전한 소프트웨어 개발 위해 기존 SDLC 개선한 방법론
- 전통적인 나선형 모델 기반
Seven Touchpoints  - 소프트웨어 보안의 모범례를 SDLC에 통합한 방법론
- 설계 및 개발 과정의 모든 산출물에 대해 위험분석 및 테스트 수행
- SDLC 각 단계에 관련된 7개 보안 강화 활동 수행