Session Hijacking

hjkim·2022년 1월 16일
1

Session Hijacking

세션은 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성화된 상태를 말한다. session hijacking은 시스템 간 연결이 활성화된 상태를 가로채는 것을 뜻한다.

TCP session hijacking은 TCP의 고유한 취약점을 이용해 정상적인 접속을 빼앗는 방법이다. TCP는 클라이언트와 서버 간 통신을 할 때 패킷의 연속성을 보장하기 위해 각각 시퀀스 넘버를 사용한다. 이 시퀀스 넘버가 잘못되면 이를 바로잡기 위한 작업을 하는데, TCP session hijacking은 서버와 클라이언트에 각각 잘못된 시퀀스 넘버를 위조해서 연결된 세션에 잠시 혼란을 준 뒤 자신이 끼어들어 가는 방식이다.

HTTP session hijacking은 이미 인증이 완료된 타인의 세션 ID를 탈취하여 웹 서버에 request를 보내는 방식이다. 해당 공격이 성공하려면 세션 ID 값이 유효해야 하므로 사용자가 로그온 한 상태에서 공격이 이루어져야 하거나 세션 ID 값의 유지 시간이 긴 경우라는 제한 사항이 필요하다. 즉, 세션 ID를 통해 사용자와 서버 간의 세션이 활성화된 상태를 가로채는 방식이다.

TCP Session Hijacking

일반적인 TCP 연결 과정(3-way handshake)

  1. 연결 전 클라이언트의 포트는 closed 상태이고 서버는 서비스를 제공하기 위해 기다리는 listen 상태이다.
  2. 클라이언트는 32비트 임의의 숫자로 1200을 생성한 뒤 서버에 SYN을 전송한다. 서버에서는 수신한 순서번호인 1200을 저장한다.
  3. 서버에서는 4800이란 임의의 숫자를 순서번호로 생성한 뒤 클라이언트로부터 전송받은 1200과 패킷의 길이(1)를 더해 클라이언트에 SYN와 ACK를 전송한다.
    클라이언트는 수신된 1200 + 패킷 길이(1)를 받아 자신의 순서번호(1200) 값과 비교하여 일치하면 4800으로 받은 순서번호 값을 저장한다.
  4. 클라이언트는 4800 + 패킷 길이(1)를 서버에 보내고 established 상태가 된다. 서버는 수신된 4800 + 패킷 길이(1)를 자신의 4800 순서번호 값과 비교하여 일치하면 established 상태가 된다.
    둘다 established 상태가 되면
    클라이언트가 관리하는 자신의 시퀀스 넘버 = 서버가 알고 있는 클라이언트의 시퀀스 넘버,
    서버가 관리하는 자신의 시퀀스 넘버 = 클라이언트가 알고 있는 서버의 시퀀스 넘버의 두 등식이 성립한다.

