[하루한줄] 검사 결과를 위조 가능한 코로나 자가검사키트 취약점
URL
https://labs.f-secure.com/blog/faking-a-positive-covid-test
Target
Explain
Ellume 사의 코로나바이러스 감염증-19 검사기에서 검사 결과를 조작해 위조된 검사 증명서를 발급받을 수 있는 스푸핑 취약점이 발견되었습니다.
검사기의 분석기는 사용자가 양성인지 음성인지를 분석한 뒤 검사 결과를 모바일 앱에 알리는데, 이때 블루투스를 사용해 모바일 앱의 com.ellumehealth.homecovid.android/com.gsk.itreat.activities.BluetoothDebugActivity
서비스와 상호작용합니다. 이 과정에서 전송되는 블루투스 메시지에는 STATUS
와 MEASUREMENT_CONTROL_DATA
bytes array가 있는데, 해당 메시지가 난독화되어있지 않아 해커는 bytes array의 각 필드의 의미를 유추할 수 있습니다. 아래는 MEASUREMENT_CONTROL_DATA
메시지를 해석하는 au.com.ellume.estick_sdk.messaging.comms.payloads.MeasurementControlDataPayload
클래스를 분석한 각 필드의 의미입니다.
// MEASUREMENT_CONTROL_DAT
Array[0-1] 64, -102 트래픽 시작
Array[2] 12 트래픽 유형(12 = MEASUREMENT_CONTROL_DATA)
Array[3] 24 바이트 수의 데이터 길이
Array[4-7] -119, 85, 0, 11 unsigned byte 값의 고유 ID
Array[8-9] -98, 0 unsigned byte 값의 시퀀스 번호
Array[10-11] -128, 7 unsigned byte 값의 타임스탬프
Array[12-14] -81, 36, 0 라인 1
Array[15] 4 알고리즘 상태
Array[16-18] 80, 24, 0 라인 2
Array[19] 0 하드웨어 상태
Array[20-21] 62, 2 unsigned byte 값의 dark frequency number
Array[22] 0 테스트 결과
Array[23-24] 19, 25 unsigned byte 값의 c1
Array[25-26] -124, 26 unsigned byte 값의 c2
Array[27] -119 unsigned byte 값의 측정 데이터 체크섬
Array[28-19] -66, -43 unsigned byte 값의 crc
검사 결과가 양성인지 음성인지를 결정하는 필드를 변조하면 검사 결과를 조작할 수 있습니다.
Ellume 검사기의 결과는 코로나바이러스 음성 인증서를 발급받는 데 사용됩니다. 해당 취약점으로 인해 코로나바이러스 확진자 파악에 문제가 발생할 수 있어 Ellume은 앱에서 추가 난독화 및 검사 과정을 구현하는 등의 패치를 발표했습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.