본문 바로가기

논문 분석

강화된 안전쿠키를 사용한 웹 응용의 보안에 관한 연구

 

논문 선정 이유

데이터 통신 및 네트워크 과목에서 학기 초에 쿠키에 대한 내용을 배웠다.

논문 선정을 무엇을 할까 찾아보다가 강화된 안전쿠키가 무엇인지 궁금해서 이 논문을 택했다.

 

 

 

 

서론

HTTP(Hypertext Transfer Protocol)

웹과 다양한 애플리케이션에서 광범위하게 사용되어 지금도 사용중인 비상태성 프로토콜

 

그러나, 실제 사용하는 웹에서는 여러 방면에서 상태성이 요구됨

-> 쿠키와 세션이 제안됨

 

-사용자의 세션 데이터는 서버에 저장되며, 응답헤더를 통해 세션ID브라우저에 보내져 쿠키에 저장된다.

-브라우저를 종료 생성된 쿠키가 라지며, 세션파일은 일정시간 동안 서버에 존재한다.

-만료시간이 설정되는 쿠키데이터가 사용자의 브라우저에 저장되며, 브라우저가 종료된 후에도 쿠키 데이터는 사용자 컴퓨터에 존재한다.

-서버에 정보를 저장하는 세션저장되는 세션이 많을수록 서버에 부하가 증가한다.

-쿠키서버가 아닌 사용자의 컴퓨터에 정보를 저장하므로 세션에 비하여 서버에 부하는 주지 않는다.

-세션은 정보를 서버에 저장하므로 서버에 저장되는 데이터를 쿠키와 같이 사용자가 임의로 변조없으므로, 세션의 사용이 쿠키에 비하여 보안적인 측면에서 안전성이 높다.

but, 세션 id가 노출되면 사용자의 권한을 공격자가 얻을 수 있어 재생공격방지에는 취약성이 있다.

 

 

 

 

 

관련 연구

세션과 쿠키의 보안위협

 

-서버에서 처음 생성된 쿠키는 HTTP 응답메시지의 Set-Cookie 헤더로 전달되어 브라우저에 저장됨.

-쿠키는 클라이언트에서 저장이 필요한 데이터를 cookie-name 별로 분류하고 해당 데이터를 cookie value에 저장.

-세션은 cookie-name 대신 웹서버에 따른 세션 이름이 사용되고, cookie value 는 서버에서 생성된 session-id 가 저장됨.

-쿠키와 세션은 사용한 브라우저의 쿠키 저장파일에 저장된다.

-정상적인 세션은 브라우저를 종료할 시 쿠키 저장파일에서 사라지며, 쿠키는 브라우저를 종료한 후 만료시간이 지나도 저장파일에 남아있게 됨.

-웹서버의 세션 유지시간 동안 웹서버의 세션파일은 유지되므로, 세션이 유지되는 기간 안에 사용자는 자신의 session-id 값을 가지고 세션을 복구시킬 수 있음.

-> session-id 값을 누군가 알고 있다면 다른 사용자 또한 해당 세션을 복구시킬 수 있음.

 

-세션과 쿠키는 모두 만료시간의 조작이 가능

그러나 서버는 세션과 쿠키의 만료시간이 조작되었는지 알 수 없음

 

만료시간이 조작된 세션과 쿠키는 브라우저 종료 후 만료시간이 지나더라도 쿠키 저장파일에 남아있음.

세션의 경우 웹서버의 세션 유지 시간이 지나면 session-id 값을 가지고 세션을 복구 하더라도 복구되지 않으며,

session-id 값 자체에는 사용자 데이터를 포함하지 않음.

쿠키는 저장된 쿠키값을 통해 재생이 가능하며 만료시간을 조작하여 쿠키의 유지가 지속적으로 가능함.

쿠키값 자체에 사용자 정보가 내포되어 있으므로,

쿠키값이 암호화되어 있지 않으면 쿠키값을 통하여 사용자 정보를 알 수 있음.

 

-> 세션이 쿠키보다 안전함.

 

 

 

 

안전한 쿠키체계

 

