세션 하이재킹 - 다음(Daum)

Download Report

Transcript 세션 하이재킹 - 다음(Daum)

세션 하이재킹
IT CookBook, 정보 보안 개론과 실습 : 네트워크 해킹과 보안(개정
판)
Contents
 학습목표
 세션 하이재킹 공격의 패턴을 이해한다.
 세션 하이재킹 공격을 실행할 수 있다.
 세션 하이재킹 공격을 탐지할 수 있다.
 세션 하이재킹 공격 시 이에 대한 적절한 대책을 이해한다.
 세션 하이재킹 공격에 대한 예방법을 이해한다.
 MITM 공격을 이해한다.
 MITM 공격을 수행할 수 있다.
 내용
 세션 하이재킹 공격
 TCP 세션 하이재킹
 MITM 공격
2/36
TCP 세션 하이재킹
 세션 하이재킹(Session Hijacking)
 사용자와 컴퓨터, 또는 두 컴퓨터 간의 활성화 상태인 세션(session) 가로채기
 TCP 세션 하이재킹
 서버와 클라이언트 통신 시 TCP의 시퀀스 넘버를 제어하는 데 발생하는 문제 공격
 서버와 클라이언트가 TCP를 이용해 통신하고 있을 때 RST 패킷을 보내 일시적으로
TCP 세션을 끊고 시퀀스 넘버를 새로 생성하여 세션을 빼앗고 인증을 회피하는 것
 Non-Blind Attack과 Blind Attack이 있음. Non-Blind Attack은 공격 대상을 탐지할
수 있으며 서버와 클라이언트가 통신할 때 시퀀스 넘버를 알아낼 수 있지만, Blind
Attack은 불가능. 기본 알고리즘은 동일
 트러스트를 이용한 세션은 물론 텔넷, FTP 등TCP를 이용한 거의 모든 세션의 갈취 가
능. 인증 문제 해결을 위한 일회용 패스워드, 토큰 기반 인증을 이용한 세션도 갈취 가능
3/36
TCP 세션 하이재킹
 TCP 쓰리웨이 핸드셰이킹에서 정상적인 TCP 세션 성립 과정
 시퀀스 넘버에 따른 TCP 연결 상태는 동기화와 비동기화 두 가지
 정상적인 접속일 경우 시퀀스 넘버는 동기화 상태에 있으며, 클라이언트가 가지고 있는
시퀀스 넘버를 서버가, 서버가 가지고 있는 시퀀스 넘버를 클라이언트가 정확히 알고 서
로 일치
4/36
TCP 세션 하이재킹
• Client_My_Seq = Server_Client_Seq
• Server_My_Seq = Client_Server_Seq
➊ 연결 전 클라이언트의 포트는 Closed 상태, 서버는 서비스를 제공하려고 기다리므로 Listen 상태
➋ 클라이언트는 32비트 숫자 중 임의의 숫자(Client_My_Seq)를 생성하여 서버에 Syn 패킷을 보냄. 서버
는 클라이언트가 보낸 Client_My_Seq 값을 읽어 Server_Client_Seq 값으로 저장. 이때 클라이언트는
Syn_Sent 상태
➌ 서버는 Server_My_Seq 값을 생성하고, Server_Client_Seq에 패킷의 길이만큼 더해서 클라이언트로
보냄. 여기서 데이터는 0이므로, 단지 +1이라고만 표시. 서버는 Syn_Received 상태가 되며, 클라이언
트는 Server_Client_Seq+1을 받아 자신의 Client_My_Seq와 비교해 일치하면 Server_My_Seq 값을
Client_Server_Seq 값으로 저장
➍ 클라이언트는 Client_Server_Seq+1을 서버에 보내고 Established 상태. 서버도 클라이언트가 보낸
Client_Server_Seq+1과 자신의 Server_My_Seq와 비교해 일치하면 Established 상태
5/36
TCP 세션 하이재킹
 서버와 클라이언트 비동기화 상태
 데이터가 전송되기 전까지는 안정적(stable)인 상태
• Client_My_Seq ≠ Server_Client_Seq
• Server_My_Seq ≠ Client_Server_Seq
 데이터가 전송될 때는 다음과 같은 상태의 데이터가 차후 사용을 위해 저장되지만 클라
이언트에 서버의 승인 번호는 전달되지 않음
• Server_Client_Seq < Client_My_Seq
• Client_My_Seq < Server_Client_Seq + Data_Len
 패킷 수신이 불가능한 상태며, 데이터도 버려짐
