IgnatiusHeo

구현단계 보안약점 제거 기준-사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출 본문

자격/SW보안약점진단원

구현단계 보안약점 제거 기준-사용자 하드디스크에 저장되는 쿠키를 통한 정보 노출

Ignatius Heo 2023. 7. 6. 13:15

작성일: 230706

 

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

 

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

구분 - 보안기능
설계단계 - 중요정보 저장
https://cryptocurrencyclub.tistory.com/106
개요 대부분의 웹 응용프로그램에서 쿠키는 메모리에 상주하며, 브라우저의 실행이 종료되면 사라진다.
프로그래머가 원하는 경우, 쿠키를 디스크에 저장할 수 있으며, 다음 브라우저 세션이 시작되었을 때
메모리에 로드된다. 개인정보, 인증정보 등이 이와 같은 영속적인 쿠키(Persistent Cookie)에 저장
된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되어 시스템을 취약하게 만든다.
진단 세부사항
(설계단계)
 
① 중요정보, 개인정보는 암호화해서 저장해야 한다. 중요정보와 개인정보에 대해 암호화하도록 명시하고, 암호화 대상 정보와 암호화 구현 방법을 명시하고 있는지 확인한다.
  ㅇ  암호화하여 저장되어야 하는 중요정보 또는 개인정보가 분류되어 있는지 확인
      - 암호화 대상 중요 정보(개인/신용/인증정보 등)
      - 개인정보보호법: 고유식별정보(주민/운전면허/여권), 바이오정보, 비밀번호
      - 정보통신망법: 주민등록번호, 신용카드번호, 계좌번호
      - 위치정보법: 위치정보
      - 시스템 중요정보: 데이터베이스 및 연동시스템 계정 정보, 주요 설정 정보
      - 기타 관련 법률 및 서비스 특성에 따른 주요 정보
  ㅇ  안전한 암호화 기능을 구현하는 프로그램이 설계되어 있거나 안전한 외부 암호 라이브러리를 사용하도록 설계되어 있는지 확인
  ㅇ  프로그램 내 암호화 대상 정보를 암복호화 하는 경우 암복호화 코딩 규칙의 정의 설계 여부 확인
 
 ② 불필요하거나 사용하지 않는 중요정보가 메모리에 남지 않도록 해야 한다. 중요정보 사용 후 메모리에 존재하지 않도록 설계되어 있는지 확인한다.
  ㅇ  중요정보 사용 후 메모리 초기화를 수행하여 중요 정보가 메모리에 남지 않도록 개발가이드에 코딩 규칙을 정의하고 있는지 확인
  ㅇ  중요정보가 포함된 페이지는 사용자 측에 캐싱되지 않도록 개발가이드 코딩 규칙을 정의하고 있는지 확인
 
보안대책
(구현단계)
쿠키의 만료시간은 세션이 지속되는 시간을 고려하여 최소한으로 설정하고 영속적인 쿠키에는 사용자
권한 등급, 세션ID 등 중요정보가 포함되지 않도록 한다.
진단방법
(구현단계)
① 사용자 브라우저로 쿠키를 전송하는지 확인하고

② 쿠키 유효기간 확인한다.

③ 쿠키 설정 값에 id 정보 등 중요 정보 포함 여부를 확인한다

 

다. 코드예제

 

ㅇ 분석

1: Cookie loginCookie = new Cookie("rememberme", "YES");
//쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있어 안전하지 않다.
2: loginCookie.setMaxAge(60*60*24*365);
3: response.addCookie(loginCookie);

ㅇ 내용

1. setMaxAge는 초단위로 설정되며, 현재 코드에서 만료시간 설정은 365일로 설정됨. 너무 김

2. 용도에 따라 기간을 설정해야함

 

ㅇ 수정

1: Cookie loginCookie = new Cookie("rememberme", "YES");
//쿠키의 만료시간은 해당 기능에 맞춰 최소로 사용한다.
2: loginCookie.setMaxAge(60*60*24);
3: response.addCookie(loginCookie);

ㅇ 내용

1. 1일도 긴거같은데 ..


ㅇ 분석

1: HttpCookie cookie = Request.Cookies.Get(“ExampleCookie”);
//쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있어 안전하지 않다.
2: cookie.Expires = DateTime.Now.AddMinutes(60.0*24.0*365.0);
3: Response.Cookies.Add(cookie);

ㅇ 내용

1. C#에서는 분단위로 설정되는듯

 

ㅇ 수정

1: HttpCookie cookie = Request.Cookies.Get(“ExampleCookie”);
//쿠키의 만료시간은 해당 기능에 맞춰 최소로 사용한다.
2: cookie.Expires = DateTime.Now.AddMinutes(10d);
3: Response.Cookies.Add(cookie);

ㅇ 내용

1. 10일로 설정함.

 

 

 

끝.