아마존 대시 버튼 해킹해서 라즈베리파이에서 사용하기

Updated:

아마존 대시 버튼(Amazon dash button)을 해킹(?)해서 IOT 기기로 사용해보겠습니다. 해킹이라는 거창을 단어를 사용했지만 아마존 대시 버튼을 누를 때 발생하는 네트워크 접속 정보를 모니터링해서 버튼 클릭을 인식하는 간단한 방법입니다. 이를 사용하면 대시 버튼을 집안의 여러 종류의 IOT 스위치로 사용할 수 있습니다.

1. 아마존 대시 버튼(Amazon dash button)이란?

아마존 대시 버튼은 다양한 종류의 생필품 제품을 간편한 버튼 클릭만으로 주문하게 해주는 용도입니다. 예를 들면 Tide 세제 버튼을 세탁기 근처에 두고 있다가, 세제가 떨어져가는 것이 보이면 Tide 버튼을 한번 클릭해주면 자동으로 주문을 넣어줍니다. 물론, 아마존에 이미 등록되어 주소로 배송이 되지요. 아마존 프라임 고객을 대상으로 개 당 4.99 달러에 판매가 되며 버튼을 사용하여 첫 주문을 넣으면 4.99 달러 할인을 해주기 때문에 실질적으로는 무료입니다. 하지만, 한국으로 주문을 넣으면 배송비 때문에 4.99 달러 할인은 의미가 없습니다.

버튼의 종류마다 주문할 수 있는 제품은 정해져있습니다. 예를 들면 제가 이번에 구매한 4가지 종류의 버튼 중에 스타벅스 버튼을 살펴보겠습니다.

스타벅스 버튼을 사용해서 주문할 수 있는 제품의 종류들입니다. 모두 스타벅스 관련 제품들로 이뤄져있습니다. 대시 버튼의 종류가 계속 늘어나서 300개 이상의 버튼이 출시되고 있습니다.

아마존 대시 버튼은 버튼 클릭되면 WIFI를 통해서 네트워크에 접속하고, 클릭 정보를 아마존 서버에 전송합니다. 이를 지켜보던 똑똑한 사람들이 버튼이 클릭되면 발생하는 WIFI 접속 정보를 해킹해서 IOT 디바이스로 사용할 수 있는 아이디어를 떠올립니다. 이제 그 방법을 따라서 대시 버튼을 IOT 디바이스로 설정하는 방법을 해봅니다.

2. 대시 버튼 구매 및 등록하기

아마존 대시 버튼 쇼핑 페이지에서 일단 대시 버튼을 구매합니다. 개당 4.99 달러이며, 한국으로 직배송 불가이므로 배대지를 사용해서 배송하여야 합니다.

스타벅스와 레드불 버튼의 모습입니다. 검은색 플라스틱 테두리는 고리에 걸 수 있는 모양입니다. 테두리는 분리도 가능하고 뒷면에는 양면 테이프가 기본 장착되어 있어서 보호 비닐을 제거하면 벽면에 붙일 수 있습니다.

대시 버튼을 등록하려면, andriod나 iOS의 아마존 어플(Amazon Shopping)이 필요합니다. 휴대폰으로 아마존 어플을 실행시키고 Your Account로 가면 중간 쯤에 Dash Buttons & Devices 항목이 있습니다.

Amazon Dash Button Step1

Set up a new deivce를 선택하고, Dash Button 항목을 선택합니다. 그리고 사용자 약관에 동의합니다.

Amazon Dash Button Step2

대시 버튼을 6초간 누르고 있으면, 파란색 불이 들어옵니다. 파란색 불을 확인하고 Connect를 선택하면 WIFI 세팅을 자동으로 진행합니다. WIFI 세팅은 아마존 어플(Amazon Shopping)이 실행되는 휴대폰이 연결된 WIFI로 자동 연결됩니다. 대시 버튼을 사용하려고 하는 WIFI를 휴대폰에서 연결된 상태로 진행하여야 합니다. 탐색을 완료하면 탐색된 WIFI를 보여줍니다. 결과가 사용하려는 WIFI가 맞으면 계속 진행합니다. 다음 스텝이 상품 자동 주문 설정 메뉴입니다. 제가 설정해보니, 대시 버튼에 상품 등록을 1회 해주어야 정상 동작하는 것 같습니다. 그래서, 대시 버튼에 상품 등록 후 삭제하는 방법으로 진행하였습니다. 실제 상품 주문은 이뤄지지 않으니 걱정마세요. 자동 주문 설정을 탭합니다.

Amazon Dash Button Step3

자동 주문 설정에서 아무 상품이나 선택합니다. 상품 주문 설정이 완료되면 Manage Devices로 다시 돌아와서 해당 대시 버튼을 다시 선택하고, 비활성화(Deacitvate) 버튼을 클릭합니다. 비활성화 설정이 완료되면 Manage Devices에서 해당 버튼이 삭제된 것을 볼 수 있습니다. 이제 다시 Setup a new Dash Button을 선택합니다.

Amazon Dash Button Step4

그리고, 처음에 버튼을 등록했던 절차를 다시 수행합니다. 다만, 자동 주문 설정 순서가 오면 X를 눌러서 셋업 절차를 종료하세요. 셋업 절차를 도중에 빠져나오면 위와 같이 버튼에 연결된 자동 주문 상품이 없다고 나옵니다.

