Search
Duplicate

9. 세션 하이재킹

생성일
2022/06/10 06:40
태그
세션 하이재킹
세션 가로채기 라는 의미
세션이란 사용자와 컴퓨터 또는 두 컴퓨터 간에 연결이 활성화되어있는 상태
TCP 세션 하이재킹
Non-Blind Attack(로컬 세션 하이재킹 공격)
서버와 클라이언트가 통신할 때 TCP 시퀀스 넘버 제어의 문제점을 파고드는 공격
공격자는 공격 대상을 탐지하면서 시퀀스 넘버를 알아낼 수 있음
Blind Attack(로컬 세션 하이재킹 공격)
서버와 클라언트가 통신할 때 TCP 시퀀스 넘버를 임의로 선택하는 공격법
공격자는 공격 대상을 탐지할 수 없으며 시퀀스 넘버에 대한 정보도 거의 없음
TCP 시퀀스 넘버 교환
Client_My_Seq : 클라이언트가 관리하는 자신의 시퀀스 넘버
Client_Server_Seq : 클라이언트가 알고 있는 서버의 시퀀스 넘버
Server_My_Seq : 서버가 관리하는 자신의 시퀀스 넘버
Server_Client_Seq : 서버가 알고 있는 클라이언트의 시퀀스 넘버
Data_Len : 데이터의 길이
동기화 상태
1.
클라이언트는 32비트 임의의 숫자로 Client_My_Seq 생성 후 서버에게 전송한다.
2.
Server는 수신된 Client_My_Seq를 Server_Client_Seq 값으로 저장한다.
3.
Server는 Server_My_Seq를 생성하고, Server_Client_Seq + Packet Length 와 같이 클라이언트에게 전송한다.
4.
Client는 수신된 Server_Client_Seq + Packet Length를 받아 자신의 Client_My_Seq와 비교하여 일치하면 Server_My_Seq를 Client_Server_Seq 값으로 저장한다.
5.
Client는 Client_Server_Seq + Packet Length 를 Server에게 보내고 Established 상태가 되며, 서버는 수신된 Client_Server_Seq + Packet Length 를 자신의 Server_My_Seq와 비교하여 일치하면 Established 상태가 된다.
동기화 상태를 요약하면 다음과 같다
Client_My_Seq = Server_Client_Seq
Server_My_Seq = Client_Server_Seq
비동기화 상태
1.
데이터가 전송되기 전까지는 안정적인 상태
Client_My_Seq ≠ Server_Client_Seq
2.
데이터가 전송될 때는 저장, 클라이언트에 서버의 승인 번호는 전달되지 않음
Client_My_Seq > Server_Client_Seq
Client_My_Seq < Server_Client_Seq + Data_Len
3.
패킷 수신이 불가능한 상태로, 데이터도 버려짐
Client_My_Seq > Server_Client_Seq + Data_Len
Client_My_Seq < Server_Client_Seq
비동기화 상태로 만드는 방법
서버에서 초기 설정 단계의 접속을 끊고 다른 시퀀스 넘버로 새로운 접속 생성
널 데이터를 보내는 방법
공격자가 서버와 클라이언트 사이에서 양쪽의 새로운 접속 생성하기
공격자는 서버와 클라언트가 각자 알고 있는 시퀀스 넘버를 조작해서 속임
에크 스톰
클라이언트가 정상적이지 않은 패킷을 서버에 보내면 서버는 정상적인 시퀀스 넘버로 맞추기 위해 ACK 패킷에 Server_My_Seq와 Server_Client_Seq를 담아 보냄
클라이언트는 서버가 보내온 Server_Client_Seq가 자신의 Client_My_Seq와 다름을 확인하고, 서버에 Client_My_Seq와 Client_Server_Seq가 담긴 ACK를 보내는데 이러한 과정이 무한히 반복되는 경우를 뜻함
→ 클라이언트와 서버 간에 잘못된 패킷이 전달되지 않도록 ARP 스푸핑을 해두고 공격을 실시하여야 함
TCP 세션 하이재킹의 보안 대책
SSH 와 같이 암호화된 연결을 사용하는 것
비동기화 상태 탐지
서버와 시퀀스 넘버를 주기적으로 체크하여 비동기화 상태에 빠지는지 탐지
ACK Storm 탐지
윈도우 크기에 맞지 않는 데이터가 전송되면 정확한 윈도우 크기에 대한 교정 패킷을 보내게 되고, 서로에 대한 교정 패킷이 적상적으로 작동하지 못하기 때문에 무한 루프에 걸리게 됨.
패킷의 유실과 재전송 증가 탐지
공격자가 중간에 끼어서 동작을 하므로 패킷의 유실과 재전송이 발생
예상치 못한 접속의 리셋
세션 하이재킹에 대한 최우선의 대책은 데이터 전송의 암호화
MIT(Man in the middle) 공격
글자 그대로 통신 상대방의 사이에 몰래 끼어드는 것
클라이언트와 서버 간의 통신에 암호화된 채널을 이용하면서 ARP 리다이렉트 ICMP 리다이렉트 ARP 스푸핑이 무용지물이 되자 이를 극복하기 위해 탄생
MITM은 패킷 내용 바꾸기를 시도함
SSH(Secure Shell) 암호화 기법
1단계 : 클라이언트가 SSH를 통해 SSH 서버에 접근하여 서버의 공개키를 받음
2단계 : 클라이언트는 자신의 사설키로 데이터를 암호화하고 이를 다시 서버의 공개키로 암호화하여 서버로 전송
3단계 : 서버는 클라이언트로부터 정송받은 암호화된 데이터를 자신의 사설키로 복호한 후, 이를 다시 클라이언트의 공개키로 복호화 해서 데이터를 읽음
SSH 암호화 통신에 대한 MITM 공격
1단계 : 클라이언트가 서버에 SSH 접속을 요청하면 공격자가 ARP 스푸핑과 같은 공격으로 네트워크를 장악하여 SSH 서버인 것처럼 자신의 공개키를 전송, 공격자는 서버에 자신이 클라이언트인 것처럼 공개키를 요청
2단계 : 정상적인 접속에서 클라이언트가 서버에 암호화된 데이터를 보내면 공격자는 자신의 사설키와 클라이언트의 공개키로 복호화하고 내용을 확인한 후 다시 자신의 사설키와 서버의 공개키로 암호화해서 서버로 전송
3단계 서버가 클라이언트로 데이터를 보낼 때도 공격자는 서버가 전송한 데이터를 복호화한 후, 다시 암호화해서 클라이언트로 전송
SSL
넷스케이프가 개발한 것으로, 40비트와 128비트 암호화 통신 가능
1.
클라이언트는 서버에게 지원 가능한 방식(암호, 키 , 교환, 서명, 압축) 을 알려줌
2.
서버는 클라이언트에게 지원가능한 방식이 포함된 서버 인증서를 클라이언트에게 발송
3.
서버가 클라이언트 인증서를 요구할 경우 클라이언트는 인증서를 서버로 전송
4.
암호화키로 사용될 세션키를 랜덤으로 생성하고 서버의 공개키로 암호화한 후 서버로 전송
5.
서버는 클라이언트에게 전송박은 세션키 복호화
6.
클라이언트는 전송된 모든 메시지에 대한 방식을 다음부터 적용할 것을 알리는 종결 메시지를 발송한 후 데이터 전송단계로 이동
SSL 스니핑
공격자는 임의의 인증서를 생성한 뒤 클라이언트에게 보내 별도의 SSL 세션을 생성하고, 이를 중간에 스니핑
SSL 스트립
공격자는 클라이언트와 서버 간의 모든 암호화된 HTTPS 데이터를 HTTP로 변조하여 클라이언트에 전달
MITM 공격 보안 대책
기본적인 대응책은 ARP 스푸핑과 DNS 스푸핑의 경우와 같음.
SSH MITM 공격의 경우, SSH 2.0을 사용하면 막을 수 있음
안전하지 않은 인증서는 확실한 경우 외에는 접속을 하지 않는 것이 좋음.
SSL 스트립 공격 보안 대책
2012년 사용자가 브라우저에 HTTP 주소를 입력하더라도 HTTPS를 사용하는 페이지로 자동으로 연결되어 SSL 스트립과 같은 공격을 사전에 방지할 수 있는 HSTS를 표준으로 지정
본인이 접속한 사이트가 SSL로 정상적으로 접속되고 있는지 확인
실습 Telnet Session Hijacking
절차
피공격자 PC의 telnet 클라이언트가 KaliLinux2의 telnet 서버와 연결된 후 서버와 클라이언트 간 설정된 telnet 세션에 대하여,
공격자 서버에서 피공격자 PC와 KaliLinux2 대상으로 arpspoofing 공격과 telnet 세션 하이재킹 공격을 각각 진행하고,
탈취한 telnet 세션을 사용하여 피공격자 PC의 telnet 클라이언트 또는 KaliLinux2의 telnet 서버로 직접 telnet 명령어를 전송
실습 SSH 실습
TCP 보안 채널(터널링)을 형성하여, 기타 응용 프로토콜이 그 위에서 안전하게 데이터 교환하도록 지원하는 암호 통신 프로토콜
적은 비용으로 비교적 쉽게 구현 가능하고, 안전하여 널리 사용됨
윈도우에서 사용하는 PUTTY 프로그램이나 cmd창에서 실행하는 SSH 명령어 그리고 Unix/Linux에서 사용하는 ssh 명령어 모두 ssh 프로토콜을 지원함
ssh 주요 특징
보안 통신, 포트포워딩(일종의 터널링) 등의 기능을 제공
암호화 되지않은 telnet, rlogin, SMTP 등에 대한 패킷 스니핑 등의 해킹 공격 방지 가능
telnet은 로그인 명, 암호 등 모든 정보를 평문으로 보내므로 중간자 공격에 취약
클라이언트/서버 관계 존재
사용자 클라이언트 프로그램인 SSH 클라이언트와 서버 프로그램인 SSH 서버가 각각 존재함
클라이언트 및 SSH 서버 간에 암호화된 TCP 보안 채널이 형성됨
프로톸로 및 포트번호 : TCP/22
주요기능
인증 : 클라이언트 및 서버 인증
클라이언트 및 서버간에 보안 채널이 설정되고, 서버 인증이 된 후, 서버가 클라이언트를 인증할 수 있도록 관련 소프트웨어를 호출하게 됨
기밀성 유지 : 암호화
데이터 전송 전에 암호화하여 전송
암호 알고리즘(대칭키 암호 방식의 사용을 기본으로 함)
무결성
데이터 전송 중에 중간자 공격에 의한 변경 방지를 위해 MAC 코드를 통해 구현
압축
보낼 데이터를 압축 수행하고 이를 암호화하여 전송
포트 포워딩 : 일종의 터널링
다중화 :클라이언트와 서버 간에 보안 채널이 형성된 후에, 클라이언트측에서 복수의 논리 채널 설정 가능
SSH 프로토콜 스택 구조
인증 프로토콜 : 사용자 인증 제공
연결 프로토콜 : 1개의 암호화된 터널을 통해 여러 개의 논리 채널 다중화
전송 프로토콜 : 인증, 기밀성, 무결성, 압축, 등 제공
응용 프로토콜 : 원격 접속, 파일 복사 등
SSH 공격
ssh downgrade공격
협상 과정에서 sshd 버전 간 차이점 이용하여 version2를 1로 다운그레이드 유도
sshd version 1
서버 공유키를 클라이언트에 사전 제공하고 암호화에 사용
sshd version 2
키 공유 프로토콜을 통해 공유한 키를 암호화에 사용
sshd MITM 공격
version 1 사용시 : MITM 공격을 통해 서버 공유키 입수 후 세션 공격 시도
version 2사용시 : MITM 공격을 통해 version 1로 낮추는 협상 유도 과정 시도, 서버에서 version 1을 지원하지 않을 경우 공격의 한계

같은 태그의 다른 글 보기

Search
네트워크