이 글이 국내에서는 BlueBorne 에 대한 최초의 포스팅이 될 것 같다.
먼저 BlueBorne 에 대해서 알아보고,
Armis 社의 BlueBorne Detector 앱을 열어서
어떤식으로 Detect 하는지 확인해 본다.
BlueBorne 이란?
Armis security 에서 17년 9월 12일8가지 Bluetooth 취약점 Collection 인 BlueBorne 을 발표 했다.
Bluetooth 관련 프로세스는 모든 OS에서 높은 권한을 갖고 있기 때문에
해당 프로세스를 exploit 하는데 성공한다면 자연히 디바이스의 통제권을 얻을 수 있다고 볼 수 있다.
Blueborne 은 악의적인 기기와 연결되어 있지 않아도 되고, 검색 가능 모드가 아니어도 상관 없는데다 Android, Linux, Windows, iOS 등 거의 모든 컴퓨터, 모바일기기, IoT 제품에 적용된다.
즉, Blueborne는 블루투스 기능을 갖고있는 약 80억개의 Device 에 적용되어 스펙트럼이 매우 넓으면서도 공격 성공시 막강한 권한을 갖게 되는 것이다.
BlueBorne Collection의 CVE 목록은 다음과 같다.
CVE-2017-0781 : Remote Code Execution Vulnerability #1
CVE-2017-0782 : Remote Code Execution Vulnerability #2
CVE-2017-0783 : The Bluetooth Pineapple in Android Man in The Middle attack
CVE-2017-0785 : Information Leak Vulnerability
ㆍLinux
CVE-2017-1000250 : Information leak vulnerability
CVE-2017-1000251 : Linux kernel RCE vulnerability
ㆍWindows
CVE-2017-8628 : The Bluetooth Pineapple in Windows – Man in The Middle attack
ㆍiOS
CVE-2017-14315 : Apple Low Energy Audio Protocol RCE vulnerability
위의 CVE-2017-8628(Windows) 과 CVE-2017-0783(Android) 내용을 보면 같은 취약점인걸 알 수 있다.
왜 그럴까?
사실상 블루투스 프로토콜은 구현 하기가 어렵기 때문에,
벤더들은 대부분 프로토콜 가이드라인 대로 하나씩 구현 하게 된다.
(Wifi 스펙은 450p 인데 블루투스 스펙은 무려 2822p)
즉, 대부분 취약점이 발견되었을 때 다른 플랫폼에서도 동일하게 발견 되는 것이다.
더 자세한 정보는 armis 공식 홈페이지의 blueborne 소개 자료를 확인해 보면 된다.
아직까지 관련 보안 패치는 올라오지 않았는데 무시무시한 영상들이 올라와있다.
Demo : Android
Demo : Windows
Demo : Linux
패치가 나오기 전까지는 bluetooth 를 꺼놓는게 좋을 것으로 보이며,
리눅스인 경우 CONFIG_CC_STACKPROTECTOR 를 적용해 빌드하면 그나마 CVE-2017-1000251 를 DoS 정도로 완화 할 수 있다.
BlueBorne Detector
또한 pastebin 에 blueborne detector 로 추정되는 소스코드의 일부가 올라와 있어서 찾아보았는데 이미 detector 앱이 나와있었다.
코드 일부 : https://pastebin.com/RhN6mkqd
앱 :
https://play.google.com/store/apps/details?id=com.armis.blueborne_detector
Detector 는 확인 결과 두가지 기능으로 이루어져 있다.
1. 자신의 모바일 기기가 BlueBorne 에 안전한지 본다.
해당 함수는 isVulnerable 인데, 내용이 별로 없다.
Smali Code - VulnerabilityUtils.smali
.method public static isVulnerable()Z
.locals 4
.prologue
...... 생략 .......
.line 34
.end local v0 # "securityPatchDate":Ljava/util/Date;
:cond_1
invoke-static {}, Lcom/armis/blueborne_detector/VulnerabilityUtils;->getSecurityPatchDate()Ljava/util/Date;
move-result-object v0
.line 35
.restart local v0 # "securityPatchDate":Ljava/util/Date;
if-eqz v0, :cond_2
sget-object v2, Lcom/armis/blueborne_detector/VulnerabilityUtils;->SAFE_DATE:Ljava/util/Date;
invoke-virtual {v0, v2}, Ljava/util/Date;->before(Ljava/util/Date;)Z
...... 생략 ......
.locals 4
.prologue
...... 생략 .......
.line 34
.end local v0 # "securityPatchDate":Ljava/util/Date;
:cond_1
invoke-static {}, Lcom/armis/blueborne_detector/VulnerabilityUtils;->getSecurityPatchDate()Ljava/util/Date;
move-result-object v0
.line 35
.restart local v0 # "securityPatchDate":Ljava/util/Date;
if-eqz v0, :cond_2
sget-object v2, Lcom/armis/blueborne_detector/VulnerabilityUtils;->SAFE_DATE:Ljava/util/Date;
invoke-virtual {v0, v2}, Ljava/util/Date;->before(Ljava/util/Date;)Z
...... 생략 ......
위와 같이 직접 공격을 해보고 취약한지 보는건 아니고
단순히 패치 날짜를 보고 판단하게 된다.
2. 내 주변 Bluetooth 기기들이 안전한지 확인
이 기능은 매우 실망 스러웠다.
Mac 주소를 엄청나게 하드코딩 해둔 뒤
제조사를 파악하고
그 제조사의 이름에 따라 Risk 한지 아닌지를 파악한다.
그림에 High Risk 라고 나오는건 MAC 주소가
24:4B:03 으로 시작되므로 아래 하드코딩된 정보에 따라
취약하다고 판단하게 된다.
Smali Code - Manuf.smali
const-string v3, "24:4B:03"
aput-object v3, v1, v2
const/16 v2, 0x77
aput-object v3, v1, v2
const/16 v2, 0x77
Armis가 취약하다고 판단하는 제조사는 Apple 부터 시작해서 ZTE 까지 거의 모든 제조사이다.
즉, 이름이나 MAC 주소로 제조사가 판단되면 무조건 취약하다고 하는 건데
이딴식(?)으로 만든 이유에 대해
1. 구체적인 POC 를 공개하기 싫어서 (공개되면 큰일이긴 함)
2. 만들기 귀찮아서...
등의 추측을 하고 있다.
최근에 blueborne scanner 를 깔아볼까 생각하고 있었는데, 스캐너를 그렇게 만들어뒀다니..
답글삭제좋은 정보 감사합니다
넵 ㅎㅎ 방문 감사합니다.
삭제