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. 소프트웨어 개발 보안 구축(3) /보안기능/에러처리/모바일앱/보안테스트 (0) | 2021.05.03 |
---|---|
정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(2) /입력데이터검증 (0) | 2021.05.03 |
정보처리기사 실기 - 7. SQL 응용(4) /프로시저/트리거 (0) | 2021.04.30 |
정보처리기사 실기 - 7. SQL 응용(3) /절차형SQL (0) | 2021.04.30 |
정보처리기사 실기 - 7. SQL 응용(2) /트랜잭션/집계성SQL/윈도우함수 (0) | 2021.04.30 |