iOS MDM 시스템 구축 후 가장 일반적으로 쓰이는 기능들은 DeviceInformationDevice Lock 일텐데,

DeviceInfo 관련해서는 지원이 중단되었던 장치 고유의 값들을 가져 올 수 있기 때문에 쓰는 것이 대부분이고..

DeviceLock 기능을 구현하기 위해 MDM 서버를 구축하고자 하는 개발자 분들을 위해 정리 해 드립니다.


MDM Reference Document를 보면 장치 잠금에 관련된 커맨드가 3가지가 있는데 각각의 차이점들을 정리하고자 합니다.


1. Activation Lock

활성화 잠금은 아이클라우드에서 내 아이폰 찾기 기능과 궁극적으로 같은 기능을 합니다.

MDM 커맨드는 일반적으로 Push Token을 통해 APNS를 통해 디바이스에 직접 커맨드를 전송하는데,

활성화 잠금은 Device Serial을 POST로 애플의 특정 url에 json타입으로 넘겨 주면 애플에서 장치로 커맨드를 전송하는 구성인 것 같습니다.


문제는, 활성화 잠금을 위해서는 Apple DEP(Device Enrollment Program)을 통해 장치 정보가 애플쪽에 등록이 된 기기에만 커맨드를 전송 할 수 있습니다.

DEP는 어떤 문제인지는 모르겠지만 아직 한국에서는 지원하지 않기 때문에 불가능하다고 판단되었습니다.


추가적으로 Device가 Supervise된 상태여야 합니다. 장치 감독 모드는 Apple Configurator를 통해 청사진을 적용하면 장치 리셋 후 감독모드로 설정됩니다.

Device Supervise를 무선으로 하는 방법은 없고 DEP를 통하거나 맥에 설치된 Apple Configurator에 USB로 한번 물리적으로 연결 해야만 합니다.


게다가 이전과는 다르게 장치 비밀번호를 알면 폰에서 바로 잠금 해제가 가능하도록 바뀌었기 때문에.... 의미가 없습니다.


2. EnableLostmode

테스트 결과 가장 강력한 기능의 잠금모드인데, MDM 커맨드를 받으면 해당 폰은 사용자가 어떠한 액션도 취할 수 없는 상태가 됩니다.

Activation Lock에서 비밀번호 입력 기능이 빠진 것이라고 보면 됩니다.

잠금 해제는 DisableLostmode 커맨드 수신을 통해서만 해제가 가능합니다.


헌데.. 가장 강력한 잠금모드이지만...! iOS 9.3버전 이상이 설치된 장치에만 적용되며  역시나....Device Supervise가 필요합니다.

한마디로 수작업으로 맥에 연결해서 초기화를 한번 거쳐야 한다는 것입니다..


3. DeviceLock

별 것 없습니다.  DeviceLock 커맨드를 수신한 장치는 어떠한 동작 중이든 잠금화면으로 돌아갑니다. (장치가 슬립상태일 때 전원 버튼 한번 눌렀을 때의 그 화면...)


Apple MDM은 보면 볼수록 컨셉이 확실한 것 같네요.

Apple Configurator의 역할은 기관이나 기업에서 대량 구매한 iOS 장치들을 초기 설정을 동일하게 하기 위함과 감독 권한을 얻기 위한 것이라고 보여집니다.

Apple Configurator의 청사진에는 특정 앱이나 프로파일등을 미리 넣어 놓을 수 있어 특정 와이파이 AP만 연결되게 한다던가, 사용 할 수 있는 앱을 특정한다던가

다수 장치 관리의 편의성에 초점을 두고 있다는 느낌이 듭니다.


구현하려던 잠금 기능은 2. EnableLostmode 였는데, 무선으로 장치 감독권한을 얻을 수 있는 방법을 알아봤으나,

애플에서 온 답장에 "Our engineers have reviewed your request and have concluded that there is no supported way한 문장에  멘붕...


이상 이번에 시스템을 구축을 하면서 얻은 경험을 공유드립니다.

MDM솔루션 제공 업체를 통하지 않고 자체 개발 하시려는 분들에게 도움이 되었으면 좋겠습니다^^..     


아이 빡쳐 ^^









(이번 파이3 모델은 무려 블루투스 v4.0 , 802.11n 탑재!!)


