카테고리 없음

2022 CodeEngn Conference 18 - IP카메라, 환경 구축부터 취약점 분석까지

SolB 2022. 7. 8. 11:25

https://codeengn.com/conference/18/

 

2022 CodeEngn Conference 18

발표영상 공개날짜: 2022.07.04. 등록비용: 무료(온라인 개최, 유튜브 발표영상 공개) 컨퍼런스 등록과정 없이 유튜브로 시청 가능합니다 (홈페이지, 페이스북에 사전녹화된 영상 공지) 주최 & 주관:

codeengn.com

 

IP카메라, 환경 구축부터 취약점 분석까지

How to find vulnerabilities in IP Camera

김현식
Facebook: https://facebook.com/GyulGyulGyul

여러 IoT 기기들 중 가장 사생활과 밀접하게 사용되는 IP 카메라. 하지만 IP 카메라는 과연 우리가 안심하고 사용할 수 있을 만큼 안전할까? 본 발표에서는 다수의 IP 카메라들을 분석하며 알게된 IP 카메라의 서비스 구조 및 어택 벡터에 대해 발표한다.

 

https://www.youtube.com/watch?v=LUAA87lcB14 

 

IP(Internet Protocol) 카메라 : 인터넷으로 통신하는 카메라

- 폐쇄성, 위험도가 상대적으로 높음

 

IP 카메라 구조

> IP 카메라 보드 구조

 

> IP 카메라 서비스 구조

1) IP카메라가 서버가 되어 사용자와 1대1 통신을 진행하는 것

- IP 카메라는 사용자와 인증, 영상 데이터, 기기 컨트롤 패킷을 사용자와 직접 주고 받게 된다.

- 이 구조는 상대적으로 취약한 편 (사용자와의 통신에서 암호화가 이루어지지 않음 -> 패킷 데이터 구조 분석이 쉽게 이루어질 수 있음 )

 

2) 사용자의 IP카메라 앱이 서버와 통신하게 되고, 해당 서버는 IP카메라와 통신하게된다. 이후 영상 데이터를 주고 받을 때, 사용자와 IP카메라가 1대1 통신을 한다.

- 서버와 통신하는 부분에서는 인증, 카메라 추가, 기기 컨트롤, p2p연결이 진행된다. 여기서는 HTTPS 혹은 TCP로 통신하는데 보안을 철저히 해야 한다면 주로 HTTPS를 사용한다. (HTTPS는 암호화 통신을 사용)

 

- STUN 프로토콜을 사용하여 서버가 사용자와 IP카메라의 P2P통신을 맺어준다.

- STUN 프로토콜 : 사용자나 IP카메라는 서버와만 통신을 하기 때문에 서로의 공인 IP를 알 수 없는데 P2P 통신을 맺기 위해 서로의 공인 IP가 필요하기에, 이를 사용하여 서버에게 자신의 공인 IP를 넘겨준다. 

 

IP 카메라 분석 환경 구축

> 정적 분석 : 펌웨어 추출 -> 서비스 바이너리 얻기

- 펌웨어 추출

1) 라즈베리 파이와 flash 칩 연결

2) flashrom(연결된 flash를 식별하고 해당 flash에 맞춰 flash 데이터를 자동으로 읽고 쓰게 해 줌)을 통해 flash 데이터 읽기

3) binwalk를 통해 파일 시스템 추출

-> 추출된 파일 시스템을 들어가보면 IP카메라의 내부 파일들을 모두 확인할 수 있음

 

- SPI 인터페이스 : SoC가 다른 칩들과 시리얼 통신을 하게 해주는 인터페이스

 

 

> 동적 분석 : IP카메라의 내부 쉘에 접근 -> gdbserver을 실행

- IP 카메라 내부 쉘 접근

1) 파일 시스템 내에 telnetd 바이너리 삽입

2) rcS 스크립트, shadow 파일 수정

3) 수정한 펌웨어 flash에 쓰기

 

- gdbserver

1) 파일시스템 내에 gdbserver 바이너리 삽입

2) 수정한 펌웨어 flash에 쓰기

3) gdb-multiarch로 디버깅

 

IP카메라 취약점 분석

1) 첫번째 서비스 구조의 경우

- IP카메라의 열려있는 포트를 대상으로 사용자인 척 접근하기

- 포트가 대부분 열려있다.

 

2) 두번째 서비스 구조의 경우

- IP카메라와 서버가 통신하는 부분을 대상으로 서버인 척 접근하기

- 포트가 많이 열려있지 않고, 하나의 포트에서 대부분의 커맨드를 다 처리한다.

- 열려있는 포트에 데이터를 보냈을 때에는 그 데이터에 대한 crc값을 검증한다. -> crc 값을 검증하는 루틴을 분석해 보낼 데이터 내 crc 값을 넣어주어야 한다.

 

[분석 프로세스]

  1. 열려있는 포트를 확인하기 위해 netstat -lan 명령어 사용
  2. /etc/inittab (시스템 init 및 shutdown에 실행되는 명령어가 담긴 스크립트) 를 분석
  3. rcS 스크립트 확인
  4. 서비스 바이너리 분석
  5. 서비스 바이너리 보호기법 확인
  6. TCP 소켓 통신
  7. 통신 함수 분석
  8. 취약점 분석

+) 6. 포트를 열어주는 함수 찾기(tcp 소켓 통신 함수 중 하나를 타고 들어감)

read 함수는 너무 많은 곳에서 사용되기 때문에 bind, accept함수를 사용하는 것이 좋음

+) 7. 통신 함수 분석

공유기의 경우 웹 서버를 열어주기 때문에 웹 서버에 HTTP 통신을 보내며 통신한다. IP카메라는 TCP통신을 하면서 어떤 형식으로 데이터를 주고 받을 지는 자기 마음대로 설정하게 된다. 서버와 IP카메라가 통신하면서 보내야 하는 데이터들은 커맨드의 종류를 알려주는 커맨드 아이디, 데이터의 길이를 알려주는 값 등이 있지만, 가장 중요한 것은 커맨드 ID이다. 이에 따라 여러 종류의 명령어를 구별할 수 있기 때문이다.

+) 8. 취약점 분석

패킷 데이터 구조 분석을 훨씬 더 수월하게 할 수 있도록 주로 wireshark를 이용한다.

- IP카메라가 서버 HTTPS 포트로 통신 한 데이터는 잡아도 암호화 되어 있지만 서버가 IP카메라의 열려있는 포트와 통신하는 데이터는 암호화가 되어있지 않을 것이다. 이를 이용해 wireshark로 서버가 IP카메라에게 보내는 패킷 데이터를 보며 분석 이전에 먼저 패킷 데이터 구조를 대략적으로 확인해 볼 수 있고, 분석할 때에도 코드와 데이터를 같이 보면서 분석하면 도움이 된다.