이 글은 기존 운영했던 WordPress 블로그인 PyxisPub: Development Life (pyxispub.uzuki.live) 에서 가져온 글 입니다. 모든 글을 가져오지는 않으며, 작성 시점과 현재 시점에는 차이가 많이 존재합니다.
작성 시점: 2017-06-17
고객사에서 7.0 이상 안드로이드 기기에서 BLE 연결이 되지 않는다 란 요청을 받아서 검색해보니 악용 사례를 막기 위한 변경점이 있다는 것을 알아냈다.
diff -> https://android-review.googlesource.com/#/c/215844/
악용을 방지하기 위해 두 가지 검사가 추가되었는데, 내용은 아래와 같다.
정리해보자면 7.0 DP4에서 BLE 스캐닝을 이용한 취약점을 방지하기 위해 30초동안 5번 이상 스캐닝을 중지하고 시작하는 것을 방지하는 것이다.
스캔 주기를 6초 이상으로 설정하면 된다.
실로 간단한 해결법이나 문제가 있다면 문서화가 안되었다는 점이다.
(지금은 없어진) DP4 변경점에 있었으나 최종 변경점 노트에는 포함되지 않았다.
왜 문서화가 안되었는지 명확한 이유는 모르겠지만 그래도 심각한 문제가 아님에 다행이라 생각했다.
약 2개월 뒤 이 문제를 좀 더 살펴볼 기회가 있어 살펴보았으나, 정확히는 아래의 조건인 것 같다.
synchronized boolean isScanningTooFrequently() {
if (lastScans.size() < NUM_SCAN_DURATIONS_KEPT) {
return false;
}
return (System.currentTimeMillis() - lastScans.get(0).timestamp) <
EXCESSIVE_SCANNING_PERIOD_MS;
}
지난 스캔한 시간 리스트의 크기가 5개 미만일 경우에는 false를 리턴하고, 5개 이상이라면 처음으로 스캔한 시간과 현재 시간이 30,000ms 이상 차이나면 그런 것 같다.
스캔 주기를 늘린다고 하기 보다는 스캔하고, 바로 뒤 다시 스캔하는 등의 코드만 작성하지 않으면 문제는 없을 것 같다.