• Home
  • About
    • PI photo

      PI

      Beginner's Blog

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
    • All Categories
  • Projects

[ESW] 보안 정리

📆 Created: 2025.05.25 Sun

Reading time ~5 minutes

1. 디바이스·펌웨어 보안

펌웨어(Firmware): 하드웨어를 제어하고 소프트웨어와 하드웨어 사이의 커뮤니케이션을 돕는 일종의 소프트웨어이다.

1.1 Raspberry Pi 4 Secure Boot

  • 개념: 시스템 부팅 시점에 신뢰된 코드만 실행되도록 부트 로더와 커널을 서명하여 검증하는 기술. 승인되지 않은 커널·부트로더 실행을 방지해 루트킷·부트킷 공격에 대응.
  • 구현 방식:
    1. Pi 4 EEPROM 부트로더를 최신 stable 채널로 업데이트
    2. rpi-eeprom-config를 사용해 BOOT_ORDER=0x82(eMMC/SPI → USB → SD)로 설정
    3. 서명된 커널 이미지만 로드하도록 EEPROM을 read-only 모드로 잠금
    4. 부팅 과정 중 SHA256 해시 검증 수행: EEPROM 내 공개키로 서명 검증 실패 시 부팅 중단

1.2 ESP32-CAM 펌웨어 서명·암호화

  • 개념: 플래시 메모리에 저장된 펌웨어를 암호화하고, Secure Boot 서명을 통해 부팅 전 검증함으로써 펌웨어 변조와 탈취를 방지.
  • 구현 방식:
    1. ESP-IDF 프로젝트의 partitions.csv에 nvs 파티션에 키 저장 설정 후 secure_boot 활성화
    2. make menuconfig → Security features → Enable Flash Encryption 및 Enable Secure Boot 활성화
    3. 개발 머신에서 idf.py security 명령으로 키 페어 생성 및 ESP32에 일회성 업로드
    4. 빌드 시점에 펌웨어 바이너리가 자동으로 AES-128 기반으로 암호화되고, Secure Boot 서명이 삽입됨

1.3. CHIPSEC 취약점 점검

  • 개념: 인텔 칩셋 및 플랫폼 펌웨어 레벨 보안 취약점을 분석·검증하기 위한 오픈소스 프레임워크.
  • 구현 방식:
    1. 호스트에 Python 환경 설치 후 pip install chipsec
    2. chipsec_main.py 실행으로 하드웨어/펌웨어 검증 모듈(Platform, SMM, TPM 등) 선택
    3. 자동 리포트 생성: 부팅 설정, SMM 권한, 메모리 보호 미설정 등 취약 항목 식별

2. 네트워크 분리 & 방화벽

2.1 VLAN 설계 & 구분

  • 개념: 단일 물리 네트워크 장치를 논리적으로 분리해 서로 다른 트래픽 도메인을 구성, 보안 및 성능을 향상.
  • 구현 방식:
    1. 스위치에서 VLAN 10(관리), 20(IoT), 30(외부) 각각 생성 및 이름 지정
      • VLAN10: 관리망 (Raspberry Pi SSH)
      • VLAN20: IoT 장치망 (ESP32, 센서)
      • VLAN30: 외부 API 연동망 (ThinQ API)
    2. IoT 장치 포트는 Access VLAN 20, 라우터 연결 포트는 Trunk 모드로 설정:
       interface Gi1/0/5
       switchport mode access
       switchport access vlan 20
      
       interface Gi1/0/24
       switchport mode trunk
       switchport trunk allowed vlan 10,20,30
      
    3. 라우터/Layer 3 스위치에서 서브인터페이스로 각 VLAN 서브넷 라우팅 구성 스위치·라우터 쪽에서 802.1Q 트렁크/언태그드 포트 설정

2.2 호스트 방화벽 (Raspberry Pi iptables)

  • 개념: 리눅스 커널의 netfilter 기능을 이용해 인바운드/아웃바운드 패킷 필터링, 네트워크 간 트래픽 제어.
  • 구현 방식:
      # 관리망 ⇄ IoT망 차단
      iptables -A FORWARD -i eth0.20 -o eth0.10 -j DROP
      iptables -A FORWARD -i eth0.10 -o eth0.20 -j DROP
    
      # IoT망 → API망(ThinQ 서버) only HTTPS
      iptables -A FORWARD -i eth0.20 -p tcp --dport 443 -d api.thinq.lg.com -j ACCEPT
      iptables -A FORWARD -i eth0.20 -j DROP
    
      # 관리망 → Pi SSH 허용
      iptables -A INPUT -i eth0.10 -p tcp --dport 22 -j ACCEPT
      iptables -A INPUT -i eth0.10 -j DROP
    
      # 기본 정책
      iptables -P FORWARD DROP
      iptables -P INPUT DROP
      iptables -P OUTPUT DROP
    
    1. 규칙 저장: iptables-save > /etc/iptables/rules.v4
    2. 부팅 시 자동 복원 설정

3. 통신 보안

3.1 MQTT over TLS/mTLS

  • MQTT(Message Queuing Telemetry Transport): 사물 인터넷(IoT) 또는 기계 간(M2M) 장치와 애플리케이션 인터넷을 통해 연결하는 데 이상적인 널리 사용되는 가벼운 게시-구독 메시지 프로토콜이다.
  • TLS(Transport Layer Security): 전송 계층 보안 프로토콜
  • mTLS(mutual TLS): 양방향 TLS

  • 개념: MQTT 프로토콜을 TLS로 암호화하고, 클라이언트·서버 양방향 인증(mTLS)으로 무단 접근 차단.

  • 구현 방식:
    1. Mosquitto Broker에 Let’s Encrypt 인증서 설치
    2. mosquitto.conf 설정:

       listener 8883
       cafile /etc/letsencrypt/live/your.domain/fullchain.pem
       certfile /etc/letsencrypt/live/your.domain/cert.pem
       keyfile /etc/letsencrypt/live/your.domain/privkey.pem
       require_certificate true   # mTLS
      
    3. ESP32 펌웨어에 WiFiClientSecure로 CA·클라이언트 인증서 포함
    4. PubSubClient 라이브러리에서 TLS 연결 및 인증서 검증 수행

