정보처리기사

정보처리기사 필기 요점정리 [5과목 정보시스템 구축 관리] - 3장 소프트웨어 개발 보안 구축

구름이팡팡 2021. 7. 8. 16:29
728x90

3장 소프트웨어 개발 보안 구축

1. Secure SDLC: SDLC(소프트웨어 개발 생명주기)에 보안 강화 프로세스를 포함한 것

- 대표적 방법론

 · CLASP: SDLC의 초기 단계에서 보안 강화

 · SDL: 나선형 모델 기반, 마이크로소프트사에서 개발

 · Seven Touchpoints: 보안 모범사례를 SDLC에 통합, 모든 산출물에 대해 위험 분석 및 테스트를 수행, SDLC의 각 단계에 관련된 7개의 보안 강화 활동을 수행한다.

- 요구사항 분석 단계에서의 보안활동

- 설계 단계에서의 보안활동

- 구현 단계에서의 보안활동: 시큐어코딩

 cf) 시큐어코딩: 보안 요소들을 고려하며 코딩하는 것, 보안 정책을 바탕으로 시큐어 코딩 가이드를 작성, 개발 참여자에게는 시큐어 코딩 교육을 실시해야 한다.

- 테스트 단계에서의 보안활동

- 유지보수 단계에서의 보안활동

 

2. 보안 요소

cf) 정보 보안 3대 요소: 무기가

- 기밀성(Confidentiality): 인가된 사용자에게만 접근 허용

- 무결성(Integrity): 인가된 사용자만 수정 가능

- 가용성(Availability): 언제라도 사용 가능

- 인증(Authentication): 패스워드, 인증용 카드, 지문 검사 등

- 부인방지(NonRepudiation): 송수신 증거 제공

 

3. 세션 통제

세션: 서버와 클라이언트의 연결

세션 통제: 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것

- 세션 통제의 보안 약점

 · 불충분한 세션 관리: 일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생 가능, 세션 관리가 불충분하면 침입자는 세션 하이재킹과 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있음

 · 잘못된 세션에 의한 정보 노출: 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생할 수 있음, 싱글톤패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있음, 멤버 변수보다 지역 변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있음

- 세션 설계시 고려사항

 · 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI구성

 · 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 함

 · 중요도가 높으면 세션 타임아웃을 2~5분, 낮으면 15~30분으로 설정함

-세션 ID 관리 방법

 · 안전한 서버에서 최소 128비트의 길이로 생성

 · 예측이 불가능하도록 안전한 난수 알고리즘 적용

 · 노출되지 않도록 URL Rewite 미사용 방향으로 설계
 · 로그인 시 로그인 전의 세션ID를 삭제하고 재할당

 · 장기 접속도 주기적 재할당

 

4. 입력 데이터 검증 및 표현

: 입력 데이터로 인해 발생하는 문제들을 예방하기 위해 구현 단계에서 검증해야 하는 보안 점검 항목

유효성 검증 체계를 갖추고, 객체에 지정된 자료형이 올바른지 확인하고, 일관된 언어셋을 사용하도록 코딩한다.

- 보안 약점

 · SQL삽입: 예약어 및 특수문자가 입력되지 않게 필터링 되도록 설정하여 방지할 수 있다

 · 경로조작 및 자원삽입

 · 크로스사이트스크립팅(XSS): 웹페이지에 악의적인 스크립트 삽입해 정보 탈취 및 비정상적 기능 수행 유발
 · 운영체제 명령어 삽입

 · 위험한 형식 파일 업로드

 · 신뢰되지 않는 URL 주소로 자동접속 연결: 피싱 사이트로 유도, 연결되는 외부 사이트 주소를 화이트 리스트로 관리함 방지 가능

 · 메모리 버퍼 오버플로: 할당된 메모리 범위를 넘어선 위치에서 자료를 읽거나 쓰려고 할 때 발생, 적절한 버퍼의 크기를 설정하고 설정된 범위의 메모리내에서 올바르게 읽거나 쓸 수 있도록 함으로써 방지 가능

 

