네트워크/네트워크 보안

IP Spoofing

비니화이팅 2018. 1. 31. 14:45

* IP Spoofing

-> 개념

- 송신자의 IP를 신뢰된 IP로 속이는 공격이다.


-> 원리

- /etc/host.equiv파일에 클라이언트의 IP와 접속 가능한 아이디를 등록해 놓으면 트러스트 설정을 할 수 있다. 즉, 패스워드 없이 IP주소만을 가지고 인증이 이루어진다. Attacker는 이러한 트러스트 관계를 이용하여 /etc/hosts.equiv파일에 동륵된 IP주소로 스푸핑하여 인증에 성공하게 된다. 



[실습 1]

- 실습을 진행하기 전 아래와 같은 토폴로지를 구성해준다.

- 현재 R1에는 Telnet서비스가 올라가져 있는데, access-list를 등록하여 WinXP는 Telnet에 접속하지 못하는 상태이다. 이를 IP Spoofing을 통해 접속할 수 있도록 할 것이다.

 -> 실습 환경

 - WinXP(Attacker) : 10.10.10.1

 - BackTrack : 10.10.10.10

 - Gateway : 10.10.10.254


 -> 실습 도구 

 - sTerm


- sTerm을 실행시킨 후, Configure를 눌러 스푸핑할 IP를 적어주고 확인을 누른다.


<-를 눌러 타겟 호스트의 IP를 적어주고 OK를 누른다.


- 그러면 아래와 같이 Telnet 접속 화면이 뜬다. 여기서 username과 password를 적어주면 접속이 된다.


- 이 때 R1에서 현재 접속한 사용자를 살펴보면 Attacker의 IP가 아닌 속인 IP(10.10.10.10)이 접속했다고 나온다.


[실습 2]

 -> 실습 환경 

 - XP(관리자) - IP : 172.16.8.128

 - BT(공격자) - IP  : 172.16.8.129

 - CentOS(SSH Server) - IP  : 172.16.8.130

 - Gateway - IP : 172.16.8.254


- 아래는 관리자와 공격자가 정상적으로 SSH에 접속한 상태를 나타낸다. 공격자는 내부 네트워크에 있음에도 불구하고 외부 네트워크에서 들어온 것처럼 속일 것이다.


- 공격자 PC에서 IP를 스푸핑 하기 위해 가상 인터페이스를 만들어준다.


- 그리고 속인 IP 주소(10.10.10.10)로SSH에 접속을 시도하면 접속이 되지 않는다.

 왜냐하면 SSH Server입장에서는 다른 네트워크 대역에서 들어오는 패킷처럼 보이기 때문에 이를 게이트웨이로 보내버린다. 따라서 공격자에게는 답이 오지 않는다. 


- 이 문제를 해결하려면 ARP Spoofing을 진행해줘야 한다. 공격자를 게이트웨이라고 속이면 패킷이 게이트웨이가 아닌 공격자에게 온다.


- 따라서 공격자는 아래와 같이 스푸핑한 IP주소(10.10.10.10)로 SSH Server에 접근할 수 있게 된다.


- 이를 SSH Server에서 확인하면 현재 접속한 사용자가 공격자의 IP주소가 아닌 속인 IP주소(10.10.10.10)로 보인다.


- 로그에서도 마찬가지로 속인 IP주소(10.10.10.10)로 보인다.


[실습 3 - 실습 2와 이어짐]

- SSH Server에서 TCP Wrapper을 이용하여 위에서 속인 IP(10.10.10.10)주소와 공격자의 진짜 IP주소를 차단해놓는다.

- 차단하려면 /etc/hosts.deny파일에 추가하고 허용하려면 /etc/hosts.allow파일에 추가하면 된다.


- 차단할 것이기 때문에 /etc/hosts.deny파일에 아래의 두 줄을 추가해준다.


- 다시 공격자 PC에서 속인 IP 주소(10.10.10.10)로도 SSH접속을 시도해보고, 진짜 IP로도 시도해보지만 아래처럼 접속이 되지 않는다.



- SSH Server의 로그기록에도 접속 시도한 흔적이 보인다.


- 하지만 이렇게 특정 IP를 차단해놔도 공격자는 가상 인터페이스의 IP주소를 바꾸기만하면 쉽게 SSH로 접근이 가능하다.


- 이에 대한 대응법은 아래에 있는 2번이다.


* 대응법(DOS공격의 대응법도 된다.)

1. 트러스트 관계를 설정하지 않는다.

2. /etc/hosts.deny파일과 /etc/hosts.allow파일을 활용한다. (공격당할 확률을 줄여주는 것이지 완벽한 대응책은 아니다.)

  /etc/hosts.deny파일에는 ALL:ALL을 적용하고 /etc/hosts.allow파일에 허용할 IP주소를 적어준다.

- 모든 서비스에서 모든 IP주소를 차단한다.

- ssh서비스에서 172.16.8.128 IP 주소를 가진 호스트만을 허용한다.

3. 시스코 라우터에서 제공하는 Unicast RPF(Reverse Path Forwarding) 기능을 활용한다. (이것 또한 완벽한 대응책은 아니다.)

Unicast RPF기능이란 라우터의 인터페이스를 통해 들어오는 패킷의 Source IP에 대해서 라우팅 테이블을 확인하여 그 패킷이 들어온 인터페이스로 다시 나가는지 확인하는 것이다. 즉, 다른 인터페이스로 나간다면 IP가 스푸핑된 패킷이라고 보고 drop시킨다.

- 아래와 같은 토폴로지를 구성한다.



- 공격자 측에서 DOS공격을 진행한다.


- 이 때 패킷을 피해자 측에서 확인해보면 많은 패킷이 들어 오는 것을 확인할 수 있다.


- 라우터에서 Unicast RPF기능을 활성화 한다.


- 피해자측에서 패킷을 확인하면 아까 들어왔던 패킷들이 더 이상 들어오지 않는 것을 확인할 수 있다.


- 이번에는 라우터에서 확인해보면 많은 양의 패킷이 drop된 것을 확인할 수 있다.