NASA의 cFS를 타겟으로 네트워크 퍼저인 fuzzotron을 이용해 퍼징했던
DEF CON의 연구를 reproduce 해본다.
아래 링크를 참고하였다.
DEF CON 29 Aerospace Village - Fuzzing NASA Core Flight System Software, Ronald Brobert
cFS Configuration & Fuzzotron Fuzzing Setting
cFS와 Fuzzotron 세팅은 아래 링크를 참고하면 좋다.
https://juntheworld.tistory.com/190
https://juntheworld.tistory.com/192
Trigger Segmentation Fault
- DEFCON 컨퍼런스에서 공개한 인풋을 replay해보았다.
- 동일하게 segmentation fault가 발생하는 것을 확인했다.
# target cFS program execute
sudo gdb core-cpu1
# after execute, send udp packet
udpreplay ./udp-kill-3236.pcap
CCSDS 패킷 구조 파악
- 16개의비트 → 4비트 4비트 4비트 4비트
- 각 16진수 4개로 PacketID / Packet Sequence Control / Packet Length / Packet Data 구성
드래그한 주황색 부분(우) 를 바꿔주면, cFS 로그상에서 Len = 부분이 7+주황색 부분 숫자로 변경됨
해당 부분의 Len은 cFS 에서의 ActualLength라는 변수 값에 해당한다.
00 01 (default setting)
80 01 (crash)
- 결국 패킷상에 이 부분에 대한 처리가 잘못되어 터짐 → 이부분 Length만 2001로 바꿔주고 다른 부분 다 바꿔도 터짐
- packetID만 valid (0x1801) 하게 주면 segmentation fault 발생
취약점 분석
cFS의 CI 에 존재하는 길이 검증을 우회하게 되면서 추후에 존재하는 memcpy 에서 사용가능한 메모리 영역을 넘어 값을 쓰게 되어 segmentation fault가 발생한다.
좀 더 자세하게는 Cl_Lab에서 받은 데이터 바이트와 CCSDS 패킷헤더에 있는 데이터 바이트와 같지않아서 발생하는 문제이다.
NASA cFS 소프트웨어 아키텍처 상에서는 다음과 같은 곳에서 crash가 발생한다.
Ground Station → CI_Lab으로 Command를 보냈을때 이를 처리하는 부분에서 발생하고
단순히 CI Lab 에서 처음 입력한 메세지의 길이 값 처리로 인해 발생하는 문제라 cFS의 내부 모듈까지 닿지는 않은 문제이다.
DEFCON 29 Impact, Mitigations, Reporting 해석
결론적으로 본 취약점은 NASA에 제보되었으나 반려당했고 그 이유는 아래와 같다.
요약하자면 CI 모듈이 실제비행버전이 아닌 지상 테스트용이고
최신 branch와 다른 branch의 모듈이기 때문이다.
- The Command Ingest App is not “actual” Flight Software
- Command Ingest App은 개발 및 테스트 용도로만 사용되며, “실제” 비행 소프트웨어(actual flight sw)에는 포함되지 않음 ⇒ 이는 이더넷 UDP 인터페이스로 위성에 배포되지 않음
- The Ethernet and UDP interface is not a radio uplink interface
- 이더넷과 UDP 인터페이스는 위성에서 사용하는 라디오 업링크 인터페이스가 아니며, 지상에서의 테스트용으로 사용 (실제 위성에서는 RF interface)
- The CFS open source software is customized per mission
- CFS 소프트웨어는 각 임무의 요구에 따라 맞춤 설정되며 취약점이 발생했던 부분은 커스터마이징의 예시로 나사에서 제시한 부분
- 실제 위성에 배포되지않는 부분이었으며 애초에 프로그램 자체가 CI_”**LAB**”_APP
- The kill packets shown today are not valid in master branch of CFS
- 현재 CFS의 마스터 브랜치에서는 이러한 킬 패킷이 작동하지 않으므로, 실제 운영에는 영향을 미치지 않습니다 (취약점 트리거 된 branch(bootes-rc2) → 나사에서 공식 업데이트 X stale branch)
'공부 > SPACE' 카테고리의 다른 글
cFS 커맨드 추가하는 방법 (Add a command to sample_app 실습) (0) | 2024.06.27 |
---|---|
SUCHAI-FS-Fuzzy-Testing 빌드 및 실행 (0) | 2024.06.05 |
SUCHAI (The Satellite of the University of Chile for Aerospace Investigation) 설치하기 (0) | 2024.05.27 |
cFS 설치 및 실행하는방법 (0) | 2024.04.22 |