더욱 발전된 드론 시스템이 다양한 분야에 도입되고 통합됨에 따라 애플리케이션의 보안을 보장하기 위해 발생할 수 있는 취약점을 고려하는 것이 더욱 중요해졌습니다.
항공우주 사이버 보안 에 관심을 갖게 된 이후로 항상 해킹 방법을 찾고 싶었던 것 중 하나가 UAV였습니다. 이 기사에서는 Wireshark의 패킷 모니터링 기술을 사용하여 DJI 드론을 리버스 엔지니어링하기 위해 취한 단계를 간략하게 설명하고 패킷 분석의 세부 사항과 Lua 프로그래밍 언어를 사용하여 자체 프로토콜 분석기를 개발하는 방법을 자세히 살펴봅니다.
리버스 엔지니어링 드론은 쉬운 일이 아니지만 심각한 영향을 미칠 수 있는 광범위한 사이버 위협에 여전히 취약합니다. 패킷 데이터에 저장된 민감한 정보를 노출시키기 위해 DJI 드론에 대한 리버스 엔지니어링 과정을 간략히 설명함으로써, 이번 연구가 기존 드론 시스템을 보호하기 위한 더 나은 대안을 찾기 위해 기존 취약점을 강조하기를 바랍니다.
무인 항공기(UAV)는 조종사나 승객을 태우지 않는 항공기입니다. 대부분의 경우 이 용어는 드론에 적용되지만 연구 목적으로 설계된 고고도, 장기 지구력 UAV인 NASA의 Global Hawk 와 같은 다른 유형의 UAV 차량도 존재합니다. UAV는 수색 및 구조 임무, 데이터 수집, 군사 및 법 집행, 항공 사진 촬영 등과 같은 다양한 응용 분야에 사용됩니다. UAV는 기존 항공기에 비해 컴팩트한 형태를 가지며 향상된 민첩성, 정확성 및 정밀성을 나타냅니다. 기동하고 비용 효율성이 입증되어 배달 서비스 및 항공 측량과 같은 다양한 상업 및 소비자 응용 프로그램에 널리 선호됩니다.
이 기사에서는 드론 법의학을 다루기 때문에 DJI Phantom 4를 구성하는 구성 요소에 대한 간략한 개요를 제공하는 것이 중요합니다. 드론에 내장된 구성 요소는 브랜드나 버전에 따라 다를 수 있지만 대부분의 UAV는 공유합니다. 구성 요소의 상당 부분을 차지합니다.
섀시: 드론의 섀시는 모든 구성 요소를 함께 고정하는 물리적 프레임입니다. 섀시는 일반적으로 항력과 무게를 줄여 드론의 전반적인 비행 성능을 저하시키기 위해 플라스틱이나 탄소 섬유와 같은 경량 소재로 구성됩니다.
드론 모터: 드론은 모터를 사용하여 비행에 필요한 양의 양력을 생성합니다. 대부분의 드론은 일반적으로 회전력을 동일하게 하기 위해 시계 방향으로 회전하는 모터 2개와 시계 반대 방향으로 회전하는 모터 2개 등 4개의 모터로 구성된 쿼드콥터 구성을 갖습니다. 이 구성은 뉴턴의 제3법칙에 따라 모든 동작에는 동등하고 반대되는 반응이 존재하므로 동일한 수의 반시계 방향 모터를 사용하면 드론이 균등한 회전력을 통해 비행 조정을 제공할 수 있기 때문에 존재합니다.
드론 비행 컨트롤러: 드론의 비행 컨트롤러는 드론의 두뇌처럼 작동합니다. 비행 컨트롤러는 모터를 제어하기 위해 전자 속도 컨트롤러(ESC)에 특정 지침을 제공하기 위해 GPS 모듈과 같은 드론에 탑재된 센서로부터 입력을 받습니다.
GPS 모듈: GPS(Global Positioning Satellite) 모듈은 두 가지 다른 전역 위치 확인 시스템을 사용하여 드론의 위치를 정확히 찾아냅니다. 드론은 GPS 모듈을 사용하여 다양한 위성에서 전송된 신호가 도착하는 데 걸린 시간을 기준으로 위치 정보를 계산할 수 있습니다.
전자 속도 컨트롤러(ESC): ESC는 드론의 배전판과 모터 사이의 중개자입니다. 비행 컨트롤러의 신호를 사용하여 모터에 할당된 전력량을 제어합니다.
전원 포트 모듈: 전원 포트는 배터리에서 나오는 전력량을 측정하고 해당 전력을 드론의 ESC 및 비행 컨트롤러에 분배하는 것을 표시하는 모듈입니다.
장애물 회피 센서: 일부 드론에는 프레임에 스테레오 비전 센서가 포함되어 있습니다. 이 센서는 각 센서에서 캡처한 이미지 픽셀을 통해 깊이를 계산하여 드론과 센서 앞의 장애물 사이의 거리를 계산합니다.
3축 짐벌: 짐벌은 드론에 부착된 카메라를 안정화하여 영상을 안정화합니다. 센서가 축에 대한 움직임을 감지하면 짐벌에 신호를 보내 카메라 영상을 매끄럽게 조정하도록 적절하게 조정합니다.
드론 배터리: 배터리는 드론에 전원을 공급합니다. 일부 배터리에는 과충전 보호, 전원 출력 통신 등과 같은 기능도 포함되어 있습니다.
드론 카메라: 드론의 카메라는 영상을 촬영하고 사진을 찍는 데 사용됩니다. 카메라의 이미지 센서는 들어오는 광선을 포착하여 디지털 이미지로 처리합니다.
드론 안테나: 드론 안테나는 컨트롤러와 드론 사이의 정보를 중계하는 전송 시스템 역할을 합니다.
하향 초음파 장애물 회피 센서: 이 센서는 지상에서 드론의 높이를 계산하는 데 사용됩니다. 한 센서에서 고주파 사운드 펄스를 전송하고 다른 센서가 이를 수신하는 데 걸리는 시간을 측정하여 높이를 계산할 수 있습니다.
비행 LED: 비행 LED는 일반적으로 드론이 비행하는 방향을 나타내는 데 사용됩니다. 두 개의 깜박이는 빨간색 표시등은 드론의 전면을 나타내고 깜박이는 녹색 표시등은 후면을 나타냅니다.
조이스틱: 조이스틱은 스틱의 물리적 움직임을 컨트롤러가 드론에 이동 방향으로 전달할 수 있는 정보로 변환하여 드론을 제어하는 데 사용됩니다.
메인 조종기 보드: 조종기 보드는 고도, 위치, 카메라 이미지 등 드론에 대한 유용한 원격 측정을 검색합니다.
메인 카메라 보드: 카메라 보드는 이미징 센서와 짐벌 모터의 데이터를 처리하여 안정적인 영상을 합성합니다.
UAV는 온보드 컴퓨터 시스템을 갖춘 다른 모든 장치와 마찬가지로 광범위한 애플리케이션에 사용되지만 다양한 사이버 보안 위협에 취약합니다. UAV와 관련된 가장 일반적인 사이버 보안 위협은 다음과 같습니다.
무단 액세스: UAV는 드론을 제어하는 데 사용되는 무선 신호를 가로채거나 스푸핑할 수 있는 악의적인 행위자의 무단 공격에 취약합니다. 이를 통해 해커는 드론을 제어하거나 수동적으로 정보를 훔칠 수 있습니다.
데이터 도난: UAV에는 사진, 비디오, 원격 측정 판독값 등 환경에 대한 정보를 적극적으로 수집하는 다양한 센서가 장착되어 있습니다. 이 데이터는 악의적인 목적으로 사용할 수 있는 해커의 가로채기에 취약할 수 있습니다.
서비스 거부: 해커가 드론을 해킹하기 위해 사용할 수 있는 보다 구체적인 공격은 서비스 거부입니다. 이는 해커가 드론의 동일한 무선 통신 시스템에서 DOS를 실행하여 데이터 수신 또는 전송 기능을 방해할 때 발생합니다.
UAV의 인기가 높아짐에 따라 보안 취약점이 더 많이 발견됨에 따라 보안 연구원이 악의적인 목적으로 장치를 포렌식 분석할 필요가 있습니다. 법의학 분석 이라고 하는 사이버 보안의 하위 필드는 조사 목적으로 공격으로부터 데이터를 수집하고 분석하는 데 중점을 둡니다 .
이 프로세스는 컴퓨터 시스템의 디지털 정보를 압수하여 조사해야 하는 실제 범죄 시나리오에서 유용합니다. 종종 기계에 있는 대부분의 정보는 범죄와 관련이 없으며 범죄 시나리오를 분석하기 위해 필터링되어야 합니다.
허가되지 않은 지역에의 밀수품 투하, 외국 국경을 통한 약물 투하, 원치 않는 감시 등 드론의 불법적 사용은 광범위합니다. 이러한 많은 시나리오의 여파로 디지털 포렌식은 장치 소유권 및 범죄와 관련된 모든 데이터와 같은 정보를 확인하는 데 활용됩니다.
다양한 범죄 현장에서 일반적인 드론 모델을 대상으로 실시한 연구 에 따르면 사진 또는 비디오 형식의 미디어 파일, 비행 패턴, 위치, 소유자 정보와 같은 정보가 법 집행 수사관이 수행하는 디지털 포렌식 사건의 성공에 가장 도움이 되는 것으로 나타났습니다. 연구 조사관은 디지털 포렌식 기술을 사용하여 범죄에 대한 정보를 필터링할 수 있었지만 주 및 연방 법률이 드론 기술에 대한 규정을 적절하게 처리하지 않았으며 결과적으로 많은 이해관계자를 취약하게 만들었다고 밝혔습니다. 전반적으로 그들은 법의학 도구와 범용 드론 구조가 부족하여 더 많은 데이터 추출 방법을 개발해야 한다고 결론지었습니다.
UAV 포렌식 도구의 부족 문제를 해결하기 위해 프로그래밍 언어 Lua를 사용하여 Wireshark용 패킷 분석 스크립트를 생성하여 디지털 포렌식 시나리오 중에 유용한 네트워크 정보를 찾는 방법을 시연하겠습니다. 이 도구는 발생한 범죄와 관련된 더 많은 데이터를 수집하기 위해 조사 상황에서 사용할 수 있는 UAV에 대한 유용한 정보를 수집하기 위한 디지털 포렌식 기술을 직접 적용한 것입니다.
패킷 스니핑은 지정된 네트워크를 통해 전송되는 데이터 패킷을 가로채서 검사하는 행위입니다. 이 기술은 사이버 보안 전문가가 취약성을 추적하고 네트워크의 결함 및 성능을 진단하거나 위협을 발견하기 위해 활용합니다.
컴퓨터에서 네트워크 인터페이스 카드(NIC라고도 함)는 컴퓨터가 네트워크와 인터페이스하고 패킷 스니핑을 수행할 수 있게 해주는 내장 회로 기판이 포함된 하드웨어 구성 요소입니다. 사이버 보안이나 해킹 목적을 위한 보다 정교한 스니핑을 위해서는 컴퓨터가 주변 네트워크 트래픽을 검색할 수 있도록 NIC를 무차별 모드 로 전환해야 하는 경우가 많습니다. 스니퍼는 디코딩 프로세스를 사용하여 네트워크를 통해 전송되는 데이터 패킷에 저장된 인코딩된 정보에 액세스할 수 있습니다. 스니핑은 능동적 스니핑과 수동적 스니핑이라는 두 가지 일반적인 범주로 나눌 수 있습니다.
수동적 스니핑
수동 스니핑은 네트워크 트래픽으로 전송되는 패킷만 수신하는 것으로 구성됩니다. 이는 네트워크를 통해 전달되는 트래픽 및 데이터 유형에 대한 관련 정보를 측정하기 위한 정찰 기술로 자주 사용됩니다. 이를 통해 보안 전문가는 정체 영역을 식별하여 네트워크 문제 해결(네트워크 트래픽을 네트워크 문제의 지표로 사용) 및 성능 최적화와 같은 이상 현상이나 의심스러운 활동에 대해 네트워크를 분석할 수 있습니다.
활성 스니핑
능동 스니핑은 네트워크 장치에서 응답을 유도하기 위한 패킷 주입/스푸핑 애플리케이션에 사용되는 기술입니다. 예를 들어, 공격자는 특정 장치나 애플리케이션이 민감한 정보로 응답하도록 속이기 위해 특정 패킷을 보낼 수 있습니다. 이는 중간자(MiTM) 공격을 조율하고 네트워크 세션을 하이재킹하는 등 여러 가지 장난스러운 활동을 수행하는 데 사용될 수 있습니다. 능동 스니핑은 주변 네트워크 트래픽으로 가장하도록 만들어졌기 때문에 수동 스니핑보다 탐지하기가 조금 더 까다롭습니다. 능동 스니핑은 스위치 CAM(Content Address Memory) 테이블에 과부하를 주기 위해 의도적으로 ARP(주소 확인 프로토콜) 패킷을 입력하여 수행됩니다. 이로 인해 합법적인 네트워크 트래픽이 ARP 스푸핑, DHCP(동적 호스트 구성 프로토콜) 공격, DNS(도메인 이름 시스템) 중독과 같은 스푸핑 공격의 기반 역할을 하는 다른 포트로 전송됩니다.
OSI 모델
OSI(개방형 시스템 상호 연결이라고도 함) 모델은 네트워크의 서로 다른 구성 요소가 서로 통신하는 방식을 개념화하는 데 사용됩니다. 이 모델은 다양한 장치와 프로그램이 네트워크를 통해 어떻게 상호 통신할 수 있는지에 대한 표준화된 규칙 세트를 포함하는 7계층 모델로 제공됩니다.
OSI 모델은 애플리케이션, 프리젠테이션, 세션, 전송, 네트워크, 데이터링크, 물리적 등 여러 계층으로 나눌 수 있습니다.
물리층
케이블링, 커넥터, 시그널링 등 장치 간의 물리적 연결을 담당하는 네트워크의 물리적 특성을 설명합니다. 이 계층에서는 데이터가 비트를 통해 전송됩니다.
데이터링크층
이 계층에서는 데이터가 패킷으로 형식화되어 네트워크를 통해 전송됩니다. 데이터 링크 계층은 또한 데이터에 내부 오류가 포함되지 않도록 보장합니다. 데이터는 프레임을 사용하여 전송됩니다.
네트워크 계층
네트워크 계층은 패킷을 전송하는 최적의 방법을 찾아 네트워크를 통해 패킷의 주소를 지정하고 전송하는 방법을 처리합니다. 이 단계에서는 IP 주소가 패킷 헤더에 첨부됩니다.
전송 계층
전송 계층은 네트워크 계층과 세션 계층 간의 전환입니다. 이 계층은 애플리케이션 간에 데이터를 전송하는 방법을 결정하기 위해 UDP 및 TCP와 같은 네트워크 프로토콜을 사용합니다. 이 계층에서 전송되는 데이터를 세그먼트 라고 합니다.
세션 계층
이 계층은 애플리케이션이 서로 연결을 설정하고 유지하는 방법을 정의합니다.
프리젠테이션 레이어
프리젠테이션 계층은 세그먼트의 데이터를 사람이 읽을 수 있는 형식으로 변환합니다. 이 계층에는 패킷의 암호화 및 암호 해독도 포함됩니다.
애플리케이션 레이어
애플리케이션 계층은 사용자와 인터페이스하는 데 사용됩니다. 이는 애플리케이션이 네트워크와 통신하는 데 사용할 수 있는 프로토콜과 인터페이스를 정의합니다.
패킷 정보 분석
네트워킹에서 패킷은 더 큰 메시지의 작은 세그먼트입니다. 네트워크를 통해 전달되는 모든 형태의 데이터는 패킷으로 분할됩니다. 패킷이 네트워크를 통과하면 해당 패킷을 수신하는 장치에 의해 패킷이 재구성됩니다.
네트워크를 통해 전송된 패킷에는 구조에 헤더, 페이로드 및 트레일러가 포함되어 있습니다. 패킷에 포함된 정보 유형을 설명하기 위해 IPv4 패킷을 예로 사용하겠습니다.
1. 패킷 헤더
패킷 헤더는 패킷의 초기 부분입니다. 여기에는 패킷이 대상에 도달하는 데 필요한 주소 지정 및 기타 데이터가 포함되어 있습니다. IPv4 헤더에는 13개의 필드가 포함되어 있습니다.
- 버전: 사용된 인터넷 프로토콜의 버전 번호(예: IPv4)
- IHL(Internet Header Length): 전체 IP 헤더의 길이
- 명시적 혼잡 알림: 이동 중에 표시되는 혼잡 정보에 대한 정보
- 전체 길이: 전체 IP 패킷의 길이(헤더 및 본문 포함)
- 식별: IP 패킷이 단편화된 경우 각 패킷에는 자신이 속한 원래 IP 패킷을 식별하는 해당 식별 번호가 포함됩니다.
- 플래그: 패킷이 조각화될 만큼 큰지 여부를 나타냅니다.
- 조각 오프셋(Fragment Offset): IP 패킷에서 조각의 위치 지정
- TTL(Time to Live): 네트워크 루핑을 피하기 위해 패킷이 통과해야 하는 라우터 수
- 프로토콜: 패킷이 속한 대상 호스트의 네트워크 계층(예: TCP = 6, UDP = 17, ICMP = 1)
- 헤더 체크섬(Header Checksum): 패킷에 오류가 없는지 확인하기 위해 사용되는 전체 헤더의 체크섬 값
- 소스 주소: 패킷을 보낸 사람(소스)의 32비트 주소
- 목적지 주소: 패킷의 수신자(목적지)의 32비트 주소
- 옵션: 기록 경로, 타임스탬프 등과 같은 정보를 포함할 수 있는 선택 필드입니다.
2. 페이로드
패킷의 페이로드에는 패킷이 목적지로 전달하려는 실제 데이터가 포함됩니다. IPV4 패킷의 경우 페이로드에는 패킷이 32비트 제한 내에서 끝나도록 0비트의 패딩이 제공됩니다.
3. 예고편
때때로 패킷에는 트레일러라고 불리는 패킷의 끝이 포함될 수 있습니다. IPV4 패킷 구조에는 트레일러가 포함되어 있지 않지만 이더넷 프레임에는 이더넷의 네트워크 어댑터가 프레임을 처리하는 데 필요한 정보를 포함하는 트레일러가 포함되어 있습니다.
Wireshark는 널리 사용되는 오픈 소스 네트워크 프로토콜 및 패킷 분석 도구입니다. 이를 통해 무선(IEEE.802.11), Bluetooth, 이더넷, 토큰 링 등과 같은 소스에서 네트워크 패킷을 캡처할 수 있습니다. Wireshark에는 화면에 표시되는 패킷의 로그 스트림을 필터링할 수 있는 패킷 필터링 기능도 포함되어 있습니다. .
패킷 분석에 Wireshark 사용
Wireshark 인터페이스에는 패킷 정보를 표시하기 위한 다양한 창이 포함되어 있습니다. 메인 패널에는 네트워크를 통해 흐르는 모든 패킷 목록이 표시됩니다. 개별 패킷을 선택하면 보다 구체적인 패킷 데이터가 포함된 두 개의 창이 화면 하단 근처에 나타납니다. 기본 패널의 각 열 범주에 대한 세부 정보는 다음과 같습니다.
No.: 캡처 파일의 패킷 번호
시간: 패킷 스니핑이 시작된 후 이 패킷이 캡처된 시간
소스: 송신 장치의 IP 주소 및 포트 번호
대상: 수신 장치의 IP 주소 및 포트 번호
프로토콜: 패킷 유형(예: TCP, UDP, HTTP 등)
정보: 캡처되는 패킷 유형에 따라 달라지는 패킷에 대한 추가 정보 콘텐츠
이는 Wireshark에 미리 구성된 정보 열이지만 "열" 설정을 선택하면 TTL, 체크섬 등과 같은 도구에 표시할 수 있는 더 많은 열이 있습니다.
도구의 패킷 세부 정보 섹션에는 패킷 유형에 따라 달라지는 패킷에 대한 더 해석 가능한 정보가 표시됩니다. 아래쪽 창인 Packet Bytes 에는 패킷 내용이 순수 16진수 형식으로 표시됩니다.
Wireshark 캡처 필터
Wireshark의 캡처 필터는 삽입된 필터에 의해 캡처되는 패킷을 제한합니다. 눈치채셨다면 Wireshark 캡처 필터는 또 다른 널리 사용되는 네트워크 패킷 캡처 도구인 tcpdump 와 동일한 형식을 따릅니다. 패킷 캡처 구문은 BPF(Berkeley Packet Filter) 구문 표현식을 따릅니다. Wireshark의 몇 가지 일반적인 캡처 필터는 다음과 같습니다.
IP 주소 172.18.5.4와의 트래픽만 캡처합니다.
host 172.18.5.4
다양한 IP 주소 간 트래픽을 캡처합니다.
net 192.168.0.0/24
또는
net 192.168.0.0 mask 255.255.255.0
다양한 IP 주소에서 트래픽을 캡처합니다.
src net 192.168.0.0/24
또는
src net 192.168.0.0 mask 255.255.255.0
DNS 트래픽 캡처(포트 53):
port 53
모든 ARP 및 DNS 트래픽을 제외한 캡처:
port not 53 and not arp
IPv4 패킷만 캡처:
ip
이더넷 패킷만 캡처(EAPOL):
ether proto 0x888e
Wireshark의 디스플레이 필터 기능을 사용하면 캡처된 패킷 목록에 표시되는 패킷 유형의 범위를 좁힐 수 있습니다. 디스플레이 필터의 일반적인 예는 다음과 같습니다.
프로토콜 기반 필터:
네트워크 프로토콜을 기반으로 패킷 트래픽을 필터링할 수 있습니다.
http
위의 예는 HTTP 프로토콜을 사용하는 패킷만 보여줍니다.
주소별로 패킷을 필터링합니다(예: IP 주소 필터링).
발신자 또는 수신자의 주소를 통해 패킷을 필터링할 수 있습니다.
ip.src == xxxx
위는 특정 IP 주소에서 들어오는 트래픽을 보여줍니다.
포트 기반 필터:
사용 중인 포트 번호를 기준으로 패킷 트래픽을 필터링할 수 있습니다.
http
위의 예는 포트 80을 사용하는 TCP 패킷만 보여줍니다.
시간 기반 필터:
패킷이 캡처된 시간을 기준으로 패킷을 필터링할 수 있습니다.
frame.time >= "YYYY-MM-DD HH:MM:SS" && frame.time <= "YYYY-MM-DD HH:MM:SS
위의 예는 선택한 시간 범위 내의 패킷만 표시합니다.
콘텐츠 기반 필터:
패킷 내용을 기준으로 패킷을 필터링할 수 있습니다.
frame contains google
위의 예는 콘텐츠에 "google"이라는 키워드가 포함된 패킷을 보여줍니다.
패킷 분석 프로세스는 네트워크 트래픽 패턴의 일반적인 개요를 얻는 데 사용되는 반면, 패킷 분석에는 훨씬 더 좁은 접근 방식이 사용됩니다. 패킷 분석은 네트워크 프로세스나 모니터링 중인 장치에 대한 귀중한 지식을 얻기 위해 개별 패킷을 고유한 구성 요소(예: 헤더, 페이로드 콘텐츠 등)로 분석하는 프로세스를 의미합니다. 패킷 분석을 사용할 수 있는 일부 응용 프로그램에는 프로토콜 분석 및 법의학이 포함됩니다.
다행스럽게도 Wireshark에는 네트워크를 통해 전송되는 각 패킷에 대해 철저한 패킷 분석을 수행하기 위한 통합 도구 세트가 포함되어 있습니다. 패킷 분석을 수행하는 몇 가지 기술은 다음과 같습니다.
프로토콜 디코딩: 패킷 세부 정보 창에서 계층 세부 정보를 확장하여 각 패킷에 대한 프로토콜 세부 정보를 볼 수 있습니다. 이는 TCP, UDP, DNS 등과 같은 다양한 프로토콜을 디코딩하는 데 유용합니다.
TCP 스트림: Wireshark에는 TCP 연결을 통해 흐르는 모든 패킷의 TCP 스트림을 표시하는 기능도 포함되어 있습니다. 이 기능을 사용하려면 TCP 연결에 속한 패킷을 선택하고 해당 패킷을 마우스 오른쪽 버튼으로 클릭한 후 “Follow > TCP Stream”을 선택하세요.
색상 코딩: 패킷 길이나 프로토콜 유형과 같은 특정 기준에 따라 패킷을 시각화할 수도 있습니다. 이 기능을 보려면 "보기"로 이동하여 "색칠 규칙"을 클릭하세요.
흐름 그래프: Wireshark에는 두 시스템 간 패킷의 타이밍 및 시퀀스 세부 정보를 보여주는 흐름 그래프를 표시하는 기능이 있습니다. 흐름 그래프를 구성하려면 "보존 필터"로 이동하여 "TCP" 옵션을 선택하세요. 이렇게 하면 두 시스템 간에 전달되는 모든 패킷을 표시하는 필터가 생성됩니다. 그런 다음 "Statistics" 및 "TCP Stream Graphs"를 선택하여 흐름 그래프를 만듭니다.
어떤 유형의 네트워크 프로토콜이 활용되고 있으며 어떻게 사용되고 있는지 분석하기 위해 패킷 분석을 적용할 수 있습니다. Wireshark로 프로토콜 분석을 시도하려면 먼저 선택한 네트워크 인터페이스로 패킷을 캡처하세요. 그런 다음 패킷이 캡처되면 HTTP (포트 80), HTTPS(포트 443), SSH(포트 22) 및 SNTMP 등과 같은 다양한 프로토콜을 전송해야 합니다. 패킷 분석 예제에 HTTP를 사용하겠습니다. http 키워드로 필터링하여 아래와 같이 HTTP 프로토콜이 할당된 패킷을 선택하는 것으로 시작합니다.
패킷이 선택되면 TCP(전송 제어 프로토콜) 메뉴를 확장하여 패킷 관련 정보를 확인합니다.
패킷 세부 정보가 확장되면 소스 및 대상 IP 주소, 소스 및 대상 포트, 사용된 HTTP 방법(GET, POST, DELETE 등) 및 HTTP 응답 코드와 같은 프로토콜의 다양한 필드를 분석할 수 있습니다.
패킷 분석은 특정 네트워크 사고 이면의 정보를 추출하기 위해 디지털 포렌식에도 사용될 수 있습니다. 예를 들어, 해커가 네트워크를 통해 중요한 정보를 원격 서버로 보내는 상황을 상상해 보십시오. Wireshark의 디스플레이 필터를 사용하면 해커 장치의 IP 주소와 원격 서버의 IP 주소를 사용하여 해커 장치로 들어오는 트래픽을 격리할 수 있습니다. 그런 다음 해커와 원격 서버 간의 TCP 데이터 스트림을 재구성하기 위해 "TCP 스트림 따르기" 기능과 같은 Wireshark에서 제공하는 패킷 분석 도구를 사용할 수 있습니다. 이 정보를 이용하면 악성 파일이나 이미지 전송 등 해커가 원격 서버로 보낸 숨겨진 정보를 밝힐 수 있습니다. 이러한 패킷 분석 애플리케이션은 네트워크 트래픽을 분석하고 범죄 활동을 탐지하는 데에도 적용될 수 있습니다.
리버스 엔지니어링은 시스템이 "내부"에서 어떻게 작동하는지 이해하고 시스템에서 관련 정보를 추출하기 위해 시스템을 분해하고 분석하는 프로세스입니다. 이 프로세스는 시스템의 특정 측면을 해체하고, 기술 사양 및 코드를 분석하고, 특정 테스트를 실행하여 결과를 검토하는 반복적인 프로세스를 통해 수행되는 경우가 많습니다. UAV 해킹의 경우 리버스 엔지니어링 원리를 적용하여 드론의 소프트웨어 및 펌웨어를 분석하고, 원격 측정 정보를 추출하고, 악용할 취약점을 식별할 수 있습니다. 이 연구 실험을 위해 저는 DJI라는 유명한 드론 회사에서 개발한 레크리에이션용으로 설계된 작고 컴팩트한 드론인 DJI Mini 2를 리버스 엔지니어링하기로 결정했습니다.
수동적 도청은 리버스 엔지니어링 가능한 결과를 반환하지 않기 때문에 대신 아래 구성에 따라 드론과 운영자 간의 무선 통신을 검사하고 차단할 수 있도록 인위적이고 도청 친화적인 네트워크 구성을 사용했습니다.
a) 드론: done은 네트워크 피어와의 직접 통신에 사용되는 액세스 포인트를 시작하여 프로세스를 초기화합니다.
b) MITM AP: 모바일 클라이언트용 AP로 가장하는 머신으로 두 번째 가상 네트워크를 설정합니다.
c) MITM 클라이언트: MITM 클라이언트는 MITM AP의 네트워크를 드론에 전달하거나 그 반대로 전달하는 드론과 직접 연결됩니다.
d) MITM 머신: MITM 머신은 NAT(Network Address Translation)를 통해 가상 MITM AP와 MITM 클라이언트의 내부 NIC를 연결하여 도청에 사용되는 장치입니다.
e) 운영자: 운영자는 드론 담당자(MITM-AP)와 Wi-Fi를 통해 연결되는 DJI 애플리케이션을 실행하는 모바일 장치입니다.
액세스 포인트 구성
MITM AP를 구성하기 위해 create_ap을 사용했습니다. 내 컴퓨터의 명령줄을 통해 가상 AP를 생성하는 명령입니다.
sudo create_ap wlan0 wlan0 Operator 12345678 -w 2 -c 2 -m nat --freq-band 2.4 --country US
이 명령은 2.4GHz 주파수에 초점을 맞추고 다음 매개변수를 설정하여 연결 간의 교란 수를 제거하도록 설계되었습니다.
-w 2
CCMP 암호화 모드의 WPA2-PSK -c 2
임의 및 정적 비어 있는 채널 사용 -m nat
가상 AP와 물리적 NIC 간 연결을 위한 NAT --freq-band 2.4
2.4GHz 대역만 선택 --country US
현지 규정을 준수하기 위해 올바른 국가 코드 입력상호 통신 도청
도청을 위해 MITM 네트워크의 성능을 최적화하기 위해 명령줄 도구를 사용했습니다. tcpdump를 사용하여 캡처된 네트워크 패킷은 나중에 네트워크 분석 프로그램 배열로 분석할 수 있는 해당 PCAP 파일 내에 저장됩니다. 또한 드론과 기계 사이의 관련 네트워크 패킷으로만 구성되도록 캡처된 출력 범위를 줄이기 위해 추가 필터를 구현했습니다.
sudo tcpdump --interface=ap0 -n udp host 192.168.2.1 -w /tmp/dumps/capture.pcap
-n
DNS 확인을 피합니다. udp
모든 TCP 패킷을 무시합니다. host 192.168.2.1
표시된 패킷이 드론과 관련되어 있는지 확인합니다.DJI Mini 2에 대한 디지털 포렌식 연구를 위해 Wireshark를 사용하여 드론이 보낸 네트워크 패킷을 분석하여 DJI Wi-Fi 프로토콜을 리버스 엔지니어링해 보았습니다. 드론이 전송하는 패킷의 정확한 프로토콜 구조를 결정하기 위해 각 개별 비트에 대한 비트 정밀 추론을 사용했습니다. 프로세스 전반에 걸쳐 Wireshark에서 다음 필터 조건자가 가장 유용하다는 것을 알았습니다.
!dns && !mdns && !icmp
애플리케이션 수준 네트워크 패킷만 이 프로세스와 관련되므로 검색에서 DNS, ICMP(인터넷 제어 메시지 프로토콜) 및 MDNS(멀티캐스트 DNS) 프로토콜을 제외할 수 있습니다. ip.src == 192.168.2.1
IP 주소 192.168.2.1은 드론의 IP 주소를 나타냅니다. 여기서는 해당 IP로 필터링할 소스와 대상을 지정합니다. data.len == 1472
이 예에서는 길이가 1472바이트인 패킷만 정확한 페이로드 크기의 드론 패킷을 표시하는 결과 보기에 포함됩니다. data.data[0] == 0x00
이는 정적 16진수 값을 초기 인덱스의 페이로드 콘텐츠와 비교합니다. 이는 비행 중 패킷 검사가 프로토콜과 운영자의 드론 제어 지침 간의 상호 관련된 변경 사항에 초점을 맞추기 때문에 유용합니다.Wireshark를 사용하여 얻은 패킷을 사용하여 인덱스 0x2A부터 이더넷 프레임 길이까지의 페이로드에 중점을 두었습니다. 전체 패킷에는 정보가 포함되어 있지만 리버스 엔지니어링 목적으로는 0x2A부터 끝까지의 데이터 바이트이면 충분합니다. 참조용으로 아래 이더넷 OSI 모델 계층 표를 포함시켰습니다.
페이로드 암호화
전체 통신 스트림이 암호화되어 있더라도 해독된 데이터 스트림은 여전히 암호화 무결성을 손상시킬 수 있습니다. UAV 시스템으로 정보를 해독하는 한 가지 방법은 여러 페이로드를 나란히 비교하여 패턴을 식별하는 것입니다. ECB(전자 코드북 모드)는 각 일반 텍스트 블록에 동일한 의사 난수 순열을 적용하여 반복기 암호문 블록을 생성하는 일련의 결정적 데이터를 생성합니다. 이를 역엔지니어링 프로세스에 적용하여 UDP 패킷 내에서 의사 무작위 페이로드 또는 두 개의 동일한 페이로드를 만날 수 있습니다. 동일한 페이로드를 찾을 수 없었지만 서로 매우 유사한 페이로드가 많았습니다. 예를 들어 아래 이미지는 5바이트만 다른 두 개의 패킷을 보여줍니다. 두 페이로드는 매우 유사하며 암호화되지 않은 데이터 스트림의 명백한 증가를 나타냅니다.
연역적 추리
DJI Mini 2의 리버스 엔지니어링에 제가 사용한 주요 접근 방식은 연역적 추론을 적용하여 상관된 운영자 입력을 기반으로 페이로드를 비교하는 것이었습니다. 직접적인 드론 제어 명령(예: 착륙, 이동, 이륙 등)을 사용하여 운영자에게 대표 네트워크 패킷에 신호를 보내도록 했습니다. 제어 명령은 명령 유형과 페이로드 내용을 신호할 수 있었습니다. 그런 다음 명령 구조와 매개변수 값을 나타내는 앞서 언급한 이진 비교 기술을 사용하여 패킷을 서로 비교했습니다. 패킷 분석 결과 MTU(최대 전송 단위)에 의존하는 드론-운영자 패킷으로 주로 구성된 트래픽이 많은 프로토콜이 밝혀졌습니다.
비트 정밀 추론
전송된 패킷 내에 저장된 데이터에 대해 더 많은 정보를 수집하기 위해 56바이트 페이로드 내의 비트 분석에 비트 정밀 추론이라는 기술을 사용하여 각 패킷의 속성에 대한 구체적인 판단을 내렸습니다. 프로세스를 단순화하기 위해 클러스터를 사용하여 페이로드를 각각 정확히 동일한 길이로 집계했습니다. 이 기술에 대해 자세히 알아보려면 드론 리버스 엔지니어링을 위한 비트 정밀도 방법을 자세히 다루는 이 연구 논문을 읽어 보시기를 적극 권장합니다. 아래 표는 비트 정밀 추론을 사용하여 추출할 수 있는 정보에 대한 일반적인 개요를 표시합니다.
이 연구 과정을 통해 나는 정찰을 위한 패킷 분석과 디지털 포렌식/역엔지니어링을 위한 패킷 분석에는 완전히 다른 접근 방식이 필요하다는 것을 배웠습니다. 다행스럽게도 수동 정찰과 네트워크 통신 분석기를 사용한 패킷 분석은 DJI Mini 2의 통신 인터페이스를 분석하는 데 정말 유용했습니다.
패킷 분석 프로세스를 시작하기 위해 Wireshark를 사용하여 모든 종류의 DJI 드론에 대한 광범위한 통신 데이터 로그가 포함된 DJI 통신 패킷 덤프 저장소 에 나열된 PCAP 파일을 다운로드했습니다. PCAP 파일을 다운로드한 후 다양한 해부 도구를 사용하여 Wireshark를 사용하여 분석했습니다.
정보 형식 분석
DJI 패킷 덤프의 특정 패킷 분석 프로세스에 대해 자세히 알아보기 전에 다음 사항을 모두 언급할 가치가 있습니다.
UART 통신: UART는 Universal Asynchronous Receiver-Transmitter의 약자로서 단일 통신 회선을 통해 순차적으로 데이터 비트의 비동기 흐름을 활용하는 전자 장치 간에 정보를 전송하기 위해 일반적으로 사용되는 직렬 프로토콜입니다.
DUML 스트림: DUML은 DJI 통신을 위한 클로즈 소스 프로토콜을 설명하는 DJI Universal Markup Language의 약자입니다. 장치의 내부 설정을 제어하거나 펌웨어 업데이트를 시작하는 데 사용됩니다.
KML 파일: Keyhole Markup Language라고도 알려진 이 파일은 매핑 소프트웨어에서 지리적 데이터를 특별히 표시하는 데 사용되는 XML 파일입니다. KML 파일에는 특정 위치, 모양, 경로 및 기타 지리적 특징에 대한 데이터가 포함되어 있습니다.
DAT 비행 기록: DAT는 다음을 의미합니다. 디지털 오디오 테이프. 이는 디지털 오디오 테이프에 저장된 비행 기록 데이터를 나타냅니다. DAT 파일에는 분석을 위한 관련 비행 정보가 포함됩니다.
DJI 패킷 덤프 저장소 내의 PCAP 파일에는 다양한 DJI 하드웨어의 대규모 통신 로그 덤프가 포함되어 있습니다. 이러한 통신 로그 저장을 통해 하드웨어 내 하드웨어 문제를 조사하기 위한 정밀한 참조 지점과 함께 프로토콜의 내부 통신을 해독할 수 있습니다. 예를 들어 첫 번째 로그 파일 p3x_ofdm_to_center_run1 에는 DJI P3X 수신기 보드 UART 덤프의 통신 덤프가 포함되어 있습니다. 데이터 덤프는 리본 케이블과 comm_serial2pcap.py 프로그램을 사용하여 드론의 OFDM(직교 주파수 분할 다중화) MCU(마이크로 컨트롤러 장치)와 FC(비행 컨트롤러) 간의 양방향 통신을 제공합니다 .
와이어샤크 설정
기본적인 DJI 통신 분석을 설정하기 위해 DJI 펌웨어 도구에 나열된 통신 분석 파일을 사용했습니다. 통신 분석 도구는 다음 기능을 제공합니다.
- 드론 소스에서 캡처한 DUML 패킷 내의 필드를 표시합니다.
- 바이너리 플라이트에 저장된 패킷 내의 필드 표시
- DAT 파일 기록
- KML 내보내기 기능을 통해 항공편 시각화
또한 이 도구를 사용하면 다음 옵션을 통해 프로토콜 명령을 분석할 수 있습니다.
- DUML 스트림 기반 PCAP 파일
- 내장된 DUML 페이로드 내에 USB/이더넷 통신 덤프가 포함된 PCAP 파일
- DAT Flight Log 기반 PCAP 파일
환경 설정을 시작하려면 이 링크 아래 나열된 모든 .lua 파일을 다운로드하세요. 그런 다음 Wireshark 내에서 Wireshark 정보 메뉴를 열고 폴더 탭 으로 이동합니다.
그런 다음 개인 Lua 플러그인 에 대한 파일 경로 참조를 클릭하고 모든 파일 내용을 붙여넣습니다 .
설정이 완료되면 Ctrl+Shift+L 명령을 사용하여 Wireshark를 새로 고쳐 모든 통신 분석 도구를 로드합니다. 로드가 완료되면 엽니다.
Preferences -> Protocols -> DLT_USER -> Edit
아래 이미지에 따라 할당을 수행합니다. DLT 테이블이 초기화된 후 다음으로 이동합니다.
Preferences -> Appearance -> Columns
원하는 프로토콜 정보가 표시되도록 설정을 조정하세요. 다음은 구성할 수 있는 한 가지 방법의 예입니다. 의사소통해부
통신 분석 도구를 사용하면 DJI 통신 프로토콜에서 다음 정보를 추출할 수 있습니다.
펌웨어 파일 구조: 해부자는 헤더, 섹션 및 데이터 섹션과 같은 펌웨어 파일의 구조에 대한 정보를 기술할 수 있습니다.
펌웨어 구성 요소: 도구는 부트로더, 비행 제어 펌웨어, 카메라 펌웨어, 짐벌 펌웨어 등과 같은 개별 펌웨어 구성 요소를 추출할 수도 있습니다.
구성 매개변수: 카메라, 비행 제어 및 센서와 같은 구성 요소에 대한 설정 정보를 제공하는 구성 매개변수를 살펴볼 수도 있습니다.
스크립트: 코드 조각과 실행 가능한 바이너리도 펌웨어 파일 내에서 찾아볼 수 있습니다.
암호화: 상황에 따라 해부자는 펌웨어 암호화 프로세스에 대한 정보를 공개하는 펌웨어 파일의 일부를 해독하고 암호화할 수도 있습니다.
파일 시스템 콘텐츠: 펌웨어 파일에 파일 시스템이 포함된 경우 도구는 해당 파일 시스템 내의 콘텐츠를 추출하고 분석할 수도 있습니다.
Wireshark에서 해부자는 네트워크 프로토콜을 해석하고 디코딩하는 역할을 담당합니다. Dissector는 캡처된 네트워크 패킷을 분석하고 프로토콜의 구조, 필드 및 인코딩 규칙과 같은 유용한 정보를 추출하여 사람이 읽을 수 있는 형식으로 표시하기 때문에 유용합니다.
Wireshark를 사용하면 Lua 라는 프로그래밍 언어를 사용하여 사용자 정의 해부자를 개발할 수도 있습니다. Wireshark는 C로 작성되었고 프로그램의 해부 도구는 일반적으로 C로 작성되었지만 Wireshark에서는 개발을 처음 접하는 사람들의 학습 곡선을 덜 가파르게 만들기 위해 Lua 프로그래밍 언어로 해부 도구를 작성할 수도 있습니다. Lua는 객체지향 기능이 통합된 다중 패러다임, 절차적, 기능적 프로그래밍 언어입니다. 해부기 개발을 위한 언어로 Lua를 선택하면 속도가 저하되지만 무게가 가볍고 배우기 쉬우므로 대부분의 상황에서 유리합니다.
Lua 기본 소개
앞서 언급했듯이 Lua는 속도, 이식성 및 다른 프로그램과의 통합을 염두에 두면서 직관적이고 간단한 코드 구문을 제공하므로 많은 기능과 성능을 희생하지 않고도 쉽게 선택할 수 있습니다. 다음은 언어의 기본 기능을 간략하게 설명하는 몇 가지 기본 코드 조각입니다.
변수 및 연산
local a = 25
local b = 5
local result = a + b print (result) -- Output: 30
조건문
local temperature = 15
local heatSetting = 0
if temperature < 0 then heatSetting = 3
elseif temperature <= 20 then heatSetting = 2
else heatSetting = 1 end
print (heatSetting) -- Output: 2
루프
-- While Loops
local i = 0
while i < 10 do
i = i + 1
end
print (i) -- Output: 10
-- For Loops
local i = 0
-- i = first, last, delta
for i = 0 , 10 , 1 do
print (i) end
print (i) -- Output: 10
테이블
local new_table = {} -- Table value assignment
new_table[ 20 ] = 10
new_table[ "x" ] = "test"
ax = 10
기능
function add (arg1, arg2)
return arg1 + arg2 end
local added_number = add( 2 , 3 ) print (added_number) -- Output: 5
Lua에 대한 요약 정보
Lua는 동적으로 유형이 지정됩니다.
범위는 로컬 또는 전역으로 지정됩니다. 글로벌이 기본값입니다
세미콜론은 필요하지 않으므로 공백이 더 많은 가치를 갖습니다.
-- 주석을 나타냅니다.
i = i + 1 변수 증분에 사용됨
~= != 대신 사용됨
유형은 문자열, 숫자, 부울, nil, 함수, 사용자 데이터, 스레드 및 테이블입니다.
Nil은 값이 아닌 값에 사용됩니다.
조건부: nil과 false는 거짓이고 나머지는 완전합니다.
Lua의 유일한 데이터 구조는 테이블입니다. 테이블은 연관 배열을 구현합니다. 연관 배열은 숫자와 문자열과 같은 다른 유형으로 색인을 생성할 수 있습니다. 이들은 동적이며 종종 객체라고 불립니다.
Wireshark에서 Lua 스크립트를 사용하여 해부기 개발을 설정하려면 다음을 클릭하세요.
Help -> About Wireshark -> Folders
. 여기에서 Personal Lua Plugins 또는 Global Lua Plugins 폴더 참조를 클릭하세요. 경로는 Windows의 경우 C:\Program Files\Wireshark\plugins\2.4.2 와 유사해야 합니다 . 해부를 생성하려면 다음과 같이 해당 디렉토리 내의 파일을 초기화하십시오. example.lua
. Wireshark가 다시 로드되면 스크립트가 자동으로 적용됩니다. 애플리케이션을 다시 시작하거나 Ctrl+Shift+L 을 사용하여 모든 Lua 스크립트를 다시 로드하여 Wireshark를 다시 로드할 수 있습니다 . 이제 모든 설정이 완료되었으므로 사용자 정의 프로토콜에 대한 정보를 추출하고 표시하는 기본적인 해부 스크립트를 안내하겠습니다.
-- Create a new protocol for our custom protocol
local custom_protocol = Proto( "CustomProtocol" , "Custom Protocol" ) -- Define the fields of our custom protocol
local field1 = ProtoField.uint8( "custom_protocol.field1" , "Field 1" , base.DEC) local field2 = ProtoField. string ( "custom_protocol.field2" , "Field 2" ) -- Register the fields to the custom protocol
custom_protocol.fields = { field1, field2 } -- Create a function to dissect the packets of our custom protocol
function custom_protocol.dissector (buffer, pinfo, tree)
-- Create a subtree for our custom protocol in the Wireshark GUI
local subtree = tree:add(custom_protocol, buffer(), "Custom Protocol Data" ) -- Extract and display the values of Field 1 and Field 2
local field1_value = buffer( 0 , 1 ):uint() subtree:add(field1, buffer( 0 , 1 )):append_text( " (Value: " .. field1_value .. ")" ) local field2_value = buffer( 1 , 5 ): string () subtree:add(field2, buffer( 1 , 5 )):append_text( " (Value: " .. field2_value .. ")" ) end
-- Register our custom protocol as a dissector in Wireshark
local udp_port = DissectorTable.get( "udp.port" ) udp_port:add( 12345 , custom_protocol)
- 코드는 Proto 객체를 사용하여 사용자 정의 프로토콜을 초기화하는 것으로 시작됩니다.
CustomProtocol
field1
그리고 field2
buffer
, pinfo
, 그리고 tree
. buffer에는 패킷의 버퍼와 Tvb 개체가 포함되고, pinfo에는 패킷 목록의 열이 포함되며, tree 는 트리 루트입니다. - dissector 기능 내에서 사용자 정의 프로토콜을 필드로 표시하는 Wireshark 패킷 세부 정보 섹션 내에 하위 트리를 생성합니다.
- 트리 보기 섹션 내에서 사용자 정의 프로토콜 내의 각 필드에 대한 패킷 정보를 표시합니다.
- 마지막으로 포트에 프로토콜을 할당합니다. 이 경우 사용되는 포트는 다음과 같습니다.
12345
UDP의 경우전반적으로 몇 가지 DJI 기반 통신 해부기와 함께 Wireshark를 사용하여 DJI 드론이 통신 프로토콜을 통해 전송하는 민감한 정보를 공개할 수 있었습니다. 이 개요가 설명하는 광범위한 연구 프로세스를 통해 사이버 보안 프로세스 중에 적용하여 기존 시스템 내에서 취약점을 찾을 수 있는 몇 가지 리버스 엔지니어링 기술이 밝혀졌기를 바랍니다. 또한, 드론 해킹이 다소 지루할 수도 있지만 불가능한 것은 아니라는 사실이 이번 보고서를 통해 입증되었으면 좋겠습니다. 악의적인 행위자가 발견하기 전에 기존 결함을 강조하려면 시스템에 대해 현재 알려진 것의 경계를 계속 확장하는 것이 중요합니다. 이 경우 DJI와 같이 신뢰할 수 있는 대규모 브랜드 제조업체의 드론 프로토콜도 여전히 데이터 가로채기 및 리버스 엔지니어링에 취약하다는 사실이 밝혀졌습니다. 이를 고려하여 기존 취약점을 완화하고 드론 통신 채널의 보안을 강화하기 위한 건설적인 조치를 취할 수 있습니다.
여기에도 게시되었습니다 .