테스트 장비 : Rsapberry Pi 3 Model B  (구매처)

테스트 OS : Ubuntu Mate 15.10 Desktop (다운로드)


**필수 프로그램 : Python 2.7 


1. 우분투 Mate 설치 후 기본 환경 설정


2. Python 2.7이 설치되어 있지 않다면 설치


3. MDM 서버 동작을 위한 파이썬 모듈 설치

  - Web.py : 일반적인 아파치 톰캣 등의 서버 구동 프로그램을 사용하지 않고 파이썬 코드로 작성된 소스파일을 웹서버로 작동하게 해주는 모듈

  - M2Crypto : 파이썬 코드로 된 서버를 SSL 프로토콜을 이용하여 접속할 때 체크하는 인증서 관련 패키지

  - PyOpenSSL : 파이썬 코드로 된 서버를 SSL 프로토콜을 이용하여 접속 할 때 필요한 모듈

  - APNSWrapper : APNS를 통해 MDM 푸시 커맨드를 아이폰/아이패드에 전송할 때 이용되는 모듈


해당 모듈 설치 후 APNSWrapper의 connection.py 파일의 131 line을 수정해 줘야 하는데, 

이유는 애플에서 보안적인 이유로 SSLv3에 대한 지원을 중단하였기 때문에

해당 부분을 TLSv1 으로 수정해 줘야 합니다.

131 line : ssl_version = self.ssl_module.PROTOCOL_TLSv1,


나머지 절차는 https://github.com/project-imas/mdm-server 대로 수행

CA 인증서 및 MDM 프로파일 생성 시 실수가 있으면 서버가 동작하지 않으니 주의해서 인증서 생성


서버의 8080 Inbound 설정 및 2195 포트 Outbound 설정 후 python server.py 커맨드를 통해 서버 동작

커맨드 실행 시 Starting Server  https://0.0.0.0://8080 로그가 찍히고 커맨드라인으로 빠져나오지 않는다면 성공적으로 동작하는 것입니다.


저는 라즈베리파이를 공유기에 물려서 서버를 구축했기 때문에 아이폰에서 같은 와이파이 접속 후

 사파리 브라우저에서 https://ip 또는 host name:8080 으로 접속하였습니다.

서버 메인 페이지에서 CA인증서를 먼저 설치해야 디바이스에 MDM프로파일이 설치됩니다.


만약 서버가 구동되지 않는 다면 server.py 파일의 마지막 부분에서 에러타입 로그를 찍어서 에러를 분석하면 됩니다.

테스트 과정에서 2번의 에러가 있었는데 첫번째는 파이썬 모듈의 비정상적 설치, 

두번째는 Server.crt 인증서 파일 크기가 0byte로 비정상적으로 생성되어 재 생성 하였습니다.


**server.py 에러타입 확인하는 법


try:

print "Debug : try"

app.run()

except TypeError as e:

print "Debug : except"

print('error:',e.args[0])

sys.exit(0)




**서버 정상 동작 시 터미널에서 출력되는 로그




수고하셨습니다 ^^..

Ubuntu에 MySQL을 설치하는 방법은


1. apt-get mysql-server 로 설치, 중간에 root 비밀번호 설정


2. mysql -u root -p  를 통해 로그인


3. GRANT ALL PRIVILEGES ON *.* to ‘계정’@’%’ IDENTIFIED BY ‘비밀번호’; 를 통해 외부접속 설정 후 exit; 를 통해 빠져나온다.


4.  cd /etc/mysql 경로 이동 후 vi my.cnf 로 편집기를 열어서 bind-address 를  주석처리.


iOS MDM 서버를 구축 중 멘붕이 와서  다른 방법을 알아보다 WSO2 MDM을 적용해보기로 결정..


먼저 우분투에 JAVA JRE를 설치한다.


1. 먼저 터미널에서  sudo apt-get install default-jre 실행하여 자바 설치


2. java -version 명령어로 현재 설치 된 버전을 확인하는데 가끔 퍼미션 에러가 날 때가 있다.


이 때는 chmod u+x java 를 통해 권한 설정 후 다시 버전을 확인하면 현재 설치 된 버전 확인이 가능하다.

'프로그래밍 > iOS MDM' 카테고리의 다른 글

