홈페이지 취약점 분석 이야기 파일 지도 사진 깨알






>> 목록보이기
#IP보안 #세션ID-IP주소 연동 #Session ID #세션ID #세션탈취 #Session Hijacking

세션 쿠키와 IP보안

세션 탈취에는 주로 크로스사이트스크립트(XSS) 취약점이 사용된다. 이외에도 표적 시스템의 근처에 침투하여 네트워크 감청을 통해 세션ID를 탈취하기도 한다. XSS에 의한 세션탈취는 HttpOnly 선언으로 일부 방지가 가능하다. TRACE 메소드에 의한 XST(Cross-site Tracing) 공격도 살펴본 바 있다. HTTP 통신에 SSL(Secure Socket Layer)을 적용함으로써 네트워크 감청을 대부분 차단할 수 있다. (SSL에 대한 세션탈취 기법으로 SSL Strip이라는 중간자 공격이 존재한다.)

세션이 탈취될 수 있다는 가정하에서 도입된 방어개념이 "세션+IP주소 연동"이다. 일반적으로 "IP보안"이라고 한다. 이 개념에서는 서버에 세션 데이터를 생성할 때 웹 브라우저의 공인 IP주소를 기록하여 이후의 접속에서 지속적으로 접속한 IP주소가 동일한 지를 검토한다. 세션 데이터에 기록되지 않은 IP주소로 접속했을 때는 세션을 거부하는 방식으로 세션 탈취를 방어한다. 다음 그림들은 네이버다음에 IP보안이 적용된 것을 보여준다.

네이버 대문 화면갈무리
[ Naver 누리집: 로그인 오른쪽에 "IP보안" 설정이 보인다. ]

네이버 IP보안 도움말
[ 네이버 IP보안 도움말]

네이버에서는 3단계로 IP보안을 지원한다. 1단계에서는 동일한 C클래스 대역에서 이전에 로그인한 세션으로 접속하는 것을 허용한다. 2단계에서는 최근 로그인한 IP주소들과 동일하면 허용한다. 3단계에서는 이전 IP주소와 동일할 때만 허용한다. 설정된 단계의 조건에 맞지 않으면 세션이 무효화되며 다시 로그인해야 한다. 네이버의 기본 설정은 1단계이다.

다음 대문 화면갈무리
[ 다음 누리집: 로그인 윗쪽에 "IP보안" 설정이 보인다. ]

다음 IP보안 도움말
[ 다음 IP보안 도움말 ]

다음에서는 2단계로 IP보안을 지원한다. 1단계에서는 동일한 C클래스 대역에서 이전에 로그인한 세션으로 접속하는 것을 허용한다. 2단계에서는 이전 IP주소와 동일할 때만 허용한다. 설정된 단계의 조건에 맞지 않으면 세션이 무효화되며 다시 로그인해야 한다. 다음의 기본 설정은 1단계이다.

IP보안의 단점

TCP/IP에서 IP주소를 변조하기는 매우 어렵기 때문에 IP보안은 세션탈취에 대한 강력한 보안방법이다. 하지만 현대의 인터넷 환경에서는 여러가지 단점도 가진다. 가장 강력한 직전 접속 IP주소로 IP보안을 하는 경우에 발생할 수 있는 단점을 알아보자.

  • 불편하다. 노트북 사용자가 여기저기 이동하게 되면 - 이미 로그인한 상태임에도 불구하고 - 새로운 장소에서 접속할 때마다 로그인을 새로 해야 한다.
  • 이동형 환경에 적용할 수 없다. 휴대전화와 같이 이동시에 수시로 IP주소가 변경되는 상황에서는 IP보안 적용이 현실적으로 불가능하다. 때문에 네이버나 다음에서도 PC환경에서는 IP보안을 기본으로 하지만 휴대전화에서는 - 실제로는 모바일 페이지에서느 - IP보안을 지원하지 않는다.
  • NAT(Network Address Translation) 환경에서는 같은 환경내의 모든 사람이 동일한 공인IP주소를 가진다. 음식점이나 커피숍의 WIFI와 같이 네트워크 감청이 쉬운 환경에서는 IP보안이 작동하지 않는다. 또한, 요즘 기업은 사설IP주소를 많이 쓰기 때문에 IP보안이 설정되더라도 내부PC에 의한 공격은 막을 수 없다.
  • 프록시(Proxy) 환경에서는 NAT 환경처럼 동일한 IP주소를 가지게 되어 유사한 상황이 발생한다.

보안은 사용자를 불편하지 않게 해야 한다. 사용자는 어떤 보안기능이 있는 지 모르는 것이 가장 이상적인 보안이다. 그런데 IP보안은 사용자에게 "이전에 접속한 IP주소와 다른 IP로 접속하여 새로 로그인 하셔야 합니다!"라는 - 이미 정상적으로 로그인한 사용자 입장에서는 - 황당한 경고를 보낸다. IP보안이 세션탈취를 막는 강력한 보안수단이긴 하지만 사용자에게 불편함을 준다는 점에서 좋은 보안수단이라고 보기는 어렵다.

간락하게 보는 IP보안의 개념

- 사용자가 로그인에 성공하면 웹서버는 세션 데이타에 사용자가 로그인한 공인 IP주소를 기록한다.

<?php
	...
	$_SESSION['user_id'] = $_POST['id'];
	$_SESSION['ip_addr'] = $_SERVER['REMOTE_ADDR'];
	...
?>

- 로그인한 사용자가 웹서버에 접속하면 항상 세션의 IP주소와 사용자의 공인IP주소를 비교한다. IP주소가 다르면 서버의 세션 데이타를 파기하고 웹 어플리케이션 실행을 종료한다.

<?php
	...
	if ($_SESSION['ip_addr'] != $_SERVER['REMOTE_ADDR']) {
		destroy_session();
		exit();
	}
	...
?>

[처음 작성한 날: 2016.11.11]    [마지막으로 고친 날: 2016.11.12] 


< 이전 글 : 모든 꼬리표 모아보기(태그 클라우드) (2016.11.11)

> 다음 글 : HTTP TRACE method와 XST 공격 (2016.11.11)


크리에이티브 커먼즈 라이선스 이 저작물은 크리에이티브 커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
문서의 시작으로 컴퓨터 깨알지식 웹핵 누리집 대문