정보처리기사

[정처기 실기] 9장 - 소프트웨어 개발 보안 구축

jooona 2021. 4. 14. 12:33
반응형

소프트웨어 개발 보안

소프트웨어 개발 보안은 데이터의 기밀성, 무결성, 가용성을 유지하는 것을 목표로 한다. 

 

개인정보 보호법: 개인정보의 처리 및 보호에 관한 사항을 정함으로써 개인의 자유와 권리를 보호한다.

 

Secure SDLC

Secure SDLC는 보안상 안전한 소프트웨어를 개발하기 위해 SDLC에 보안 강화를 위한 프로세스를 포함한 것을 의미한다.

SDLC: 소프트웨어 개발 생명주기 (Software Development Life Cycle)

 

보안 요소: 소프트웨어 개발에 있어 충족시켜야 할 요소 및 요건을 의미 

--> 기밀성, 무결성, 가용성, 인증, 부인 방지

 

시큐어 코딩 (Secure Coding): 소프트웨어의 구현 단계에서 발생할 수 있는 보안 취약점들을 최소화하기 위해 보안 요소들을 고려하며 코딩하는 것을 의미.

 

세션 통제

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

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

 

1. 불충분한 세션 관리: 일정한 규칙이 존재하는 세션 ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있음 --> 세션 하이재킹과 같은 공격에 취약

 

2. 잘못된 세션에 의한 정보 노출: 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생하는 보안 약점. --> 변수의 범위를 제한함으로써 방지 가능

 

  • 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI를 구성
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 한다.
  • 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정한다.
  • 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계한다.

 

입력 데이터 검증 및 표현

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

 

보안 약점의 종류

  • SQL 삽입: 입력란에 SQL을 삽입하여 무단으로 DB를 조회하거나 조작. --> 동적 쿼리에 사용되는 입력 데이터에 예약어 및 특수문자가 입력되지 않게 필터링되도록 설정하여 방지
  • 경로 조작 및 자원 삽입: 데이터 입출력 경로를 조작하여 서버 자원을 수정, 삭제할 수 있는 보안 약점. --> 경로 순회 공격을 막는 필터를 사용하여 방지
  • 크로스 사이트 스크립팅 (XSS): 웹페이지에 악의적인 스크립트를 삽입하여 방문자들의 정보를 탈취하거나 비정상적인 기능 수행을 유발 --> HTML 태그의 사용을 제한하거나 스크립트에 삽입되지 않도록 '<', '>', '&' 등의 문자를 다른 문자로 치환함으로써 방지할 수 있다. 

 

시간 및 상태

TOCTOU 경쟁 조건: 검사 시점(Time Of Check)사용 시점(Time Of Use)을 고려하지 않고 코딩하는 경우 발생하는 보안 약점. 

 

에러처리

에러처리는 소프트웨어 실행 중 발생할 수 있는 오류들을 사전에 정의하여 오류로 인해 발생할 수 있는 문제들을 예방하기 위한 보안 점검 항목들이다.

 

스택 트레이스 (Stack Trace): 오류가 발생한 위치를 추적하기 위해 소프트웨어가 실행 중에 호출한 메소드의 리스트를 기록한 것.

 

코드 오류

코드 오류는 소프트웨어 구현 단계에서 개발자들이 코딩 중 실수하기 쉬운 오류를 예방하기 위한 보안 점검 항목들이다.

  • 널 포인터 역참조: 널 포인터가 가리키는 메모리에 어떤 값을 저장할 때 발생. --> 널 포인터인지 여부 확인
  • 부적절한 자원 해제: 자원을 반환하는 코드를 누락하거나 프로그램 오류로 할당된 자원을 반환하지 못했을 때 발생. --> 오류로 인해 함수가 종료되었을 때 자원이 반환되도록 코딩
  • 해제된 자원 사용: 이미 사용이 종료되어 반환된 메모리를 참조하는 경우 발생. --> 포인터 초기화
  • 초기화되지 않은 변수 사용: 변수 선언 후 값이 부여되지 않은 변수를 사용할 때 발생. --> 메모리 초기화

API 오용

DNS Lookup에 의존한 보안 결정: 도메인명에 의존하여 인증이나 접근 통제 등의 보안 결정을 내리는 경우 발생할 수 있는 보안 약점.

--> DNS 검색을 통해 도메인 이름을 비교하지 않고 IP 주소를 직접 입력하여 접근함으로써 방지할 수 있다.

 

취약한 API 사용: sprintf, strcat, strcpy 등 보안 상 사용이 금지된 API를 사용할 때 발생.

 

암호 알고리즘

단방향 암호화 방식: 해시(Hash)

양방향 암호화 방식: 개인키 및 공개키

 

개인키 암호화 기법 (Private Key Encryption)

  • 동일한 키로 데이터를 암호화, 복호화. 
  • 장점: 암호화 및 복호화 속도가 빠름, 알고리즘이 단순함, 공개키 암호화 기법에 비해 파일의 크기가 작음
  • 단점: 사용자의 증가에 따라 관리해야 할 키의 수가 상대적으로 많아짐
  • 블록 암호화 방식: 한 번에 하나의 데이터 블록을 암호화. DES, SEED, AES, ARIA
  • 스트림 암호화 방식: 평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화. LFSR, RC4

공개키 암호화 기법 (Public Key Encryption)

  • 암호화할 때 사용하는 공개키(Public Key)는 데이터베이스 사용자에게 공개.
  • 복호화할 때 사용하는 비밀키(Secret Key)는 관리자가 비밀리에 관리.
  • 대표적으로 RSA가 존재
  • 장점: 키의 분배가 용이, 관리해야 할 키의 수가 적다.
  • 단점: 암호화 및 복호화 속도가 느림, 알고리즘이 복잡, 개인키 암호화 기법에 비해 파일의 크기가 큼.

해시 (Hash): 임의의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환

 

 

* 이 글은 시나공 정보처리기사 실기 책을 토대로 작성되었습니다.

 

반응형