소프트웨어 개발 보안 구축 - (정보시스템 구축 관리) [정보처리기사 필기]
반응형

 

Secure SDLC

SDLC (Software Development Life Cycle, 소프트웨어 개발 생명주기)에 보안 강화를 위한 프로세를 포함한 것

ex) Secure Software의 CLASP, Microsoft의 SDL

 

각 단계별 보안 활동

요구사항 분석 단계

보안 항목에 해당하는 요구사항 식별

보안 수준을 요소별로 등급을 구분하여 분류 (기밀성, 무결성, 가용성, 인증, 부인 방지)

조직의 정보보호 관련 보안 정책을 참고해 항목들의 출처, 요구 수준, 세부 내용 정리

설계 단계

식별된 요구사항을 소프트웨어 설계서에 반영하고 보안 설계서 작성

발생할 수 있는 위협을 식별해 보안대책, 소요예산, 사고발생 시 영향 범위와 대응책 등 수립

네트워크, 서버, 물리적 보안, 개발 프로그램 등 환경에 대한 보안통제 기준을 수립해 설계에 반영

네트워크 : 외부의 사이버 공격으로부터 개발 환경을 보호하기 위해 네트워크를 분리, 방화벽 설치

서버 : 보안이 뛰어난 운영체제 사용, 보안 업데이트, 외부접속에 대한 접근 통제 실시

물리적 보안 : 출입통제, 개발 공간 제한, 폐쇄회로 등의 감시장비 설치

개발 프로그램 : 허가되지 않은 프로그램을 통제, 지속적인 데이터 무결성 검사 실시

구현 단계

표준 코딩 정의서 및 소프트웨어 개발 보안 가이드를 준수하여 설계서에 따라 보안 요구 사항 구현

지속적인 단위 테스트 실행

시큐어 코딩 : 구현 단계에서 발생할 수 있는 보안 취약점을 최소화하기 위해 보안 요소들을 고려하여 코딩

테스트 단계

설계서를 바탕으로 보안 사항들이 정확히 반영되고 동작되는지 점검

정적 분석 도구, 침투테스트를 통해 설계에서 식별된 위협들의 해결여부 검증

모든 단계 문서화 -> 개발자에게 피드백

유지보수 단계

발생 가능한 보안사고들 식별, 발생시 해결 후 패치 실시

 

세션 통제

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

세션 통제 : 세션의 연결, 연결로 인해 발생하는 정보 관리 (요구사항 분석 및 설계 단계에서 진단)

불충분한 세션 관리

규칙이 존재하는 세션ID가 발급되거나, 타임아웃이 너무 길게 설정되어 있는 경우 발생

세션 하이재킹을 통해 획득한 세션ID로 접근 가능

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

다중 스레드 환경에서 멤벼 변수에 정보를 저장할 때 발생하는 보안 약점

-> 변수의 범위를 제한하는 방법으로 방지 가능.

싱글톤 패턴에서 발생하는 레이스컨디션으로 동기화 오류, 혹은 멤버 변수의 정보가 노출될 수 있음

 

세션 설계 고려사항

  • 모든 페이지에서 로그아웃이 가능하도록 UI 구성
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록
  • 세션 타임아웃은 중요도에 따라 5~10분, 25~30분으로 설정
  • 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 하기
  • 패스워드 변경 시 활성화된 세션 삭제하고 재할당

세션ID 관리 방법

  • 안전한 서버에서 최소 128비트의 길이로 생성
  • 예측이 불가능하도록 안전한 난수 알고리즘 적용
  • ID가 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계
  • 로그인 시 로그인 전의 세션ID 삭제하고 재할당장기간 접중 중인 세션 ID는 주기적으로 재할당되도록 설계

 

소프트웨어 개발 구현 단계에서 검증해야 하는 보안 점검 내용

입력 데이터 검증 및 표현

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

개발 단계에서 유효성 검증 체계를 갖추고, 검증되지 않은 데이터가 입력될 시 처리할 수 있도록 구현해야 함

보안 약점 종류 보안 약점 해결 방법
SQL 삽입 입력란에 SQL을 삽입하여 무단으로 DB를 조회, 조작 입력 데이터에 예약어 및 특수문자가 입력되지 않도록 필터링
경로 조작 및 자원 삽입 데이터 입출력 경로를 조작하여 서버 자원을 수정 삭제 경로 순회 공격 방비 필터 사용
크로스사이트 필터링 (XSS) 웹페이지에 악성 스크립트를 삽입하여 방문자의 정보 탈취, 비정상적 기능 수행 유발 HTML 태그 사용 제한, 문자 치환
운영체제 명령어 삽입 외부 입력값을 통해 시스템 명령어 실행을 유도하여 권한 탈취, 시스템 장애 유발 웹 인터페이스를 통한 시스템 명령어전달 방지
위험한 형식 파일 업로드 악의적인 명령어가 포함된 스크립트 파일을 업로드하여 시스템 손상, 제어 업로드 파일의 확장자 제한, 파일명 암호화, 실행 속성 제거
신뢰되지 않는 URL 주소로 연결 사이트 주소를 조작하여 피싱 사이트로 유도 연결되는 외부 사이트 주소를 화이트 리스트로 관리

보안 기능

인증, 접근제어, 기밀성, 암호화 등을 올바르게 구현하기 위한 보안 점검 함목

