네트워크 해킹 - ARP 스푸핑

김동하·2025년 12월 20일

security

목록 보기
1/11
post-thumbnail

들어가며

최근에 리액트도 뚫리고, 쿠팡 개인정보도 유출됐다고 하고 보안 관련 이슈가 많다.

해킹/보안 쪽은 아예 모르지만 그래도 개발자인데 어떤 식으로 해킹을 하고 어떻게 막을 수 있는지 기초 정도는 알아야 할 거 같아서 해킹 기초 강의를 수강하며 배운 것을 정리해봄

네트워크 배경지식

클라이언트 <-> 라우터 <-> 인터넷

네트워크의 기본 구조는 클라이언트 - 라우터 - 인터넷이다.

클라이언트의 요청은 라우터가 인터넷으로 전달하고 응답을 다시 클라이언트로 포워딩한다.

클라이언트는 사설 IP를 사용하고 라우터만 공인 IP를 통해 인터넷에 직접 접근하는 구조다.

MAC(Media Access Control address)

클라이언트와 라우터 간 데이터는 패킷으로 주고받는다.

예를들어 google.com를 요청하면 → 라우터가 인터넷으로 전달하고 → 응답 패킷 반환한다. 여기서 패킷은 IP 패킷은 MAC 주소를 가진 프레임 안에 캡슐화되어 전송된다. MAC 주소는 보통 00:1A:2B:3C:4D:5E 같은 형태.

IP와 MAC이 헷갈렸는데, IP가 인터넷 상에서의 논리적 주소라면 MAC은 로컬 네트워크 내에서 기기 식별에 사용된다.

즉, IP는 이사가면 변경 가능한 집 주소고, MAC은 하드웨어에 부여한 고유한 주소다. 그래서 IP 주소만 있으면 될 것 같지만, 실제 패킷 전달은 IP가 아니라 MAC 기준으로 이루어진다. IP는 경로를 결정하고, MAC은 실제 전달을 담당하는 것

ARP(Address Resolution Protocol)

그렇다면 MAC 주소는 장치들이 어떻게 인지할까? 바로 ARP를 통해서 알 수 있다.

ARP의 동작 과정을 간략히 살펴보면

  • 장치 A가 IP가 192.168.0.10인 장치 B에게 ARP Request를 브로드캐스트로 전송한다.

  • 그럼 장치 B는 MAC 주소 11:22:33:44를 응답하고 A는 이 정보를 ARP 테이블에 캐싱한다. 즉, IP → MAC 주소 변환한다.

  • 그리고 IP 패킷을 MAC 프레임으로 캡슐화하고 목적지로 보낸다

그럼 대략적인 개념도 알았으니 이제 본격 실습을 해보자

MITM(Man-in-the-Middle) 공격

MITM는 말그대로 두 장치(클라이언트↔라우터/서버 등) 사이의 통신 경로에 공격자가 중간자로 끼어들어 트래픽을 관찰하거나 변조, 차단할 수 있게 되는 상태다.

어떤 도메인에 접속하는지, 어떤 요청이 오가는지 관찰이 가능하고, 전송 중 데이터 일부를 바꾸거나 응답을 조작하거나 특정 트래픽을 떨어뜨려 장애처럼 만들기도 가능하다.

위 공격이 가능한 조건은 같은 LAN or Wi-Fi 로컬 네트워크를 사용해야 한다는 것이다. 같은 브로드캐스트 도메인 때문에 ARP을 활용하여 가로채기가 가능하다.

대표적인 기법으로 ARP 스푸핑이 있다.

ARP 스푸핑

ARP 스푸핑은 아래와 같은 방식으로 진행된다.

  • 정상: A → 라우터(게이트웨이)

    하지만 스푸핑은 ARP를 속여서 공격자의 MAC을 A의 MAC처럼 변조한다.

  • 스푸핑: A -> B(공격자) -> 라우터(게이트웨이)

    ARP 스푸핑이 가능한 구조적 이유는 요청하지 않았는데도 ARP 응답을 받아들이는 경우인데, 내가 요청하지 않아도 누군가 응답을 보내면 일부 환경에서는 응답의 진위를 검증하지 않고 그대로 캐시에 반영하여 발생할 수 있다.

예제

예제를 위해서는 2개의 가상 머신 OS가 필요하다 (VMWare로 만듦) 하나는 피해자고 하나는 공격자다.

공격자의 터미널(Kali Linux)에서 ARP 테이블 확인 해보면 라우터의 IP와 MAC 주소를 알 수 있다. 마찬가지로 피해자의 ARP 테이블도 확인한다.

ARP 테이블 확인

