Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<!> 미완성

Contents

개요

TCP/IP 기반의 인터넷은 근본적으로 보안에 취약하다. 다행인 것은 오랜 역사와 함께 상업적으로도 크게 성공했다는 점이다. 이런 점 때문에 보안 취약점에 대한 많은 조사가 이루어졌고, 보안을 강화하기 위한 많은 훌륭한 솔류션들이 있어서 운신의 폭이 넓다.

나는 여기에서 IoT 보안에 대한 생각을 정리하려 한다. 대략 아래의 영역에 대해서 정리할 생각이다.
  • 인터넷 영역
  • 홈네트워크 영역
  • 디바이스 영역
  • 앱 영역
앱 <-> 디바이스, 앱 <-> IoT 서버, 디바이스 <-> IoT의 모든 구간에 걸쳐서 보안성을 확보하기 위한 방법들을 정리해보려 한다.

IoT 구성 컴포넌트

보안 구간을 결정하기 위해서, IoT를 구성하는 컴포넌트들을 정리했다.
  1. Device : 인터넷에 연결되는 기기다. 웨어러블 기기, 가전, 자동차, 자전거, PC, 스마트폰 모든 것을 망라한다.
  2. Application : 인터넷에 연결된 기기와 정보를 교환하고 처리하는 건 결국 application(이하 App)이다.
  3. IoT 인프라 : Device와 Application은 IoT인프라에 연결된다. IoT인프라를 통해서, 인터넷을 가로질러 App과 기기가 연결된다. IoT 인프라는 연결된 App과 기기간의 정보를 교환하기 위한 기능과 함께, 교환 정보를 분석하기 위한 빅데이터분석 시스템도 포함하고 있다.

네트워크 구간별 보안

IoT 네트워크 구간은 홈 네트워크인터넷 두개 구간으로 나뉜다. (이후 홈네트워크는 로컬 네트어크, 인터넷은 퍼블릭 네트워크로 부르겠다.)

퍼블릭 네트워크는 인터넷으로 정보를 교환하기 위한 통로니까 당연히 있어야 하는 구간이다.

로컬 네트워크 구간을 따로 둔 이유는, 같은 로컬 네트워크에 있는 디바이스들과 앱은 로컬에서 정보를 교환할 수 있기 때문이다. 무엇보다 로컬 네트워크는 퍼블릭 네트워크는 보안성에 있어서 상당한 차이가 있기 때문에, 따로 분리해서 살펴보기로 했다.

퍼블릭 네트워크

퍼블릭 네트워크에서 보안은 크게 두 개 영역으로 나눌 수 있겠다.
  1. 통신 채널에 대한 보안
  2. 통신에 참여하는 디바이스들에 대한 인증 : 디바이스는 PC, 스마트폰, 태블릿 PC, 냉장고, TV등 IoT 인프라에 연결되는 모든 기기들을 의미한다.

로컬 네트워크

IoT가 되면, 로컬 네트워크를 추가적으로 고민해야 한다. 요즘 IoT하면 웨어러블, 그 중에서도 시계와 밴드쪽으로 너무 집중되는 것 같은데, 결국 가전기기들도 IoT의 구성요소가 된다고 생각하면 홈 네트워크환경에 대한 보안성 역시 신경을 써야 할 것이다. 로컬 네트워크의 범주에 "홈 네트워크"만 포함되는 건 아니다. 사무실, 학교, 작업장 등등 역시 로컬 네트워크의 범주에 들어간다. 특별히 홈 네트워크라고 명시한 이유는, 관리 주체가 없는 이유로 다른 네트워크에 비해서 굉장히 취약하기 때문이다.

많은 Home AP가 공장에서 출시된 기본 패스워드를 변경 없이 그대로 사용하고 있으며, 아예 패스워드 없이 붙을 수 있는 경우도 있다. 이러한 환경에서 기기기들이 인터넷에 붙으면, 심각한 보안 문제들이 발생할 것이다.

전제조건