MDM 테스트 서버 구축  (2) 2016.04.13
WSO2 Enterprise Mobility Manager 구축 [2] - MySQL 설치  (0) 2016.03.31
MDM 서버 셋업  (8) 2016.03.11
SSH로 접속하여 서버에 SSL 적용하기  (0) 2016.03.09
Apple MDM 이란?  (0) 2016.03.09

iMAS 프로젝트 그룹에서 공개한 소스가 있어서 일단 해당 소스로 서버 구축을 해보기로 하였다.

파이썬으로 개발된 소스인데 파이썬이란 언어를 처음 보는 상황이라 눈앞이 깜깜ㅠㅠ 

찾아보면 JAVA로 개발된 소스도 있기는 하다.


>> MDM 서버 소스 링크 <<


Readme를 보면서 진행 했는데 인증서 생성 부분은 여기에 쓰는 것보다 해당 페이지의 Setup 부분을 보면서 만드는게 나을 듯.

증서가 완료되면  서버 셋업 부분을 보면서 따라한다.


Python 2.7과 함께.. web.py / M2Crypto / PyOpenSSL / APNSWrapper 를 설치하고..

설명에 보면 connections.py 파일의 131번째 줄을 수정해야 하는데 중요한건 해당 파일이 존재하지 않는다(!)

혹시나 해서 connection.py 파일은 있나 찾아보니 이 파일은 있다(뭐지)

수정하라는 코드가 같은 줄에 있는거 보니 이파일 맞긴 맞는듯


여기서부터 멘탈이 흔들리기 시작했는데  일단 find / -name connection.py 명령어를 이용해 해당 파일의 위치를 찾고

/usr/local/lib/python2.7/dist-packages/APNSWrapper/ 경로에 있는 파일을 수정하였다.

파일을 수정하는 이유는 Apple에서 SSLv3에 대한 지원을 중단했기 때문에 TLSv1으로 수정해 줘야 한다.



vi connection.py를 통해 편집기를 열고  131번째 라인을 ssl_version = self.ssl_module.PROTOCOL_TLSv1 으로 수정한다.

그리고 /usr/lib/python2.7/dist-packages/twisted/internet/iocpreactor/ 으로 넘어가서 python setup.py 커맨드를 실행한다.


그 다음 시키는대로 포트를 열고.. 접속을 했는데 접속이 되지 않는다 ㅠㅠ..

서버 셋팅이 잘못되었는지 8080포트로 접속이 안되고 프로파일을 서버에 넣고

 사파리에서 설치하려고 해도 문제가 생겼다면서 설치가 되지 않음..


뭐가 문제인지 몰라서 이틀째 헤매는중.. 리눅스를 처음 써봐서 초반에 이것저것 

지저분하게 설치한게 많아서 다시 밀고 시작해야 할듯.


그리고 iPCU로 프로파일을 만들 때 현재 애플에서 제공하는 Apple Configurator2 에서는 MDM관련 부분이 없어졌다 (...) 

아마  MDM부분을 뺀 나머지 페이로드를 만들고 생성된 xml파일을 셀프로 수정해야 하는 듯.

구 버전 iPCU에는 그대로 살아 있으니 구버전 iPCU를 찾아서 설치한 다음에 진행하는 편이 정신건강에 이롭다.


iPhone Configuration Utility-2.dmg


iPCU 3.5버전을 찾아보면 대부분 설치가 안되는 파일들 뿐인데 어찌어쩌 설치가 되는 파일을 구하긴 했다.

그런데 문제는 확실하진 않지만 맥키퍼가 같이 깔리는거 같기도 하다 (...) 

맥키퍼에 대한 평가가 대단히 안좋으니 iPCU 설치가 완료되면 맥키퍼는 바로 삭제하시기를..


설치 된 iPCU는 응용프로그램 -> 유틸리티 -> iPhone 구성 유틸리티를 통해 실행 할 수 있다.



MDM 솔루션을 구축하기 위해서는 서버가 필요한데, LG U+ Cloud나 Naver NCloud Biz 등 에서

시스템 사양과 요금 등을 고려하여 적당한 시스템을 선택하면 된다.


MDM 서버는 SSL 적용이 필수인데 SSL 적용을 위한 인증서가 iOS에서 신뢰할 수 있는 인증기관(링크)에서 발급한 인증서를

써야 하는지 자가서명 된 인증서를 써도 되는지 모호하여 일단 자가서명 인증서를 사용하여 진행 해보기로 하였다.


