블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

안녕하세요~!! 

얼마전에 스마트 블루투스 전구로 인테리어를 마쳤습니다. 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

이번에는 스마트 블루투스 전구를

자비스 시스템에 연동하기 위하여

통신 프로토콜을 분석한 과정을 포스팅 하고자 합니다. 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

아래는 프로토콜 분석에 성공 한 후

제가 직접 개발한 앱으로 전구의 색상 및 밝기를 조절 시키며

더 나아가 소리 인식을 통해 음악에 반응하게 됩니다.

 

BGM은 역시 제가 최근들어 가장 좋아하는 노래로 선택했습니다.

The Chainsmokers & Coldplay - Something Just Like This (Lyric)

일반적으로 제가 지금껏 봐왔던

대부분의 스마트 블루투스 전구들은

프로토콜에 대한 보안 매커니즘이 존재 하지 않았습니다.

하지만 제가 이번에 구매했던 블루투스 전구는

생각보다 보안에 신경을 썼더라구요 !! 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

그러면 통신 프로토콜을 분석하러 꼬우꼬우!

1. 통신 프로토콜 예측하기

해킹의 가장 큰 매력은 개발 과정의 정 반대라고 보시면 됩니다.

개발은 초기에 주어진 것이 있고

주어진 것으로 어떻게 무궁무진한 결과물을 도출 할 수 있을까?

혹은 중간중간 예끼치 못한 상황에 대한 매력(?)이 존재합니다.

하지만 해킹은 조금 다릅니다.

주어진 단서는 아무것도 없습니다.

대신 하나하나 단서를 찾아가며

결국 단서들을 이용해 내가 원하는 결과물을 얻게 된다면

그 스릴은~~ 아는 사람만 알거에요!ㅎㅎ

저는 그렇게 단서를 얻기 위하여

Nordic 사의 블루투스 연결 앱인 nRF Connect를 이용하여

먼저 전구의 Service 프로토콜을 들여다 보았습니다.

생각보다 너무 단순했습니다.

다른 앱들은  일반적으로

데이터 전송에 대한 Service와 그 Service의 Characteristic이

상당히 많아서 일일히 다 시도를 해봐야 하지만

데이터 전송에 대한 Service는 단 하나밖에 존재하지 않습니다.

그래서 생각보다 금방 끝나겠구나~ 했는데

웬만한 블루투스 통신 제품들은

12 ~ 32바이트(원래 무조건 32바이트지만 뒤는 생략) 프로토콜을 사용하여

데이터 통신을 하고

 그 중 가장 많이 사용되는 20 바이트 형식을 전송하였지만 응답이 없었습니다.

마찬가지로 8~32바이트까지 모두 응답이 없었습니다.

그래서 프로토콜에 보안이 걸려있음을 몸소(?)ㅋㅋㅋㅋ

알게 되었습니다.

2. 통신 데이터 스니핑하기

모든 장거리 데이터는 데이터를 주고 받습니다.

많은 사람들이 지칭하여 부르는 일명 '패킷' 처럼 말이죠~

여기서 통신 프로토콜을 알 수 있는 가장 쉬운 방법은

데이터를 sniffing(도중에 낚아 채는.. 얍얍!

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog
) 하는 것 입니다.

전문가들이나 혹은 저처럼 나쁜짓(?)을 자주 하는 사람들은

개인적으로 만든 프로그램을 사용하거나

전문적인 스니핑 기법을 사용 하겠지만

이번에는 누구나 따라 할 수 있는 간편한 방법을 소개 해드리고자 합니다.

안드로이드 4.4.2 (KitKat) 이상 버전 부터는

기본적으로 블루투스 통신 HCI 스눕 로그를 폰의 외장 메모리에

기록을 남길 수 있는 옵션이 따로 존재합니다.

위와 같이 개발자 옵션에 들어가시면

"블루투스 HCI 스눕 기록" 이라는 메뉴가 존재하는데

저 옵션을 ON 해주시면 됩니다.

그리고 아래와 같은 절차를 진행 해주시면 됩니다.

1. 프로토콜을 분석하고 싶은 블루투스 디바이스에 연결

2. 연결 후 이것저것 블루투스 통신 수행

3. 외장 메모리에서 로그 획득

로그파일의 저장 위치는 아래와 같습니다.

/sdcard/btsnoop_hci.log

그러나 간혹 몇몇 디바이스는 아래의 위치에 저장 되더라구요~

/sdcard/Android/data/btsnoop_hci.log

위에서 log 파일을 얻었다면

2단계까지 성공 입니다.

3. 통신 프로토콜 분석하기

획득한 log 파일을 이제 프로토콜 분석 프로그램을

사용하여 분석해볼 차례입니다.

네트워크 및 통신 시스템 해킹에 있어서 프로토콜 분석 및 스니핑은

가장 기초중의 기초라고 할 수 있습니다.

프로토콜 분석 프로그램을 이용하여

로그를 확인해 볼 차례입니다.

로그 파일을 열면 위와 같은 결과가 나옵니다.

통신을 단 몇초만 하더라도

실제 주고 받는 데이터의 갯수가 이렇게나 많다는 것을

알 수 있습니다.

참고로 위는 3초간 통신했음에도

