:::: MENU ::::
Browsing posts in: Bluetooth

Bluetooth 보안 문제 – SweynTooth

블루투스 소프트웨어 스텍에서 발견된 문제들. 다수의 칩 벤더들의 SDK에 문제(deadlocks, crashes and buffer overflows or completely bypass security)가 있어서 패치가 제공되었다.

Table 1: Vulnerabilities type and affected vendors

Vulnerability Name
Affected Vendors

Link Layer Length Overflow
CVE-2019-16336 (6.1)
CVE-2019-17519 (6.1)

Truncated L2CAP Dialog Semiconductors CVE-2019-17517 (6.3)

Silent Length Overflow Dialog Semiconductors CVE-2019-17518 (6.4)

Public Key Crash Texas Instruments CVE-2019-17520 (6.6)

Invalid L2CAP Fragment Microchip CVE-2019-19195 (6.8)

Key Size Overflow Telink Semiconductor CVE-2019-19196 (6.9)

LLID Deadlock
CVE-2019-17061 (6.2)
CVE-2019-17060 (6.2)

Sequential ATT Deadlock STMicroelectronics CVE-2019-19192 (6.7)

Invalid Connection Request Texas Instruments CVE-2019-19193 (6.5)

Security Bypass Zero LTK Installation Telink Semiconductor CVE-2019-19194 (6.10)

Table 2: Vulnerabilities and SDK versions of the affected SoCs.* indicates extra affected SoCs reported by the vendor not tracked by our team.

SoC Vendor
SoC Model
SDK Ver.
Qualification ID(s)

BLE Version 5.0/5.1
6.1,6.2 Cypress (PSoC 6) CYBLE-416045 2.10 99158
6.5,6.6 Texas Instruments CC2640R2 94079
6.9,6.10 Telink TLSR8258 3.4.0 92269, 136037
6.7 STMicroelectronics WB55 1.3.0 111668
6.7 STMicroelectroncis BlueNRG-2 3.1.0 87428, 106700, 94075
6.4 Dialog DA1469X* 10.0.6 100899
6.3 Dialog DA14585/6* 91436

BLE Version 4.2
6.1,6.2 Cypress (PSoC 4) CYBL11573 3.60 62243, 136808, 79697, 82951, 79480
6.1,6.2 NXP KW41Z 2.2.1 84040
6.4 Dialog DA14680 1.0.14.X 87407, 84084, 71309, 75255

BLE Version 4.1
6.5 Texas Instruments CC2540 1.5.0 23454, 127418
6.3 Dialog DA14580 5.0.4 83573
6.8 Microchip ATSAMB11 6.2 73346

2.1 Attacks on IoT

Table 3: Products verified to be vulnerable


Eve Energy Smart Home
(6.4) Silent Length Overflow
August Smart Lock Smart Home
(6.4) Silent Length Overflow

Fitbit Inspire
(6.1) LL Length Overflow
(6.2) LLID Deadlock

CubiTag Gadget Tracking CC2640R2
(6.6) Public Key Crash

eGeeTouch TSA Lock Security CC2540
(6.5) Invalid Connection Request

문제가 있는 제품들

출처: https://asset-group.github.io/disclosures/sweyntooth/

ESP32 개발 환경 설정 – Mac OS

Mac OS에서 ESP32 개발 환경 설정은 다음의 링크를 참고한다.

Tool chain 설정

pip와 pyserial을 설치- 이 과정중에 dependency가 있는 라이브러리 설치는 sudo easy_install xxx  형태로 설치한다.

sudo easy_install pip
sudo pip install pyserial

Toolchain을 다운로드하고, /esp 폴더에 압축을 푼다.

mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz

bash_profile에 다름 경로를 입력한다.

export PATH=$PATH:$HOME/esp/xtensa-esp32-elf/bin

ESP-IDF(IoT Development Framework)

https://github.com/espressif/esp-idf.git 이걸 클론하고, IDF_PATH를 설정한다.

export IDF_PATH=~/esp/esp-idf

추후에 리모트 깃의 내용을 업데이트 하려면 다음과 같이 한다.

cd ~/esp/esp-idf
git pull
git submodule update --init --recursive

프로젝트 확인

cd ~/esp
cp -r $IDF_PATH/examples/get-started/hello_world .


cd ~/esp/hello_world
make menuconfig

빌드 및 다운로드

make flash


make monitor

To exit the monitor use shortcut Ctrl+]

