세션하이재킹 영동대학교스마트 IT 학부 : 컴퓨터와해킹 이호준 hjlee@yd.ac.kr
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] 두번입력 ➋ [l] 입력 5 스니핑모드수행 5-1 hunt 실행 ➊ [a] 입력 ➋ 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 학부 : 컴퓨터와해킹