여기까지 진행하면, WIFI 기기와 대시 버튼의 네트워크 연결이 완료된 것입니다. 혹시 모르니, 대시 버튼을 누르고 아마존 홈페이지에서 실제 주문이 들어갔는지 확인하세요. 주문이 들어갔으면 주문 취소를 진행하면 바로 취소가 됩니다. 그리고, 대시 버튼 설정이 잘못된 점이 없었는지 다시 체크해보세요.

3. 대시 버튼 후킹하기

WIFI 기기와 대시 버튼의 네트워크 연결이 완료되었으면, WIFI 장치의 관리자 페이지로 접속하여서 대시 버튼의 MAC address를 확인합니다.

WIFI 관리자 페이지에서 사용 중인 IP 주소 정보를 확인해보면, WINC-00-00 장치가 있을 것인데, 이 장치가 대시 버튼입니다. MAC 주소를 확인하였으면, 이 주소를 기반으로 WIFI 접속을 모니터링 할 것 입니다.

버튼의 WIFI 접속 상태를 보면 회색으로 비활성화 상태인 것을 알 수 있습니다. 대시 버튼의 특성상 간혹 버튼이 클릭 될 때만 WIFI 연결을 하면 되고 그 외의 시간에는 WIFI 비활성화 상태로 진입합니다. 이렇게 해야 배터리를 최대한 오래 사용할 수 있는 것이지요. 그래서 대시 버튼은 클릭이 되면 슬립에서 깨어나 ARP prop 패킷을 전송하여 네트워크 연결을 시도합니다. ARP prop 패킷은 WIFI 기기에 네트워크 연결을 요청하는 정보로 MAC 주소가 고유한지를 확인하는 절차를 포함합니다. 우리는 라즈베리파이를 이용하여 ARP prop 패킷이 전송되는지를 모니터링 할 것입니다. 즉, ARP prop 패킷이 WIFI에 전송되면 대시 버튼이 클릭된 것입니다.

네트워크 패킷 조작하는 파이썬 scapy 라이브러리와 tcpdump를 설치합니다. 순서대로 pip, scapy, tcpdump를 설치하는데 이미 설치되어 있으면 스킵하면 됩니다.

pip 설치

pi@raspberrypi:~ $ sudo apt-get install -y python-pip

파이썬 scapy 설치

pi@raspberrypi:~ $ sudo pip install scapy

tcpdump 설치

pi@raspberrypi:~ $ sudo apt-get install -y tcpdump

아래와같이 scapy 라이브러리를 사용해서 ARP prop 패킷을 후킹합니다. 아래 코드를 dash_button.py 파일로 저장하고 sudo 권한으로 실행하여야 합니다. 그리고, 꼭 대시 버튼의 MAC 주소를 본인 기기 것으로 변경하여 주세요.

#!/usr/bin/env python
from scapy.all import *

def arp_detect(pkt):
    if pkt[ARP].op == 1: #network request
        if pkt[ARP].hwsrc == 'fc:65:de:07:71:e0': #dash button MAC address
            return "Button detected!"

print sniff(prn=arp_detect, filter="arp", store=0)

scapy가 sudo 권한이 필요하기 때문에, 실행은 반드시 sudo 권한으로 하여야 합니다. 대시 버튼을 클릭하면 버튼이 탐지되었다고 나옵니다.

pi@raspberrypi:~ $ sudo python dash_button.py
Button detected!

대시 버튼 클릭부터 라즈베리파이에서 탐지 로그까지 딜레이를 확인할 수 동영상입니다. 왼쪽 화면은 WIFI 관리자 페이지 화면입니다. 클릭이 탐지되는데에는 2~3초 정도가 소요됩니다. 짧은 시간에 반복적인 입력이 필요한 상황에는 사용이 어렵습니다.

4. 응용 사례

대시 버튼으로 무엇을 할 수 있을까요? 대시 버튼으로 할 수 있는 응용 사례들을 좀 찾아보았습니다.

  • 스위치 : WIFI에 연결되는 스마트 플러그나 스마트 전구의 스위치로 사용할 수 있습니다. 대시 버튼으로 집 안의 전자 기기 스위치를 일괄적으로 OFF 시키거나 침대 속에서 조명 전구를 OFF 시킬 수 잇습니다. IFTTT를 사용해서 이를 구현할 수 있습니다. 스마트 플러그나 전구 이외에 IFTTT에 등록된 애플릿들을 동작시키는 스위치 역할을 할 수 있습니다.

  • 시간 관리 : 공부시간이나 시간 당 요금이 청구되는 업무를 하는 사람의 시간을 기록 할 수 있습니다. 라즈베리파이에 연결해서 라즈베리파이에서 직접 엑셀 파일에 시간 로그를 저장 하는 방법을 사용 할 수 있습니다.

  • 메시지 전송 : 대시 버튼으로 SLACK 메시지를 보낼 수도 있습니다. dashgong github에 코드도 참고하세요. 휴대폰에 IFTTT 어플을 조합하면 문자 메세지도 전송이 가능합니다.

대시 버튼 사용처를 정하고 세팅이 완료되면 관련 소개 글을 업데이트하도록 하겠습니다.


더 많은 라즈베리파이 이야기 Pi Guide 보러가기


Leave a Comment