안전한 쿠키 체계에서는 쿠키의 기밀성, 무결성, 인증, 재생공격방지 모두 만족할 수 있어야함.

but,  기존의 안전한 쿠키체계는 기밀성이나 재생공격방지 같은 한-두 가지 항목을 충분히 제공하지 못하고 있음.

 

 

Liu 쿠키체계

Liu가 제안한 안전한 쿠키 체계 방식

- 사용자 이름과 쿠키의 만료시간, 키값 k로 암호화한 데이터, SSL(Secure Sockets Layer) Session ID 등을

k로 해싱한 결과를 서로 붙여서 쿠키를 생성

 

문제점:

사용자의 이름 암호화x ->저장된 쿠키 통해 해당 클라이언트가 어떤 사용자로 인증 되었는지 알 수 있음 -> 기밀성 만족x

 

 

 

 

 

 

W.‐B. Lee et al.의 쿠키체계

W.‐B. Lee et al의 쿠키체계

-Liu의 쿠키체계 기밀성 보완

 

1. 일반적인 데이터와 개인정보에 민감한 데이터를 먼저 구분

2. 큰 소수의 선택과 계산 을 통해 키를 생성하여 일반적인 데이터에 붙인 후 해쉬함수로 해쉬값을 생성하여 서버키를 만듦

3. 민감한 데이터는 생성된 서버키를 사용하여 대칭키로 암호화된 데이터를 생성하고, 일반적인 데이터와 암호화된 데이터를 합쳐 쿠키를 만듦

4. 생성된 쿠키는 사용자 브라우저에 저장하고, 서버는 사용자 브 라우저에 저장된 쿠키를 가지고 앞서 선택한 소수와 계산을 통하여 생성한 키를 역으로 계산하여 찾음

5. 발견한 키를 통하여 암호화 했던 데이터를 복 호화하였을 때 복호화된 데이터가 인식 가능한 데이터면 유효하고, 그렇지 않으면 인증이 거절됨

 

문제점:

사용자별 인증 시 생성되는 쿠키를 사용자가 재인증하지 않거나 쿠키 데이터가 갱신되지 않는 경우에 항상 같은 값으로 존재함 -> 해당 쿠키가 공격자로부터 탈취되는 경우에 외부에서 인증할 수 있는 재생 공격에 여전히 취약점이 존재함

 

 

 

 

 

강화된 안전쿠키 체계와 안전성

 

- 안전쿠키(ESCK, Enhanced Secure CooKie)를 제안

 

강화된 안전쿠키

 

 

- 짧은 시간을 더한 쿠키의 만료시간, 서버 비밀키(Secret key)를 구분자 | 로 연결하여 해쉬값을 생성

- 암호화키 k는 앞서 만들어진 해쉬값의 뒤에 서버 비밀키를 붙여 생성

- Data의 앞이나 뒤에 구분자와 함께 서버 비밀키를 추가한 후 k로 대칭키 암호화

해쉬값과 암호화된 값을 구분자 | 로 연결

 

 

강화된 안전쿠키의 기밀성과 무결성

기밀성

서버 비밀키를 포함하여 공격자의 크래킹이 거의 불가능하도록 함 + 해쉬값에 비밀키 한 번 더 포함

-> 해쉬값과 서버 비밀키를 키로 한 Data의 대칭키 암호화 결과값도 키 값을 알 수 없음

 

무결성

쿠키가 어떤 값으로 이루어져 있는지 알 수 없는 공격자는 해쉬함수의 충돌저항성에 따라 임의의 값으로 동일한 쿠키를 생성 및 인증할 수 없게 됨.

Data의 복호화 시에 Data 앞이나 뒤에 붙였던 서버 비밀키만 확인하여 복호화된 값을 검증할 수 있다면 쿠키 조작의 위험으로부터 안전할 수 있음.

 

 

 

 

강화된 안전쿠키의 로그인 인증 및 쿠키의 유효성 체크

 

로그인 인증 및 강화된 안전쿠키의 유효성 체크절차

  • 사용자가 아이디,패스워드 입력하면 해당 사용자 정보 일치하는지 서버가 판단
  • 정보가 일치하면 쿠키 생성, 데이터베이스에 생성된 해쉬값과 쿠키의 만료시간 저장
  • 생성된 쿠키는 확실하게 고유한 값

