사용자와 컴퓨터, 또는 여러 컴퓨터 간의 활성화된 상태를 의미합니다. 일정 시간 동안 같은 사용자로 부터 들어오는 요구를 하나의 상태로 정의하고 그 상태를 일정하게 유지시키는 기술입니다.
시스템 간 연결이 활성화 되어 있을 때, 유지되고 있는 상태를 중간에 가로채 해당 유저인 것 처럼 시스템에 접근하여 자원이나 데이터를 사용하는 공격을 의미합니다. 세션 하이재킹은 TCP라는 프로토콜을 사용할 때, 설계 상 보안을 고려하지 않아 발생하는 문제점을 이용하는 해킹 기법입니다.
UDP는 의미가 없다 세션이 성립되지 않기 때문
서버와 클라이언트 통신 시 TCP의 시퀀스 넘버(순서제어)를 제어하는데 발생하는 문제를 공격하는 것입니다.
공격자가 숫자를 이용해 상호간의 소통하는 것에 가짜 시퀀스 넘버를 만들어서 끼어들며 해킹하는 기법이며, 주로 서버와 클라이언트가 TCP를 이용해 통신하고 있을 때 RST패킷을 보내 일시적으로 TCP세션을 끊고 시퀀스 넘버를 새로 생성하여 인증된 세션을 빼앗고 인증을 회피하는 방식이 사용됩니다.
Blind Attack: 시퀀스 넘버를 예측해야하기 때문에 일반적인 방법으로 해킹하기 힘듭니다.
보통 세션 하이재킹은 Non-Blind Attack으로 일어납니다.
Non-Blind Attack: 스니핑이 가능한 상태(중간에 가로채서 시퀀스 넘버확인, 소통 중간에 끼어들어 모든 네트워크 패킷을 확인 가능한 상태)에서 수행가능합니다.
서버 측에서 시작 요청을 수신
SYN 패킷을 통해 전달받은 Client_My_Seq을 Server_client_Seq에 생성 후 저장
서버 측에서 클라이언트에게 요청에 대한 응답
서버가 자신의 시퀀스 넘버인 Server_My_Seq을 생성
SYN/ACK에 각각 Server_My_Seq와 Server_Client_Seq + 1을 넣어 응답
클라이언트에서 응답을 확인
서버로 부터 전달받은 시퀀스 넘버를 Client_Server_Seq에 저장
클라이언트에서 서버로 응답확인을 보냄
클라이언트 Established 상태
ACK에 Client_server_Seq + 1을 넣어 보냄
서버에서 확인을 받음
서버 Established상태
동기화 완료
TCP연결이 동기화된 서버와 클라이언트가 공유하던 시퀀스 넘버가 어긋날 경우 비동기화 상태라고 말합니다.
- 서버에서 초기 설정 단계의 접속을 끊고 (RST) 다른 시퀀스 넘버로 새로운 접속을 생성하는 방법
- 대량의 널(NULL) 데이터를 보내는 방법
TCP세션 하이재킹은 서버와 클라이언트가 각자 알고 있는 시퀀스 넘저를 조작해 속인 후 다음 상황을 만듭니다.
- 스캔 및 정보수집: foot printing이나 스캔자료 수집
- 공격 대상 포트 찾기: 세션탈취를 위한 포트찾기
- 스푸핑: 클라이언트와 서버사이에 끼어들어 스푸핑을함
- fragrouter로 패킷 릴레이: 중간에 데이터를 가로챈것을 클라이언트와 서버가 알아채지 못하도록 숨김
- 스니핑: 훔쳐온데이터로 스니핑 실행하여 시퀀스 넘버확인
- reset 패키지를 보내 세션이 다시 만들어지도록 만듦
공격자가 위의 작업을 통해 정보탈취를 할 수 있는 환경을 만들어 fragrouter로 패킷 릴레이를 수행하고, 모든 데이터의 흐름을 참조하여 정보를 주고받을 수 있게 됩니다.
클라이언트와 서버가 Synchronized되어 있는 활성화 상태
공격자(Closed된 상태)가 중간에 서버에게 RST (리셋 패킷)을 보냄 서버를 closed상태로 변경
공격자가 생성한 SYN(Client_My_Seq)을 포트를 맞춘 상태로 서버에게 다시 보냄 서버는 아직 Closed상태
서버는 검토없이 전달받은 Client_My_Seq를 토대로 구성한 SYN/ACK(Server_My_Seq)를 클라이언트라고 착각하는 공격자에게 전달
공격자는 ACK응답을 다시 서버에게 보내 공격자를 Established상태로 만듦
인증 과정은 세션을 성립하기 이전 과정에서 이뤄졌기 때문에, 중간 과정에서 악의적으로 reset을 보내 인증없이 연결했기 때문에 탈취가능함
-> 중간에 reset들어오면 인증을 다시 해주는 방식으로 해결가능
SYN/ACK 통신을 수행할 때, 값이 없는 데이터를 보내면 추가적으로 데이터는 보내지지 않으면서 시퀀스 넘버만 왔다갔다하게 되는데, 시퀀스넘버가 한쪽에서만 계속 증가하면 시퀀스 넘버를 제대로 변경시키지않게 만들어 보안의 취약점을 발생시키는 방법입니다.
세션하이재킹 공격에 대한 최우선 대응책은 데이터 전송의 암호화와 지속적인 인증을 통한 세션의 유효성을 확인하는 것 입니다. (SSH를 통한 암호화된 연결사용)