커맨드는 arp -a

Window OS인 피해자의 IP, MAC도 확인 가능하다.

이제 우리가 변경하려고 하는 건 다음과 같다.

이렇게 클라이언트 <-> 라우터의 관계에서

중간에 끼어들어서 클라이언트에겐 라우터인 척을, 라우터에겐 클라이언트인 척을 하며 정보를 갈취하는 것!

이를 위해서 가장 간단한arpspoof라는 도구를 사용하면 된다

arpspoof

공격자 터미널에서 arpspoof -i [interface] -t clientIP] [gatewayIP]를 작성하고

터미널을 하나 더 만들어서 피해자 터미널에서도

arpspoof -i [interface] -t [gatewayIP] [clientIP]

gatewayIP와 clientIP를 반대로 작성한다.

여기서 중요한 점은 두 터미널을 동시에 실행해야 한다는 것이다.

실행완료! 이제 피해자 터미널을 확인해보자.

피해자의 MAC 주소가 공격자의 MAC으로 변경된 것을 확인할 수 있다. 피해자 컴퓨터의 모든 요청은 라우터로 바로 가지 않고 공격자의 컴퓨터로 요청이 가게 된다.

포워딩 활성화

여기서 추가적으로 해줘야 할 것이 있는데, Linux는 기본적으로 IP forwarding을 비활성화한다. 이는 보안 기능으로, 받은 패킷을 다른 네트워크 인터페이스(예: eth0 → 인터넷)로 자동 포워딩하지 않도록 설계됐다.

비활성화 상태에서는 요청 흐름이 끊기기 때문에 이를 활성화 해준다.

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

Bettercap

Bettercap은 앞서 사용했던 ARP Spoof보다 더 많은 기능을 제공한다. 단순히 ARP 스푸핑 뿐만 아니라 트래픽 캡처, DNS 스푸핑, HTTPS 관련 우회 등 많은 해킹 기능을 제공한다.

better cap은 bettercap -iface eth0 커맨드를 통해 특정 네트워크 인페이스를 지정할 수 있다. 여기선 eh0를 지정했다.

모듈 기반

better cap은 모듈 기반의 도구다. help로 필요한 모듈을 보고 on/off를 통해 사용하면 된다.

  • net.probe

net.probe는 네트워크에 프로브(=탐색)를 패킷을 보내서 같은 네트워크 상의 장치를 발견하는 역할을 한다. 보통 이 모듈을 켜면 클라이언트들이 발견된다

  • net.show

net.show를 통해 연결된 클라이언트의 IP, MAC를 확인할 수 있다. 여기서 피해자의 IP는 192.168.91.130이다.

대략적인 모듈은 확인 했으니 본격적인 스푸핑을 해보자!

better cap 스푸핑

better cap 스푸핑에서 가장 중요한 모듈은 arp.spoof.fullduplex다.

arp.spoof.fullduplex은 타깃(피해자)뿐 아니라 게이트웨이(라우터) 쪽도 함께 속이기 때문에, 요청/응답이 양방향 모두 내 장치를 거치게 된다. 이전에 했던 스푸핑과 동일하다

set arp.spoof.fullduplex true

활성화를 해주고 이제 타켓 IP를 정하면 된다.

set arp.spoof target [타겟 IP]

여러 타겟으로 할 경우 아래와 같이 콤마로 구분한다
set arp.spoof target [타겟1 IP],[타겟2 IP]
예) set arp.spoof target 192.168.1.100,192.168.1.101,192.168.1.102

아무런 에러가 없다면 성공적으로 타겟 설정이 된 것이다.

이제 arp.spoof on으로 실행하면 타겟 설정 되었다고 나온다. 이제 타켓 컴퓨터를 확인해보자

피해자의 컴퓨터에 네트워크 연결된 기기를 보면 라우터의 MAC 주소가 리눅스의 MAC 주소로 바뀐 걸 확인 해볼 수 있다.

패킷 스니핑

better cap으로는 패킷 스니핑도 가능하다.

커맨드는 net.sniff on다. 스니핑의 범위는 같은 네트워크(LAN/WiFi)의 모든 기기로 공격자에서 스니핑 커맨드를 입력하고 타겟 컴퓨터에서 브라우저를 접속해보면

아래와 같이 로그가 찍힌다.

뿐만 아니라 BetterCAP에서 URL, 로드된 파일(이미지, CSS), POST 데이터까지 스니핑이 가능하다.

단, 위 스니핑은 HTTP에서만 통하는데 HTTPS의 경우 데이터를 암호화해서 전송하기 때문이다!

profile
프론트엔드 개발

0개의 댓글