보안 약점 종류 보안 약점 해결 방법
적절한 인가 없이 중요기능 허용 보안 검사를 우회하여 인증과정 없이 중요 정보 또는 기능에 접근 및 변경가능 중요 정보나 기능을 수행하는 페이지에는 재인증 기능을 수행
부적절한 인가 접근제어 기능이 없는 실행경로를 통해 정보, 권한 탈취 모든 실행 경로에 대해 접근 제어 검사 수행, 필요한 권한만 부여
중요한 자원에 대한 잘못된 권한 설정 권한 설정이 잘못된 자원에 접근하여 임의로 사용 관리자만 자원 접근하도록 설정,
취약함 암호화 알고리즘 사용 암호화된 환경설정 파일을 해독하여 중요정보 탈취 안전한 암호화 알고리즘 사용
중요정보 평문 저장 및 전송 암호화되지 않은 평문 데이터를 탈취해 중요 정보 획득 중요 정보 저장, 전송 시 암호화 과정을 거침, 보안 채널 이용
하드코드된 비밀번호 소스코드 유출 시 내부에 하드코드된 패스워드 이용 패스워드를 암호화하여 별도 파일 저장, 기본 설정 패스워드 피하기

시간 및 상태

동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리해 시스템이 원활하게 동작되도록 하기 위한 보안 점검 항목

[보안 약점 종류]

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

말못된 반복문, 재귀함수 : 종료 조건을 정의하지 않았거나 논리 구조상 종료될 수 없는 경우 발생

에러 처리

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

[보안 약점 종류]

오류메세지를 통한 정보 노출 : 오류 발생으로 실행 환경, 사용자 정보 등을 메시지로 외부에 노출하여 발생

오류 상황 대응 부재 : 예외처리가 없거나, 미비되어 발생

부적절한 예외 처리 : 오류를 광범위하게 묶어서 처리하다 누락된 예외가 존재할 때 발생

코드 오류

코딩 중 실수하기 쉬운 형 변환, 자원 반환 등의 오류를 예방하기 위한 보안 점검 항목

[보안 약점 종류]

널 포인터 역참조 : NULL 메모리에 저장, 참조 시도

부적절한 자원 해제 : 자원 반환 코드 누락, 오류로 할당된 자원을 반환하지 못했을 때 -> 자원 부족 발생 가능

해제된 자원 사용 : 이미 사용이 종료되어 반환된 메모리를 참조하는 경우

초기화되지 않은 변수 사용 : 변수 선언 후 값이 부여되지 않은 변수 사용

캡슐화

정보 은닉이 필요한 중요한 데이터와 기능을 불충분하게 캡슐화하거나 잘못 사용함으로써 발생한 문제를 예방하기 위한 보안 점검 항목

[보안 약점 종류]

잘못된 세션에 의한 정보 노출 : 다중 스레드 환경에서 멤버 변수에 정보를 저장할 때 발생

제거되지 않고 남은 디버그 코드 : 개발 중 버그 수정이나 결과값 확인을 위해 남겨둔 코드들로 인해 발생

시스템 데이터 정보 노출 : 시스템의 내부 정보를 시스템 메시지 등을 통해 외부로 출력하도록 코딩시 발생

Public 메소드로부터 반환된 Private 배열, Private 배열에 Public 배열 할당

API 오용

API를 잘못 사용하거나, 보안에 취약한 API를 사용하지 않도록 하기 위한 보안 검증 항목

[보안 약점 종류]

DNS Lookup : 도메인명에 의존하여 보안 결정을 내리는 경우 발생 -> IP 주소를 직접 입력하게 하여 방지

 

암호 알고리즘

평문을 암호화된 문장으로 만드는 절차, 방법

개인키 암호화 기법

동일한 키로 데이터를 암호화-복호화

블록 암호화 ; 한번에 하나의 데이터 블록 암호화, DES, SEED,

스트림 암호화 : 평문과 동일한 길이의 스트림을 생성해 비트 단위로 암호화, RC4

장점 : 암/복호화 속도가 빠름. 단순한 알고리즘, 비교작 작은 파일

단점 : 키 역시 관리해야함.

공개키 암호화 기법

암호화에 사용되는 공개키는 사용자에게 공개, 복호화에 사용되는 비밀키는 비밀리에 관리 (비대칭 암호 기법)

장점 : 키의 분배 용이, 관리 안해도 됨

단점 : 암/복호화 속도 느림, 알고리즘 복잡, 큰 파일

암호 알고리즘 종류

  • SEED : 1999년 KISA에서 개발한 블록 암호화 알고리즘, 128비트 블록 - 키에 따라 128, 256
  • ARIA : 2004년 국정원, 산학연합회에서 개발한 블록 암호화 알고리즘, 128비트 블록 - 키에 따라 128,192,256
  • DES : 1975년 미국 NBS에서 발표한 개인키 암호화 알고리즘, 64비트 블록, 56비트 키 길이
  • AES : 2001년 미국 표준 기술 연구소에서 발표한 개인키 암호화 알고리즘, 128비트 블록 - 키에 따라 128,192,256
  • RSA : 1978년 MIT 라이베스트 등에 의해 제안된 공개키 암호화 알고리즘

해시

임의 길이의 입력 데이터나 메시지를 고정된 길이의 값이나 키로 변환하는 것

해시 알고리즘 (해시함수) 사용 -> 해시 함수로 키를 변환 (해시값, 해시 키)

데이터 암호화, 무결성을 위해 사용 -> 다시 되돌릴 수 없어야 함.

SHA, MD5, N-NASH, SNEFRU 등 존재

 

 

반응형