• Server_Client_Seq + Data_Len < Client_My_Seq
• Client_My_Seq < Server_Client_Seq
6/36
TCP 세션 하이재킹
 비동기화를 만드는 방법
 서버에서 초기 설정 단계의 접속을 끊고 다른 시퀀스 넘버로 새로운 접속 생성
 대량의 널(null) 데이터를 보냄
 TCP 세션 하이재킹 공격(새로운 접속을 생성하여 비동기화하는 방법 이용)
 TCP를 이용한 세션은 클라이언트 IP 주소/포트 번호, 서버의 IP 주소/포트 번호 구성
 TCP 세션 하이재킹은 서버와 클라이언트가 각자 알고 있는 시퀀스 넘버를 조작해 속인
후 다음 상황을 만듦
• 클라이언트측
Client_My_Seq = 공격자가 생성한 Server_Client_Seq
Client_Server_Seq = 공격자가 생성한 Server_My_Seq
• 서버측
Server_Client_Seq = 공격자가 생성한 Client_My_Seq
Server_My_Seq = 공격자가 생성한 Client_Server_Seq
7/36
TCP 세션 하이재킹
 TCP 세션 하이재킹 공격 순서
8/36
TCP 세션 하이재킹
➊ 클라이언트는 서버와 모두 접속되어 있는 Established 상태, 공격자는 적절한 시퀀스
넘버를 획득하기 위해 스니핑을 하고 있음
➋ 공격 시점에 비동기화 상태 중 세션이 완전히 끊어지지 않는 시퀀스 넘버의 범위에서
RST 패킷을 생성하여 서버에 보냄 서버는 잠시 Closed 상태가 되나 클라이언트는 그대
로 Established 상태
➌ 공격자는A_Client_My_Seq를 생성하여 서버에 보냄
➍ 서버는 새로운 A_Client_My_Seq를 받아들이고, Server_My_Seq를 재생성하여 공격
자에게 보낸 후 Syn_Received 상태
➎ 공격자는 정상 연결처럼 서버와 시퀀스 넘버를 교환하고, 공격자와 서버 모두
Established 상태. 원래의 클라이언트는 여전히 Established 상태고 서버의 네트워크
상태로 인한 잠시 동안의 연결 문제로 받아들임. 연결은 끊어졌지만 인증 세션은 열린
상태
9/36
TCP 세션 하이재킹
 hunt(세션 하이재킹 툴) 특징
 연결 관리
• 관심 있는 접속 설정
• 자신의 시스템에 접속하려는 연결 탐지
• ACK Storm의 탐지를 통한 능동적 세션 하이재킹
• ARP 스푸핑 탐지
• 하이재킹한 후 서버와 클라이언트 간 동기화
• 접속 리셋
• 접속 감시
 데몬(daemon)
• 자동 접속 리셋을 위한 리셋 데몬
• ARP 스푸퍼와ARP 스푸핑을 위한 릴레이 데몬(ARP 스푸핑도 가능)
• MAC 주소 수집을 위한MAC 탐색 데몬
• TCP 트래픽에서 특정 문자열을 탐색할 수 있는 스니퍼 데몬
 DNS 서버를 통한 호스트 주소 확인
 TCP, UDP, ARP, ICMP 패킷 감시
 연결된TCP 세션 목록 출력
 온라인의 호스트 목록 출력
10/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
➊ 클라이언트가 서버로 텔넷 접속을 한다.
➋ 공격자가ARP 스푸핑으로 패킷의 흐름을
공격자를 통과하도록 변경한다.
➌ 클라이언트와 서버의 통신을 끊고, 해당
세션을 클라이언트로부터 빼앗는다.
실습환경
• 텔넷 서버 시스템 : 리눅스 페도라 12
• 텔넷 클라이언트 시스템 : 윈도우 XP(리눅스 페도라 12도 무관)
• 공격자 시스템 : 리눅스 페도라 12
• 필요 프로그램 : hunt.i686(버전 1.5-11)
11/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
1 hunt 설치

➊ yum list hunt
➋ yum install hunt


2 텔넷 접속 생성 : 텔넷 클라이언트로부터 텔넷 서버에 연결

3 ARP 스푸핑 & 패킷 릴레이 실행

3-1 hunt 실행 ➊ hunt ➋ [d] 입력

12/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
3-2 ARP 스푸핑 메뉴 실행 [a] 입력
3-3 ARP 스푸핑을 위한 릴레이 데몬 실행
[s] 입력
3-4 ARP 스푸핑 [s] 입력
13/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
4 세션의 탐지

➊ [x] 두 번 입력
5 스니핑 모드 수행

