1. UDP 개념
- UDP (User Datagram Protocol)
UDP는 전송 계층의 비연결 지향적 프로토콜로 데이터를 전송하기 전에 연결을 설정하는 과정이 없다. UDP를 사용할 때, 데이터는 데이터그램이라고 불리는 독립적인 패킷 형태로 전송되며, 각 데이터그램은 다른 데이터그램과 독립적으로 처리된다.
- 특징
① 비연결형 서비스로 사전 연결 설정 과정 없이 통신이 가능하다.
② 각각의 UDP 메시지는 독립된 데이터그램으로 전송되며, 네트워크를 통해 각기 다른 경로로 전송될 수 있다.
③ UDP 헤더는 8byte로 매우 간단하며, 이는 추가적인 처리 없이 빠른 데이터 전송을 가능하게 한다.
④ UDP는 패킷 손실을 자동으로 처리하지 않으며, 패킷의 순서를 보장하지 않는다.
=> 손실이나 순서 문제를 해결하기 위한 메커니즘은 애플리케이션 레벨에서 구현해야 한다.
(Ex: Heartbeat Mechanism, 재전송 요청, 순서 번호 할당 등)
Heartbeat Mechanism는 정기적으로 통신 양쪽에서 서로의 상태를 확인하기 위해 하트비트 신호를 주고받는 기법이다.
⑤ TCP와 달리, UDP는 네트워크 혼잡 상태를 관리하거나 데이터 전송 속도를 조절하지 않는다.
- 장점
UDP는 연결 설정과 해제 과정이 없기 때문에 빠른 데이터 전송이 가능하다. 이는 실시간 비디오 스트리밍, 온라인 게임, VoIP(Voice over Internet Protocol)와 같이 지연 시간에 민감하고 일부 데이터 손실을 허용할 수 있는 애플리케이션에 적합하다.
- 단점
패킷 손실에 대한 자동 복구 메커니즘이 없기 때문에 중요한 데이터 전송에는 부적합하다. 또한, 전송된 데이터의 순서 보장이 불가하고 데이터의 도착을 보장하지 않기 때문에 데이터의 신뢰성이 없다.
이러한 특성 때문에, UDP는 실시간 스트리밍, 온라인 게임와 같이 일부 데이터 손실을 허용할 수 있고, 빠른 데이터 전송이 더 중요한 애플리케이션에 주로 사용된다. 그러나 중요한 데이터의 안정적인 전송이 요구되는 경우, TCP(Transmission Control Protocol)와 같은 신뢰성 있는 프로토콜을 사용하는 것이 더 적합하다.
2. UDP Flooding 개념
- UDP Flooding
분산 서비스 거부 공격(DDoS)의 한 형태인 UDP Flooding은 대량의 UDP 패킷을 생성하여 상대방의 네트워크 대역폭을 과도하게 소모시킴으로써, 정상적인 서비스 이용을 방해하는 공격이다.
- 특징
공격자는 UDP 패킷의 출발지 주소를 위조(Spoofing)하여 자신의 위치를 숨긴다. 이를 통해 위조된 패킷에 대한 응답이 공격자에게 돌아오지 않아 피해자 시스템의 불필요한 리소스 사용을 유발한다. 공격의 주된 목적은 피해자의 네트워크 대역폭을 소모시켜, 정상적인 트래픽 처리 및 서비스 제공을 방해하는 것이다.
공격자는 대량의 UDP 패킷을 임의의 포트 번호로 피해자의 시스템에 보낸다. 피해자 시스템에서 해당 포트를 사용하는 애플리케이션이 없을 경우, 이를 나타내기 위해 "ICMP Destination Unreachable" 메시지를 응답으로 보낸다. 위조된 출발지 주소로 인해 이러한 ICMP 응답이 실제 공격자에게 도달하지 않기 때문에 추가적인 네트워크 자원을 낭비하게 만든다.
- 대응 방안
① 특정 서비스에서 UDP나 ICMP 프로토콜을 사용하지 않을 경우 사전에 차단한다.
② 방화벽을 통해 UDP 트래픽에 대한 임계치를 설정한다.
- Linux : 'UFW(Uncomplicated Firewall)', Iptables
- Window : Windows 방화벽 설정
=> 고급 설정을 통해 특정 포트나 프로토콜에 대한 규칙을 세부적으로 조정할 수 있다.
③ 네트워크 트래픽을 모니터링하고 분석하여 비정상적인 트래픽 패턴이나 예상치 못한 트래픽 증가를 식별한다.
④ DDoS 공격이 감지되었을 때를 대비해 응답 계획을 수립한다. 응답 계획에는 공격 식별, 내부 및 외부 이해관계자에 대한 통신 절차, 공격 완화를 위한 단계별 조치 등이 포함된다.
⑤ 네트워크 보안 상태를 정기적으로 검토하는 보안 감사가 필요하다. 이는 시스템의 취약점을 주기적으로 확인하고, 보안 정책을 최신 상태로 유지하며, 새로운 위협에 대응하기 위한 보안 조치를 개선한다.
3. UDP Flooding 실습
3.1 공격 환경
- Attacker
- Kali Linux 2023.2
- IP: 192.168.114.151
- hping3 -> version 3.0.0-alpha-2
- Victim
- Ubuntu 20.04.6 LTS
- IP: 192.168.114.150
- ROS2 Foxy Fitzroy
Robot Operating System(ROS2)는 로봇 소프트웨어 개발을 위한 오픈소스 프레임워크이다.
3.2 공격 실습
- 공격 요약
① 피해자 PC(Ubuntu 20.04) ROS2 Foxy Fitzroy에서 Turtlesim (거북이 시뮬레이터)을 실행한다.
② 공격자는 Wireshark 또는 Tshark, TCPdump 등으로 Turtlesim이 통신하는 패킷을 스니핑 한다.
=> IP, SrcPort, DstPort 등
③ 공격자 PC(Kali Linux)에서 hping3 도구를 사용하여 피해자 PC로 UDP Flooding 공격을 수행한다.
- 공격 상세 절차
1) 피해자 PC에 설치된 ROS2 Foxy Fitzroy에서 Turtlesim을 실행한다.
Turtlesim 시뮬레이터 실행 : ros2 run turtlesim turtlesim_node
Turtlesim 조작 명령어 : ros2 run turtlesim turtle_teleop_key (키보드 방향키로 조작 가능)
Turtlesim 및 rqt_graph를 확인한다. rqt_graph는 ROS2 환경에서 사용되는 유틸리티 중 하나로, 현재 실행 중인 노드(Node)들 사이의 통신 관계를 시각적으로 표현하는 도구이다.
2) rqt 명령으로 거북이가 자동으로 원을 그리게 조작한다.
Plugins -> Topics -> Message Publisher -> /turtle1/cmd_vel -> 초록색 실행 버튼 클릭 (Message Publisher)
linear -> x 좌표 10, angular -> z 좌표 4로 변경한다.
3) Wireshark로 패킷 스니핑
작동 중인 Turtlesim의 패킷을 확인해 보면, Src Port는 각각 50924, 50457이다. Src Port는 Turtlesim을 새로 시작할 때마다 변경된다.
DDS, RTPS 참고
DDS(Data Distribution Service)란?
OMG(Object Management Group)에서 정의한 기계간 통신의 표준이다. Publish-Subscribe 패턴을 바탕으로 높은 실시간성/신뢰성/퍼포먼스(빠른 속도) 등을 제공한다. 이러한 특성으로 ROS2에서는 각 노드 간의 통신으로 DDS가 이용된다.
RTPS(Real Time Publish Subscribe)
DDS 사용이 증가함에 따라 여러 벤더 사에서 각기 다른 DDS를 구현하였다. 여러 벤더 사에서 구현된 DDS는 서로 통신할 수 없는 단점이 존재했다. 이러한 문제로 DDS의 표준 프로토콜로 선정된 것이 바로 RTPS이다.
쉽게 설명하자면, DDS는 분산 시스템에서 데이터 통신을 위한 미들웨어이고 RTPS는 DDS에서 사용되는 표준 프로토콜이라고 생각하면 된다.
추가적으로 DDS는 UDP의 Multicast를 기반으로 구현되어 있다. 따라서, RTPS도 UDP 기반으로 구현되어 있기 때문에 UDP의 특성을 그대로 RTPS가 가지게 된다.
참고 자료: https://cafe.naver.com/openrt/18756
4) 공격자 PC에서 UDP Flooing 공격을 수행한다.
hping3 도구를 사용하여 공격을 수행한다. 본 실습에서는 공격자의 IP를 위조한 뒤, 피해자 PC(192.168.114.150)에서 스니핑 된 Src Port에 대량의 UDP 패킷을 송신함으로 피해자 PC의 네트워크 대역폭을 과도하게 소모시켰다.
Terminal 1 : sudo hping3 192.168.114.150 -2 --flood --rand-source -d 10000 -p 50924
Terminal 2 : sudo hping3 192.168.114.150 -2 --flood --rand-source -d 10000 -p 50457
Wireshark로 패킷을 캡처해 보면, 그림 9와 같이 대량의 UDP 패킷이 피해자 PC로 전송되는 것을 볼 수 있다.
3.3 시연 영상
- 공격 수행 전 영상
UDP Flooding 공격을 받기 전, 피해자 PC는 소모되는 자원 없이 거북이가 빠른 속도로 원을 돌고 있는 모습을 볼 수 있다.
- 공격 수행 영상
UDP Flooding 공격을 받은 피해자 PC를 살펴보면, 네트워크 자원이 소모되어 거북이가 매우 느리게 원을 도는 모습을 볼 수 있다.
이번 실습에 등장한 ROS2(Robot Operating System)는 UDP Flooding 공격 실습을 위한 하나의 대상이었을 뿐, ROS2의 개념은 이해하지 않으셔도 됩니다. UDP 프로토콜을 사용하는 동영상이나 다른 소프트웨어를 대상으로 실습을 진행하셔도 상관없어요 :)
ROS2는 추후에 자세히 다뤄보겠습니다.
참고 자료 및 출처
- https://www.atatus.com/blog/what-is-udp/
- https://velog.io/@devharrypmw/TCPUDP-TCP와-UDP의-특징과-차이
- https://plummmm.tistory.com/426
- https://yumdata.tistory.com/254
- https://cafe.naver.com/openrt/18756
- https://lab-notes.tistory.com/entry/DDS-DDS와-RTPS-개념정리
'4. Penetration Testing' 카테고리의 다른 글
RC카 RF 재전송 공격 (0) | 2024.02.06 |
---|---|
SQLMap 실습 (0) | 2024.01.31 |
John The Ripper (0) | 2024.01.31 |