3.2 WebRTC DTLS-SRTP (음성 스트리밍)

  • DTLS(Datagram Transport Layer Security)
  • 개념: 실시간 미디어 스트림을 DTLS로 보호하고, SRTP로 패킷 암호화해 기밀성 및 무결성을 유지.
  • 구현 방식:
    1. WebRTC PeerConnection 생성 시 sdpSemantics: "unified-plan" 설정
    2. ICE 구성 후 DTLS 핸드셰이크로 키 교환
    3. SRTP 세션에서 crypto-level 설정: AES-128-GCM
    4. DTLS 인증서 핀닝 또는 공인 CA 사용으로 중간자 방지

3.3 REST API (ThinQ ↔ HA)

  • 개념: OAuth2 Authorization Code Grant로 액세스 토큰을 안전하게 발급·관리, 토큰은 AES-GCM으로 암호화 저장.
  • 구현 방식:
    1. OAuth2 클라이언트 등록: Redirect URI 등록 및 클라이언트 ID/비밀 획득
    2. 사용자 로그인 시 Authorization Code 획득 → Access/Refresh Token 교환
    3. secret.json에 AES-GCM 암호화:

       from cryptography.hazmat.primitives.ciphers.aead import AESGCM
       aesgcm = AESGCM(key)
       nonce = os.urandom(12)
       encrypted = aesgcm.encrypt(nonce, token_json.encode(), None)
      
    4. 토큰 호출 시 유효기간 검증 → 만료 5분 전 자동 리프레시

4. 데이터 보호 & 모니터링

4.1 음성 로그 AES-GCM-SIV 암호화

  • 개념: AES-GCM-SIV는 재사용 방지(non-replay) 및 무결성 검증이 강화된 대칭키 암호화 모드.
  • 구현 방식:
      from cryptography.hazmat.primitives.ciphers.aead import AESGCM
      aesgcm = AESGCM(key_256bit)
      nonce = os.urandom(12)
      ct = aesgcm.encrypt(nonce, raw_audio_bytes, None)
      # 저장: base64(nonce) + ':' + base64(ct)
    

4.2 원본 음성 원천 비식별화 (FFT 특징 벡터)

  • 개념: 원본 음성 신호를 주파수 영역으로 변환하여 개인 식별에 필요한 음색·포먼트 정보 제거.
  • 구현 방식:
    1. spec = numpy.fft.rfft(raw_audio, n=1024)로 스펙트럼 벡터 계산
    2. spec_magnitude = np.abs(spec)(FFT 벡터)만 DB에 저장
    3. 원본 PCM 데이터 즉시 메모리·디스크에서 삭제

4.3 침입 탐지 시스템 (IDS)

  • 개념: 네트워크/호스트 레벨 이벤트를 실시간 분석해 악성·의심 활동 탐지 후 경고.
  • 구현 방식: Snort or Suricata
    1. Suricata 설치 및 suricata.yaml 기본 설정
    2. custom.rules에 IoT 특화 룰 추가:

       alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:"Unauthorized API Access"; tls.version < 1.2; sid:1000001;)
      
    3. systemctl enable suricata 후 /var/log/suricata/fast.log 모니터링 스크립트 생성
    4. 경고 발생 시 Python 스크립트로 SMS/이메일 알림 전송

참고

  • EEPROM 개념과 사용 예시
  • Boot Order 결정하기
  • 펌웨어 보안을 위합 팁 5가지
  • 펌웨어 업데이트 가이드: 기기의 성능과 보안을 극대화하는 방법
  • ESP-IDF와 ESP32의 간단 소개
  • ESP32 IDF 펌웨어 무결성을 보호하는 방법
  • CHIPSEC Document
  • VLAN 생성 및 설정방법 (cisco Switch)
  • VLAN 총정리 (개념, 명령어, 설정)
  • 라즈베리파이에 방화벽 설정하기(feat. ufw)
  • 라즈베리파이4 보안 설정(1) - 사용자 계정 설정
  • 라즈베리파이4 보안 설정(2) - ssh 포트 변경
  • 라즈베리파이4 보안 설정(3) - 방화벽 설정
  • MQTT란 무엇인가?
  • 초간단 TLS, mTLS, E2EE
  • 상호 TLS(mTLS)란 무엇일까요?
  • Protocol_6주차_WebRTC 구조
  • RFC 5764: DTLS Document
  • ICE candidate
  • RTCIceCandidate
  • SRTP, Secure Real-time Transport Protocol: 보안 실시간 전송 프로토콜
  • [네트워크] REST API란? REST, RESTful이란?
  • OAuth 2.0 동작 방식의 이해
  • OAuth2.0 개념 및 연동
  • OAuth 2.0을 사용하여 Google API에 액세스하기
  • 암호 알고리즘 AES-GCM-SIV 최적화 작업 소개
  • RFC 8452: AES-GCM-SIV Document
  • SNORT
  • Snort란
  • Suricata
  • Suricata로 트래픽 탐지
  • 2023/08/11 UTM


Share Tweet +1
/#disqus_thread