
현대 GCS에 대한 취약점 및 익스플로잇 모음
드론-지상 통제국 공격 벡터, 취약점 및 익스플로잇
오늘날 드론 군집은 한 명의 운영자가 단일 지상국에서 수십 또는 수백 대의 드론을 비행하는 형태입니다. 이로 인해 지상 통제국은 적에게 가치 있는 표적이 됩니다. 조종사가 일반적으로 위치한 곳이며, 임무 데이터를 자주 저장하고, UxS 네트워크와 군집 내 다른 드론으로 측면 이동하기 위한 주요 벡터입니다.
대부분의 드론 보안 연구는 드론 자체를 표적으로 삼는 데 집중해 왔습니다. Infected Drone 연구는 대안적 접근 방식을 취하며, 단일 감염된 드론이 자신에게 연결되는 지상국을 어떻게 공격할 수 있는지 강조합니다. 대부분의 지상 통제 소프트웨어가 드론이 보내는 모든 것을 신뢰하기 때문에, 인증, 검증, 정제가 부족하여 감염된 드론의 데이터가 운영자 머신에서 파일 CRUD, 코드 실행 또는 충돌로 이어질 수 있습니다.
이 저장소는 지상 통제국 소프트웨어의 취약점을 문서화하고 이에 대한 작동하는 개념 증명 코드를 제공합니다. 이는 교육 목적으로만, 그리고 운영자가 자신의 노출을 이해하고 유지관리자가 이러한 문제를 재현하고 수정할 수 있도록 게시됩니다.
PoC는 자신이 소유하거나 테스트에 대한 서면 허가를 받은 시스템에 대해서만 실행하십시오. 모든 PoC는 벤치용으로 작성되었습니다: 페이로드는 무해한 마커이며, 여기에 있는 어떤 것도 다른 사람의 항공기나 지상국에 대해 사용하도록 패키징되지 않았습니다. 자신이 통제하지 않는 시스템에 이 자료를 사용하는 것은 어디서든 불법일 가능성이 높습니다.
각 발견 사항의 재현 섹션은 필요한 것과 수행하는 작업을 명시합니다. 무엇이든 실행하기 전에 읽어보십시오.
범례:
전달 클래스는 공격자가 링크에서 해야 하는 작업이며, 어떤 벡터가 작동하는지를 결정합니다. 푸시 발견 사항은 GCS에 도착하는 프레임만 필요하므로, 주입 가능한 모든 벡터로 충분합니다. 핸드셰이크 및 요청/응답 발견 사항은 공격자가 대화 상대가 되거나 완전히 통제해야 하며, 이는 온버스 주변기기, 감염된 컴패니언, 공급망, 또는 완전한 MITM을 선호합니다.
Fix 열은 제출된 업스트림 풀 리퀘스트를 연결합니다. 15개 발견 사항 중 10개는 벤더 자체 저장소에 패치가 제출된 상태로 제공됩니다.
매트릭스는 발견 사항당 7개 열을 점수화합니다: 아래 5개 벡터와, 주입 대 MITM의 미묘함을 고려하여 아래에 별도로 설명하는 두 가지 SiK 라디오(RF 텔레메트리) 모드입니다.
감염된 비행 컨트롤러, 시리얼 연결, 또는 공급망. 로컬 공격자 또는 악성 비행 컨트롤러가 GCS 호스트나 라디오에 물리적으로 연결됩니다. 기체 또는 펌웨어는 운영자가 직접 만든 것이 아닙니다: 데모 유닛, 렌탈, 압수된 기체, 또는 중고 기체로, GCS가 연결되는 순간 적대적 MAVLink를 방출하도록 펌웨어가 이식되어 있습니다. 운영자의 자신의 GCS가 피해자입니다; "기체"는 전원이 켜지기 전부터 적대적이었습니다. 모든 발견 사항에 적용되며, 연결 시점 핸드셰이크 익스플로잇을 전달하는 가장 깔끔한 방법입니다. 이는 감염된 기체에 직접 연결하거나 데이터를 추출할 수 있는 포렌식 분석가에게도 확장됩니다. 이러한 아티팩트가 적절히 처리되지 않으면 분석가의 컴퓨터와 네트워크에 감염되거나 확산될 수 있습니다.
기체 자체 버스 상의 악성 / 위조 MAVLink 주변기기. 서드파티 카메라, 짐벌, ADSB-in, 거리계, 또는 MAVLink를 말하고 그 자체가 공격자인 모든 장치. 이는 링크 상의 정당한 참여자로서 적대적 프레임을 방출합니다. 오염된 메시지를 광고하는 위조 "스마트 카메라"는 실제 카메라가 하는 일을 그대로 수행하되, 적대적 값으로 수행합니다.
온보드 감염된 컴패니언 컴퓨터 (mavlink-router / MAVProxy를 실행하는 Raspberry Pi / Jetson). 일단 감염되면 기체 엔드포인트가 되어, 링크에 대한 완전한 양방향 접근과 실시간 상태 가시성을 갖습니다. 모든 핸드셰이크에 응답하고 모든 푸시 프레임을 방출할 수 있어, 이 세트의 모든 발견 사항에 실행 가능합니다.
WiFi / UDP 텔레메트리 브리지 (ESP8266 / ESP32 "wifi telemetry"). 액세스 포인트나 LAN 상의 누구든 MAVLink 데이터를 주입할 수 있습니다. 이는 주입 벡터의 비용을 거의 0으로 낮추고, 가로챌 수도 있는 공격자(ARP/AP MITM)에게는 완전한 핸드셰이크 통제도 가능하게 합니다.
TCP / 클라우드 릴레이 (SITL, mavlink-router TCP, mavp2p, 상용 UAV-클라우드 서비스와 같은 4G/LTE 클라우드 GCS). 릴레이에서의 MITM, 또는 노출된 TCP 포트에 도달할 수 있는 누구든 스트림을 재작성할 수 있습니다. 클라우드/4G 링크는 지리적 폭발 반경을 막대하게 넓히며 종종 상호 인증이 부족합니다.
ArduPilot/PX4 취미 및 프로슈머 기체의 지배적인 실제 RF 텔레메트리 경로는 SiK 라디오 쌍으로, MAVLink를 파싱하거나 검증하지 않는 투명 시리얼 브리지이므로 GCS에 적대적 콘텐츠에 대한 보호를 전혀 제공하지 않습니다. 악성 SiK 모듈은 sikw00f를 사용하여 기존 링크에 참여하거나 브리지합니다. 매우 다른 신뢰성을 가진 두 가지 공격 모드:
STATUSTEXT, PARAM_VALUE,
CAMERA_INFORMATION 등)에는 신뢰 가능하며 응답이 필요 없습니다. 핸드셰이크
프로토콜(MAVFTP, 파라미터/로그 다운로드)에는 신뢰할 수 없는데, 주입기가 에어타임
경쟁에서 이기고 자신이 통제하지 않는 세션/시퀀스를 맞춰야 하기 때문입니다.참고: SiK 암호화(AES-128, 지원되는 경우)는 정적 공유 키와 함께 기본적으로 꺼져 있습니다.
| ID | 제품 | 심각도 | CWE | 싱크 클래스 | 전달 클래스 | 감염된 FC / 공급망? | 악성 온버스 주변기기? | 감염된 컴패니언? | WiFi/UDP 주입? | TCP/클라우드 MITM? | SiKW00F 주입? | SiK 전체-MITM? | Fix |
|---|
| QGC-01 | QGroundControl | 🟠 HIGH | 22/73/170 | CAMERA_INFORMATION → 경로 순회 쓰기 (연결 시 제로클릭 쓰기) | 푸시 (CAMERA_INFORMATION) + cam_definition_uri를 통한 콘텐츠 | ✅ | ✅ 가장 자연스러움 (카메라) | ✅ | ✅ | ✅ | ✅ 트리거는 푸시; 이름 필드는 인라인 | ✅ | PR #15083 |
| QGC-02 | QGroundControl | 🔴 CRITICAL | 22/73/494/918 | COMPONENT_METADATA uri → 임의 파일 쓰기 → 연결 시 제로클릭 RCE | 요청/응답 (IP를 통한 URI 가져오기) | ✅ | ✅ 메타데이터 uri 방출 | ✅ | ✅ 트리거용 | ✅ | ⚠️ 푸시 트리거 가능; 가져오기는 IP를 통해 | ✅ | PR #15084 |
| QGC-03 | QGroundControl | 🟠 HIGH | 22/770 | FTP 목록 → 순회 쓰기 + 오프셋 디스크 채우기 | 핸드셰이크 (MAVFTP 목록/다운로드) | ✅ | ✅ 피어가 FTP 응답 | ✅ | ⚠️ 주입 가능, 자체 핸드셰이크는 더 어려움 | ✅ | ⚠️ 경쟁 상태 세션/시퀀스 | ✅ 브리지가 목록 제공 | PR #15085 |
| QGC-04 | QGroundControl | 🟡 MED | 191/125 | DataFlash .bin 파서 OOB 읽기 + 언더플로우 | 핸드셰이크 (악성 .bin 로그 다운로드) | ✅ | ✅ 피어가 DataFlash 제공 | ✅ | ⚠️ | ✅ | ⚠️ 로그 청크를 제공해야 함 | ✅ 브리지가 .bin 공급 | PR #15086 |
| MP-01 | Mission Planner | 🟠 HIGH | 22→94 | MAVFTP 순회 → 플러그인 로더 RCE | 핸드셰이크 (MAVFTP req/ack → RCE) | ✅ | ✅ 피어가 목록 응답 | ✅ 전체 링크 통제 | ⚠️ 주입은 쉬움, 하지만 핸드셰이크를 소유해야 함 | ✅ 릴레이에서 재작성 | ⚠️ 경쟁에서 이기고 세션/시퀀스를 맞춰야 함 | ✅ 브리지가 FTP 대화 소유 | PR #3774 |
| MP-02 | Mission Planner | 🟠 HIGH | 94/78 | gst:// → gst_parse_launch (파일 r/w + 유출) | 푸시 (VIDEO_STREAM_INFORMATION → gst) | ✅ | ✅ 카메라가 uri 알림 | ✅ | ✅ UDP 데이터그램 | ✅ | ✅ 원샷 스트림 프레임 | ✅ 간단히 | PR #3775 |
| MP-03 | Mission Planner | 🟠 HIGH | 74/601 | STATUSTEXT 마크업 → Process.Start | 푸시 (STATUSTEXT → ShellExecute) | ✅ | ✅ 모든 컴포넌트가 방출 | ✅ | ✅ | ✅ | ✅ 발사 후 망각 텍스트 | ✅ | PR #3776 |
| MP-04 | Mission Planner | 🟡 MED | 248/20/1050 | RALLY_TOTAL/FENCE_TOTAL → 검증되지 않은 int.Parse + UI 스레드에서 O(n²) (연결 시 제로클릭) | 푸시 (PARAM_VALUE, 연결 후 자동) | ✅ | ✅ PARAM_VALUE 방출 | ✅ | ✅ | ✅ | ⚠️ MP의 딕셔너리에 파라미터를 넣어야 함 | ✅ | PR #3777 |
| MAVSDK-01 | MAVSDK | 🟡 MED | 918/749 | 컴포넌트 메타데이터 curl SSRF + file:// (프로토콜 허용 목록 없음) | 요청/응답 (IP를 통한 COMPONENT_METADATA.uri 가져오기) | ✅ | ✅ 메타데이터 uri 방출 | ✅ | ✅ 트리거용 | ✅ | ⚠️ 푸시 트리거 가능; 가져오기는 IP를 통해 | ✅ | 없음 |
| MAVSDK-02 | MAVSDK | 🟠 HIGH | 22/73/918 | cam-definition SSRF + mftp:// 순회 → 샌드박스 외부 파일의 제로클릭 파괴 | 푸시 (CAMERA_INFORMATION.cam_definition_uri, 자동) | ✅ | ✅ 가장 자연스러움 (카메라) | ✅ | ✅ | ✅ | ✅ 자동 소비 푸시 | ✅ | PR #3073 |
| MAVSDK-03 | MAVSDK | 🟠 HIGH | 409/400/770/459 | .xz cam-definition 또는 COMPONENT_METADATA → 무제한 압축 해제 → 지속적 디스크 고갈 | 푸시 (CAMERA_INFORMATION.cam_definition_uri, 자동) — 단순 HEARTBEAT로 시작됨 | ✅ | ✅ 가장 자연스러움 (카메라) | ✅ | ✅ | ✅ | ✅ 자동 소비 푸시; 2 GiB당 57.6 kbps 에어타임 약 50초 | ✅ | PR #3074 |
| MAVPROXY-01 | MAVProxy | 🟠 HIGH | 502 | UDP를 통한 asterix pickle.loads → RCE | IP 사이드채널 (UDP, MAVLink RF 링크가 아님) | ❌ MAVLink 링크 상이 아님 | ❌ 별도 UDP 소켓 | ⚠️ :45454에 도달할 수 있는 경우에만 | ✅ 호스트:45454로 UDP | ❌ 자체 UDP 소켓, 릴레이 아님 | ❌ RF/MAVLink 링크 상이 아님 | ❌ RF/MAVLink 링크 상이 아님 | 업스트림 #1728로 수정됨, 미출시 |
| MAVROS-01 | mavros | 🟡 MED | 345/770 | PARAM_VALUE → 위조된 전역 /parameter_events + 무제한 맵 | 푸시/스트림 (PARAM_VALUE 주입, 핸드셰이크 없음) | ✅ | ✅ PARAM_VALUE 방출 | ✅ | ✅ UDP 플러드 | ✅ | ✅ PARAM_VALUE 플러드 | ✅ | 없음 |
| MAVROS-02 | mavros | 🟠 HIGH | 125/617/248 | FTP 쓰기-ack → 무제한 std::advance → 힙 노출 + 프로세스 중단 | 핸드셰이크 (FTP 응답 오염 → 충돌) | ✅ | ✅ 피어가 잘못된 FTP 전송 | ✅ | ⚠️ | ✅ | ⚠️ 잘못된 형식의 응답을 넣어야 함 | ✅ 브리지가 잘못된 응답 주입 | 없음 |
| DRONEKIT-01 | DroneKit | ⚪ INFO | 20 | 신뢰 경계 핸드오프 (param_id / STATUSTEXT) | 푸시 (텔레메트리 → 앱 콜백; 설계상 핸드오프) | ✅ | ✅ 모든 컴포넌트 | ✅ | ✅ | ✅ | ✅ 모든 푸시 프레임이 콜백에 도달 | ✅ | n/a |