목차
세션 하이재킹 공격
세션 하이재킹 공격(Session Hijacking Attack)이란?
세션(Session)은 사용자와 컴퓨터, 또는 두 대의 컴퓨터 간의 활성화된 상태를 말한다.
세션 하이재킹은 시스템 간 연결이 활성화된 상태, 즉 로그인(Login) 된 상태를 가로채는 것을 뜻한다.
세션 하이재킹은 시스템에 접근할 적법한 사용자의 아이디와 패스워드를 모를 경우 공격 대상이 이미 시스템에 접속되어 세션이 연결되어 있는 상태를 가로채기 하는 공격으로 아이디와 패스워드를 몰라도 시스템에 접근하여 자원이나 데이터를 사용할 수 있는 공격을 말한다.
한마디로 공격자가 인증 작업 등이 완료된 정상적으로 통신하고 있는 다른 사용자의 세션을 가로채서 별도의 인증 작업을 거치지 않고 가로챈 세션으로 통신을 계속하는 행위이다.
* 한 줄 요약 : 세션 하이재킹은 두 시스템 간의 연결이 활성화된 상태 즉, 로그인된 상태를 가로채는 것을 말하는 것이다.
TCP 세션 하이재킹 (TCP Session Hijacking)
TCP 세션 하이재킹은 TCP의 고유한 취약점을 이용하여 정상적인 접속을 빼앗는 방법이다.
서버와 클라이언트에 각각 잘못된 시퀀스 넘버 (순서 번호)를 사용해서 연결된 세션에 잠시 혼란을 준 뒤 공격자가 끼어 들어가는 방식이다. 이와 같이 TCP 연결을 가로채는 것을 TCP Connection Hijacking이라고 부른다.
정상적인 세션 성립 절차
TCP 세션 하이재킹 공격 방법을 알기 위해서는 TCP 쓰리웨이 핸드 셰이킹에서 정상적인 TCP 시퀀스 넘버의 교환과 Established 상태에 대해 이해해야 한다. 1
명칭 | 설명 |
Client_My_Seq | 클라이언트가 관리하는 자신의 시퀀스 넘버 |
Client_Server_Seq | 클라이언트가 알고 있는 서버의 시퀀스 넘버 |
Server_My_Seq | 서버가 관리하는 자신의 시퀀스 넘버 |
Server_Client_Seq | 서버가 알고 있는 클라이언트의 시퀀스 넘버 |
Data_Len | 데이터 길이 |
일반적인 TCP 연결 과정 설명
- 연결이 되기 전 클라이언트의 포트는 Closed 상태이고 서버는 서비스를 제공하기 위해 기다리는 Listen 상태이다.
- 클라이언트는 32비트 임의의 숫자로 Client_My_Seq을 생성 후 서버에게 SYN(Client > Server)을 전송하고 Server는 수신된 SYN(Client_My_Seq)을 Server_Client_Seq 값으로 저장한다.
- SYN : 통신 시작 시 연결을 요청하고 ISN을 교환한다.
- 처음에 클라이언트가 서버로 보내는 SYN(시퀀스 넘버)를 ISN이라고 한다.
- Client_My_Seq : 클라이언트가 관리하는 자신의 시퀀스 넘버
- Server_Client_Seq : 서버가 알고 있는 클라이언트의 시퀀스 넘버
- SYN : 통신 시작 시 연결을 요청하고 ISN을 교환한다.
- Server는 Server_My_Seq를 생성한 후 Server_Client_Seq + 패킷 길이를 더하여 클라이언트에게 SYN/ACK(Server > Client)를 전송한다.
- Server_My_Seq : 서버가 관리하는 자신의 시퀀스 넘버
- SYN : synchronize sequence numbers : 통신 시작 시 연결을 요청하고 ISN을 교환한다.
- ACK : acknowledgment : SYN에 대한 확인의 의미이다.
- 클라이언트는 수신된 Server_Client_Seq + 패킷 길이를 받아 자신의 Client_My_Seq와 비교하여 일치하면 Server_My_Seq를 Client_Server_Seq 값으로 저장한다.
- Server_Client_Seq : 서버가 알고 있는 클라이언트의 시퀀스 넘버
- Client_My_Seq : 클라이언트가 관리하는 자신의 시퀀스 넘버
- Client_Server_Seq : 클라이언트가 알고 있는 서버의 시퀀스 넘버
- Server_My_Seq : 서버가 관리하는 자신의 시퀀스 넘버
- 클라이언트는 Client_Server_Seq + 패킷 길이를 Server에게 보내고 Established 상태가 된다.
- Client_Server_Seq : 클라이언트가 알고 있는 서버의 시퀀스 넘버
- 서버는 수신된 Client_Server_Seq+패킷 길이를 자신의 Server_My_Seq과 비교 후 일치하면 Established 상태가 된다.
- Client_Server_Seq : 클라이언트가 알고 있는 서버의 시퀀스 넘버
- Server_My_Seq : 서버가 관리하는 자신의 시퀀스 넘버
- 정상적인 동기화 상태 / Established 상태
- Client_My_Seq = Server_Client_Seq
- Server_My_Seq = Client_Server_Seq
세션 하이재킹 공격 원리
- 클라이언트와 서버 사이의 패킷을 통제하고 ARP 스푸핑 등으로 통신 패킷 모두가 공격자를 지나가게 한다.
- 서버에 클라이언트 주소로 연결을 재설정하기 위한 RST reset 패킷을 보내며 서버는 패킷을 받아 클라이언트의 시퀀스 넘버가 재설정된 것으로 판단하고 다시 TCP 3-웨이 핸드 셰이킹을 수행한다.
- 공격자는 클라이언트 대신 연결되어 있던 TCP 연결을 그대로 물려받게 된다.
세션 하이재킹 공격 순서
- 공격자는 DoS 공격 또는 IP Spoofing을 통해 공격 대상의 클라이언트를 무력화한다.
- 공격 대상자와 서버 간의 TCP SYN Sequnce number를 추론하여 서버와 TCP 연결을 수행한다.
- 세션 연결이 성공할 경우 공격자는 사용자 A(클라이언트)를 가장하여 데이터를 전송할 수 있다.
세션 하이재킹 공격 동기화 비동기화 만드는 방법
TCP 연결 동기화 상태를 비동기화 상태로 바꿔야 공격을 수행할 수 있는데 두 가지 방법이 있다.
비동기화를 만드는 방법은 하나의 서버에서 초기 설정 단계를 끊고 다른 시퀀스 넘버로 새로운 접속을 생성하는 방법과 또 다른 하나는 대량의 NULL 데이터를 전송하는 것이다.
TCP 세션 하이재킹 공격 순서와 방법
- 클라이언트는 서버와 모두 접속되어 있는 Established 상태이며, 공격자는 적절한 시퀀스 넘버를 획득하기 위해 스니핑을 시도한다.
- 쉬운 설명
공격자는 스니핑을 통해 세션을 확인하고 적절한 시퀀스 번호를 획득한다.
- 쉬운 설명
- 공격자는 공격 시점에 비동기화 상태 중 세션이 완전히 끊어지지 않는 시퀀스 넘버의 범위에서 RST 패킷을 생성하여 서버에 보내고 서버는 잠시 Closed 상태가 되고 클라이언트는 그대로 Established 상태를 유지한다.
2
- 쉬운 설명
사용자와 서버 간의 TCP 연결을 RST 패킷을 보내 서버 쪽 연결만을 끊는다. (Server-Closed, Client-Established)
- 쉬운 설명
- 공격자는 A_Client_My_Seq를 생성하여 서버에 보낸다.
- 쉬운 설명
공격자는 새로운 시퀀스 번호를 생성한다.
- 쉬운 설명
- 서버는 새로운 A_Client_My_Seq를 받아들이고, Server_My_Seq를 재생성하여 공격자에게 보낸 후 Syn_Received 상태가 된다.
- 쉬운 설명
비동기화 상태 만들기 위해서 공격자가 생성한 새로운 시퀀스 번호를 서버로 보낸다.
- 쉬운 설명
- 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두 Established 상태가 된다.
기존 클라이언트는 여전히 Established 상태고 서버의 네트워크 상태로 인한 잠시 동안의 연결 문제로 받아들이며, 연결은 끊어졌지만 인증 세션은 열린 상태로 유지된다.- 쉬운 설명
서버는 새로운 시퀀스 번호를 받아들이며, 다시 세션을 연다.
- 쉬운 설명
- 공격자는 공격 전 클라이언트가 서버와 통신을 하던 시퀀스 넘버를 모두 알고 있는 상태이므로 클라이언트와 정상적인 통신을 하며, 서버와는 공격자가 새로 생성한 시퀀스 넘버를 가지고 통신을 시도한다.
- 쉬운 설명
공격자는 정상적인 연결처럼 서버와 시퀀스 번호를 교환하고 공격자, 서버 모두 Established상태가 된다.
- 쉬운 설명
세션 하이재킹 보안 대응책
- 보안에 취약한 프로토콜 사용 제한
- 텔넷(Telnet)과 같은 취약한 프로토콜을 이용하지 않고 SSH와 같이 세션 인증 수준이 높은 프로토콜로 서버에 접속해야 한다.
- 패킷의 유실 및 재전송 증가를 탐지
- 공격자가 중간에 끼어서 작동하므로 패킷의 유실과 재전송이 발생하여 서버와의 응답 시간이 길어진다.
- 네트워크 트래픽을 감시하여 ACK Storm을 탐지
- 클라이언트와 서버는 시퀀스 넘버를 맞추기 위해 서로 ACK 패킷을 보내는 과정에서 무한 루프에 걸리게 되고 결국 ACK 패킷의 비율이 급격하게 증가하게 된다.
- 데이터 전송할 때 암호화 방식 사용
- 데이터 전송의 암호화는 스니핑에 대한 대응책이 되기도 하는데 데이터 전송할 때 암호화를 하면 시퀀스 넘버를 추측하기 어렵게 된다.
- 지속적인 인증(Continuous Authentication) 요구
- 지속적인 인증이란 대부분의 시스템이 로그인 시 스워드를 한번 입력하고 난 뒤에 다시 재 인증을 거치지 않는데, 어떤 측정한 행동을 하거나 일정 시간이 되면 시 패스워드 등을 물어 접속자가 정당한 인증을 받은 유요한 사용자인지 확인하는 인증 정책이 필요하다.
'Information Technology' 카테고리의 다른 글
소프트웨어 개발 프로세스 모델 6가지 종류 정리 (0) | 2021.10.18 |
---|---|
소프트웨어 프로세스 개념 및 특징 / 바람직한 소프트웨어란? (0) | 2021.10.17 |
[해킹 기법] 스니핑(Sniffing) 공격 원리와 종류, 탐지 방법 (0) | 2021.09.27 |
[해킹 공격 기법] 서비스 거부 공격(DoS, Denial Of Service) 기법 정리 (0) | 2021.09.24 |
[네트워크] OSI 7Layer / 7계층 개념 및 역할, 구조까지 한번에 알아보기 (0) | 2021.09.24 |
댓글