소개
이 실습에서는 강력한 네트워크 프로토콜 분석 도구인 Wireshark를 설치하고 구성하는 방법을 배웁니다. Wireshark를 사용하면 네트워크 트래픽을 실시간으로 확인할 수 있으며, 이는 네트워크 문제 해결과 보안 조사에 매우 중요합니다.
이 실습을 마치면 시스템에서 네트워크 패킷을 캡처하고 분석할 수 있게 되며, 이 필수 도구를 직접 다뤄 보는 경험도 쌓게 됩니다.
Wireshark 설치
이 단계에서는 Ubuntu 시스템에 Wireshark를 설치합니다. Wireshark는 네트워크 트래픽을 캡처하고 분석할 수 있는 강력한 네트워크 프로토콜 분석 도구입니다. 네트워크 보안과 트래픽 분석에 관심이 있다면 반드시 익혀야 할 중요한 도구입니다. 다행히 Wireshark는 Ubuntu 저장소에서 제공되므로 Ubuntu의 패키지 관리 시스템을 사용해 간단히 설치할 수 있습니다.
먼저 패키지 저장소 정보를 업데이트합니다. 패키지 저장소는 Ubuntu 시스템에서 사용할 수 있는 모든 소프트웨어를 모아 둔 카탈로그와 같습니다. 저장소 정보를 업데이트하면 최신 소프트웨어 버전에 접근할 수 있습니다. 이를 위해 터미널을 엽니다. 작업 표시줄의 터미널 아이콘을 클릭하거나 Ctrl+Alt+T를 눌러 터미널을 열 수 있습니다. 터미널이 열리면 다음 명령을 입력합니다.
sudo apt update
sudo 명령은 관리자 권한으로 명령을 실행할 때 사용합니다. apt는 Ubuntu의 패키지 관리 도구이며, update는 패키지 저장소 정보를 새로 고치는 명령입니다. 이 명령을 실행하면 다음과 비슷한 출력이 표시됩니다.
Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [119 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [108 kB]
Get:4 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 Packages [1,234 kB]
...
Reading package lists... Done
이 출력은 시스템이 저장소에서 사용 가능한 패키지에 대한 최신 정보를 가져오고 있음을 의미합니다.
패키지 저장소 업데이트가 완료되었으므로 이제 apt 패키지 관리자를 사용해 Wireshark를 설치할 수 있습니다. 터미널에서 다음 명령을 실행합니다.
sudo apt install wireshark -y
install 명령은 apt에 지정한 패키지를 설치하라고 지시합니다. 여기서는 wireshark 패키지가 해당 대상입니다. -y 옵션을 사용하면 설치 과정에서 표시되는 모든 확인 질문에 자동으로 "yes"라고 응답합니다.
설치 중에는 일반 사용자가 패킷을 캡처하도록 허용할지 묻는 구성 대화 상자가 표시됩니다. 일반 사용자의 패킷 캡처를 허용하면 매번 관리자 권한으로 Wireshark를 실행하지 않아도 되므로 편리합니다. 화살표 키로 "Yes"를 선택하거나 y를 누른 다음 Enter 키를 눌러 확인합니다.

참고: 이 질문을 놓쳤거나 나중에 설정을 변경해야 한다면 다음 명령으로 Wireshark를 다시 구성할 수 있습니다.
sudo dpkg-reconfigure wireshark-common
dpkg-reconfigure명령은 이미 설치된 패키지를 다시 구성할 때 사용합니다.
설치가 완료되면 설치가 성공적으로 끝났음을 나타내는 출력이 표시됩니다. Wireshark가 올바르게 설치되었는지 확인하려면 버전을 확인합니다. 터미널에서 다음 명령을 실행합니다.
wireshark --version
이 명령은 Wireshark에 버전 정보를 표시하도록 지시합니다. 다음과 비슷한 출력이 표시됩니다.
Wireshark 3.6.2 (Git v3.6.2 packaged as 3.6.2-2)
Copyright 1998-2022 Gerald Combs <gerald@wireshark.org> and contributors.
License GPLv2+: GNU GPL version 2 or later <https://www.gnu.org/licenses/>
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Compiled (64-bit) with Qt 5.15.3, with libpcap, with GLib 2.72.0, with zlib 1.2.11,
with SMI 0.4.8, with c-ares 1.18.1, with Lua 5.2.4, with GnuTLS 3.7.3 and PKCS #11
support, with Gcrypt 1.9.4, with MIT Kerberos, with MaxMind DB resolver,
with nghttp2 1.43.0, with brotli, with LZ4, with Zstandard, with Snappy,
with libxml2 2.9.13, with libssh 0.9.6, with NGHTTP3 0.7.0, with NGTCP2 0.8.0.
좋습니다. 이제 시스템에 Wireshark가 설치되었습니다.
Wireshark 패킷 캡처 권한 구성
이 단계에서는 Wireshark가 네트워크 패킷을 캡처하는 데 필요한 권한을 구성합니다. 초보자라면 왜 이런 설정이 필요한지 궁금할 수 있습니다. 기본적으로 패킷 캡처에는 루트 권한이 필요합니다. 네트워크 패킷에는 민감한 정보가 포함될 수 있으므로 이는 보안상의 조치입니다. 하지만 보안 측면에서 Wireshark를 루트 권한으로 실행하는 것은 바람직하지 않습니다. Wireshark에 취약점이 있다면 루트 권한으로 실행 중인 프로그램을 통해 공격자가 시스템 전체에 접근할 수 있기 때문입니다. 따라서 일반 사용자 계정이 안전하게 패킷을 캡처할 수 있도록 Wireshark를 구성하겠습니다.
먼저 시스템에 wireshark 그룹이 존재하는지 확인합니다. wireshark 그룹은 패킷 캡처 권한을 관리하는 데 사용할 특별한 그룹입니다. 이 그룹이 존재하는지 확인하기 위해 getent 명령을 사용합니다. getent는 시스템 데이터베이스에서 항목을 조회하는 유틸리티이며, 여기서는 그룹 데이터베이스를 조회합니다. 터미널에서 다음 명령을 실행합니다.
getent group wireshark
출력이 나타나지 않으면 아직 그룹이 존재하지 않는 것이므로 새로 만들어야 합니다. groupadd 명령을 사용해 wireshark 그룹을 생성합니다. groupadd는 시스템에 새 그룹을 만드는 명령입니다. 다음 명령을 실행합니다.
sudo groupadd wireshark
sudo는 groupadd 명령을 관리자 권한으로 실행하는 데 사용됩니다. 최근에 sudo를 사용하지 않았다면 비밀번호를 입력하라는 메시지가 표시됩니다.
다음으로 패킷 캡처 바이너리인 dumpcap에 올바른 권한을 부여해야 합니다. dumpcap은 Wireshark를 대신해 실제 패킷 캡처를 수행하는 구성 요소입니다. dumpcap 바이너리의 그룹 소유권을 wireshark 그룹으로 변경합니다. 이렇게 하면 dumpcap이 wireshark 그룹에 속하게 되어 해당 그룹을 통해 권한을 관리할 수 있습니다. 다음 명령을 실행합니다.
sudo chgrp wireshark /usr/bin/dumpcap
chgrp 명령은 파일이나 디렉터리의 그룹 소유권을 변경할 때 사용합니다. 여기서는 /usr/bin/dumpcap 바이너리의 그룹 소유권을 wireshark 그룹으로 변경합니다.
그룹 소유권을 변경한 후에는 소유자와 wireshark 그룹만 실행할 수 있도록 제한합니다. 다음 명령을 실행합니다.
sudo chmod 750 /usr/bin/dumpcap
750 권한은 root 소유자에게 모든 권한을 부여하고, wireshark 그룹에는 읽기 및 실행 권한을 부여하며, 다른 사용자에게는 아무 권한도 부여하지 않습니다. 또한 setuid 비트가 활성화되지 않도록 합니다.
이제 패킷 캡처에 필요한 Linux 기능만 dumpcap에 부여합니다.
sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap
이 기능을 사용하면 dumpcap이 전체 프로그램을 루트로 실행하지 않고도 원시 패킷 소켓을 열고 캡처 인터페이스를 관리할 수 있습니다. 파일 권한 설정과 결합하면 root와 wireshark 그룹 구성원만 이를 실행할 수 있습니다.
마지막으로 현재 사용자를 wireshark 그룹에 추가합니다. 사용자를 wireshark 그룹에 추가하면 dumpcap 바이너리를 사용하는 데 필요한 권한을 얻을 수 있습니다. 사용자를 그룹에 추가하기 위해 gpasswd 명령을 사용합니다. gpasswd는 /etc/group 및 /etc/gshadow 파일을 관리하는 명령입니다. 다음 명령을 실행합니다.
sudo gpasswd -a $USER wireshark
$USER 변수는 현재 사용자의 사용자 이름을 담고 있는 셸 변수입니다. 사용자가 그룹에 추가되었다는 다음과 같은 출력이 표시됩니다.
Adding user labex to group wireshark
변경 사항을 적용하려면 로그아웃한 후 다시 로그인하거나 시스템을 재시작해야 합니다. 하지만 이 실습에서는 업데이트된 그룹 소속으로 새 셸을 시작하는 더 간단한 방법을 사용하겠습니다. newgrp 명령으로 wireshark 그룹이 활성화된 새 셸을 시작합니다. newgrp는 현재 그룹 ID를 변경하는 명령입니다. 다음 명령을 실행합니다.
newgrp wireshark
이 명령은 완전히 로그아웃하지 않고도 wireshark 그룹이 활성화된 새 셸을 시작합니다.
이제 사용자가 wireshark 그룹에 속해 있는지 확인합니다. groups 명령을 사용하면 현재 사용자가 속한 모든 그룹을 확인할 수 있습니다. 다음 명령을 실행합니다.
groups
그룹 목록에 wireshark가 표시되어야 합니다.
wireshark sudo ssl-cert labex public
마지막으로 제한된 권한과 패킷 캡처 기능을 확인합니다.
stat -c '%A %U %G' /usr/bin/dumpcap
-rwxr-x--- root wireshark
getcap /usr/bin/dumpcap
/usr/bin/dumpcap cap_net_admin,cap_net_raw=eip
이제 사용자가 wireshark 그룹에 속하고 dumpcap에 필요한 기능만 부여되었으므로, 모든 로컬 사용자에게 캡처 권한을 부여하거나 Wireshark 전체를 루트로 실행하지 않고도 패킷을 캡처할 수 있습니다.
Wireshark 실행
이 단계에서는 Wireshark를 실행하고 초기 인터페이스를 살펴봅니다. Wireshark는 네트워크 트래픽 분석을 위한 강력한 도구이며, 그래픽 사용자 인터페이스를 제공합니다. 이 인터페이스를 통해 프로그램과 상호 작용하고 네트워크 트래픽을 분석하게 됩니다.
먼저 LabEx VM의 데스크톱 환경에 있는지 확인합니다. 올바른 환경이라면 화면 위쪽이나 아래쪽에 아이콘과 작업 표시줄이 있는 데스크톱이 보입니다. 이곳에서 Wireshark 작업을 시작합니다.
Wireshark를 실행하는 방법은 두 가지입니다. 편한 방법을 선택하면 됩니다.
화면 왼쪽 위에 있는 경우가 많은 Applications 메뉴를 클릭합니다. 그런 다음 메뉴에서 "Internet" 또는 "Network" 범주로 이동합니다. 해당 범주에서 "Wireshark"를 찾아 선택합니다. 그래픽 인터페이스를 사용해 프로그램을 시작하는 가장 간단한 방법입니다.

또는 터미널을 사용할 수 있습니다. 터미널 창을 열고 다음 명령을 입력합니다.
wireshark
이 명령은 시스템에 Wireshark 애플리케이션을 시작하도록 지시합니다. 명령을 실행하면 Wireshark가 시작되고 기본 창이 화면에 나타납니다. 가장 먼저 "Welcome to Wireshark" 화면이 표시됩니다. 이 화면에는 네트워크 트래픽을 캡처하는 데 사용할 수 있는 네트워크 인터페이스 목록이 나타납니다. 이전에 Wireshark를 사용했고 저장된 캡처 파일이 있다면 최근에 연 파일도 표시됩니다.

시작 화면에서는 다음과 같은 주요 기능을 사용할 수 있습니다.
- 목록에서 네트워크 인터페이스를 선택할 수 있습니다. 인터페이스를 선택하면 Wireshark가 해당 네트워크에서 즉시 패킷 캡처를 시작합니다. 이를 통해 네트워크 트래픽 데이터를 수집할 수 있습니다.
- 이전에 저장한 캡처 파일이 있다면 이 화면에서 열 수 있습니다. 과거에 수집한 데이터를 분석할 때 유용합니다.
- 이 화면에서 여러 도구와 설정에도 접근할 수 있습니다. 이러한 기능을 사용하면 Wireshark 사용 환경을 사용자 지정하고 더 고급 분석을 수행할 수 있습니다.
잠시 시간을 내어 이 초기 화면을 살펴보세요. 각 네트워크 인터페이스에는 감지된 패킷에 관한 통계가 표시됩니다. 이 통계를 보면 어떤 인터페이스에서 네트워크 트래픽이 활발하게 오가는지 빠르게 파악할 수 있습니다.
이제 Wireshark의 주요 인터페이스 요소를 살펴보겠습니다.
- 메뉴 표시줄: 창 위쪽에 있는 이 표시줄을 통해 Wireshark의 모든 기능에 접근할 수 있습니다. 캡처 파일 저장, 설정 변경, 도움말 확인 등 다양한 작업을 수행할 수 있습니다.
- 도구 모음: 자주 사용하는 기능에 빠르게 접근할 수 있습니다. 패킷 캡처 시작 및 중지, 필터 적용, 파일 저장 등을 한 번의 클릭으로 수행할 수 있습니다.
- 인터페이스 목록: 시스템에서 사용할 수 있는 모든 네트워크 인터페이스를 보여 줍니다. 패킷을 캡처할 인터페이스를 여기서 선택합니다.
- 표시 필터 표시줄: 기본 창에 표시할 패킷을 필터링하는 데 사용합니다. IP 주소, 프로토콜, 포트 번호 등 다양한 조건으로 관심 있는 패킷만 추릴 수 있습니다. 다음 단계에서 이 필터의 사용 방법을 살펴봅니다.
지금은 Wireshark를 실행한 상태로 두세요. 다음 단계에서는 Wireshark를 사용해 네트워크 트래픽을 캡처하고 분석합니다.
네트워크 트래픽 캡처 및 분석
이 단계에서는 네트워크 트래픽을 캡처하고 Wireshark 인터페이스를 살펴봅니다. 네트워크 패킷 분석 방법을 이해하는 것은 네트워크 보안이나 문제 해결에 관심이 있는 사람에게 매우 중요합니다. 이 단계를 마치면 캡처를 시작하고, Wireshark 인터페이스를 이해하며, 트래픽을 생성하고, 패킷을 필터링하고, 패킷 세부 정보를 확인한 후 캡처를 중지할 수 있게 됩니다.
캡처 시작
Wireshark를 열면 시작 화면이 나타납니다. 이 화면에서 트래픽을 캡처할 네트워크 인터페이스를 찾습니다. 대부분의 경우 eth0 인터페이스를 사용합니다. eth0을 사용할 수 없다면 eth1 또는 wlan0과 같은 다른 활성 인터페이스를 선택할 수 있습니다.
패킷 캡처를 시작하려면 eth0 인터페이스를 두 번 클릭합니다. 그러면 해당 인터페이스에서 즉시 패킷 캡처가 시작되고 Wireshark의 기본 캡처 창으로 이동합니다.
또는 먼저 인터페이스를 선택한 다음 도구 모음의 파란색 상어 지느러미 모양 아이콘인 "Start capturing packets" 버튼을 클릭해도 됩니다. 캡처를 시작하면 Wireshark가 선택한 인터페이스를 통해 흐르는 데이터를 수집하므로 네트워크 트래픽 분석을 위한 첫 단계가 진행됩니다.
Wireshark 인터페이스 이해
패킷 캡처가 시작되면 Wireshark의 기본 인터페이스가 표시됩니다. 이 인터페이스는 서로 다른 역할을 하는 세 개의 주요 창으로 나뉩니다.

패킷 목록 창(위쪽): Wireshark가 캡처한 모든 패킷의 목록을 보여 줍니다. 각 항목에는 다음과 같은 기본 정보가 포함됩니다.
- 패킷 번호: 캡처된 각 패킷을 식별하는 고유 번호입니다.
- 시간: 패킷이 캡처된 시각입니다.
- 출발지 IP 주소: 패킷을 보낸 장치의 IP 주소입니다.
- 목적지 IP 주소: 패킷이 전달될 장치의 IP 주소입니다.
- 프로토콜: TCP, UDP, ICMP와 같이 패킷에서 사용된 네트워크 프로토콜입니다.
- 길이: 바이트 단위로 표시한 패킷 크기입니다.
- 정보: 패킷의 용도를 간략히 설명하는 내용으로, 패킷이 수행하는 작업을 빠르게 파악하는 데 도움이 됩니다.
패킷 세부 정보 창(가운데): 위쪽 창에서 패킷을 선택하면 선택한 패킷의 상세 정보가 계층 구조로 표시됩니다. 각 항목 옆의 화살표를 클릭하면 패킷 구조와 내용에 관한 더 자세한 정보를 펼쳐 볼 수 있습니다.
패킷 바이트 창(아래쪽): 원시 패킷 데이터를 16진수와 ASCII 형식으로 보여 줍니다. 패킷 세부 정보 창에서 필드를 선택하면 이 창에서 해당 바이트가 강조 표시됩니다. 이를 통해 패킷으로 실제 전송되는 데이터를 확인할 수 있습니다.
네트워크 트래픽 생성
분석할 만한 데이터를 만들려면 네트워크 트래픽을 생성해야 합니다. Wireshark를 실행한 상태에서 새 터미널 창을 엽니다. 터미널에서 ping 명령을 사용해 Google 서버로 ICMP 에코 요청 패킷을 전송합니다.
다음 명령을 실행합니다.
ping -c 5 google.com
참고: 무료 사용자는 인터넷에 연결할 수 없습니다. 프로 요금제로 업그레이드하면 모든 기능을 이용할 수 있습니다.
-c 5 옵션은 ping 명령이 ICMP 에코 요청 패킷 5개를 보내도록 지정합니다. 명령을 실행하면 다음과 비슷한 출력이 표시됩니다.
PING google.com (142.250.180.238) 56(84) bytes of data.
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=1 ttl=118 time=15.6 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=2 ttl=118 time=16.5 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=3 ttl=118 time=15.9 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=4 ttl=118 time=16.2 ms
64 bytes from muc11s21-in-f14.1e100.net (142.250.180.238): icmp_seq=5 ttl=118 time=15.7 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 15.629/15.986/16.520/0.324 ms
이제 Wireshark로 돌아갑니다. ping 명령을 실행하는 동안 캡처된 ICMP 패킷이 보일 것입니다. 이 패킷을 사용해 추가 분석을 진행합니다.
캡처 중지
캡처한 패킷 분석을 마쳤다면 캡처를 중지해야 합니다. 도구 모음에서 빨간색 사각형으로 표시된 "Stop capturing packets" 버튼을 클릭합니다. 또는 "Capture" 메뉴에서 "Stop"을 선택해도 됩니다.
이제 Wireshark로 기본적인 네트워크 트래픽을 성공적으로 캡처하고 분석했습니다. 이는 네트워크 분석과 보안의 기본 기술이며, 이 지식을 바탕으로 더 복잡한 네트워크 환경도 분석할 수 있습니다.
패킷 필터링
Wireshark는 선택한 인터페이스의 모든 트래픽을 캡처하므로 데이터가 빠르게 많아지고 관리하기 어려워질 수 있습니다. 필터는 특정 유형의 트래픽에 집중할 수 있게 해 주는 Wireshark의 강력한 기능입니다.

방금 생성한 ICMP ping 패킷만 필터링하려면 Wireshark 창 위쪽의 필터 표시줄을 확인합니다. 이곳에 필터 표현식을 입력할 수 있습니다. 필터 표시줄에 다음을 입력합니다.
icmp
필터 표현식을 입력한 후 Enter 키를 누르거나 필터 입력란 옆의 Apply 버튼(오른쪽 화살표 아이콘)을 클릭합니다. 패킷 목록이 갱신되어 ICMP 패킷만 표시됩니다. 앞서 실행한 ping 명령에 대응하는 "Echo (ping) request"와 "Echo (ping) reply" 메시지 쌍이 나타날 것입니다. 필터를 사용하면 관심 있는 트래픽만 분리할 수 있어 분석 작업을 훨씬 쉽게 관리할 수 있습니다.
패킷 세부 정보 확인
이제 ICMP 패킷만 표시하도록 필터링했으므로 ICMP 요청 패킷 하나를 자세히 살펴보겠습니다. 패킷 목록에서 ICMP 요청 패킷 중 하나를 클릭합니다. 패킷 세부 정보 창에서 각 항목 옆의 화살표를 클릭하면 프로토콜 계층을 펼쳐 볼 수 있습니다.

- Frame: 프레임 또는 패킷 전체에 관한 정보가 표시됩니다. 예를 들어 프레임 길이와 프레임 검사 시퀀스가 포함됩니다.
- Ethernet: 출발지와 목적지 MAC 주소 같은 2계층(데이터 링크 계층) 정보를 포함합니다.
- Internet Protocol Version 4: 3계층(네트워크 계층) 정보입니다. 이 항목을 펼치면 다음과 같은 세부 정보를 확인할 수 있습니다.
- 출발지 IP 주소: 패킷을 보낸 장치의 IP 주소입니다.
- 목적지 IP 주소: 패킷이 전달될 장치의 IP 주소입니다.
- Time to Live (TTL): 네트워크에서 패킷의 수명을 제한하는 값입니다.
- Protocol: IP 패킷 내부에서 사용되는 프로토콜이며, 이 경우에는 ICMP입니다.
- Internet Control Message Protocol: ICMP 프로토콜 정보가 표시됩니다. 이 항목을 펼치면 다음과 같이 ICMP 메시지에 관한 세부 정보를 확인할 수 있습니다.
- Type (8 for request, 0 for reply): 패킷이 요청인지 응답인지 나타냅니다.
- Code: ICMP 메시지에 관한 추가 정보를 제공합니다.
- Checksum: ICMP 메시지의 무결성을 확인하는 데 사용됩니다.
- Identifier: 요청과 응답을 서로 연결하는 데 도움이 됩니다.
- Sequence number: ICMP 패킷의 순차 번호입니다.
요약
이 실습에서는 강력한 네트워크 분석 도구인 Wireshark를 설치하고 설정하는 방법을 배웠습니다. 일반 사용자가 안전하게 패킷을 캡처할 수 있도록 권한을 구성하고, 애플리케이션을 실행한 뒤 실제 네트워크 트래픽을 캡처했습니다. 또한 인터페이스를 살펴보고, 특정 트래픽 유형에 필터를 적용하며, 다양한 프로토콜 계층에서 패킷 세부 정보를 확인했습니다.
이러한 기술은 네트워크 분석과 문제 해결을 위한 탄탄한 기반이 됩니다. 이제 Wireshark를 사용해 네트워크 통신을 점검하고, 연결 문제를 진단하며, 프로토콜 동작을 분석하고, 네트워크 트래픽에서 보안 문제를 식별할 수 있습니다.


