ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ARP spoofing] 1. ARP spoofing 프로젝트 시작하기
    해킹/network 2023. 5. 30. 11:19

    지난달부터 네트워크 팀 프로젝트 주제를 생각하다가, ARP spoofing을 주제로 해보면 어떨까 하는 생각이 들었다.

    네트워크 해킹에서 많이 다뤄지는 주제이고, 처음 시도하는 해킹 프로젝트로 시작하기 적합해 보여서, 도전해보기로 하였다.

     

    ARP spoofing이란?

    ARP spoofing은 MITM(Man In The Middle)공격 기법 중 하나로, 같은 네트워크 계층에 있을 때, 패킷을 탈취해서 도감청 하거나 변조하는 등의 중간자 공격이다.

     

    출처 : https://www.wallarm.com/what/arp-spoofing-or-arp-poisoning

     

    User가 서버와 통신을 할 때, 인터넷으로 나가기 위해선 Router를 거쳐야 한다. 라우터는 일반적으로 공유기에 해당한다고 보면 된다.

    이 때, 해커는 ARP Reply라는 프로토콜을 각각 User 와 Router에게 보낸다. ARP Reply는 각각 기기의 ARP table을 감염시킨다.

     

    마지막 pdu인 Frame은, MAC주소를 기반으로 목적지를 찾아간다. ARP table은 이 MAC주소와, IP주소를 매핑시켜주는 역할을 한다. 

    따라서 User가 패킷을 서버로 보내고 싶을 때, 라우터를 거쳐야 하는데, 라우터의 IP주소에 해당하는 MAC주소를 ARP table에서 확인한다. 확인한 MAC주소로 패킷을 전송하게 된다. 

     

    하지만!! 위에서 ARP reply로 ARP table을 감염시켰다고 했다. user가 알고 있는 Router의 MAC주소는 해커의 MAC주소로 감염되고, Router가 알고 있는 User의 맥 주소 또한 해커의 MAC주소로 감염된다. 

    따라서 User가 패킷을 보내면 해커로, 서버가 패킷을 보내도 해커에게 오게 된다.

     

    이게 가능한 이유는, ARP 프로토콜의 취약점이 있기 때문이다. ARP request, reply 등으로 arp table이 변하게 되는데, 비정상적인 ARP reply가 오더라도 기기 입장에서는 "아, ARP - IP 매핑에 업데이트가 있었구나!"라고 생각해버린다..

     

    ARP 스푸핑은 공공 와이파이를 사용할 때 위험하며, 특히 암호가 걸리지 않은 카페 와이파이를 사용할 땐 주의해야 한다.

    이를 막기 위한 방법으로, ARP table을 변조시키지 못하게 막는 방법이 있다. 집에서만 사용하는 컴퓨터 등의 경우, 인터넷 접속에 변화가 자주 없을 땐, 정적인 ARP table을 설정하여, ARP spoofing이 가능하지 않게 막을 수 있다.

    또한, 공유기 설정 등에 들어가면 이를 막을 수 있도록 보안 기능이 있을 것이다.

     

     


     

     

     

    프로젝트 개요

    해킹 실습은 다음과 같은 환경에서 진행된다.

     

    클라이언트

    React app으로 채팅 기능이 가능한 화면 구성을 한다.

     

    웹 서버

    spring boot를 이용해서 클라이언트와 REST api로 통신한다.

     

    채팅 기능

    web socket을 사용해서 실시간 채팅 기능을 구현한다. 

    이 때, 더 간편한 웹소켓 통신을 위해 STOMP라는 라이브러리를 사용한다.

     

     

    클라이언트와 서버 개발은 팀원이 각각 해주었다.

    나는 해킹툴을 담당했으며, 본격적으로 어떻게 arp spoofing을 실습할 지 설명하겠다.

     

     


     

     

    해킹 실습 준비

    arp spoofing을 하는 툴은 사실 많이 존재한다.

    우리의 목표는 이런 툴을 개발하는 것인데, 우선 해킹의 전체적인 process 를 살펴보기 위해 Kali Linux를 사용하겠다.

     

     

    vm ware, virtual box 등 가상머신 환경을 준비하면 된다. 나는 맥북인 관계로 vm ware를 사용했다.

     

     

     

     

    1. Kali Linux's Tool

    칼리 리눅스에는 여러 해킹을 위한 도구들이 준비되어 있다.

    그 중 우리는 arpspoof 와 fragrouter라는 툴을 사용할 것이다.

     

    arpspoof 는 다음과 같이 사용한다.

    arpspoof -i [인터페이스 이름] -t [피해자 IP] [감염시킬 IP]

    헷갈릴수도 있는데, 피해자 IP는 실제로 공격당하는 pc의 IP 주소이고, 감염시킬 IP는 피해자가 알고있는 주소 중 어떤 주소를 감염시킬지를 나타낸다.

    예를 들어, 피해자가 172.20.10.3 이고, gateway가 172.20.10.1이라고 하자.

    만약 피해자가 알고 있는 gateway IP주소를 감염시키고 싶다면 다음과 같이 사용한다.

    arpspoof -i [인터페이스 이름] -t 172.20.10.3 172.20.10.1

    이렇게 사용한다면 피해자 pc가 알고있는 gateway의 맥 주소가 현재 명령어를 실행한 공격자의 mac 주소로 감염된다.

    따라서 이후 피해자가 gateway로 요청을 보내면, 공격자 pc로 forwarding 되는 것이다.

     

    이 명령어를 사용하고 wireshark를 통해 캡쳐해보자.

     

    맥주소 노출돼서 좋을 게 없기 때문에...

    아무튼 내용을 살펴보면, vm ware에서 apple (칼리 리눅스에서 맥)으로 arp 를 보내고 있다.

    arp reply를 보내서, 해당 172.20.10.1의 맥 주소는 해커(칼리리눅스)의 맥주소라고 알려주는 것이다.

     

     

     

     

     

     

     

     

     

     

     

     

    만약 arpspoof만 사용한다면, 피해자 pc는 인터넷이 끊기는 것 처럼 네트워크 통신이 안될 것이다. 이러다간 피해자가 해킹을 당했다는 사실을 눈치챌 수 있으므로, 공격자는 가로챈 패킷을 정상적으로 gateway에게 forwarding해주어야 한다.

     

     

    이를 위해서 fragrouter를 사용한다. 다음과 같이 사용할 수 있다.

    fragrouter -B1

    사용법은 간단하다. 위 처럼 사용하게 되면 나에게 온 패킷이 정상적으로 가야할 곳으로 forwarding된다.

     

    이렇게 해주면 아래와 같은 결과를 얻을 수 있다.

     

     

     

    arpspoof 명령어로 가로챈 패킷을 다시 forwarding해주는 모습이다.

     

     

     

     

     

    2. libpcap / libnet

    사실 칼리 리눅스의 arp spoof, fragrouter를 사용하면 arpspoofing의 대부분을 끝낸 것이다.

    여기에 패킷 받은 것을 보기 편하게 출력해줄 프로그램만 있으면 된다.

     

    하지만! 이제부터 우리는 위 툴들을 전부 순수코딩으로 제작해볼 것이다.

    arpspoof와 fragrouter를 써본 건 단지 해킹의 전체적 process를 알기 위함이었고, 이를 c언어 라이브러리를 활용해서 코드를 작성해볼 거다.

     

    사용하는 라이브러리는 총 3가지이다.

     

     

    • libpcap : 패킷 캡쳐를 위한 라이브러리. 우리는 이 라이브러리를 통해 나에게 온 패킷을 처리할 수 있다.
    • libnet : 패킷 생성하는 라이브러리. 이 패킷으로 arp reply를 생성하고, 탈취한 패킷을 gateway로 forwarding할 수 있다.
    • zlib : 이 라이브러리는 웹 소켓 압축 해제를 위한 라이브러리이다. 기본적인 기능만 하는 arp spoofing을 위해서는 이 라이브러리는 필요하지 않다. 하지만 우리는 웹 소켓을 하는 것을 훔쳐볼 것이므로, 이 라이브러리를 사용한다.

     

     

    그럼 다음시간부터 본격적으로 코드를 작성해보도록 하겠다.

    댓글

Designed by Tistory.