Clean & Blue 자세히보기

전공/정보처리기사 실기

정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(1) /보안요구사항/보안고려사항

_청렴 2021. 5. 2. 20:05
반응형

NCS 정보처리기사

1) 소프트웨어 개발 보안 설계하기

- 소프트웨어의 보안 품질에 영향을 주는 요소들

 

- 소프트웨어 보안 취약점 : 외부에 노출된 보안 약점

- 모의해킹 : 작동하는 시스템을 대상으로 수행하는 동적 검증을 통해 보안 취약점을 확인하는 보안 품질 관리 활동

 

- CVE(Common Vulnerability Exposure)로 보안 취약점이 DB화 되어 관리

- 소프트웨어 보안 약점 : 보안 취약점의 근본 원이 되는 소프트웨어의 결함이나 버그

 -> 모든 보안 취약점은 보안 약점에 포함되나 모든 보안 약점이 보안 취약점인 것은 아니다.

 

- 시큐어 코딩 : 보안 약점이 존재하지 않도록 개발하는 방법

- CWE(Common Weakness Enumeration)으로 보안약점이 DB화 되어 관리

 

- 소프트웨어 개발 보안의 개념

소프트웨어 개발 생명주기 가운데 소스코드 구현 단계에서 보안약점을 제거하기 위한 코딩 방법

 

 

- 설계 단계의 보안 요구사항

 

- 보안의 3요소

  • 정보의 기밀성
  • 정보의 무결성
  • 정보의 가용성

-> 그 외 : 인증, 부인방지

 

- 법규에 근거한 중요 정보 및 보호조치 기준

-> 개인정보는 암호화 전송을 의무화

 -> SSL 인증서 기반의 보안서버 구축을 보호 조치 기준으로 제시

 

- 비밀번호는 SHA-256 방식 이상의 보안 강도를 가지는 일방향 암호화 알고지즘을 사용하도록

 -> 비밀번호를 제외한 나머지 개인정보 -> AES, SEED, ARIA 등 보증된 양방향 알고리즘과 128비트 이상의 암호하키를 사용

 -> 블록 암호화의 보안성을 강화하기 위해 CBC(Cipher Block Chaining) 모드의 사용을 권고

 

- 소프트웨어의 안정성 확보를 위한 기능상의 보안 요구 사항

- 정보보호 및 개인정보보호 관리체계 인증 기준(ISMS-P)

  • 2.5 인증 및 권한 관리 - 사용자 인증, 비밀번호 관리
  • 2.6 접근 통제 - 응용 프로그램 접근
  • 2.7 암호화 적용 - 암호 정책 적용
  • 2.8 정보 시스템 도입 및 개발보안 - 보안 요구사항 정의

 

- 입력 데이터 검증 및 표현 관련 보안 고려사항

 

- DBMS 조회 및 결과 검증

-> DB연결 계정에 대해 권한을 최소한으로 부여

-> 입력값을 정적 바인딩하거나 동적 바인딩할 경우 입력값을 검증 후 사용

 

- 시스템 자원 접근 및 명령어 수행 입력값 검증

-> 외부 입력값이 시스템 내부 자원(IP주소, 포트번호, 프로세스ID, 메모리주소, 파일명 등)을 직접적으로 식별하는데 사용되지 않도록

 

- 웹 서비스 요청 및 결과 검증

-> 사용자 입력값을 동적 생성 페이지에 사용하는 경우 크로스사이트 스크립트(XSS)가 유발되지 않도록 필터링하거나 HTML인코딩 후 출력

 

- 웹 기반 중요기능 수행 요청 유효성 검증

-> 권환 확인이 필요한 중요한 기능에 대해 정상적인 사용자의 유효한 요청인지 여부를 확인

 

- HTTP 프로토콜 유효성 검증

-> 외부 입력값을 쿠키나 HTTP 헤더 정보로 사용하는 경우, HTTP 응답 분할이 발생하지 않도록 필터링

-> 외부 입력값이 페이지 이동 URL로 사용되는 경우 해당 URL이 허용된 목록에 포함돼 있는지 검증 후 사용

 

- 허용된 범위 내 메모리 접근

-> 메모리 버퍼의 경계값을 넘어서 메모리를 읽거나 저장하지 않도록 경계를 설정

-> 버퍼 오버플로우를 유발할 수 있는 취약한 함수 사용 금지

 

- 보안 기능 동작에 사용되는 입력값 검증

-> 사용자의 역할이나 권한을 결정하는 정보는 반드시 서버쪽의 세션이나 DB에서 관리

-> 쿠키나 외부 입력 파라미터를 보안기능의 인자로 사용해야 하는 경우 검증 작업 수행 후 제한적으로 사용

-> 중요 상태정보나 인증, 권한 관련정보는 쿠키를 이용하여 전송 금지, 전송 시에는 암호화

 

- 업로드, 다운로드 파일 검증

-> 업로드 파일의 타입, 크기, 개수를 제한하고 실행권한을 제거

-> 외부에서 직접접근이 불가능한 경로에 저장, 파일명은 랜덤하게 변경

