새소식

IoT

Raspberry pi를 활용하여 패킷 스니핑 하기

  • -

Raspberry pi를 활용하여 패킷 스니핑 하기


[사진 1] - 대표 사진

Raspberry pi 패킷 스니퍼 및 분석 환경 구성


원래 하고 싶었던 IoT 장비 분석을 위해 집에 있는 라즈베리파이를 활용하여 패킷 스니퍼를 제작하고자 했다.
라즈베리 파이에 내장되어있는 유무선 기능을 통해 유선(eth0)으로 오는 패킷을 무선(wlan0)으로 route하는 라우터를 만들고 라즈베리파이에서 tcpdump를 통해 패킷을 도청 할 수 있었다. 또한 편리한 분석 환경을 위해 dhcp 설정, 공유폴더를 설정했다. 
집에 있는 라즈베리파이는 3B+ 이며, 약간의 설정을 통해 누구나 충분히 패킷 스니퍼를 제작할 수 있다.

Raspberry PI dhcp 서버 설정

라즈베리 파이에서 eth0 으로 연결될 기기와 원활한 통신을 위해 dhcp 서버 설정을 해줬다

 

sudo apt update
sudo apt upgrade

최신 패키지 설치를위해 업데이트를 진행한다.

 

sudo apt install hostapd bridge-utils dnsmasq dhcpcd

dhcp 서버 설정을 위한 것들을 설치 한다.

 

sudo gedit /etc/dnsmasq.conf

DHCP server와 DNS resolver 설정을 위해 gedit으로 연다.

 

interface=eth0
dhcp-range=192.168.2.10,192.168.2.200,255.255.255.0,24h

dhcp에서 사용할 내부 네트워크 대역 설정을 설정을위해 dnsmasq.conf 제일 아래에다 기입한다.
이때 대역은 원래 가지고 있던 네트워크와 헷갈리지 않기위해 필자는 192.168.2.x 대역을 사용하기로 했다.

 

sudo gedit /etc/dhcpcd.conf

마저 dhcp 설정을 위해 dhcpcd.conf를 gedit로 연다.

 

interface eth0
static ip_address=192.168.2.1/24

라우터 역할을 할 라즈베리파이의 eth0 ip를 고정하기위해 dhcpcd.conf 제일 아래에 다 위와 같이 기입하고 저장한다. 

 

sudo systemctl dnsmasq restart
sudo systemctl dhcpcd restart

위 명령을 통해 dhcp 서버 설정을 완료 할 수 있다.


Raspberry PI 패킷 라우터 설정

패킷을 라우트 하기위해 iptables를 활용하였으며 껏다 켜졌을때도 iptables 설정을 유지하기위해 따로 설정해주었다.

 

sudo gedit /etc/sysctl.conf

우선 IP Forwad 기능을 켜주기위해 sysctl.conf를 연다.

 

net.ipv4.ip_forward=1

sysctl.conf 파일 내에있는 net.ipv4.ip_forward를 1로 설정해준뒤 저장한다.

 

sudo sysctl -p

변경된 IP Forward 설정을 적용한다

 

sudo apt install iptables-persistent

iptables를 설정하기 전에 재부팅해도 설정이 유지되도록 iptables-persistent를 설치해준다.

 

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT

eth0에서 오는 패킷을 모두 wlan0으로 넘기기 위해 위와 같이 iptables 규칙을 설정해준다.

 

sudo sh -c "iptables-save > /etc/iptables/rules.v4"

설정한 iptables를 재부팅 후에도 유지하기 위해 위 명령어를 실행한다.

 

Raspberry PI 에서 tcpdump를 통해 패킷 도청

위와 같이 설정을 모두 마쳤을경우 이제 tcpdump를 통해 패킷을 도청할 수 있다.

그리고 라즈베리파이에 유선으로 연결한 기기는 위 설정대로라면 192.168.2.10~192.168.2.200 사이로 해야한다.

필자는 편한 패킷 분석을 위해 공유 폴더 환경을 구성하였다. 

 

sudo apt-get install tcpdump

패킷 캡처를 위해 tcpdump를 설치한다.

 

mkdir /home/pi/shared_folder
mkdir /home/pi/shared_folder/pcap
chmod -R /home/pi/shred_folder

window 환경인 본체 컴퓨터와 공유폴더 설정을 위해 shared_folder와 pcap 파일이 저장될 폴더를 생성하고 권한을 할당했다.

 

#!/bin/bash

# Set up the directory
DATE=$(date +%Y-%m-%d)
TIME=$(date +%H-%M)
BASE_DIR="/home/pi/shared_folder/pcap"
CAPTURE_DIR="$BASE_DIR/$DATE"
mkdir -p "$CAPTURE_DIR"
sudo chmod 777 -R "$CAPTURE_DIR"

# Set up the filename
FILENAME="$TIME.pcap"

# Run tcpdump and save the captured packets
sudo tcpdump -i eth0 -s 0 -w "$CAPTURE_DIR/$FILENAME"

패킷 캡처를 위해 바탕화면에 save_packet.sh를 생성한다.

해당 파일을 실행시 eth0 패킷을 캡쳐하여 
/home/pi/shared_folder/pcap/현재 날짜/시간-분.pcap 형태로 저장한다.

 

Raspberry PI 에서 Window 컴퓨터와 공유 폴더 설정

캡쳐한 pcap 파일을 편하게 분석하기위해 공유 폴더 설정을 했다. 공유 폴더 설정을 위해 samba를 설치하여 설정했다.

 

sudo apt install samba samba-common-bin

공유 폴더 설정을 위해 라즈베리 파이에서 위 명령줄을 통해 samba를 설치한다.

 

sudo gedit /samba/smb.conf

공유 폴더 설정을 위해 smb.conf를 gedit으로 열었다.

 

[shared_folder]
   path = /home/pi/shared_folder
   browseable = yes
   read only = no
   create mask = 0777
   directory mask = 0777
   public = yes
   force user = pi

smb.conf 파일 제일 아래에 다음과 같이 추가하고 저장한다.

이때 생성한 공유 폴더 이름에 유의해야한다
ex.) [폴더이름]
          path = /home/pi/shared_folder

 

sudo systemctl restart smbd

공유 폴더 설정 적용을 위해 smbd 서비스를 재시작한다.

 

[사진 2] - Window 파일 탐색기

상단에 \\raspberrypi를 입력하여 공유 폴더가 재대로 나오는지 확인한다.

필자의 경우에는 shared_folder 우클릭->즐겨찾기에 고정을 통해 왼쪽 즐겨찾기에서 쉽게 접근할 수 있도록 했다.

 

Raspberry pi 패킷 스니퍼 테스트


모든 설정이 완료됐다면 Raspberry pi를 재부팅하고 IoT 장비와 유선 연결을 한다. 그후 IoT 장비에서 아이피 설정을 통해 아이피를 맞춰준 후 라즈베리 파이에서 패킷 캡처(save_packer.sh 실행)를 통해 패킷이 잡히는지 테스트 해본다.

 

[사진 3] - Wireshark

성공적으로 잘 동작 하는 모습을 볼 수 있다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.