| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- 자바
- 예술의 전당
- 우아한테크코스
- 위상 정렬
- 우테코
- 서울청년문화패스
- 레나튜토리얼
- 진입차수
- 깃
- Practical Malware Analysis Labs
- 코리안챔버오케스트라
- 알고리즘
- 루키즈31기
- sk쉴더스 루키즈
- sk 쉴더스 루키즈
- 프리코스
- SK쉴더스루키즈
- webhacking
- Dreamhack
- c
- 애플리케이션 계층
- SK쉴더스
- linux
- 웹개발
- 백엔드
- React
- 동적분석
- 악성코드 분석
- 루키즈 31기
- Today
- Total
yon11b
[SK 쉴더스 루키즈] 네트워크 - ARP, Wireshark, tshark 본문
Ethernet Frame
DIX가 Ethernet을 만들었고 → IEEE가 이를 표준화하면서 MAC(802.3)/LLC(802.2)로 나눴지만 → 실제 인터넷에선 단순한 DIX 방식(Ethernet II)이 살아남았다.
1. Ethernet Frame(DIX 2.0)


Type
- SAP(뒤에 data에 뭐 싣고 가는지 명시)
- 0x0800 -> IP
- 0x0806 -> ARP
- 0x86DD -> IPv6
Data
- mTU: 46+18 = 64 → 충돌을 감지할 수 있는 최소영역(동축케이블 기준)
- MTU: 1500 ⇒ 실제전송 1518
ethernet frame은 endpoint에서 만들어낸 프레임이다.(보통 type을 달고 옴)
2. IEEE


- MAC(IEEE 802.3) → 프레임을 만듦
1. 누구에게 보낼지(IP -> MAC 변환. ARP)
2. 프레임 형식 만들기(Ethernet II / IEEE 802.3) + 헤더 붙이기
3. 매체 접근 방식(e.g. CSMA/CD)
4. 실제 전송 단위(패킷 -> 프레임으로 캡슐화) - LLC(IEEE 802.2) → “프레임 안 데이터를 보고, 어떤 상위 프로토콜로 넘길지 결정하는 역할”
- 프레임이 도착했다고 가정 > [Dst MAC][Src MAC][Data]
이 프레임이 포함하고 있는 상위 계층이 IP일수도, ARP일수도, 다른 프로토콜일 수도..
=> 그래서 상위 프로토콜을 식별할 얘가 필요함(=LLC)
- 프레임이 도착했다고 가정 > [Dst MAC][Src MAC][Data]
하나의 LLC 위에 여러 MAC을 붙일 수 있음
┌─────────────────────┐
│ LLC (IEEE 802.2) │ ← 상위 계층(IP, ARP 등)과 인터페이스
├─────────────────────┤
│ MAC (IEEE 802.3) │ ← 실제 매체(케이블, 무선)와 통신
└─────────────────────┘
LLC가 공통 인터페이스 역할을 함.
IP / ARP / IPv6 ← 상위 계층은 LLC만 알면 됨
↑
LLC (802.2) ← 공통 통역사
┌──────┼──────┐
Ethernet Wi-Fi 기타 ← 매체별로 다른 MAC
(MAC) (MAC)
IP 입장:
"나는 그냥 LLC한테 '이거 보내줘'라고만 하면 돼. 밑에 이더넷이 있든 Wi-Fi가 있든 나는 모름. 알 필요도 없음."
=> "상위 계층은 MAC 종류 몰라도 됨". 추상화(abstraction)라고도 함.
정리
- 0x0800 → IPv4
- 0x0806 → ARP
- 0x86DD → IPv6
MAC (Media Access Control) — IEEE 802.3
IEEE 방식 → MAC / LLC 두 계층으로 명확히 분리
ARP
3계층 프로토콜
DIX에서 type: 0x0806→ arp싣고 가고 있어.
송 MAC, 수 MAC(FFFFF)→ 브로드. ARP request
송 MAC, 수 MAC→ 유니. ARP reply

