IgnatiusHeo

설계단계 보안설계기준-중요정보 저장 본문

자격/SW보안약점진단원

설계단계 보안설계기준-중요정보 저장

Ignatius Heo 2023. 6. 30. 16:57

작성일: 230630

 

※ 본 게시글은 학습 목적으로 행정안전부·KISA의 소프트웨어 보안약점 진단 가이드, 소프트웨어 개발보안 가이드를 참고하여 작성하였습니다.

 

정리 내용: 소프트웨어 보안약점 진단 가이드(153~158p)

 

유형  보안기능
설계항목  중요정보 저장
설명
 중요정보(비밀번호, 개인정보 등)를 저장,보관하는 방법이 안전하도록 설계한다.

보안대책
 ① 중요정보, 개인정보는 암호화해서 저장해야 한다.
 
 ② 불필요하거나 사용하지 않는 중요정보가 메모리에 남지 않도록 해야 한다.

연관된
구현단계
- 암호화되지 않은 중요정보
https://cryptocurrencyclub.tistory.com/132
- 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출
https://cryptocurrencyclub.tistory.com/139

 

 

가. 취약점 개요

 

ㅇ 위 내용을 볼 때, 예상 가능한 보안 위협: 메모리덤프?

  1. 중요정보 평문저장: 중요데이터(개인정보, 인증정보, 금융정보)가 제대로 보호되지 않을 경우, 보안이나 데이터의 무결성이 훼손될 수 있다.
  2. 사용자 하드디스크에 저장된 쿠키를 통한 정보노출: 개인정보, 인증정보 등이 영속적인 쿠키(Persistent Cookie)에 저장된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되며, 이는 시스템을 취약하게 만든다.

영속적인 쿠키를 통한 정보노출(출처: 소프트웨어 보안약점 진단 가이드 2021, 행정안전부·KISA)

 

나. 설계시 고려사항

 

① 중요정보, 개인정보는 암호화해서 저장해야 한다.

  ㅇ 중요정보가 다뤄지는 "안전 영역"을 설정하고 중요정보가 해당 영역 외부로 누출되지 않도록 설계 한다.

  ㅇ 서버의 DB나 파일 등에 저장되는 중요정보는 반드시 암호화해서 저장해야 하며 "암호연산" 설계 항목에서 정의하고 있는 안전한 암호 알고리즘과 암호키를 사용한다. 특히 클라이언트 측에는 중요정보가 저장되지 않도록 설계해야 하며 부득이하게 저장하는 경우 반드시 클라이언트 측에 저장되는 민감 정보를 암호화한다.

  ㅇ 클라이언트 언어인 HTML 코드는 사용자에게 공개되어 있는 것과 마찬가지이므로 중요한 로직 및 주석처리는 서버 측 언어에서만 처리되도록 설계해야 한다.

 

② 불필요하거나 사용하지 않는 중요정보가 메모리에 남지 않도록 해야 한다.

  ㅇ 개인정보 또는 특정 금융정보를 처리하는 기능 구현 시 더 이상 필요하지 않은 데이터에 대해 메모리를 초기화하여 중요데이터가 메모리에 남지 않도록 시큐어코딩 규칙을 정의한다. 특히 민감한 정보를 포함하는 페이지는 사용자 측 캐싱을 비활성화하도록 제한적인 캐시 정책을 수립하여야 하며, 부득이 캐싱을 해야 하는 경우 캐싱되는 정보는 암호화하여 저장하도록 설계한다.

  ㅇ 인증정보와 같은 민감한 정보를 포함하는 웹 폼을 구현하는 경우 자동완성 기능을 비활성화하도록 시큐어코딩 규칙을 정의한다.

 

다. 진단 세부사항

 

① 중요정보, 개인정보는 암호화해서 저장해야 한다. 중요정보와 개인정보에 대해 암호화하도록 명시하고, 암호화 대상 정보와 암호화 구현 방법을 명시하고 있는지 확인한다.

  ㅇ  암호화하여 저장되어야 하는 중요정보 또는 개인정보가 분류되어 있는지 확인

      - 암호화 대상 중요 정보(개인/신용/인증정보 등)

      - 개인정보보호법: 고유식별정보(주민/운전면허/여권), 바이오정보, 비밀번호

      - 정보통신망법: 주민등록번호, 신용카드번호, 계좌번호

      - 위치정보법: 위치정보

      - 시스템 중요정보: 데이터베이스 및 연동시스템 계정 정보, 주요 설정 정보

      - 기타 관련 법률 및 서비스 특성에 따른 주요 정보

  ㅇ  안전한 암호화 기능을 구현하는 프로그램이 설계되어 있거나 안전한 외부 암호 라이브러리를 사용하도록 설계되어 있는지 확인

  ㅇ  프로그램 내 암호화 대상 정보를 암복호화 하는 경우 암복호화 코딩 규칙의 정의 설계 여부 확인

 

 ② 불필요하거나 사용하지 않는 중요정보가 메모리에 남지 않도록 해야 한다. 중요정보 사용 후 메모리에 존재하지 않도록 설계되어 있는지 확인한다.

  ㅇ  중요정보 사용 후 메모리 초기화를 수행하여 중요 정보가 메모리에 남지 않도록 개발가이드에 코딩 규칙을 정의하고 있는지 확인

  ㅇ  중요정보가 포함된 페이지는 사용자 측에 캐싱되지 않도록 개발가이드 코딩 규칙을 정의하고 있는지 확인

 

 

 

 

 

 

끝.