- 두 명의 사이버보안 학생이 재미와 도전으로 세탁기 해킹을 시도함
-
세탁기의 모바일 앱을 역공학으로 분석해 API와 암호화 방식을 연구함
- XOR 암호화 키를 찾아내어 세탁기 상태 데이터를 실시간으로 읽고 해독하는 방법을 구현함
-
Discord 웹훅을 활용해 세탁기 작동 상태 및 완료 알림을 자동화하는 노티피케이션 봇을 제작함
- 향후 다른 "멍청한" 가전제품에도 비슷한 방식의 스마트홈 자동화 적용을 계획함
서론
- 필자는 새로 이사한 집에서 친구와 함께 세탁기 해킹 프로젝트를 진행함
- 순수한 실용성보다는 재미와 기술적 도전이 목적임
- 세탁기와 기타 가전제품을 스마트홈 시스템에 연결하고 싶다는 호기심이 출발점임
- 직접 해킹해서 얻은 경험이 실전 역공학 연습에도 도움이 되었음
배경 설명
- 집에는 Wi-Fi가 지원되는 스마트 세탁기가 기본으로 비치됨
- 이 세탁기는 모바일 앱으로 진행상황 알림을 받을 수 있음
- 한 번에 한 명만 앱과 연동 가능해서 공유가 불편함
- 이 문제를 기회로 보고, 앱의 제한 없이 여러 사람이 상태 알림을 받도록 만들기로 결정함
도어벨 사례
- 집 도어벨은 433MHz 무선 신호로 알림을 보내는 시스템임
- 친구가 도어벨 신호를 감지해 Discord 서버에 알림을 보내는 시스템을 만듦
- 실제 도어벨 소리와 함께, 백업 알림용으로도 활용됨
- 이 성공 사례를 보고 세탁기도 같은 방식으로 자동화 알림 연동을 시도하게 됨
계획 및 준비
- 필자는 모바일 앱을 리버스 엔지니어링해 API 동작을 파악하기로 함
- 스마트 세탁기에서 직접 네트워크 트래픽을 캡처하기 위해 OpenWRT 라우터를 활용함
- 세탁기를 임시 Wi-Fi로 연결하여 패킷 캡처로 통신 패턴 파악을 시도함
세탁기 트래픽 분석
- 세탁기는 자신의 IP, 255.255.255.255 (브로드캐스트) , 외부 서버(HTTP API, 암호화 트래픽), 직접 앱과 HTTP 통신(포트80) 등 여러 경로로 트래픽 송수신함
- 특히 모바일 앱과 직접 통신하는 부분에 주목, 이 부분을 집중적으로 분석함
세탁기 API 리버스엔지니어링
- 앱은 /http-read.json?encrypted=1 (상태 읽기)과 /http-write.json?encrypted=1 (명령 전송) 두 엔드포인트를 반복 사용함
- 관심 대상은 읽기 엔드포인트이나, 응답 데이터가 암호화(HEX, HTML 타입) 되어 있음
- query 파라미터 encrypted=0을 줘도 복호화 실패 혹은 400 에러만 발생
암호화 분석 및 키 구하기
- XOR 기반 간단 암호화일 것이라는 추정과 함께, CyberChef 등 온라인 툴로 브루트포스 해킹을 시도함
-
참조 프로젝트(CandySimplyFi-tool) 에서 이미 키 추출에 성공한 코드를 확인, 이를 활용해 몇 초 만에 키 복원 및 데이터 해독에 성공함
-
데이터 스키마를 추가로 파악하기 위해, ofalvai/home-assistant-candy 오픈소스 코드 참고
세탁기 상태값 실험
- 세탁기 각종 물리 조작(프로그램 변경, 온도 및 속도 조정, 작동/멈춤/종료) 시 데이터 변화 확인
- 상태값 주요 필드:
-
Pr: 프로그램 선택 노브 상태
-
PrPh: 진행중인 워시 사이클
-
Temp: 설정 온도
-
SpinSp: 설정 회전속도
-
RemTime: 남은 시간(분, 10분 고정상황 발생도 있음)
- 단점: 일부 값(예, SpinSp)은 실제값과 다를 수 있음
알림 자동화 스크립트 개발
- 세탁기 API 스키마, 암호화 키, 데이터 읽기 및 해독, 상태 판별 까지 구현 완료
-
Discord 웹훅을 활용한 알림 봇 스크립트를 제작
- 주요 동작 순서:
- 세탁기 폴링
- 상태 변화 없으면 슬립 후 반복
- 변화 감지 시 마지막 메시지 업데이트 또는 새 메시지 발송
- 반복
마무리 및 향후 계획
- 이미 도어벨과 세탁기 알림 자동화에 성공
- 앞으로 식기세척기, 건조기, TV 등에도 유사 자동화(스마트 플러그, 진동센서, IR 블래스터) 적용 구상
- 웹캠을 활용한 간이 보안 시스템도 실험 예정
결론
- 이번 프로젝트 경험을 통해 실전 IoT 리버스 엔지니어링과 간단한 스마트홈 해킹 기초를 익힘
- 실용성과 재미 모두 경험할 수 있었던 사례임