대략 200~300개 가량의 데이터 교환이 있었습니다.

우리에게 가장 중요한 것은

Bluetooth Attribute Protocol 입니다.

실제 어떤 Attribute 값을 어떤 Protocol 형태로 보냈는지 알아야 하기 때문입니다.

300개 가량의 데이터를 결국 찾다 찾다 발견 했습니다.

52 0c 00은 프로토콜의 접두사 이므로 빼고

56 da 87 ff 00 f0 aa라는 통신 데이터를 발견 했습니다.

재차 확인하기 위하여 한 번 더

다른 데이터를 찾아 보았더니

역시나 아까의 데이터와 비슷한 점이 보입니다.

56 d8 87 ff 00 f0 aa

첫 번째 값과 비교 하였을 때

56 뒤의 da값이 d8로 바뀌었네요.

저는 여기서 바로 눈치를 챘습니다.

아! 연속된 RGB 값의 변경 시작점은 56이라는 1바이트 배열 다음에 오는구나!

네. 이제 전구의 색상을 바꾸는 통신 프로토콜 규칙을

알아냈습니다~ ㅎㅎ 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

전구의 색상을 바꾸는 통신 프로토콜은 아래와 같습니다.

56 RR GG BB 00 f0 aa

확인하기 위하여 nRF Connect 앱을 통하여

위의 프로토콜을 전송을 시도해보니~

색상이 잘 바뀝니다!!

yayyyy~~~ 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

이제 거의 성공했습니다.

하나 팁을 드리자면

프로토콜 스니핑을 할 때는 가능한

같은 동작만 여러번 반복하여

해당 프로토콜을 서로 비교 분석 하는 것입니다.

만약 여러 동작이 섞여 있다면 분석이 매우 힘들어지게 됩니다.

따라서 저는 처음에는 색상만 변경하고,

그 다음에는 불빛의 세기를 변경하는 방법으로

2번의 분석 과정을 거쳤습니다.

불빛의 세기를 변경하는 프로토콜은 아래와 같습니다.

56 00 00 00 LL 0f aa

색상을 변경하는 프로토콜은 접미 프로토콜에

f0 aa가 들어갔다면

블빛 세기를 변경하는 프로토콜은

0f aa가 들어가야 정상적으로 동작합니다.

LL에는 빛의세기 값이 들어가면 됩니다.

제가 테스트 해본 결과 최소 0에서 최대 255까지의 16진수 값을

수신 하는 것 같습니다.

그리고 아래는 블루투스 전구의 Fading 기능 프로토콜 입니다.

bb MM SS 44

MM은 모드 값입니다.

Magic Light사에서 제공하는 앱에 20가지의 모드가 있으니

MM도 총 20가지의 값이 유효 하겠지요~?ㅎㅎ

대략 20~40 사이의 값에 의해

색상이 정해지는 것 같습니다.

SS는 Fading 속도를 결정합니다.

16진수 기준 1의 값이 200ms 정도의 속도로

색의 Fading을 수행합니다.

값을 10으로 했을 때 Fading에 대략 2초정도 걸렸습니당 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

그 외에도 블루투스 전구의 펌웨어에서 

다양한 모드 컨트롤 프로토콜이 존재하리라 생각하지만

저는 여기서 분석을 마쳤습니다.

4. 자신만의 앱 개발하기

프로토콜 분석을 한 이유는 바로 이것 때문입니다.

커스튬화의 목적이 아니었다면

프로토콜을 구지 분석할 이유가 없습니다.

프로토콜을 분석하면 개발자에 따라 정말 다양한

시도를 해볼 수 있다고 생각합니다.

몇가지 예시를 들어보면

1. 음성인식

모바일이나 스마트 홈 시스템의 음성인식 시스템을 이용하여

전등을 원하는 색상으로 바꿀 수 있습니다.

블루투스 전구의 Address와 통신 프로토콜을 이미 알기 때문에

파란색, 빨간색 혹은 자신이 원하는 음성을 수신하고

데이터를 전송 해줄 클라이언트를 개발 하기만 하면 됩니다.

2. 라즈베리파이

라즈베리파이2~3은 블루투스 모듈이 기본적으로 붙어있습니다.

직접 PCB나 보드를 개발 하지 못하는 분들도

라즈베리파이를 구매하면 쉽게 블루투스 통신이 가능합니다.

날씨 및 시간에 따라 전구의 색상을 바꿀 수도 있겠군요.

라즈베리파이와 연동을 한다면 정말 다양한 시도가 가능합니다.

저처럼 사운드 센서를 추가적으로 달아서

비트에 맞춰 변하는 효과를 연출 할 수도 있구요~ 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

혹은 박수 소리에 꺼지고 켜지도록 할 수도 있어요!!

라즈베리파이와 비슷한 역할을 하는 저의 자비스는

사용자가 집 근처 20m 근방에 접근하면 자동으로

방의 특정 전등 및 스탠드를 켜주도록 명령합니다.

이외에도 자신만의 다양한 시스템을 개발하여

더욱 멋진 연출을 할 수 있으리라 봅니다~!! 

블루투스 HCI 스눕 기록 - beullutuseu HCI seunub gilog

그럼 여기까지

스마트 블루투스 전구 프로토콜 분석 포스팅 이었습니다!!