Home AP로 구성된 로컬 네트워크의 특성과 제한을 정리한다.
  • 최근 홈 네트워크의 통신과 보안을 책임지는 홈 IoT 전용의 Gateway가 출시되고 있는데, 이러한 Home Gateway가 없는 것으로 가정한다.
  • 인증 수단이 없다. 홈 네트워크에 물렸다면, 그 유저는 물리적으로 홈 네트워크를 제어가능한 영역에 있다고 가정한다. (Home Gateway가 있다면, Gateway가 인증을 수행할 수 있을 거다. IoT를 위한 Home Gateway는 언젠가 따로 정리해야 겠다.)
  • Home AP(가정용 공유기)는 외부에 완전히 열려있는 것으로 가정한다.

네트워크가 침입자에게 노출

Home AP의 보안설정을 하지 않았거나 기본 보안 설정을 그대로 사용하는 바람에 침입자에게 완전히 노출 된 경우다. 예상할 수 있는 보안 취약점을 나열하고, 각각의 취약점을 보완할 수 있는 방안을 살펴본다.

침입자에 의한 기기의 제어

Home 네트워크에 연결된 순간 침입자는 기기들을 discovery 하고 제어할 수 있다. 당연하지만 심각한 보안 위협이 될 수 있다.
  • door lock 해제
  • 집안 활동 모니터링 : 집에 사람이 있는지 없는지 확인하는 등.
  • 기기의 오작동 유도 : 온갖 문제를 일으킬 수 있다. 기기를 제어하는 소프트웨어의 예외처리가 충분하지 않다면, 불이나거나 고장나거나 할 수 있을 거다.
  • 카메라가 부탁된 기기를 이용한 사생활 침해
oAuth등과 같은 소프트웨어 적인 인증 수단을 사용할 수 있는 원격 네트워크와 달리, 홈 네트워크는 물리적인 영역이므로 "물리적인 해결 방법"을 먼저 찾아야 한다. 소프트웨어는 보조 수단이다.

packet sniffing

로컬 네트워크의 경우 통신 채널에 대한 암호화를 신경쓰지 않는 경우가 많다. 통신 채널은 반드시 암호화 해야 한다. 암호화 하지 않을 경우 생길 수 있는 문제들은 다음과 같다.
  • 기기정보 도난 : 기기정보를 도난 당할 수 있다.
  • 패킷 역분석 : 패킷을 역으로 분석해서, 해킹 툴을 만들거나 취약점을 찾을 수 있다.
  • 홈 환경 분석 : 유저가 집안에 있는지, 밖으로 나갔는지 등 활동 정보를 수집당한다. 홈 보안에 치명적일 수 있다.
  • Replay 공격 : 패킷을 덤프 떠서 replay 공격 수단으로 사용할 수 있다. 뭐 그냥 패킷 분석해서 해킹 툴을 만들면 되는 거지만.

대응방안

디바이스와 APP간 암호화 통신을 한다. SSL을 이용해서 통신채널을 암호화해서 침입자가 패킷내용을 확인할 수 없도록 한다. 단, 원격이 아닌 로컬 네트워크이기 때문에 인증서등에 대한 3자 인증은 불가능 하다. 사설 인증서를 이용할 수 밖에 없다.

디바이스에 연결하는 대상을 인증할 수 없기 때문에, 침입자는 여전히 디바이스에 연결할 수 있는 권한을 가지고 있다. 패킷을 훔쳐 볼 수 없을 뿐이다. 침입자가 디바이스에 연결 하지 못하게 막는 것은 "물리적 보안" 영역으로 아래에 설명할 "디바이스 비밀번호"와 같은 물리적 보안 장치가 필요하다.

디바이스에 대한 접근 권한

문제

디바이스 입장에서는 유저가 로컬 네트워크에 연결해 있다면, 정상 유저인지 그렇지 않은 유저인지를 판단할 수 있는 "소프트웨어 적인 수단"이 없다. (홈 게이트웨이가 없는 한)물리적인 보안 수단을 만들어야 한다. 보안 수단이 없을 경우 발생할 수 있는 문제는 다음과 같다.
  • 암호화 채널, 이런거 아무 소용 없다. 그냥 전용 앱을 실행하고, Home AP에 붙이면 그걸로 디바이스를 내 것 처럼 제어할 수 있다.
  • 다른 문제들은 디바이스 제어권이 넘어가면서 파생되는 문제들이다. 당연히 심각하다.

