promiscuous 모드로 인터페이스를 설정하였을 때의 패킷 흐름을 살펴보도록 하자.

 

- 공격자 KALI  IP 주소: 10.10.10.100 VMnet1

- Rocky 서버 IP 주소: 10.10.10.10 VMnet1

- Window 클라이언트 IP 주소 :  10.10.10.1

- Gateway : 10.10.10.2

 

KALI 와 Rocky 리눅스 모두 VMnet1 을 사용하며 10.10.10.0/24 대역의 10.10.10.2 Gateway 주소로 동작하므로 GNS 상에서는 하나의 HOST 만으로 통신이 가능하다.

 

promiscuous 모드란?

수신된 프레임이 해당 인터페이스와 연관이 없더라도, 모두 수신하게 되는 모드이다. 

 

1) KALI 리눅스 IP 설정

GUI 환경에서 10.10.10.100/24 의 IP 주소를 갖도록 다음과 같이 설정한다.

 

2) Rocky 리눅스 IP 설정

10.10.10.10/24 의 IP 주소를 갖도록 다음과 같이 설정한다.

 

IPADDR=10.10.10.10
NETMASK=255.255.255.0
GATEWAY=10.10.10.2
DNS1=168.128.63.1

 

/etc/sysconfig/network-scripts/ifcfg-ens32 파일을 다음과 같이 수정한다.

 

service NetworkManager restart
nmcli networking off
nmcli networking on

 

파일 수정 후, 네트워크 서비스를 재시작하여 IP 설정 사항을 변경한다.

 

3) GNS 라우터 설정

인터페이스의 IP 주소를 설정한다. 또한, 내부 네트워크와 외부 네트워크의 분리를 위해 NAT 를 설정한다.

 

R1(config)# int f0/0
R1(config-if)# ip add dhcp
R1(config-if)# ip nat outside
R1(config-if)# no shut

 

외부 인터넷과 연결되는 쪽의 인터페이스는 DHCP 를 통해, 동적으로 IP 주소를 받아오도록 설정한다.

 

R1(config)# int f1/0
R1(config-if)# ip add 10.10.10.2 255.255.255.0
R1(config-if)# ip nat inside
R1(config-if)# no shut

 

HOST 와 연결되는 인터페이스에는 각 리눅스에서 설정한 Gateway 주소를 설정한다.

 

R1(config)# access-list 1 permit 10.10.10.0 0.0.0.255
R1(config)# ip nat inside source list 1 interface f0/0 overload

 

내부 사설 네트워크 10.10.10.0/24 대역의 패킷들을 인터페이스 fa 0/0 을 통해, 외부와 통신 가능하도록 설정한다.

 

R1# show ip int brief

 

인터페이스 IP 주소 설정 결과는 다음과 같다.

2) 통신 확인

리눅스 간의 통신과 외부 네트워크와의 통신이 가능한지 확인해보자.

 

Rocky 리눅스에서 KALI 로 ping
KALI 리눅스에서 Rocky 로 ping

두 호스트 간의 연결이 정상적으로 이루어져, 통신이 가능해진 것을 확인할 수 있다.

ping 8.8.8.8
nslookup www.google.com

 

KALI 리눅스와 외부 인터넷의 통신이 가능해진 것을 확인할 수 있다.

 

ping 8.8.8.8
nslookup www.google.com

 

마찬가지로, Rocky 리눅스에서 외부 인터넷과의 통신도 가능한 것을 확인할 수 있다.

 

3) VMnet1 주소 설정

클라이언트인 Window 의 패킷을 sniffing 할 예정이므로, 다음과 같이 IP 주소를 설정한다.

 

4) FTP 서비스 방화벽 해제

Window 에서 ftp 서비스를 통해 접속할 때, 아이디와 비밀번호를 탈취하기 위해 해당 서비스에 대한 방화벽을 해제한다.

 

firewall-cmd --permanent --add-service ftp
firewall-cmd --reload
firewall-cmd --list-all

 

Public (active) 정책에 ftp 서비스를 추가하여, 해당 서비스의 방화벽을 해제한다.

 

service vsftpd restart

 

방화벽을 해제한 후, ftp 서비스 데몬을 재실행한다.

 

5) KALI promiscuous 모드 변경

 

현재, eth0 인터페이스는 promiscuous 모드가 아니므로 실습을 위해 모드를 변경한다.

 

ifconfig eth0 promisc


eth0 인터페이스의 모드를 promiscuous 로 변경하면, PROMISC 라는 문구가 출력되는 것을 확인할 수 있다.

 

6) Sniffing 수행

Window 클라이언트에서 Rocky 서버로 FTP 접속을 시도할 때, 패킷을 열람하여 로그인 계정 및 암호를 탈취한다.

 

netsniff-ng | grep -iP "user|pass" -A 2

 

Sniffing 공격을 활성화하여, user 와 pass 라는 정보가 포함된 패킷을 확인하도록 한다. promiscuous 모드가 비활성화 되어있을 경우, FTP 접속을 시도하게 되어도 아무런 정보가 출력되지 않는다.

 

단, promiscuous 모드가 활성화된 상태에서는 사용자의 계정 이름과 암호 정보가 평문으로 보이게 되므로 클라이언트에서 파일을 다운로드 받는 등의 악의적인 의도로 사용될 수 있다.

 

7) promiscuous 모드 비활성화

실습이 마무리되면 인터페이스의 promiscuous 모드를 비활성화한다.

 

ifconfig eth0 -promisc

 

 

 

 

공부하면서 정리한 내용을 글로 작성하였습니다.

혹시나 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다 :)

COMMENT