MQTT 브로커 접근 제어 권한 테스트 시나리오
MQTT 브로커의 접근 제어(ACL) 테스트 시나리오와 절차, 예제 ACL, 검증 포인트를 포함한 보안 점검 체크리스트 및 우선순위 분류
목차
개요
MQTT 브로커의 접근 제어는 메시지 흐름을 안전하게 유지하는 핵심 요소다. 권한 설정이 잘못되면 민감한 데이터가 유출되거나 잘못된 클라이언트가 토픽을 조작할 수 있다. 본문은 초보자도 이해할 수 있도록 기본 개념부터 구체적인 테스트 시나리오까지 단계별로 정리한다. 테스트 결과는 보안 개선 우선순위로 이어질 수 있도록 구성했다.
준비 사항
목표 정의
테스트 목적을 명확히 한다. 예를 들어 다음과 같은 항목을 포함한다.
- 인증되지 않은 접근 차단 확인
- 사용자별 퍼블리시/서브스크라이브 권한 검증
- 와일드카드 토픽 처리 확인
- ACL 우선순위 및 재로딩 동작 확인
테스트 환경
다음 요소를 준비한다.
- 브로커: Mosquitto 또는 EMQX 등
- 클라이언트: mosquitto_pub/sub, MQTT.js, paho 등
- ACL 파일 샘플 및 구성 백업
- 로그 수집 및 스니핑 도구(예: tcpdump, Wireshark)
테스트 시나리오 목록
각 시나리오는 목적, 절차, 기대 결과와 함께 기록한다. 기록 양식은 재현성과 우선순위 판단에 중요하다.
1. 익명(인증 없음) 연결 시도
목적: 인증이 없는 클라이언트의 연결 차단 확인.
- 절차: 사용자 이름/패스워드 없이 CONNECT 시도
- 명령 예:
mosquitto_sub -h broker.example.com -t test/topic
- 기대 결과: 연결 거부 또는 권한 부족 에러
2. 올바른 자격증명으로의 접근 허용
목적: 등록된 사용자만 퍼블리시/서브스크라이브 가능한지 검증.
- 절차: 사용자 계정으로 CONNECT 후 퍼블리시와 서브스크라이브 시도
- 명령 예:
mosquitto_pub -h broker.example.com -u alice -P secret -t sensors/temp -m 22.5
mosquitto_sub -h broker.example.com -u alice -P secret -t sensors/+
- 기대 결과: 허용된 토픽에 대해 정상 송수신
3. 권한 없음 토픽 퍼블리시 차단
목적: 사용자에게 부여되지 않은 토픽으로의 퍼블리시 차단 확인.
- 절차: 권한 없는 토픽으로 메시지 전송 시도
- 명령 예:
mosquitto_pub -h broker.example.com -u bob -P pwd -t admin/controls -m "reboot"
- 기대 결과: 퍼블리시 실패, 에러 로그에 허가 거부 기록
4. 권한 없음 토픽 서브스크라이브 차단
목적: 민감 토픽에 대한 구독 제한 검증.
- 절차: 권한 없는 토픽으로 서브스크라이브 시도
- 명령 예:
mosquitto_sub -h broker.example.com -u bob -P pwd -t admin/#
- 기대 결과: 구독 실패 또는 수신 없음, 브로커 로그에 거부 표시
5. 와일드카드 처리 검증
목적: +, # 와일드카드에 대한 ACL 규칙의 적용 확인.
- 절차: 와일드카드 토픽으로 서브스크라이브 후 여러 토픽에서 퍼블리시
- 기대 결과: ACL에 정의된 범위 내에서만 메시지 수신
6. Retained 메시지 접근 제어
목적: Retained 메시지가 권한 정책을 우회하는지 확인.
- 절차: 퍼블리시 시 retained 옵션 사용 후 다른 클라이언트가 구독
- 기대 결과: 구독 권한이 있는 클라이언트만 retained 메시지 수신
7. QoS 및 중복 전송 검증
목적: QoS 레벨에 따른 권한과 메시지 재전송 동작 검증.
- 절차: QoS 0,1,2로 퍼블리시 후 로그와 수신 상태 확인
- 기대 결과: 권한이 있는 경우에만 지정한 QoS로 수신
8. ACL 우선순위 및 재로딩
목적: ACL 변경 시 브로커가 즉시 적용되는지, 우선순위 충돌 시 동작 확인.
- 절차: ACL 파일 수정 후 브로커 ACL 재로딩 또는 재시작
- 기대 결과: 변경된 정책이 즉시 반영되며, 더 구체적인 규칙이 우선 적용
샘플 ACL 파일 (Mosquitto 예)
# aclfile.acl
user alice
topic read sensors/+
topic write sensors/temperature
user bob
topic read public/#
# 관리자만 쓸 수 있는 토픽 차단
pattern write $SYS/#
위 예제는 기본적인 사용자별 읽기/쓰기 권한을 보여준다. 실제 환경에서는 그룹 기반 규칙과 패턴 사용이 필요하다.
테스트 결과 기록 항목
테스트 시 다음 항목을 표준화하여 기록한다.
- 시나리오 ID
- 절차 요약
- 실행 명령 및 요청 페이로드
- 브로커 로그 스니펫
- 실제 결과와 기대 결과 비교
- 심각도(높음/중간/낮음) 및 개선 권고
우선순위와 권고
인증 우회나 관리자 토픽 무단 접근은 최우선으로 처리한다. 그 밖에 와일드카드 오용, retained 메시지 오남용은 중간 우선순위다. 테스트에서 발견된 문제는 재발 방지를 위해 ACL 규칙 명세서로 통합한다.
결론
MQTT 브로커의 접근 제어 테스트는 표준화된 시나리오와 재현 가능한 절차가 핵심이다. 위 시나리오를 기반으로 환경에 맞는 케이스를 추가하면 권한 설정의 허점과 운영 리스크를 줄일 수 있다. 테스트 후에는 ACL과 인증 체계를 문서화하여 운영자와 개발자가 공유하도록 권장한다.