sessionid 추측 공격

2013. 5. 23. 22:11


# 세션ID 


웹서버는 특정 클라이언트를 구분하기 위한 목적으로 세션 변수를 만들어서 서버측에 저장해 둔다. 그리고 해당 값


을 클라이언트측에 set-cookie 를 통해 내려보내고, 다음 접속 시 cookie 에 포함된 이 sessionID 값을 확인하여 로그


인된 사용자인지 등 서버측에 저장된 정보와 비교를 하게 된다.


# SessionID 예제 1

Cookie: PHPSESSID=lfh3d6kb7c33crgi5o48bub1t4


# SessionID 예제 2

PCID=13681101204539449991611 


이와 같이 일반적으로 숫자와 문자, 특수문자를 혼합하여 만들어 낸다. 예제1의 경우 기본적으로 php 에서 제공


하는 세션값을 보여주고 있으며, 예제2와 같이 서버상에서 직접 만들어서 설정해 줄수도 있다.



# SessionID 분석


그럼 이 세션값이 어떤 식으로 공격당할 수 있는지 알아보도록 하자. WebScarab 툴의 SessionID Analysis Plubin


을 이용해서 분석이 가능하다.


[그림 1] www.****.co.kr 사이트의 시간의 흐름에 따른 세션ID 값 변화


위 그림을 보면 세션ID중 일부는 고정된 값을 가지고 있으며(be8cd4cAAVX) 뒤의 문자열만 일정한 비율로 증가하고 


있음을 알 수 있다. 숫자로 변환된 값을 보면 시간에 따라 값이 증가하다가 한번씩 값이 떨어진 뒤 다시 증가하고 있다


는 것을 확실히 확인할 수 있다. 즉, 일정한 공식에 의해 값이 생성된다는 것을 알 수 있다.


                    [그림 2] 세션값 변화 그래프


위 그림을 보면 이제 확실히 이해가 갈 것이다. 이러한 경우 bruteforcing 을 통해 쉽게 타인의 세션값을 획득 할 수 있


을 것이다. 



또 다른 예제를 살펴보자.



                                          [글림 3] 시간별 세션값 변화 그래프 2


위 그래프를 보면, 이 사이트의 경우 2초마다 값이 반복됨을 알 수 있다. 이 경우 2초간 최소값과 최대값 사이의 값을 


bruteforcing 할 수 있다면, 혹은 몇몇 고정값만을 반복 요청한다면 타인의 세션값을 획득하게 될수도 있다. 



이와 같은 고정된 공식을 통해 세션값을 생성하면 분석이 된 후에는 임의의 세션값을 추측하여 타인의 세션값을 얻게


될수도 있다. 그렇다면 안전한 사이트는 어떨까?



                                              [그럼 4] 랜덤하게 변화되는 세션ID값


위 사이트의 경우 말그대로 랜덤한 값이 할당되고 있어 추측이 매우 어렵다는 것을 알 수 있다.   :)



+ Recent posts