실내 측위 – BLE Tag, AoA, AoD

기존 비콘의 한계

  • Beacons only work with smartphones, not tags, which limits how they can be used
  • They are able to locate objects in best case within 3-4 meters, which is fine for determining a general location, but is not refined enough to meet the requirements for many of today’s applications
  • Beacons are battery-operated, which impacts their ability to deliver real-time location; frequent transmissions drain the device’s battery, meaning frequent replacements are necessary

AoA, AoD의 사용

AoA(신호의 수신 각도): 기기가 수신기 안테나 배열로 부터 오는 정확한 방향을 기반으로 한다. AoA를 사용하면 신호를 측정하기 위해 동일한 장치 내에서 여러 개의 안테나가 사용된다. 이렇게하면 안테나가 미터가 아닌 10-20 센티미터의 정확도로 태그 또는 스마트 폰을 찾을 수 있다.

AoD (신호의 출발 각도): 이 접근법에서 위치 정보는 모바일 장치로 다시 이동한다. AoD 접근법은 “실내 GPS”와 같이 작동하는데 고정 인프라 장치 (Locators라고도 함)는 GPS 위성 작동 방식과 마찬가지로 수신 장치를 브로드캐스트하고 인식하지 못한다. 즉, 무제한의 장치를 찾을 수 있고 개인 정보 문제는 없다.


Jlink를 사용한 nRF51 flashing

지난번 nRF51개발 환경 포스팅에 빠진 부분인 flashing 부분

nrfjprog – Programming Tool

nrfjprog는 nRF5x-Command-Line-Tools의 번들 프로그램으로 SWD를 이용해 펌웨어 이미지를 로딩한다.


/* Optional: erase target if not already blank */
nrfjprog --family <nRF51/52> -e 
/* Load FW image to target */
nrfjprog --family <nRF51/52> --program _build/<name>.hex
/* Reset and run */    
nrfjprog --family <nRF51/52> -r


/* Open Jlink Commander from terminal in _build directory */ 
JLinkExe -device <nRF51/nRF52>
> erase // Optional: erase target if not already blank
> loadfile <name>.hex // loads FW
> r // Reset and halt
> g // Run
> q // Exit

JlinkExe -device nrf51822_xxaa -if swd -speed 4000

J-link 인터페이스

Segger사의 J-link 디버거는 JTAG과 SWD인터페이스를 제공한다.

JTAG  pin-out

SWD를 사용하기위해서는 위 20핀에서 필요한 4핀만 연결하면 된다. 여기서 VTref신호는 디버거에서 타겟보드의 전압을 체크하고 전압레퍼런스로 사용하기 때문에 타겟 보드의 전원을 연결하고, 프로그래밍을 할 MCU의 전압과 연결해야 한다. 그렇지 않을 경우 VTref is 0.xxxxV라고 에러메시지가 나면서 연결이 되지 않는다.

*참고로 J-link와 같은 디버거를 DIY형태로 개발을 해서 OSHW로 판매를 하는 것이 있다.  OSHChip_CMSIS_DAP_V1.0

참고: https://www.segger.com/interface-description.html

Puck.JS 사용법


  • Bluetooth Low Energy
  • Espruino JavaScript interpreter pre-installed
  • nRF52832 SoC – 64MHz Cortex M4, 64kB RAM, 512kB Flash
  • 8 x 0.1″ GPIO (capable of PWM, SPI, I2C, UART, Analog Input)
  • 9 x SMD GPIO (capable of PWM, SPI, I2C, UART)
  • ABS plastic rear case with lanyard mount
  • Silicone cover with tactile button
  • MAG3110 Magnetometer
  • IR Transmitter
  • Built in thermometer, light and battery level sensors
  • Red, Green and Blue LEDs
  • NFC tag programmable from JavaScript
  • Pin capable of capacitive sensing
  • Weight: 14g in plastic case, 20g in packaging
  • Dimensions of cardboard box: 64mm x 62mm x 16mm
  • Dimensions of plastic case: 36mm dia, 12.5mm thick
  • Dimensions of bare PCB: 29mm dia, 9mm thick

