•
세션 하이재킹
◦
세션 가로채기 라는 의미
◦
세션이란 사용자와 컴퓨터 또는 두 컴퓨터 간에 연결이 활성화되어있는 상태
•
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