ubuntu server는 설치되어 있는 상황이라고 가정하고 계속 진행을 해보자면 일단 맥의 터미널 프로그램을 이용하여 원격 서버에 접속한다.

먼저 터미널 실행 후 ssh root@ip주소  를 입력하여 우분투 서버에 접속을 한다.

초기 서버 셋팅 시 root 라는 유저 네임은 어떻게 설정하였는가에 따라 다르겠지만 보통 root를 많이 사용하므로 유저 네임은 root라고 본다.


먼저 APM (Apache, PHP, MySQL)을 설치한다.


apt-get update


apt-get install apache2


아파치 설치가 끝나면 service apache2 start 명령어를 이용하여 아파치 서버를 시작하고

웹 브라우저에서 서버의 IP주소 또는 도메인으로 접속했을 때 아래와 같은 페이지가 뜬다면 성공적으로 설치 된 것이다.



하지만 아직 ssl 적용이 되지 않았기 때문에 https://서버주소로 접속을 하면 접속이 되지 않을 것이다.


다음으로 sudo apt-get install openssl 명령어를 이용하여 openssl을 설치한 후 다음 순서대로 따라한다.


openssl genrsa -des3 -out server.key 2048 // 자가서명 인증서 생성 

openssl req -new -days 365 -key server.key -out server.csr // CSR 파일 생성 

cp server.key server.key.org 

openssl rsa -in server.key.org -out server.key // 개인키 패스워드 제거 

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt // 인증서 서명 

openssl x509 -in ca.der -inform DER -text // 인증서 인코딩 변경 

Apache 적용 
sudo a2enmod ssl 

sudo service apache2 restart 

sudo mkdir /etc/apache2/ssl // 인증서 폴더 생성 

위 작업에서 생성된 server.crt / server.csr / server.key 파일을 위에서 생성한 경로로 이동해 준다. 
 
Apache 설정 
sudo cp /etc/apache2/sites-available/default-ssl /etc/apache2/sites-available/서버주소      // default-ssl 파일을 사용중인 도메인주소로 변경
 
sudo vi /etc/apache2/sites-available/서버주소      // 편집기로 아래와 같이 내용 수정 
  SSLEngine on 
  SSLCertificateFile /etc/apache2/ssl/server.crt 
  SSLCertificateKeyFile /etc/apache2/ssl/server.key 

sudo a2ensite 서버주소 

sudo service apache2 restart // 서버 활성화 및 재시작

서버가 재시작 된 후에 https://서버주소로 접속하면 신뢰할 수 없는 인증기관 어쩌고 하는 내용이 뜨는데 
이것은 자가서명 인증서로 SSL을 구성하였으므로 당연한 현상이다.


vi 편집기 명령어는 다른 개발자분들이 쉽게 잘 설명해 놓은 자료들이 많으므로 조금만 검색하면 쉽게 찾을 수 있다.






 Apple MDM



MDM 이란 Mobile Device Management의 약자로 기업, 교육 기관 등의 단체에서 

앱을 배포하고 모바일 기기들을 관리하기 위한 솔루션입니다.

개발자 계정은 엔터프라이즈 계정(379,000원 / 1년)을 보유 하여야 하며 

MDM Vendor 인증서 등의 추가 인증서 발급 작업이 필요합니다. 


iOS의 경우 MDM 서버 구축 -> MDM 서버 정보를 포함한 Profile을 생성

 -> 사용자가 Profile 설치(Device Management 허용) -> MDM 서버에 기기 등록의 과정이 선행되어야 합니다.


그 후, MDM 서버에서 MDM 커맨드를 iOS에 푸쉬를 하고 iOS가 MDM 서버와 연결되어 정의된 기능들을 수행합니다.


이번 프로젝트는 학생들을 대상으로 서비스 중인 안심 알리미 앱을 수업시간 화면잠금 등의 기능제한을 적용하기 위해 

기존 앱에 MDM 솔루션을 적용하기 위해 시작되었습니다.


MDM 서버는 ubuntu server 14.04 버전을 사용하였고, 리눅스를 처음 써 보는 제가 국내에서 자료를 찾기 힘든

MDM 솔루션을 구축하면서 겪는 시행 착오와 해결 방향을 기록해 나갈 예정입니다.




+ Recent posts