만약 쿠키 검증에 실패하여 확인절차에서 FALSE가 리턴되거나 사용자가 로그아웃 버튼 누름

-> 브라우저에 저장된 쿠키 및 데이터베이스에 저장된 해쉬값과 크키의 만료시간 삭제

--> 사용자의 쿠키값이 탈취되어도 공격자의 의한 인증 불가능해짐

--> 만료시간 없어지면 사용자가 가지고 있는 쿠키 검증 불가능하므로 조작을 통한 로그인 불가능

 

 

강화된 안전쿠키의 재생공격방지

쿠키의 해쉬값과 만료시간은 사용자 로그인 시에 값으로 저장됨

-> 공격자가 강화된 안전쿠키의 비밀키와 생성방법 알아도 데이터베이스에 해당 값 없으면 인증 불가

 

쿠키의 만료시간은 사용자가 페이지를 이동하거나 페이지가 새로고침될 때마다 현재 시간에 짧은 시간을 추가하여 새로 갱신

-> 사용자가 페이지를 이동하거나 새로 고침될 시에 만료시간이 변하므로 쿠키가 지속적으로 변함

 

쿠키의 재생공격은 공격자가 해당 쿠키를 만료시간 안에 가져와 자신의 브라우저에서 작동 시킬 수 있어야 함

-> 공격자가 짧은 쿠키 만료시간 안에 사용자 쿠키를 가져오지 못하면 쿠키의 재생 공격 불가능

 

공격자가 쿠키의 만료시간을 조작하여 만료시간을 강제로 늘린다고 하여도 데이터베이스에 만료시간이 저장되어 있어 인증을 차단할 수 있음

 

 

강화된 안전쿠키와 기존 쿠키의 비교

 

 

안전성 및 호환성 비교

기존 쿠키와 강화된 안전쿠키의 비교

기존 쿠키방식

공격자에게 쿠키의 생성 방법과 비밀키가 노출되는 경우, 

공격자는 공격자가 인증을 원하는 사용자 이름과 쿠키만료시간으로 자유롭게 인증을 위한 쿠키값 생성이 가능

 

강화된 안전쿠키방식

데이터베이스에 쿠키값과 만료시간이 빈값으로 있을 경우 쿠키 인증이 불가능

 

 

 

 

성능 비교

-쿠키값의 생성과 로그인 인증에서는 거의 동일한 성능을 보임

-사용자가 페이지 이동시의 쿠키검즈에서는 새로 쿠키를 생성하는 과정에서 기존 쿠키에 비해 시간 증가

but, 9ms는 인간이 식별하기 어려운 짧은 시간

->시간은 증가했지만 강화된 안전쿠키 방식은 안전한 쿠키 체계의  모든 조건을 제공

 

 

결론

무결성 보장

사용자의 이름과 쿠키의 만료시간, 서버 비밀키를 연결하여 생성되는 해쉬값 이용.

->해쉬값을 구성하는 정보요소 변조되었는지 확인 가능

 

기밀성 보장

사용자의 데이터가 예측할 수 없고 길이가 긴 해쉬값을 키로 사용하여 대칭키 암호화

 

인증 재생공격 방지

사용자가 페이지 이동할 때마다 쿠키 검증, 해쉬값과 쿠키 만료시간 지속적으로 갱신

-> 쿠키값 노출되어도 쿠키 만료시간 변하게 되면 이전 쿠키값으로 사용자 인증 불가능

 

쿠키 생성 방법과 비밀키 노출되어도 쿠키값과 쿠키의 만료시간이 데이터베이스에 저장된 값과 같지 않으면 인증 불가능

 

 

 

느낀 점

쿠키가 데통네 중간 범위라서 이 쯤 오니 대략적인 개념만 기억나고 점점 희미해지고 있었는데 다시 한 번 공부할 수 있어서 좋은 시간이었다. 안전한 쿠키 조건을 제공하는 방법을 알 수 있어서 흥미로웠다.

 

https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11723002