- 스위스에서 쓰이는 Worldline Yomani XR 결제 단말기를 분해·펌웨어 분석한 결과, 뒷면 해치를 통해 접근 가능한 시리얼 콘솔에서
root만 입력해 root shell에 들어갈 수 있었음 - 단말기는 하우징 개봉, PCB 접촉 해제, 지그재그 트레이스 절단, 카드 리더 주변 flex PCB 손상을 감지하는 탬퍼 보호를 갖췄지만, 디버그 포트 노출이 별도 공격 경로가 됨
- 온보드 flash에서 추출한 펌웨어는 암호화되지 않은 파일시스템을 포함했고, Linux 3.6 커널, Buildroot 2010.02, BusyBox, uClibc, 커스텀 부트로더 Booter v1.7 기반으로 동작했음
- 카드·PIN·화면·키패드 같은 보안 기능은 별도 프로세서
mp1과 암호화·서명된mp1.img가 맡는 구조로 보이며, Linuxmp2에서 직접 접근 가능한 증거는 없었음 - 취약한 펌웨어 버전은 확정되지 않았고 root login이 비활성화된 기기도 있었지만, 물리적으로 잠시 단말기를 독점할 수 있는 환경에서는 불필요하게 큰 공격 표면이 남아 있음
Worldline Yomani XR 분석 대상
- 분석 대상은 스위스에서 널리 쓰이는 Worldline Yomani XR 결제 단말기였음
- 부팅 후 UI 확인과 포트 스캔에서 눈에 띄는 결과가 없어 하드웨어 분해로 이어짐
- 내부는 여러 PCB로 구성됨
- 외부 커넥터용 작은 보드
- 메인 보드
- 카드 슬롯이 장착된 수직 보드
- 메인 SoC는 펌웨어에서 “Samoa II”라는 코드명으로 나타나는 dual-core Arm 기반 커스텀 ASIC으로 보임
- Worldline 문서상 이 칩은 기성 칩 리브랜딩이 아니라 커스텀 ASIC에 해당함
- SoC 옆에는 작은 외부 flash와 RAM이 있음
하드웨어 탬퍼 보호 구조
- 일반적인 하우징 개봉 감지 스위치는 발견되지 않았고, 대신 board-to-board interconnect 자체가 개봉 감지 수단으로 쓰였음
- 보드 사이에는 압력에 민감한 Zebra strip이 있어, 보드를 단단히 나사로 조여야 접촉이 유지됨
- 일부 나사를 푸는 것만으로도 접촉이 끊겨 탬퍼 이벤트가 발생할 수 있음
- 전원이 분리된 상태에서도 감지가 필요해 coin cell battery가 사용됨
- 취약한 PCB 영역은 지그재그 형태의 탬퍼 감지 트레이스로 덮여 있음
- 물리적 침투로 copper trace 하나만 끊어져도 탬퍼 감지가 발생할 수 있음
- 카드 슬롯은 별도 내부 하우징 안에 있고, 주변을 감싼 flex PCB가 탬퍼 보호 역할을 함
- 재조립 후 단말기는 “TAMPER DETECTED”라는 큰 빨간 화면만 표시했고, 이 모드에서는 외부 입력에 반응하지 않는 것으로 보였음
flash 추출과 파일시스템 복구
- 런타임 탐색이 막히자 온보드 flash chip을 분리하고 wire를 연결해 내용을 덤프함
- 덤프된 내용은 예상과 달리 전체적으로 암호화되어 있지 않았음
- flash에는 일반적이지 않은 ECC 배치가 사용됨
- 표준 2048 byte payload + 64 byte ECC/spare 구성이 아니었음
- 694 byte 데이터 chunk 3개가 있고, 각 chunk 뒤에 10 ECC byte가 붙는 구조였음
- spare area 마지막 16 byte는 YAFFS2 파일시스템 metadata로 보였음
- 일반적인 YAFFS2보다 metadata 영역이 작아, 더 작은 metadata 구조를 처리하도록 파일시스템을 패치해야 했음
- 호환 파일시스템 reader를 구현한 뒤 파일시스템 내용을 성공적으로 추출함
오래된 Linux 기반 시스템
- 추출된 파일시스템에서 단말기가 Linux를 실행한다는 점이 확인됨
- 시스템은 오래된 구성요소를 포함함
- Linux kernel 3.6
- Buildroot 2010.02
- 2023년 2월 빌드
- 커스텀 부트로더
Booter v1.7 - init script, BusyBox, uClibc
libcrypt0.9.26
- 덤프된 펌웨어 버전이 얼마나 최신인지는 확인되지 않았지만, 2023년 2월 이후 릴리스된 펌웨어여야 함
암호 없는 root shell
- flash chip을 wire로 다시 연결하자 단말기는 탬퍼 메시지를 표시하면서도 다시 부팅함
- Linux boot log를 보기 위해 debug connector 주변을 logic analyzer로 확인했고, unpopulated debug connector의 한 pad에서 활동을 발견함
- 시리얼 콘솔에는 Linux boot log와 함께 login prompt가 나타남
- boot log에는 “Reset reason: Tamper”가 표시됨
dropbear is not present, firmware update 확인, application monitoring daemon 시작 같은 로그도 나타남- 마지막에는
samoa login:prompt가 표시됨
root를 login으로 입력하자 암호 없이 shell prompt~ #가 표시됨- 이 접근에는 exploit chain이나 brute-force password cracking이 필요하지 않았음
외부에서 접근 가능한 디버그 포트
- root shell 접근은 단말기 내부를 여는 경우로만 제한되지 않았음
- serial port는 단말기 뒷면의 작은 hatch를 통해 외부에서 접근 가능했음
- 단말기를 열어 탬퍼 보호를 트리거하지 않고도 debug connector에 연결할 수 있었음
- 단말기를 잠시 독점할 수 있으면 시리얼 포트에 연결하고 로그인한 뒤 malware를 배치하고 떠나는 시나리오가 가능하다고 판단됨
보안 프로세서와 Linux 역할 분리
- 노출된 root shell이 곧바로 카드·PIN 데이터 접근을 뜻하지는 않음
- Linux 시스템은 전체 구조의 일부이며, 디스플레이·키패드·카드 리더를 Linux에서 직접 접근할 수 있다는 증거는 발견되지 않았음
- 화면 출력도 framebuffer driver가 직접 처리하는 방식이 아니라, 문자열을
display_toolbinary에 넘기고 이 binary가 inter-processor message를 보내는 방식으로 보였음 - 카드, PIN 입력, 화면 표시 같은 보안 관련 기능은 별도 프로세서
mp1가 처리하는 구조로 보임 - 두 번째 프로세서
mp2에서 실행되는 Linux는 networking, update, business logic을 담당함
부팅 흐름과 보안 이미지
- Linux core는 탬퍼 상태와 무관하게 항상 부팅되는 것으로 보임
- 이후 Linux가 secure bootloader인
loadercode를 메모리에 로드함 loadercode는 탬퍼 보호가 트리거됐는지 확인함- 탬퍼가 감지되면 빨간 화면을 표시함
- 문제가 없으면 실제 secure image인
mp1.img를 부팅함
mp1.img는 Linux 파일시스템 안에 있지만, 암호화되고 두 개 entity에 의해 서명된 것으로 보임- 카드, 디스플레이, 키패드를 처리하는 secure image는 적절히 암호화·서명되어 있었음
공개 일정과 남은 불확실성
- 공개 일정은 다음과 같이 기록됨
- 2024년 11월 14일: root shell 발견
- 2024년 11월 15일: 제조사에 보고하고 90일 후 공개 예정 알림
- 2024년 11월 18일: 제조사가 보고 수신을 확인
- 2025년 6월 1일: 공개
- 노출된 root shell은 불필요하게 큰 공격 표면이지만, 카드 정보 같은 민감 데이터가 이 경로로 침해될 수 있다는 증거는 발견되지 않았음
- 어떤 펌웨어 버전이 취약한지는 확정되지 않았음
- 연구 중 root login이 비활성화된 기기도 발견됨
- debug feature가 어느 시점에 production firmware에 들어갔는지, 제조사 내부에서 이미 발견·수정됐는지는 확인되지 않았음