본문 바로가기

개발 관련 부가 지식/기타

세션 하이재킹(Session Hijacking)에 대해서

728x90
728x90

세션 하이재킹은 Web에서 유저를 식별하는 세션을 탈취하여 아이디, 패스워드 없이 계정을 도용하는 공격 방법 👀

(Hijacking은 가로채다 라는 뜻)

 

주로 Stored XSS를 통해 세션 하이재킹 공격이 이루어짐 ❗

 

Stored XSS 이란? 악성 사용자가 악성스크립트(자바스크립트) 를 게시글 같은 것(서버 db)에 남긴 뒤에,

해당 게시글을 다른 유저가 들어올 때 악성 스크립트가 실행되는 공격

이때 악성 스크립트가 사용자 세션을 공격자 서버에 보내는 것이 포함되어 있으면, 세션 하이재킹이라 부름

 

대응방안

1. XSS 방어

2. HttpOnly 헤더

3. 세션 발급 시 인증 IP 넣고 검증

 

1번의 핵심은

사용자의 입력 값이 자바스크립트 형태일 때 어떠한 경우라도 실행되서는 안됨✨

ex) <script>alert('xss 취약')</script>

해당 문구를 검색어에 입력할 시 alert이 실행되거나, 게시글에 남겼을 때 해당 게시글을 들어가면 실행되거나 하는 등

 

따라서

프론트 단에서 입력 값을 받을 때

1-1. 정규 표현식을 통한 값 검증 (단순 숫자 및 문자+숫자만 허용하게 끔)

1-2. HTML Entity Encoding 처리 또는 보안라이브러리 사용

등으로 값을 처리하는 것이 안전하다.

 

HTML Entity Encoding 대표적인 예시

< : &lt; (less than)
> : &gt; (greater than)
& : &amp; (ampersand)
" : &quot; 또는 &#34; (double quote)
' :  &apos; 또는 &#39; (single quote)

 

2. HttpOnly 헤더 설정 - 사용자가 브라우저  자바스크립트로 해당 쿠키를 접근할 수 없게 된다.

Cookie cookie = new Cookie("sessionCookie", "sessionID");
cookie.setHttpOnly(true); // HttpOnly 설정

 

3. 세션 발급 시 인증 IP 넣고 검증

cookie 값에 로그인 한 유저 ip값을 넣고

그 후 cookie를 검증할 때 cookie 에 설정 된 ip 값과 현재 요청자의 ip 값을 비교하면 된다.

 

3번 같은 경우는 공공장소에 와이파이 사용 시 공인 ip가 같을 때는 같은 ip로 인식되므로 주의해야 한다.

 

 

 

👏

👏