- 임대 아파트에서 장치를 교체하거나 전기기사를 부르지 않고, 기존 온도조절기의 무선 신호 재전송으로 Home Assistant 난방 제어를 구현한 사례임
- 온도조절기는
868MHz 대역으로 보일러와 통신했고 프로토콜은 암호화되어 있었지만, Replay Attack은 패킷 내용을 몰라도 동작할 수 있었음
rtl_433 분석 결과 Honeywell 계열과 비슷한 프로토콜로 보였고, demand 값이 보일러 켜짐·꺼짐을 나타내며 보일러가 확인 응답을 보내는 구조였음
- 최종 구성은
HackRF One 클론과 hackrf_transfer로 신호를 녹음·재생하고, Docker 웹 서버와 Home Assistant의 command_line, average, generic_thermostat를 연결함
- 2024년 12월 초부터 문제 없이 사용 중이지만,
868MHz 송신은 지역 법규에 따라 불법일 수 있고 단순 온·오프 제어에 HackRF를 쓰는 선택은 과함
임대 주택에서 난방을 자동화하기 어려운 이유
- 임대 아파트의 보일러는 집주인이 설치한 무선 온도조절기 하나로 제어됨
- 온도조절기는 내장 온도 센서로 목표 온도에 맞춰 난방을 켜고 끄는 방식임
- 실제 사용에서 불편한 점은 세 가지였음
- 센서가 아파트의 한 방 온도만 측정해 방마다 난방이 고르지 않음
- 조작부가 있는 방에 따라 침대나 거실에서 쓰기 불편함
- 외출 전에 난방을 끄지 않으면 비싼 에너지를 낭비함
- 이미 Home Assistant로 집 안 자동화를 하고 있었고, 난방도 같은 방식으로 제어하고 싶었음
- 시판 솔루션도 있었지만 집주인의 협조와 전기기사 방문이 필요할 가능성이 있어, 기존 온도조절기를 그대로 쓰는 길을 택함
프로토콜 해석 대신 재전송 공격 선택
- 출발점은 온도조절기와 보일러가 무선 프로토콜로 통신한다는 사실이었음
- 프로토콜을 처음부터 역공학하는 일은 라디오 지식 수준에 비해 너무 복잡했음
- 선택한 방식은 Replay Attack임
- 보일러와 온도조절기 사이의 신호를 복제함
- 복제한 신호를 다시 송신해, 공격자가 온도조절기처럼 보이게 만듦
- 프로토콜 내용을 이해하지 않아도 동작 가능함
- 이 방식은 장치 구현에 운이 따라야 함
- 통신에 증가하는 카운터가 있으면 과거 신호를 무시해 재전송 공격을 막을 수 있음
- 해당 온도조절기는 이런 방식을 쓰지 않아 재전송이 가능했음
신호 대역 확인과 첫 관찰
- 온라인에서 정확한 온도조절기 모델 정보를 찾았고, 데이터시트의 RF Communication 항목에서
868MHz 근처 대역을 사용한다는 점을 확인함
- 데이터시트에는
Protocol: Encrypted라고 되어 있었지만, 재전송 방식에서는 큰 문제가 아니었음
868MHz 신호 복제 자료는 많지 않았음
- LoRa/Meshtastic 관련 자료는 많았음
- 천장 선풍기나 차고문 같은 장치를 복제하려는 Reddit 글은 많았지만 답은 부족했음
433MHz였다면 소비자용 도구가 훨씬 많았을 것이라고 판단함
- 신호를 보기 위해 Software-Defined Radio를 사용함
- Flipper Zero는 이 상황에 맞지 않았음
- Flipper Zero는 SDR이 아님
- 작동 가능한 주파수 범위가 제한적이라 이 장치에는 사용할 수 없었음
프로토콜 단서와 실패한 송신 시도
- rtl_433으로 온도조절기가 알려진 프로토콜을 쓰는지 확인함
- 이름과 달리 다른 주파수에서도 동작함
- 더 드문 장치는 인식되지 않을 수 있음
- 결과적으로 이 온도조절기는 다른 Honeywell 장치와 같은 프로토콜을 쓰는 것처럼 보였음
- 통신에서
demand 속성이 보일러 상태를 나타냄
1은 보일러 켜짐
0은 보일러 꺼짐
- 보일러는 확인 응답을 보내며, 온도조절기가 범위 밖인지 판단하는 용도로 보임
- 이후 직접 패킷을 만들어 송신하려 했지만 실패함
- URH로 패킷을 수동 역공학하고 재구성하려 함
- 저가
868MHz 마이크로컨트롤러 보드로 송신하려 했음
- 보드들은 같은 보드끼리 통신하는 데 맞춰져 있었고, 더 진행하려면 라디오 레지스터를 직접 다뤄야 했음
- 이 작업은 기술 수준 밖이라고 판단함
HackRF로 신호를 그대로 녹음·재생
- 최종적으로 HackRF를 사용해 신호 내용을 해석하지 않고 그대로 재생하는 방식을 택함
- 기존 RTL-SDR은 수신만 가능해 송신에는 쓸 수 없었음
HackRF One은 보통 400달러 이상이지만, AliExpress에 40달러 수준의 클론이 있었음
- hackrf_transfer로 켜기·끄기 신호를 각각 녹음함
# We set the frequency to 868.3Mhz and the sample rate to 2000000.
hackrf_transfer -r turn_off.raw -f 868300000 -s 2000000
hackrf_transfer -r turn_on.raw -f 868300000 -s 2000000
- 같은 설정으로 신호를 재생해 CLI에서 보일러를 켜고 끌 수 있었음
# We use -a to turn on the amplifier and -x to increase the gain a tad.
hackrf_transfer -t turn_off.raw -f 868300000 -s 2000000 -a 1 -x 23
hackrf_transfer -t turn_on.raw -f 868300000 -s 2000000 -a 1 -x 23
- 명령 실행 후 보일러 내부의 물리 릴레이가 켜지고 꺼지는 소리를 들을 수 있었음
Home Assistant에 연결한 방식
- HackRF를 전원 공급 USB 허브에 꽂고, 이를 Home Assistant 서버에 연결함
- Docker 컨테이너 안에서 송신 명령을 실행하는 간단한 웹 서버를 작성함
- Home Assistant에서는 Average Sensor Plugin을 사용하고,
command_line, average, generic_thermostat 구성을 연결함
command_line:
- switch:
name: Boiler
command_on: "curl http://docker-vm:1111/api/on"
command_off: "curl http://docker-vm:1111/api/off"
sensor:
- platform: average
name: "Average Temperature"
entities:
- sensor.bedroom_thermostat_temperature
- sensor.kitchen_thermostat_temperature
climate:
- platform: generic_thermostat
name: Boiler Thermostat
heater: switch.boiler
target_sensor: sensor.average_temperature
- 이 구성으로 침실과 부엌 온도 센서의 평균 온도를 기준으로 보일러를 제어하는 온도조절기를 만들었음
- 구현은 임시방편에 가까움
- 전용 Home Assistant 플러그인을 작성하는 편이 더 나음
- CLI를 셸로 호출하는 대신 라디오를 직접 제어하는 편이 더 깔끔함
curl에 난방을 의존하는 구성은 다소 불편함
실제 사용 결과와 남은 한계
- 이 설정은 2024년 12월 초부터 아파트 난방 제어에 사용됐고, 이후 문제는 없었음
- 휴대폰에서 온도를 조정할 수 있어 편리함
- 자동화 예시는 다음과 같음
- 잠자는 동안 온도를 낮춤
- 아침 기상 시간에 맞춰 온도를 올림
- 시내에 나가면 난방을 끔
- 집으로 돌아오기 몇 정거장 전에 난방을 다시 켜서 도착 시 따뜻하게 만듦
- 가장 아쉬운 점은 단순한 보일러 온·오프 스위치에 HackRF 같은 강력한 라디오를 계속 써야 한다는 점임
- 작은 라디오를 억지로 맞추는 데 시간을 더 쓰기보다, 과한 장비라도 제대로 동작하는 쪽을 선택함
무선 송신과 블로그 댓글에 대한 법적 주의
- 무선 신호 송신은 지역 법규를 반드시 확인해야 함
- 글에서 사용한
868MHz 대역은 미국에서 면허 없이 송신하면 불법임
- 2025년 3월 16일부터 영국의 Online Safety Act가 전면 시행되면서, 블로그 댓글 같은 사용자 간 콘텐츠 운영 부담이 커짐
- 규제기관 Ofcom이 개인 블로그까지 단속할 가능성은 낮지만, 위반 시 1,800만 파운드 벌금 위험이 있어 댓글 섹션을 제거함
- 자체 운영 블로그에 대한 법의 영향을 다룬 글로 관련 법률 해설과 hobbyist internet 관련 논의를 함께 제시함