회로도 및 PCB Layout Eagle File



  • Red LED on: digitalWrite(LED1,1), Off: digitalWrite(LED1,0)
  • LED2 : green, LED3: blue
  • LED1.write(1) or  LED1.write(0)
  • LED1.set(), LED1.reset()
  • 3개의 LED 한꺼번에 제어 digitalWrite([LED3,LED2,LED1], 7)


  • digitalRead(BTN) or BTN.read()
  • 버튼 상태를 Polling 하는 것은 power 소모가 심하므로, setWatch 함수를 사용해서 버튼 상태가 바뀌는 것을 체크함.

    setWatch(function() { console.log(“Pressed”);}, BTN, {edge:”rising”, debounce:50, repeat:true});

GPIO pins

  • GPIO 핀은 D0 부터 D31까지.  digitalWrite/digitalRead 커맨드를 사용할 수 있고 PWM, I2C, SPI and Analog 사용 가능


  • Magnetometer
  • IR / Infrared
  • NFC – Near Field Communications
  • Light sensor
  • Bluetooth
  • Temperature
  • Battery level
  • Capacitive sense


via nRF Toolbox App (Android & iOS)

  • On your Bluetooth LE capable phone, install the nRF Toolbox app
  • Download the latest espruino_xxx_puckjs.zip file from the binaries folder
  • Reset Puck.js with the button held down – the Green LED should be lit
  • Release the button within 3 seconds of inserting the battery – the Red LED should light instead. If it doesn’t, you’ll need to try again, holding the button down for less time after inserting the battery.
  • Open the nRF Toolbox app
  • Tap the DFU icon
  • Tap Select File, choose Distribution Packet (ZIP), and choose the ZIP file you downloaded
  • Tap Select Device and choose the device called DfuTarg
  • Now tap Upload and wait. The LED should turn blue and the DFU process will start – it will take around 90 seconds to complete

Espruino IDE 사용하기

  • Web Bluetooth 사용 설정: Mac에서 BLE가 지원되는지 확인하는 법은 “이 Mac에 관하여” > 시스템 리포트 > 하드웨어 > Bluetooth 항목아래 ” Bluetooth 저에너지 기술이 지원됨” 이 “예”라고 표시되어 있는지 확인한다.
  • 크롬에서 주소표시줄에 chrome://flags를 입력하고, ” #enable-web-bluetooth” 항목을 사용하도록 설정하고 브라우저를 다시 시작함.
  • https://www.espruino.com/ide/ 에서 Web IDE를 시작한다.
  • Web IDE에서 연결 버튼을 클릭하고, Port설정에서 Web Bluetooth를 선택한다.

참고: https://www.espruino.com/Puck.js+Quick+Start

피지컬 웹 (Physical Web)

IoT 디바이스에 접급을 위해서 앱이 필요한 경우가 있는데, 이럴 경우 디바이스마다 앱이 존재하게 된다. 구글에서는 이걸 웹에서 해결하겠다는 접근이 피지컬 웹(Physical Web)이다. 이렇게 할 때의 장점은 디바이스에는 적은 기능만 넣고, 나머지는 웹쪽에서 구현을 하겠다는 의미이다. 이때 IoT 디바이스(비콘)가 자신의 URL을 주기적으로 Broadcasting하기만 하면 된다.
관련 정보

Mac OS X에 nRF51 개발 환경 설정하기

1. gcc 설치
여기에서 다운로드 한다.

$ mkdir /usr/local/gcc-arm
$ tar -xjf gcc-arm-none-eabi-5_4-2016q3-20160926-mac.tar.bz2 -C /usr/local/gcc-arm

2. nRF5x-Command-Line-Tools-OSX
여기에서 다운로드 한다.
/usr/local/ 에 nrfjprog와 mergehex를 copy한다.

3. .bash_profile 수정

export PATH=/usr/local/bin:/usr/local/sbin:/usr/local/nrfjprog:$PATH

4. Segger Software and documentation pack for Mac OS X 설치
여기에 패키지 파일이 있다.

5. SDK설치 및 Makefile.posix 파일 수정
여기 또는 여기에서 SDK를 다운로드 해서 원하는 곳에서 압축을 푼다.
components/toolchain/gcc/Makefile.posix 이 파일을 gcc 버전에 맞게 수정한다.

GNU_INSTALL_ROOT := /usr/local/gcc-arm/gcc-arm-none-eabi-5_4-2016q3
GNU_VERSION := 5.4.1
GNU_PREFIX := arm-none-eabi

6. 컴파일 및 확인
example 폴더 아래에서 make해서 hex 파일이 생성되는지 확인한다.

$ make

7. 보드와 연결해서 다운로드가 되는지 확인한다.

$ make flash

Nordic에서 출시한 보드



Getting started with the nRF5 development kit