Hardware Type: L2계층
Protocol Type: L3계층
ARP 동작 원리 정리
기본 전제
- 스위치/허브는 브로드캐스트 패킷을 받으면 flooding (전체 포트로 전달)
- 패킷을 받은 PC는 역캡슐화해서 내용 확인
- ARP Cache Table은 Aging Time 존재 → 일정 시간 동안 통신 없으면 자동 삭제
- ARP 패킷을 받으면 Cache Table에 있는 송신지 정보 업데이트 + Aging Time 초기화
1.10 -> 1.20 요청이 가야 하는 상황. 같은 망에 1.30도 있다.
Case 1 — 목적지가 아닌 PC가 받았을 때 (1.10 → 1.30)
| 상황 | Cache Table 업데이트 | ARP Reply |
| 송신지 주소(1.10)가 이미 있음 | ✅ 업데이트 | ❌ |
| 송신지 주소가 없음 | ❌ | ❌ |
Case 2 — 목적지 PC가 받았을 때 (1.10 → 1.20)
- 송신지(1.10)의 MAC 주소를 신규로 Cache Table에 등록
- ARP Reply 전송 ✅
- Reply를 보내야 하니까, 상대방 MAC을 미리 기록해두는 것
| 상황 | Cache Table 업데이트 | ARP Reply |
| 송신지 주소(1.10)가 이미 있음 | ✅ 업데이트 | ✅ |
| 송신지 주소가 없음 | ✅ 신규 등록 | ✅ |
보안 이슈 — ARP Spoofing / ARP Redirection
ARP Request를 보낸 적 없는데 ARP Reply가 왔다 → Cache Table에 저장됨
ARP는 Reply의 출처를 검증하지 않기 때문에, 공격자가 조작된 Reply를 보내면 피해자의 Cache Table이 덮어씌워진다.
이를 악용한 공격:
- ARP Spoofing → 특정 IP에 대한 MAC을 공격자 MAC으로 위조 → 트래픽 가로채기
- ARP Redirection → 게이트웨이 MAC을 위조 → 모든 외부 트래픽을 공격자에게 유도
실습
내가 나한테 보내는 arp 요청? 비정상적인 요청인가? -> ㄴㄴ
PC 전원 ON
↓
"목적지 IP = 나 자신(1.10), 누구 MAC이야?" 브로드캐스트
↓
스위치가 flooding → 모든 PC에 전달
↓
받은 PC들: "아 1.10은 저 MAC이구나" → ARP Cache Table 업데이트
Reply를 기다리는 게 아니라, "나 켜졌어, MAC 이거야" 를 알리는 announcement가 목적. (GARP라고 함)
일반 ARP vs Gratuitous ARP
| 일반 ARP | Gratuitous ARP | |
| 목적 | 상대방 MAC 주소 알아내기 | 내 존재를 네트워크에 알리기 |
| Reply 기대 | ✅ | ❌ (Reply 안 받아도 됨) |
| 목적지 IP | 알고 싶은 상대 IP | 자기 자신의 IP |
부수 효과
- IP 충돌 감지 → 같은 IP를 쓰는 PC가 있으면 Reply가 옴 → 충돌 감지 가능
Wireshark 실습
1. Slowloris 공격
0d 0a -> \r\n
0d 0a가 두 개이다. -> header가 끝났다.

헤더가 안 끝난 것을 악용한 공격 -> Slowloris 공격
서버는 빈 줄(\r\n\r\n)이 올 때까지 헤더가 끝나지 않은 것으로 판단하고 연결을 유지한다.
공격자 → 서버: "GET / HTTP/1.1\r\n"
공격자 → 서버: "Host: target.com\r\n"
공격자 → 서버: "X-a: b\r\n" ← 의미없는 헤더 계속 추가
공격자 → 서버: "X-a: b\r\n" ← \r\n\r\n은 절대 안 보냄
공격자 → 서버: "X-a: b\r\n" ← 연결 유지...
(수백 개의 연결을 동시에)
- 수백 개의 연결을 열어놓음
- 각 연결마다 헤더를 조금씩, 천천히 전송
- 마지막 \r\n\r\n은 절대 보내지 않음
- 서버는 모든 연결을 열린 채로 유지
- 서버의 최대 동시 연결 수 고갈 → 정상 사용자 접속 불가
2. 302 후 200 패킷 실행 흐름 파악