5. 보안 기능

: 구현 단계에서 코딩하는 기능을 올바르게 구현하기 위한 보안 점검 항목들

사용자별 중요도 구분, 개별적으로 접근 권한 부여, 암호화 기술 적용

- 보안 약점

 · 적절한 인증 없이 중요기능 허용: 재인증 기능을 수행하도록 하여 방지 가능

 · 부적절한 인가

 · 중요한 자원에 대한 잘못된 권한 설정

 · 취약한 암호화 알고리즘 사용

 · 중요정보 평문 저장 및 전송: 중요정보는 반드시 암호화 과정을 거치도록 하고 HTTPS 또는 SSL과 같은 보안 채널을 이용함으로써 방지할 수 있다

 · 하드코드된 비밀번호

cf) 하드코드: 코드 내부에 데이터를 직접 입력하여 프로그래밍하는 방식

 

6. 에러 처리 = 예외 처리

: 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 문제를 예방하기 위한 보안점검 항목들

- 보안 약점

 · 오류 메시지를 통한 정보노출

 · 오류 상황 대응 부재: 예외처리를 하지 않았거나 미비

 · 부적절한 예외처리: 광범위하게 묶어 한번에 처리하거나, 누락된 예외 존재, 세분화된 예외처리로 방지 가능

 

7. 코드오류

: 구현 단계에서 타입 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목들

- 보안 약점

· 널 포인터 역참조

cf) 스택 가드: 특정 값을 저장한 후 그 값이 변경되었을 경우 오버플로우 상태로 판단하여 프로그램 실행을 중단

· 부적잘한 자원 해제

· 해제된 자원 사용

· 초기화 되지 않은 변수 사용

 

8. 캡슐화

: 불충분한 캡슐화나 잘못 사용함으로써 발생할 수 있는 문제 예방을 위한 보안점검항목들

- 보안 약점

잘못된 세션에 의한 정보 노출

제거되지 않고 남은 디버그 코드

시스템 데이터 정보 노출

Public 메소드로부터 반환된 Private 배열

Private 배열에 Public 데이처 할당

 

9. API 오용

- 보안 약점

· DNS Lookup에 의존한 보안 결정: 도메인명에 의존하여 보안결정을 내리는 경우 발생, IP주소를 직접 입력하여 접근함으로써 방지 가능

· 취약한 API 사용:

보안 문제로 금지된 대표적 API에는 C언어의 문자열 함수 strcat(), strcpy(), sprintf() 등이 있다

직접연결이나 직접호출x

 

10. 암호 알고리즘

: 암호화된 문장으로 만드는 절차

 

- 양방향 암호화 방식

 

 · 개인키 암호화 기법 = 대칭, 단일키, 동일한 키로 데이터를 암호화하고 복호화

속도가 빠르며 알고리즘이 단순, 파일 크기가 작음

사용자 증가에 따라 키의 수가 상대적으로 많아짐

∨ 블록 암호화 방식: 한 번에 하나의 데이터 블록을 암호화, DES(블록크기: 64비트, 키 길이: 56비트), SEED, AES, ARIA

∨ 스트림 암호화 방식: 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화, LFSR, RC4

 

 · 공개키 암호화 기법: 암호화할 때 공개키는 DB사용자에게 공개

복호화 비밀키는 관리자가 비밀리에 관리, 비대칭, 대표적으로 RSA

cf) RSA: 큰 숫자를 소인수분해하기 어렵다는 것에 기반하여 만들어짐

키의 분배가 용이하고 관리해야할 개수가 적다, 느리며 복잡 파일크기 큼

 

- 단방향 암호화 방식

· 해시(Hash)

: 고정된 길이의 값이나 키로 변환하는 것

 

 

참고문헌: 시나공 2021 정보처리기사 필기

728x90