5-1 hunt 실행 ➊ [a] 입력
➋ [l] 입력
➋ choose conn> 0
input mode : r
dump connectin : y
dump : b
print src/dst same characters : y

14/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
5-2 공격 실행 후 피공격자 시스템에서 ls -al 명령 수행
5-3 공격 실행 후 공격자 시스템 화면 확인
15/36
실습 11-1 hunt를 이용해 텔넷 세션 하이재킹하기
6 세션 하이재킹 수행

6-1 hunt 실행 : [Ctrl]+[c]를 수행하고 피공격자가 글자 입력
6-2 TCP 세션 하이재킹 공격 완료
ls -al
16/36
TCP 세션 하이재킹 탐지 방법
 비동기화 상태 탐지
 서버와 시퀀스 넘버를 주기적으로 체크하여 비동기화 상태에 빠지면 이를 탐지
 ACK Storm 탐지
 전송 중 윈도우 크기와 시퀀스 넘버가 맞지 않는 상태가 되면 서로에 대한 교정 패킷이
정상적으로 작동하지 못하기 때문에 무한 루프에 걸리게 됨. 결국 ACK 패킷의 비율이
급격히 늘어남
 패킷의 유실 및 재전송 증가 탐지
 공격자가 중간에 끼어서 작동하므로 패킷의 유실과 재전송이 발생하여 서버와의 응답
시간이 길어짐
 기대하지 않은 접속의 리셋
 세션 하이재킹 공격에 대한 최우선 대응책은 데이터 전송의 암호화와 지속적인 인증을
통한 세션의 유효성 확인
17/36
MITM 공격
 MITM 공격
 두 개체 간 통신에 끼어서 데이터 끼워넣기/빼기/복호화 등 데이터 흐름에 영향을 미치
는 공격
 ARP 리다이렉트, ICMP 리다이렉트, ARP 스푸핑 모두 엄밀히 말하면 MITM 공격이지
만 일반적으로 MITM 공격을 말할 때는 이 세 가지 공격을 언급하지는 않음
 ARP 리다이렉트, ICMP 리다이렉트, ARP 스푸핑 공격은 우선 전달되는 패킷의 MAC이
나 IP 주소는 바꾸나 패킷 내용을 바꾸지는 않지만 MITM은 패킷 내용을 바꾸는 것도
시도
18/36
실습 11-2 웹에서 MITM 공격하기
실습환경
• 공격자 시스템 : 리눅스 페도라 12
• 내부 웹 서버 시스템 : 리눅스 페도라 12
• 클라이언트 시스템 : 윈도우 XP
• 필요 프로그램 : ettercap
19/36
실습 11-2 웹에서 MITM 공격하기
1 ettercap 설치

➊ yum list etter*
➋ yum install ettercap.i686


2 내부 웹 서버 설정

20/36
실습 11-2 웹에서 MITM 공격하기
3 etterfilter 설정

4 etterfilter 컴파일

etterfilter -o filter.ef filter.txt
21/36
실습 11-2 웹에서 MITM 공격하기
5 MITM 공격 수행

5-1 ettercap 공격 1 ettercap -T -q -F filter.ef -M ARP /192.168.0.101/ //
 -T : ettercap을 텍스트 모드로 수행한다.
 -q(--quite) : 패킷의 내용을 출력하지 않는다.
 -F filter.ef : filter.ef 파일을 이용해 필터를 수행한다.
 -M ARP : ARP를 이용해MITM 공격을 수행한다.
 /192.168.0.101/ : 공격 대상 1, 공격 대상을 192.168.0.101로 한다.
 // : 공격 대상 2, 아무 값도 없으면 공격을 기본 게이트웨이로 한다.
22/36
실습 11-2 웹에서 MITM 공격하기
5-2 ettercap 공격 2
23/36
MITM 공격
 SSH 암호화 통신
 1단계 : 최초 클라이언트가 SSH를 통해서 SSH 서버에 접근하고자 하면, 클라이언트는
서버의 공개키를 얻어옴
 2단계 : 클라이언트는 자신의 사설키로 데이터를 암호화하고 이를 다시 서버의 공개키
로 암호화하여 서버로 전송
 3단계 : 서버는 클라이언트로부터 전송받은 암호화된 데이터를 자신의 사설키로 먼저
복호화한 후, 이를 다시 클라이언트의 공개키로 복호화해서 데이터를 읽음
24/36
MITM 공격
 SSH MITM 공격
 1단계 : 클라이언트가 서버에 SSH 접속을 요청할 때, 공격자가 ARP 스푸핑 같은 공격