TCP Session Hijacking

  1. 클라이언트는 서버와 모두 접속되어 있는 Established 상태이며, 공격자는 적절한 시퀀스 넘버를 획득하기 위해 스니핑을 하고 있다.
  2. 공격자는 공격 시점에 RST(리셋) 패킷을 보내 서버를 잠시 closed 상태로 만든다.
  3. 공격자는 자신의 시퀀스 넘버를 만들어 서버에 보낸다.
  4. 서버는 새로운 시퀀스 넘버를 받아들이고, 서버의 시퀀스 넘버를 재생성하여 공격자에게 보낸다.
  5. 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두 established 상태가 된다. 원래의 클라이언트는 여전히 established 상태고 서버의 네트워크 상태로 인한 잠시간의 연결 문제로 받아들인다. 연결은 끊어졌지만 인증 세션은 열린 상태이다.
  6. 공격자는 공격 전 클라이언트가 서버와 통신을 하던 시퀀스 넘버를 sniffing을 통해 모두 알고 있는 상태이므로 클라이언트와 정상적인 통신을 하며, 서버와는 새로 생성한 시퀀스 넘버로 통신을 한다.

  • DoS 공격 : 서비스 거부 공격(Denial-of-Service), 특정한 네트워크나 웹 리소스에 합법적인 유저가 접근하지 못하도록 방해하는 것이다. 전형적으로 막대한 양의 트래픽을 주어 과부하를 주거나 악의적인 요청을 보내 해당 리소스가 오작동을 일으키게 하거나 완전히 정지시킨다.
  • IP spoofing : 자신의 IP 주소를 속여서 접근하는 공격을 일컫는다. 신뢰 관계에 있는 두 시스템 사이에서 허가받지 않은 사람이 자신의 IP 주소를 신뢰 관계에 있는 호스트의 IP 주소로 바꾸어 속이는 것으로 IP 주소로 인증하는 서비스(rlogin, rsh 등)를 무력화시킬 수 있다.
    아래의 그림에서처럼 Alice가 아닌 사람이 Alice의 IP 주소를 탈취해 Alice인 양 통신하게 되는 상황과 같다.
  • Sniffing : 네트워크에서 지나다니는 정보들을 몰래 훔쳐보는 것을 말한다. 능동적으로 피해를 주기 이전에 수동적인 방법으로 공격 대상을 파악한 후 움직인다고 볼 수 있다.
  • ACK storm : TCP hijacking의 공격자가 서버와의 연결을 끊으면 클라이언트는 정상적인 패킷을 서버로 보내기 시작한다. 하지만 서버는 정상적이지 않은 시퀀스 넘버로 인식하여(공격자와 새로운 세션 생성했으므로) ACK 패킷에 서버의 시퀀스 넘버와 서버가 받은 클라이언트 시퀀스 넘버를 담아 보낸다. 이 작업은 시퀀스 넘버를 맞추기 위한 작업이다. 그러나 클라이언트 역시 서버가 보낸 시퀀스 넘버와 자신의 시퀀스 넘버가 일치하지 않아 이를 맞추고자 서버의 시퀀스 번호가 담긴 ACK 패킷을 보낸다. 이러한 과정이 무한히 반복되는 경우를 ACK storm이라 한다.

HTTP(Web) Session Hijacking

http는 stateless 프로토콜이다. 따라서 사용자 식별 정보를 세션과 쿠키를 이용하여 저장해두고 웹 페이지의 요청자를 구별한다.

앞전의 포스트에서 세션의 동작 원리를 살펴보았다. 웹 서버가 웹 브라우저에게 세션 ID를 할당하여 이를 웹 브라우저로 보낸다. 그러면 웹 브라우저는 요청 메시지에 해당 세션 ID를 포함시킴으로써 해당 메시지가 동일한 요청자로부터 온 것임을 서버에게 나타낸다.

서버는 동일 세션 ID를 가진 요청 메시지를 모두 동일 접근 권한을 가진 것으로 처리한다. 따라서 해당 세션 식별자를 가로챈다면 공격자는 별도의 인증 과정 없이 사용자의 권한으로 서버를 접근할 수 있게 된다.

허브 형식의 공유기를 사용할 경우 공격자가 Sniffing이 가능하므로 hijacking 공격에 취약점이 존재하게 된다. 이를 방지하기 위해서는 Session Cookie 값이 만료되는 시간을 적절히 설정하고 Sniffing이 이루어지지 않도록 네트워크 보안 설정을 해주어야 한다.


[참조] https://blog.naver.com/PostView.nhn?blogId=wnrjsxo&logNo=221114275533&parentCategoryNo=&categoryNo=2&viewDate=&isShowPopularPosts=true&from=search
[참조] https://academy.binance.com/ko/articles/what-is-a-dos-attack
[참조] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=wnrjsxo&logNo=221111232129
[참조] https://hiloelab.blogspot.com/2017/01/sniffing.html
[참조] https://mindgear.tistory.com/206
[참조] https://peemangit.tistory.com/354
[참조] https://xn--ex3bt1ov9l.kr/293
[참조] https://onecellboy.tistory.com/114
[참조] https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=shackerz&logNo=220389097150

profile
피드백은 언제나 환영입니다! :)

0개의 댓글