[하루한줄] 검사 결과를 위조 가능한 코로나 자가검사키트 취약점

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 서비스와 상호작용합니다. 이 과정에서 전송되는 블루투스 메시지에는 STATUSMEASUREMENT_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 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.