피드로 돌아가기
Dev.toInfrastructure
원문 읽기
달 착륙선 AGC 코드에서 발견된 미기록 논리 결함 분석
Apollo 11 Guidance Computer: The Undocumented Bug We Found
AI 요약
Context
Apollo 11의 Guidance Computer(AGC) 내 루나 모듈 자세 제어 루틴의 논리 결함 발견. 특정 타이밍 조건에서 레지스터 업데이트 전 이전 값을 참조하는 시퀀싱 오류 구조. 단일 스레드 환경의 레이스 컨디션과 유사한 형태의 설계 한계.
Technical Solution
- GitHub에 공개된 Luminary 099 빌드의 어셈블리 코드와 MIT 설계 문서를 대조하는 코드 고고학 방식 적용
- Ghidra의 프로세서 모듈을 활용하여 P63 루틴 주변의 Call Graph를 시각화하고 레지스터 의존성 분석
- DSKY 인터럽트 사이클에 의한 레지스터 업데이트 지연 가능성을 추적하여 논리적 취약점 식별
- Virtual AGC 시뮬레이터에 특정 타이밍의 DSKY 인터럽트를 주입하여 일시적 자세 편차 현상 재현 및 검증
- 1202 프로그램 알람의 복구 동작이 스케줄러를 리셋하며 잘못된 레지스터 상태를 강제로 플러시하는 부수 효과 확인
Impact
- DSKY 입력 시 약 40ms의 좁은 취약 시간 창 존재
- 발생 시 약 2초 전의 명령 상태를 참조하여 0.3~0.8도의 일시적 자세 오차 유발
Key Takeaway
복잡한 미션 크리티컬 시스템에서 예기치 못한 부수 효과(Side Effect)가 다른 결함을 상쇄하는 복합적 상호작용의 가능성 확인. 정적 분석과 동적 시뮬레이션을 병행한 레거시 코드 검증의 중요성 입증.
실천 포인트
인터럽트 기반 시스템 설계 시 공유 자원의 업데이트 순서와 타이밍 윈도우를 엄격히 검증할 것