1. 개념
공격자가 인증 작업 등이 완료되어 정상통신을 하고있는 다른 사용자의 세션을 가로채서 별도의 인증 작업 없이 가로챈 세션으로 통신을 계속하는 행위이다.
인증 작업이 완료된 세션을 공격하기 때문에 OTP, Challenge/Response 기법을 사용하는 사용자 인증을 무력화시킨다.
2. TCP Connection Hijacking
응용프로그램은 Client-Server간 통신을 개시하기 전에 TCP 연결을 설정하고 연결을 통해 상호 메시지 교환을 개시한다.
메시지를 교환할 때 사용자 인증을 위한 메시지도 포함될 수있다.
해당 TCP 연결을 가로채는것을 TCP Connection Hijacking이라고 한다.
TCP 연결을 가로채서 정상적인 사용자로 위장하는것은 IP Spoofing 공격과 똑같지 않나요?
IP Spoofing공격을 하기 위해서는공격 대상이 ID와 Password를 입력하지 않아도 되는 신뢰관계가 형성되어있다는 전제조건이 있어야한다.
하이재킹 공격은 신뢰관계가 형성되어있지 않는 상테에서 로그인 되어있는 세션을 탈취하는 것이다.
1) 일반적인 TCP 연결 과정
①
연결이 되기 전 클라이언트의 포트는 Closed 상태이고 서버는 서비스를 제공하기 위해 기다리는 Listen 상태이다.
②
client 는 32비트 임의의 숫자로 Client_My_Seq을 생성 후 서버에게 SYN을 전송한다.
Server는 수신된 SYN(Client_My_Seq) 를 Server_Client_Seq 값으로 저장한다.
③
Server는 Server_My_Seq를 생성한 후 Server_Client_Seq + 패킷 길이를 더해 클라이언트에게 SYN/ACK 를전송한다.
Client는 수신된 Server_Client_Seq + 패킷 길이를 받아 자신의 Client_My_Seq와 비교하여 일치하면 Server_My_Seq를
Client_Server_Seq 값으로 저장한다.
④
Client는 Client_Server_Seq + 패킷 길이를 Server에게 보내고 Established 상태가 된다.
서버는 수신된 Client_Server_Seq + 패킷 길이를 자신의 Server_My_Seq과 비교하여 일치하면 Established 상태가 된다.
결국 Established 상태가 되면 아래 항목이 성립된다.
Client_My_Seq = Server_Client_Seq
Server_My_Seq = Client_Server_Seq
2) 순서기반 추론 기반의 TCP 연결 하이재킹 (Sequence Number Prediction Hijacking)
초기에 TCP연결설정 과정에서 해당 연결을 통해 전송되는 순서번호의 시작 순서번호를 임의 번호로 설정하는 대신 일정한 규칙을 가지고 설정했다. 이를 통해 공격자는 연결 시도를 통해 규칙을 알아낸 후 순서번호를 추론할 수 있다.
서버가 ISN(Initial Sequence Number)값을 고정값을 사용하거나 추정하기 쉬운 값을 사용하는 경우 더욱 취약하다.
2.1) 공격 순서
공격자를 DoS 공격 또는 IP Spoofing을 통해 무력화 시킨 뒤, 공격 대상자와 서버간의 TCP SYN Sequnce number를 추론하여 서버와 TCP 연결을 수행한다.
연결이 성공할 경우 공격자는 사용자A(클라이언트)를 가장하여 데이터를 전송할 수 있다.
2.2) 문제점
공격자는 서버가 송신하는 데이터를 수신할 수 없으므로 일방향 데이터 전송만을 통한 공격만 가능하다.
희생자가 응용 차원에서 인증 작업에 참여할 수 있는 기회가 없기 때문에 서버가 인증작업 없이 신뢰하는 호스트만 공격 대상이 될 수 있다.
2.3) 대응 방안
제3자가 시작 순서번호를 추론할 수 없게 만듦으로써 공격을 방어할 수 있다.
3) 스니핑 기반의 TCP 연결 하이재킹
공격자가 희생자와 서버간 패킷을 스니핑 할 수 있고 패킷 가공 공격을 할수 있다는 전제가 필요하다.
3.1) 동기화 비동기화
TCP 연결 동기화 상태를 비동기화 상태로 바꿔야 공격을 수행할 수 있다.
비동기화를 만드는 방법은 하나의 서버에서 초기 설정 단계를 끊고 다른 시퀀스 넘버로 새로운 접속을 생성하는 방법과 대량의 NULL 데이터를 전송하는 것이다.
동기화 란?
클라이언트와 서버가 수신된 데이터의 순서번호(SEQ)와 상대방에게 수신을 확인한 확인번호(ACK)의 차이를 수신 버퍼의 빈 공간의 크기를 나타내는 수신 윈도우(WIND)보다 작게 유지하는 상태이다.
3.2) 공격 순서
① 스니핑을 통해 세션을 확인하고 적절한 시퀀스 번호를 획득한다.
② 사용자와 서버간의 TCP 연결을 RST 패킷을 보내 서버 쪽 연결만을 끊는다. (Server-Closed, Client-Established)
③ 공격자는 새로운 시퀀스 번호를 생성하여 서버로 보낸다. (비동기화 상태 만듦)
④ 서버는 새로운 시퀀스 번호를 받아들이며, 다시 세션을 연다.
⑤ 공격자는 정상적인 연결처럼 서버와 시퀀스 번호를 교환하고 공격자, 서버 모두 Established상태가 된다.
3.3) 대응 방안
Sniffing, Spoofing공격을 방어하면 상당 부분 방지될 수 있다.
비동기화 상태 탐지, ACK Storm 탐지, 패킷의 유실과 재전송 증가 탐지, 기대하지 않은 접속의 리셋 확인을 수행한다.
그 이외에도 암호화, 지속적인 인증, 패치 등을 수행한다.
3, HTTP 세션 하이재킹 (HTTP Session Hijacking)
웹서버가 웹 브라우저에게 세션 식별자를 할당한다.
웹 브라우저는 요청 메시지에 해당 세션 식별자를 포함시킴으로써 해당 메시지가 동일 세션에 포함된것임을 서버에게 표시한다.
서버는 동일 세션 식별자를 가진 요청 메시지를 모두 동일 접근 권한을 가진것으로 처리한다.
해당 세션 식별자를 가로챈다면 별도의 인증 없이 사용자의 권한으로 서버를 접근할 수 있게된다.
데이터 트래픽 암호화, 스니핑 도구 탐지 및 제거, 긴 세션 식별자 사용 등으로 대응할 수 있다.
hunt: 세션하이제킹 공격을 하는 툴이다.
'Hacking & Security > Hacking & Security Theory' 카테고리의 다른 글
크리덴셜 스터핑은 어떤 녀석인가? (0) | 2023.10.31 |
---|---|
보안 공격 패러다임의 전환 및 공격 동향 분석 (0) | 2020.07.23 |
웹 해킹이란 무엇인가? (0) | 2020.07.03 |
[Theory]봇넷(BotNet) 이란? (0) | 2020.06.15 |
웹 공격 분석 (1) | 2020.04.09 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