-> 다운로드 요청 시 검증 작업 수행, 허가된 사용자에 대한 허가된 파일인지

-> 원격지에서 다운로드한 소스코드나 실행파일은 무결성 검사를 수행

 

 

- 보안 기능 관련 보안 고려사항

 

- 인증 대상 및 방식

-> 중요 기능이나 자원은 인증 후 사용 -> 2-factor 고려

-> 인증 우회나 권한 상승이 발생하지 않도록 안전한 인증 방식 사용

 

- 인증 수행 제한

-> 로그인 시도 회수 제한, 초과시도 인증 제한

-> 반복된 로그인 실패에 대해 사후분석이 가능하도록 로그를 기록

 

- 비밀번호 관리

-> 안전한 비밀번호 생성 규칙

-> 비밀번호 전송시 암호화하거나 암호화된 통신채널 이용

-> 저장 시 솔트(SALT)와 함께 해시함수 적용, 적용은 서버에서 수행

-> 변경 시 이전 비밀번호를 사용하지 않도록 분실에 대한 안전한 재설정 방법 적용

-> 변경 주기를 정의하여 만료시 변경되도록, 마지막으로 성공한 로그인 시간 정보를 사용자에게 알리도록

 

- 중요 자원 접근 통제

-> 중요한 자원이나 기능에 대한 접근 통제 정책을 수립

 

- 암호키 관리

-> 암호키는 데이터가 저장되는 DB와 물리적으로 분리된 장소에 보관

-> 암호키의 생명주기 관리 정책 정의

-> 비밀번호나 암호키는 메모리에 저장 금지, 메모리에 저장 할 경우 사용 종료 후 메모리 초기화

-> 대칭키 암호화에 사용되는 비밀키의 송신자 사용기간은 최대 2년, 수신자 사용기간은 최대 5년으로 설정

-> 공개키 암호화에 사용되는 암호화 공개키는 최대 2년, 복호화 개인키는 최대 2년, 검증용 공개키는 최소 3년, 서명용 개인키는 최대 3년으로 설정

-> XML 파일이나 Property 파일 내의 중요 정보 암호화에 사용되는 암호키는 암호화해서 별도 위치에 보관

 

- 암호 연산

-> 양방향 대칭키 암호화는 AES, SEED, ARIA 등, 길이는 128비트 이상

-> 양방향 공개키(비대칭키) 암호화는 RSA로, 길이는 2048비트 이상

-> 일방향 해시 알고리즘 및 키길이는 SHA-256 이상

-> 난수 생성 시 -> seed를 재설정할 수 없는 java.Math.random 함수 대신 java.util.Random 혹은 java.security.SecureRandom 함수 사용

 

- 중요 정보 저장

-> 중요 정보 혹은 개인 정보 암호화하여 저장

-> 메모리에 남지 않도록 사용 후 메모리 초기화

 

- 중요 정보 전송

-> 암호화하여 전송

-> 쿠키에 중요정보가 포함될 경우 암호화하여 전송

 

 

- 에러 처리 및 세션 통제 관련 보안 고려사항

 

- 예외 처리

-> 명시적 예외인 경우 예외처리 구문을 이용하여 예외 발생 시 수행되어야 하는 기능을 구현

-> 입력값에 따라 예외가 발생 가능한 경우 서비스가 정상 동작할 수 있도록 입력값이 범위를 체크

-> 에러가 발생한 경우 지정된 페이지를 사용자에게 제공하되 에러 메세지를 통해 중요 정보가 제공되지 않도록

 

- 세션 통제

-> 멀티 스레드 환경에서의 컨트롤러 컴포넌트내 멤버변수나 싱글톤 객체의 클래스 변수처럼 세션 간에 데이터가 공유되는 변수를 사용하지 않도록

-> 세션이 안전하게 관리되도록

  • 웹사이트의 모든 페이지에서 로그아웃이 가능하도록 함
  • 로그아웃시 세션을 무효화 처리
  • 세션 타임아웃시간 설정
  • 세션 ID가 포함된 쿠키에 대해 SetHttpOnly 및 SetSecure 설정
  • 패스워드를 변경하는 시점에 세션을 삭제하고 재할당

-> 세션 ID 안전하게 관리되도록

 -> 세션 ID는 최소 128비트 이상의 길이로 안전한 난수 알고리즘 사용

  -> WAS 등의 미들웨어에서 제공하는 세션 생성 및 관리기능을 사용

 -> URL rewrite 사용시 세션 ID가 URL에 노출될수 있으므로 사용하지 않음

 -> 로그인 성공 시 세션 ID를 재할당하고 주기적으로 세션 ID를 재할당

 

 

정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(2) /입력데이터검증

2) 소프트웨어 개발 보안 구현하기 - 입력 데이터 검증 및 표현 - SQL 삽입(SQL Insertion) 웹 사이트의 입력 값이나 URL에 SQL문을 삽입하여 DB로부터 정보를 열람, 조작, 파괴할 수 있는 보안 약점 -> Prepa

aapslie94.tistory.com