[전체 흐름 요약]
1. DNS 조회
172.16.0.122 → 4.2.2.1(dns 서버)
: 도메인 IP 요청
2. DNS 응답
4.2.2.1 → 172.16.0.122
: IP 주소 받음
3-5. 첫 번째 서버 연결 (199.181.132.250)
SYN : 연결 요청
SYN, ACK : 서버 응답
ACK : 연결 완료
→ TCP 3-way handshake 완료
6. HTTP 요청
GET / HTTP/1.1
: 웹 페이지 요청
7. 서버 응답 (리다이렉트)
HTTP 301 Moved Permanently
: 다른 주소로 이동하라고 안내(url을 받았겠지?)
8. 일단 먼저 리다이렉트 응답을 잘 받았다고 서버에 응답(ACK)
9. DNS 재조회 (리다이렉트된 주소의 ip가 뭔지 알려달라!)
172.16.0.122 → 4.2.2.1 (7에서 받은 url의 ip 뭐니)
: 새 도메인 IP 요청
10. DNS 응답
4.2.2.1 → 172.16.0.122
: 새 IP 받음 (68.71.208.11)
11-13. 두 번째 서버(찐 서버) 연결 (68.71.208.11)
SYN : 연결 요청
SYN, ACK : 서버 응답
ACK : 연결 완료
→ TCP 3-way handshake 완료
14. HTTP 요청
GET / HTTP/1.1
: 페이지 요청
15. 최종 응답
HTTP 200 OK
: 정상 페이지 수신
[핵심 요약]
DNS → 서버1 접속 → 301 리다이렉트
→ DNS 재조회 → 서버2 접속 → 200 OK
= 최종 페이지 정상 수신
3. 와이어샤크 GUI 옵션들
프로토콜 설정

1. Allow subdissector to reassemble TCP streams
TCP로 쪼개진 데이터를 다시 하나로 합쳐서 보여주는 기능
왜 필요하냐?
TCP는 데이터를 이렇게 보내기 때문.
[패킷1] "GET / HT"
[패킷2] "TP/1.1\r\n"
[패킷3] "Host: ..."
-> 실제로는 하나의 HTTP 요청인데
-> 여러 패킷으로 쪼개짐
그래서 옵션 ON하면, Wireshark가 재조립해서 보여줌
GET / HTTP/1.1
Host: ...
-> 사람이 보기 편함
2. Analyze TCP sequence numbers
TCP 흐름(순서, 재전송, 손실)을 분석해줌
이 옵션 켜면:
Retransmission (재전송)
Lost segment (손실)
Out-of-order (순서 꼬임)
자동 표시됨
e.g.
[TCP Retransmission]
[TCP Out-Of-Order]
[TCP Dup ACK]
네트워크 인터페이스
Wireshark 목록에 뜨는:
- 로컬 영역 연결
- 이더넷
- Wi-Fi
- vEthernet
- VirtualBox Host-Only
- Loopback

이건 전부: “패킷을 캡처할 수 있는 네트워크 인터페이스”
Resolve
편집 → Name Resolution

80 → http(80), ip→ url로 변환해서 보여주는 식
캡쳐 필터
캡쳐>캡쳐 필터: 필터를 만든다.

기본 페이지로 들어오면 방금 만든 필터를 선택할 수 있다.

캡처 필터 - 주소 기반의 트래픽 수집
1. 특정 ip 주소의 트래픽 수집
• host 10.3.1.1 -> 송/수신지 주소가 이것인 것 찾기
• host 2406:da00:ff00::6b16:f02d -> ipv6주소
• not host 10.3.1.1 -> 이거 제외
• src host 10.3.1.1 -> 송신지 주소가 이것인 것
• dst host 10.3.1.1 -> 수신지 주소가 이것인 것
• host 10.3.1.1 or host 10.3.1.2
• host http://www.espn.com
host 명령어는 딱 하나의 IP만 지정할 때 사용!!
2. ip 주소 범위 트래픽 수집
• net 10.3.0.0/16
• net 10.3.0.0 mask 255.255.0.0
• ipv6 net 2406:da00:ff00::/64
• not dst net 10.3.0.0/16
• dst net 10.3.0.0/16
• src net 10.3.0.0/16
10.3.0.0/16 → 10.3.0.1~10.3.255.255
→ src net 10.3.0.0/16 이면 ~10.3.255.254 까지.
→ src 자리이기 때문에 브로드 캐스트 주소가 올 수 없기 때문
→ dst net 10.3.0.0/16 이면 ~10.3.255.255 까지.
3. 브로드캐스트 또는 멀티캐스트 트래픽 수집
• ip broadcast
• ip multicast -> 멀티캐스트 패킷만 수집
• dst host ff02::1
• dst host ff02::2
4. MAC 주소 기반의 트래픽 수집
• ether host 00:08:15:00:08:15
• ether src 00:08:15:00:08:15
• ether dst 00:08:15:00:08:15
• not ether host 00:08:15:00:08:15
5. 특정 애플리케이션에 대한 트래픽 수집
• port 53
• not port 53
• udp port 67
• potrange 1-80
• tcp portrange 1-80
• port 20 or port 21
• host 10.3.1.1 and port 80
• host 10.3.1.1 and not port 80
• udp src port 68 and udp dst port 67
Display Filter (디스플레이 필터)
이미 캡처된 것 중에서 “보여주는 것만” 필터링
- arp
- ip
- ipv6
- tcp
3whs 1단계 패킷만 보여달라
tcp.flags.syn == 1 && tcp.flags.ack == 0
필터로 준비 > 필터창에 적혀짐
필터로 적용 > 바로 적용되어서 화면에 보여짐.




