가. 취약점 개요
사례1 : 중요정보 평문저장
메모리나 디스크에서 처리하는 중요데이터(개인정보, 인증정보, 금융정보)가 제대로 보호되지 않을 경우, 보안이나 데이터의 무결성이 훼손될 수 있다. 특히 프로그램이 개인정보, 인증정보 등의 사용자 중요정보 및 시스템 중요정보를 처리하는 과정에서 이를 평문으로 저장할 경우 공격자에게 민감한 정보가 노출될 수 있는 취약점이다.
사례2 : 사용자 하드디스크에 저장된 쿠키를 통한 정보노출
개인정보, 인증정보 등이 영속적인 쿠키(Persistent Cookie)에 저장된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되며, 이는 시스템을 취약하게 만든다.
나. 설계시 고려사항
① 중요정보 또는 개인정보는 암호화해서 저장해야 한다.
중요정보가 다뤄지는 “안전영역”을 설정하고 중요정보가 해당 영역 외부로 누출되지 않도록 설계 한다. 서버의 DB나 파일 등에 저장되는 중요정보는 반드시 암호화해서 저장해야 하며 “암호연산” 설계 항목에서 정의하고 있는 안전한 암호 알고리즘과 암호키를 사용한다. 특히 쿠키, HTML5 로컬저장소와 같은 클라이언트 측 하드드라이브에는 중요정보가 저장되지 않도록 설계해야 하며, 부득이하게 중요정보를 저장해야 하는 경우 반드시 클라이언트 측에 저장 되는 민감 정보를 암호화한다. 클라이언트 언어인 HTML 코드는 사용자에게 공개되어있는 것과 마찬가지이므로 중요한 로직 및 주석처리는 서버 측 언어에서만 처리되도록 설계해야 한다.
② 불필요하거나 사용하지 않는 중요정보가 메모리에 남지 않도록 해야 한다.
개인정보 또는 특정 금융정보를 처리하는 기능 구현 시 더 이상 필요하지 않은 데이터에 대해 메모리를 초기화하여 중요데이터가 메모리에 남지 않도록 시큐어코딩 규칙을 정의한다. 특히 민감한 정보를 포함하는 페이지는 사용자 측 캐싱을 비활성화하도록 제한적인 캐시 정책을 수립하여야 하며, 부득이 캐싱을 해야 하는 경우 캐싱되는 정보는 암호화하여 저장하도록 설계한다. 인증정보와 같은 민감한 정보를 포함하는 웹 폼을 구현하는 경우 자동완성 기능을 비활성화하도록 시큐어코딩 규칙을 정의한다.
[테스트 문제]
문제: 보안대책을 서술하시오.
1. 중요정보 및 개인정보는 암호화해서 저장
2. 불필요하거나 사용하지 않은 중요정보가 메모리에 노출되지 않도록 조치
중요정보 저장 | |
보안기능 | 암호화 되지 않은 중요정보 |
보안기능 | 사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 |