디바이스 비밀번호 입력

공장에서 제조시 디바이스에 비밀번호를 설정한다. 비밀번호를 알고 있어야지만 제어할 수 있다. 이 장치는 아래의 기능 요소를 가지고 있어야 한다.

필수조치 사항은 다음과 같다.
  • 디바이스마다 비밀번호가 달라야 한다. : 이 경우 메뉴얼이나 기기 본체에 비밀번호를 부착해야 한다. 비용이 추가 될 수 있다는 단점이 있다.
  • 초기 비밀번호를 사용할 수 없어야 한다. : 반드시 초기 비밀번호를 변경하도록 한다.
  • 비밀번호 입력 횟수 초과 : 3번 이상 연속해서 비밀번호 입력을 실패하면, 등록된 다른 유저에게 알리고 일정시간 source ip의 접근을 아예 차단한다.
  • 하드웨어 리셋 버튼 : 유저는 비밀번호를 잊어버릴 수도 있다. 하드웨어 리셋 버튼을 이용해서 초기 비밀번호로 재 설정이 가능해야 한다.
이 방식은 적용이 (비교적)단순하다는 장점이 있지만, 모바일기기가 "디바이스 비밀번호"를 저장하고 있어야 한다는 단점이 있다. 디바이스 비밀번호를 암호화해서 저장하는 등의 추가적인 보완 장치가 필요하다. 만약 디바이스의 패스워드가 변경되기라도 하면, 디바이스를 사용하는 구성원 모두가 기기 재등록 과정을 거쳐야 한다(가족 구성원이 10명이 넘어가는 대가족이 아니라면, 별 문제가 아닐 수도 있겠다.)

등록 버튼

물리적인 등록 버튼을 만들어서, 등록 버튼을 누른 상태에서만 기기를 등록할 수 있게 한다.
  1. 기기의 등록버튼을 누른다.
  2. 기기는 등록가능한 상태가 된다.
  3. 모바일 앱은 Private key와 Public key를 만든다.
  4. 만들어진 Public key를 기기에 전송한다.
이제 기기에 등록된 Public key에 대한 private key를 가진 유저만 기기를 제어할 수 있다.

아직 100% 안전한건 아니다. 기기가 등록 상태가 되는 것을 기다리다가, 등록상태가 되는 시점에 기기를 해킹할 수 있는 취약점이 있다. 쓸데없는 걱정일 거라고 생각할 수도 있겠는데, 이미 이런 류의 공격이 보고가 됐다. 이런 문제는 기기가 등록 상태에 있을 때, 누군가가 등록하면 알람을 주는 방식으로 해결할 수 있을 것이다.

NFC혹은 USB를 이용한 공개키 배포

IP 기반 네트워크는 근본적인 보안 결함을 가지고 있다. NFC와 USB와 같은 근거리 통신 수단을 이용하면, 더 안전하게 디바이스를 등록할 수 있다.

  1. 사용자는 PIN 번호를 획득한다.
  2. NFC 통신 영역에 들어선다.
  3. 앱은 Public key와 PIN 번호를 전송한다.
  4. 디바이스는 PIN 번호를 확인해서 일치하면, Public key를 저장한다.
    1. 만약 최초 등록이라면, PIN 번호를 변경하도록 유도한다.
공개키를 등록하는 것으로 기기의 권한을 획득하는 방식이다(GitHub와 비슷하다). 유저가 기기에 물리적으로 접촉해서 등록을 해야 하기 때문에 매우 안전하다.

등록 버튼과 본질적으로 같은 방법인데, 기기와 직접 페어링 해야 하므로 "등록 가능 상태에서 치고들어오는" 공격도 있다는 점에서 더 안전하다고 볼 수 있다. 단점은 유저 기기가 NFC를 지원 해야 한다는 점이 단점이 될 수 있다. 예컨데, 아이폰 5이하는 NFC를 지원하지 않는다. 기기에 대한 권한을 가진 유저에게 등록 대행을 요청하는 방식등, 사용성을 높이기 위한 추가적인 장치를 마련해야 할지도 모르겠다.

IP Filtering