window size zero: 송신하지 마라. 나 버퍼 꽉 찼다.

seq = ack -1 ?? →>>>>>>>>>> keep alive
손실 후 재전송

cumulative ack. 중복 ack 3개면 빠른 재전송.
검정색으로 떴다고 해서 항상 위험한 것은 아니다!
패킷 색상화


FTP
- active mode
- port 20, 21번
- passive mode
- 요즘엔 이걸 씀
- 20번 데이터 채널 안 씀
- 데이터 채널 보내는 방향이 다르다.


Active는 서버 → 클라이언트로 “역접속”해야 해서 막히기 쉽고, Passive는 클라이언트가 다 열어서 더 안전하고 잘 된다
tshark


gui보다 cui가 패킷 수집율이 훨씬 높다.



tshark -i 3 -a files:3 -b duration:10 -w myshark.pcapng
10초 마다 파일 1개 생성. 그렇게 3개 파일 생성 후 자동 종료
파일 읽기
tshark.exe -r filename.pcapng
tcp.analysis.flags ⇒ 전문가 분석기에 나와있는 정보. tcp field에는 없음
자동으로 새 파일 생성하기
캡처 > 옵션
자동으로 새 파일 생성하기> 체크
조건이 충족되면 자동으로 파일을 만들어라!
링 버퍼 파일 개수: 최대 만들 수 있는 파일 개수
몇 개 이상 모이면 캡쳐 그만 해라.
4. 사용 목적에 맞게 프로그램 분리
패킷 분석을 위해선 우선 패킷 수집을 먼저해야 한다.
1. 패킷 수집
- 와이어샤크는 GUI라 놓치는 패킷이 있을 수 있다.
- 그래서 수집은 CUI 툴(TCP dump)을 이용해서 한다.
2. 패킷 분석
- 이걸 와이어샤크로 한다.
5. 환경에 따른 보안 관제
관제 범위 = visibility window
허브 환경

허브는 패킷이 들어오면 무조건 flooding을 하기 때문에 sniffer(관제pc)로 모든 패킷을 다 감시할 수 있다.
스위치 환경
스위치는 브로드캐스트 요청으로 인한 flooding 패킷이 아닌 이상 sniffer이 패킷을 받아볼 수가 없다.
=> 그래서 해결책(==관제 범위를 넓히는 방법)
1. 포트 미러링
관제사가 스위치 담당자에게 요구해야 함
같은 스위치 환경이 아니어도 가능함
2. 허빙 아웃
스위치 밑에 허브를 달아 놓는다.
그럼 허브는 무조건 모든 포트로 브로드캐스트(플러딩)하기 때문에 관제사가 패킷을 받아볼 수 있다.

3. Aggregated 탭 [가장 많이 이용]
A->B / B->A 패킷을 TAP이 모아서 sniffer한테 전달해준다.
(양방향 트래픽)
A ⇄ B
[Switch] ── A
\
\
[ TAP ] ── 1 ── [Sniffer]
/
/
[Target] ── B
스위치 환경인데 스위치를 허브처럼 만드는 공격: mac flooding attack
공격
- 스위치에 가짜 MAC 주소를 엄청 많이 보냄
- MAC 테이블(CAM Table) 꽉 채움
결과
스위치가 MAC 학습 못 함 -> 모든 트래픽을 flooding (허브처럼 동작)
'보안 > SK 쉴더스 루키즈' 카테고리의 다른 글
| [SK 쉴더스 루키즈] 칼리 리눅스 공격 실습(port scan, spoofing, DDoS) (1) | 2026.04.09 |
|---|---|
| [SK 쉴더스 루키즈] 칼리 리눅스 환경 세팅 (0) | 2026.04.08 |
| [SK 쉴더스 루키즈] 네트워크 - TCP, UDP, IP 헤더, ICMP, 단편화 (1) | 2026.04.06 |
| [SK 쉴더스 루키즈] 머신러닝(지도학습, 회귀/분류 알고리즘) (0) | 2026.03.29 |
| [SK 쉴더스 루키즈] 파이썬 기초 5(상속, 모듈, 라이브러리, pandas, numpy) (0) | 2026.03.17 |
