소스코드 보안약점 진단 // 소프트웨어 보안약점 진단 // SW 보안약점 진단과 같이 다양한 이름으로 불리는 진단 과업 중 하나이다.
SW개발보안은 해킹 등 사이버공격의 원인인 보안약점을 SW개발단계에서 사전에 제거하고 SW 개발 생명주기의 각 단계별로 수행하는 일련의 보안활동을 통하여 안전한 SW를 개발·운영하기 위한 목적으로 적용하는 개발체계이다.
해당 내용은 KISA에서 발간하는 취약점 진단 가이드 항목을 기준으로 작성한다.
제2절 보안기능
보안기능(인증, 접근제어, 기밀성, 암호화, 권한관리 등)을 부적절하게 구현시 발생할 수 있는 보안 약점으로 적절한 인증 없는 중요기능 허용, 부적절한 인가 등이 포함된다.
12. 사용자 하드디스크에 저장되는 쿠키를 통한 정보노출
가. 개요
대부분의 웹 응용프로그램에서 쿠키는 메모리에 상주하며, 브라우저의 실행이 종료되면 사라진다. 프로그래머가 원하는 경우, 쿠키를 디스크에 저장할 수 있으며, 다음 브라우저 세션이 시작되었을 때 메모리에 로드된다. 개인정보, 인증정보 등이 이와 같은 영속적인 쿠키(Persistent Cookie)에 저장 된다면, 공격자는 쿠키에 접근할 수 있는 보다 많은 기회를 가지게 되어 시스템을 취약하게 만든다.
나. 보안대책
쿠키의 만료시간은 세션이 지속되는 시간을 고려하여 최소한으로 설정하고 영속적인 쿠키에는 사용 자 권한 등급, 세션ID 등 중요정보가 포함되지 않도록 한다.
다. 코드예제
쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있다. 쿠키의 유효기간이 긴 경우 사용자 하드 디스크에 쿠키가 저장되며 저장된 쿠키는 쉽게 도용될 수 있으므로 취약하다.
- 안전하지 않은 코드의 예 JAVA -
1: Cookie loginCookie = new Cookie("rememberme", "YES");
//쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있어 안전하지 않다.
2: loginCookie.setMaxAge(60*60*24*365);
3: response.addCookie(loginCookie);
- 안전한 코드의 예 JAVA -
쿠키의 만료시간은 해당 기능에 맞춰 최소로 설정하고 영속적인 쿠키에는 중요 정보가 포함되지 않도록 한다.
1: Cookie loginCookie = new Cookie("rememberme", "YES");
//쿠키의 만료시간은 해당 기능에 맞춰 최소로 사용한다.
2: loginCookie.setMaxAge(60*60*24);
3: response.addCookie(loginCookie);
라. 진단방법
사용자 브라우저로 쿠키를 전송하는지 확인하고(①), 쿠키 유효기간 확인한다(②). 쿠키 설정 값에 id 정보 등 중요 정보 포함 여부를 확인한다.(③)
1: …
2: Cookie ck = new Cookie(“id”, “test123”) ;--------------------③
3: ck.setMaxAge(60*60*24*365*10) ;---------------------------②
4: response.addCookie(ck) ;------------------------------------①
5: …
- 정탐코드의 예 -
다음의 예제는 쿠키의 만료시간을 1년으로 과도하게 길게 설정하고 있다. 쿠키의 유효기간이 긴 경우 사용자 하드디스크에 쿠키가 저장되며 저장된 쿠키는 쉽게 도용될 수 있으므로 취약하다.
1: protected void doPost(HttpServletRequest request, HttpServletResponse response) {
2: ……
3: String username = request.getParameter(“username”);
4: char[] password = request.getParameter(“password”).toCharArray();
5: boolean rememberMe = Boolean.valueOf(request.getParameter(“rememberme”));
6:
7: LoginService loginService = new LoginServiceImpl();
8: if (rememberMe) {
9: Cookie loginCookie = new Cookie(“rememberme”, “YES”);
10: loginCookie.setMaxAge(60*60*24*30*12);
11: response.addCookie(loginCookie);
12: ……
13: } else {
14: …
- 오탐코드의 예 -
아래 예제에서는 쿠키의 만료시간을 해당 기능에 맞춰 최소로 설정하고 있어 안전하다.
1: protected void doPost(HttpServletRequest request, HttpServletResponse response) {
2: ……
3: String username = request.getParameter(“username”);
4: char[] password = request.getParameter(“password”).toCharArray();
5: boolean rememberMe = Boolean.valueOf(request.getParameter(“rememberme”));
6:
7: LoginService loginService = new LoginServiceImpl();
8: if (rememberMe) {
9: Cookie loginCookie = new Cookie(“rememberme”, “YES”);
10: loginCookie.setMaxAge(60*60*24);
11: response.addCookie(loginCookie);
12: ……
13: } else {
14: ……
15: }
16: Arrays.fill(password, ‘ ‘);
17: }
'보안 공부 > 소스코드 보안약점 진단' 카테고리의 다른 글
소스코드 보안약점 진단 - 솔트 없이 일방향 해시함수 사용 (0) | 2022.01.19 |
---|---|
소스코드 보안약점 진단 - 주석문 안에 포함된 시스템 주요정보 (0) | 2022.01.18 |
소스코드 보안약점 진단 - 취약한 비밀번호 허용 (0) | 2022.01.14 |
소스코드 보안약점 진단 - 적절하지 않은 난수값 사용 (0) | 2022.01.12 |
소스코드 보안약점 진단 - 충분하지 않은 키 길이 사용 (0) | 2022.01.11 |