보안세상
세션하이재킹 본문
세션 하이재킹(Session Hijacking) 정의
세션 : 사용자와 컴퓨터, 또는 두 대의 컴퓨터간의 활성화된 상태
세션하이재킹 : 쉽게 말해 두 컴퓨터 간의 연결이 활성화 되면 그 활성화된 상태를 공격자가 가로채어 모든 작업을
감시하거나 제어할 수 있게 된다.
세션 하이재킹(Session Hijacking) 원리
정상적인 접속이 유지되기 위해서는 서버와 클라이언트가 서로의 시퀸스 넘버를 올바르게 알고 있어야 하며, 이러한 상태를 동기화 상태라고 한다. 동기화 상태가 되면 다음과 같은 상태가 된다.
Client_My_Seq = Server_Client_Seq
Server_My_Seq = Client_Server_Seq
아래 그림은 시퀸스 넘버정의다.
세션하이재킹은 위의 상태를 무너뜨리는 것에서 시작한다.
즉, 서버와 클라이언트를 비동기화 상태로 만들어야 한다.
비동기화상태로 만드는 방법 2가지
1. 서버에서 초기 설정 단계의 접속을 끊고 다른 일련번호로 새로운 접속을 생성
2. 대량의 널(null) 데이터를 보내 비동기화 시키는것
다시한번 순서대로 알아보자!
1. Client -> Server 가 통신하고 있다.
2. 통신을 스니핑하다가 RST패킷을 생성하여 서버에게 보낸다.
3. 서버가 잠시 Closed 상태가 된다.
클라이언트는 Established 상태
4. 이때 해커는 새로운 시퀸스 넘버를 서버로 보내서
서버와 해커사이에 세션을 성립시킨다.
5. 해커는 클라이언트가 서버와 통신하던 시퀸스 넘버도 알고 있으므로
그걸 이용해서 클라이언트 -> 서버로 보내는 데이터를 중간에 가로채고,
해커와 서버도 세션이 열려 있으므로, 가로챈 데이터를 살펴본 후 서버에게 보내준다.
세션하이재킹이 스니핑과 다른 점은 공격자가 실제 클라이언트의 인터페이스를 획득함으로써
명령의 실행이 가능하다는 것이다. 그런 이유로 세션하이재킹은 적극적인(Active) 공격이라고 한다.
세션 하이재킹(Session Hijacking) ACK Strom
해커가 서버와 연결을 끊었을때 새로운 세션을 형성하는 동안 클라이언트가 정상적인 패킷을 보내면 서버는 정상적이지 않은 시퀸스 넘버로 인식하여, ACK 패킷에 Server_My_Sep와 Server_Client_Seq 를 담아 보낸다. 이는 시퀸스넘버를 맞추기 위한 작업인데 클라이언트 역시 서버가 보내온 Server_Client_Seq가 자신의 Client_My_Seq와 다르다는 것을 확인하고, 서버에게 Client_My_Seq와 Client_Server_Seq가 담긴 ACK 패킷을 보낸다. 이러한 과정이 무한히 반복되는 경우가 있는데 이를 ACK Storm 이라고 한다. 이를 막기 위해 잘못된 패킷이 전달되지 않도록 ARP Spoofing 을 해두고 공격을 실시하면, 안전하게 공격을 실시할 수 있다.
세션 하이재킹(Session Hijacking) 보안대책
1. 비동기화 상태 탐지
=> 서버와 시퀸스 넘버를 주기적으로 체크하여 비동기화 상태에 빠지면 이를 탐지해내는 것이다.
2. Ack Storm 탐지
=> ACK 패킷의 비율이 급격히 늘어나는지 탐지
3. 패킷의 유실 및 재전송 증가 탐지
=> 해커가 중간에 끼어서 작동하므로 패킷의 유실과 재전송이
발생하여 서버와의 응답시간이 길어진다.
4. 기대하지 않는 접속의 리셋
=> 세션 하이재킹 공격을 당하게 되면 접속 초기에 세션의 리셋을 경험할 수 있으므로
세션에 대한 감시를 시행한다면, 세션하이재킹 공격에 대한 인지가 가능하다.