으로 네트워크를 장악한 후 클라이언트의 공개키 요청을 받고 SSH 서버인 것처럼 자신
의 공개키를 전송. 공격자는 클라이언트가 원래 접속하고자 한 서버에 자신이 클라이언
트인 것처럼 공개키를 요청
 2단계 : 정상적인 접속에서 클라이언트가 서버에 암호화된 데이터를 보내면 공격자는
이를 자신의 사설키와 클라이언트의 공개키로 복호화하고 내용을 확인. 그런 다음 다시
자신의 사설키와 서버의 공개키로 암호화해서 서버로 전송
 3단계 : 서버가 클라이언트로 데이터를 보낼 때도 공격자는 서버가 전송한 데이터를 복
호화한 후, 다시 암호화해서 클라이언트로 전송
25/36
MITM 공격
 SSL 암호화 통신
 1단계 : 클라이언트는 자신의 SSL 버전과 암호화 알고리즘, 임의로 만든 데이터, 서버가
인증과 관련해 요구하는 일반 정보를 서버로 보냄
 2단계 : 서버는 서버의 SSL 버전과 암호화 알고리즘, 클라이언트가 접속하는 데 필요한
정보를 클라이언트에 보냄
 3단계 : 서버가 자신의 인증서를 클라이언트에 보내주면, 클라이언트는 서버가 보낸 인
증서를 확인하여 서버를 인증. 인증에 실패할 경우 신뢰할 수 없는 서버임을 경고
 4단계 : 인증이 확인되면 서버는 클라이언트에‘Master Secret’를 암호화하여 전송하고,
클라이언트와 서버는‘Master Secret’를 이용하여 통신에 사용할 세션키를 만들어냄
 5단계 : 이후 서버와 클라이언트 간에 전송되는 데이터는 모두 세션키를 통해 암호화하
여 전송됨
26/36
실습 11-3 SSL MITM 공격하기
실습환경
• 공격자 시스템 : 리눅스 페도라 12
• 공격 대상 시스템 : 윈도우 XP
• 필요 프로그램 : dsniff 패키지(webmitm, dnsspoof, arpspoof), fragrouter
27/36
실습 11-3 SSL MITM 공격하기
1 SSL 통신 확인

1-1 SSL 통신 사이트 접속
https://addons.mozilla.org/ko/firefox/
1-2 SSL 통신 사이트 접속 시 암호화된 패킷 확인
28/36
실습 11-3 SSL MITM 공격하기
2 DNS 스푸핑 공격 준비

➊ vi /etc/dsniff/dnsspoof.hosts
➋ 192.168.0.2 *.mozilla.org, 192.168.0.2 *.mozilla.or.kr 추가

3 SSL 접속을 위한 인증서 생성과 webmitm 실행

3-1 인증서 생성
webmitm
29/36
실습 11-3 SSL MITM 공격하기
3-2 인증서 생성 내용 확인
vi webmitm.crt
3-3 웹 서버와 webmitm의 충돌 오류
webmitm
30/36
실습 11-3 SSL MITM 공격하기
3-4 웹 서버 중단 후 webmitm 실행
➊ service httpd stop
➋ webmitm –d

4 DNS 스푸핑 공격 준비


ettercap -T -q -M ARP /192.168.0.101/ //
31/36
실습 11-3 SSL MITM 공격하기
5 DNS 스푸핑 공격

5-1 DNS 스푸핑 공격 실행
dnsspoof -i eth0 -f /etc/dsniff/dnsspoof.hosts
5-2 클라이언트 DNS 정보 초기화
ipconfig /flushdns
6
 클라이언트에서 접속 시도
6-1 tcpdump를 이용한 패킷 캡처
tcpdump -w [파일 이름]
32/36
실습 11-3 SSL MITM 공격하기
6-2 webmitm의 인증서 확인
7 패킷 복호화 확인

7-1 암호화된 패킷 확인
33/36
실습 11-3 SSL MITM 공격하기
7-2 SSL 복호화 설정
,,,c:\webmitm.crt
7-3 복호화된 패킷
34/36
MITM 공격 보안 대책
 ARP 스푸핑과 DNS 스푸핑이 이루어져야 하므로, ARP 스푸핑과 DNS
스푸핑에 대한 대응책과 기본적으로 같음
 SSH MITM 공격의 경우 SSL 2.0을 사용하면, 막을 수 있고, SSL의 경
우에는 인증서를 잘 확인
[그림 11-45] 인증서 정보 확인
35/36
IT CookBook, 정보 보안 개론과 실습 : 네트워크 해킹과 보안(개정
판)