한국산학기술학회논문지 Vol. 11, No. 8 pp. 3005-3011, 2010 SELinux 기반안드로이드보안시스템구축에관한연구 정성화 1, 노태정 1* 1 동명대학교메카트로닉스공학과 A Study on Implementation of Android Security System Based on SELinux Seong-hwa Jeong 1 and Tae-Jung Lho 1* 1 Dept. of Mechatronics Engineering, Tongmyong University 요약최근고성능의스마트폰이속속등장하면서스마트폰의보안문제가대두되고있다. 특히오픈플랫폼의경우엔더욱바이러스의타겟이되기쉬워졌다. 또한, 시만텍, 안철수연구소등많은보안솔루션업체들이모바일보안시스템을개발하고있지만, 아직 Android 관련보안프로그램은상용화된제품이없는실정이다. 이러한문제를사전에해결하기위해오픈플랫폼중의하나인 Android 상에일반 Linux에서동작하는 SELinux를사용할수있도록환경을구축하여 Android 시스템의보안기능을개발하였으며, S3C6410 상에서사용자어플리케이션을검증하였다. Abstract As soon as high-performanced smart phones is rapidly emerging in recent, its security problems come to the front. Especially in case of an open platform, it is easy to be a target of virus. Many security solution industries such as Symantec and Ahnlab are developing a mobile security system, but they have not yet a commercial product. We developed the effective security function of Android system based on SELinux to solve this problem, and verified its performance by applying the user applications developed to S3C6410 board. Key Words : Android Mobile Platform, Security Enhanced Linux(SELinux), Open Source Software, kernel, Security Policy, User Application 1. 서론 요즘관심을모으고있는스마트폰은 ' 손안의 PC' 라고불릴만큼기능이막강하다. 특히, 응용프로그램의제작및배포가자유롭고다양한콘텐츠생성이가능하다는점에서무척환영받고있다. 하지만, 이를이용해악의적인프로그램을제작및유포해서개인정보를습득하거나돈을벌려는사람들이나타나많은우려를사고있기도하다. 스마트폰은기존의휴대폰과다르게 PC에서제작이가능한프로그램의대부분을만들수있어악의적인프로그램을제작하게되면그파괴력은 PC와맞먹을수있기때문이다. 현재까지보고된모바일용악성코드는약 600여종으로대부분심비안 (Symbian) 기반의트로이목마가대부분이고, 초기바이러스및웜의형태로개발되었다가최근에는단말기내의특정정보를탈취하거나금전적인이득을목적으로하는트로 이목마로빠르게변화하고있다. 2007년 11월에 Google이모바일관련여러개발자가참여하는 OHA(Open Handset Alliance) 라는모임을통해 Linux를기반으로하고있는 Android라는새로운모바일플랫폼 (mobile platform) 을발표하였다 [1-3]. 그리고오픈소스인 Linux kernel의보안강화를위해미국의 NSA(National Security Agency) 에서 Security- Enhanced Linux(SELinux)[4-6] 라는연구프로젝트로진행되었으며, 2001년 1월최초로발표된 Linux 기반보안운영체제이다. 현재 Linux 쪽의접근제어프로젝트중에가장활발한활동과성능을보이고있다. Android는모바일뿐만아니라임베디드환경에서도다양하게적용될수있는플랫폼이니만큼 MID, 네비게이션, IPT 등기존의다른여러플랫폼에얼마나빨리적용될수있는지, Android의확장성을이용하여얼마만큼 * 교신저자 : 노태정 (tjlho@tu.ac.kr) 접수일 10 년 05 월 14 일수정일 (1 차 10 년 06 월 16 일, 2 차 10 년 06 월 21 일 ) 게재확정일 10 년 08 월 10 일 3005
한국산학기술학회논문지제 11 권제 8 호, 2010 다른제품과차별화할수있는지가중요한문제로부각될것이다. 최근고성능의스마트폰이속속등장하면서스마트폰의보안문제가대두되고있다. 특히오픈플랫폼의경우엔더욱바이러스의타겟이되기쉬워졌다. 특히, 스마트폰은기존의휴대폰과달리 PC에서제작가능한프로그램의대부분을만들수있어악의적인프로그램을제작하게되면그파괴력은 PC의사례보다더큰위험을불러올지도모른다. 또한, 시만텍 (Symantec), 안철수연구소 (AhnLab) 등많은보안솔루션업체들이모바일보안시스템을개발하여부분적으로사용되고있지만, 아직 Android 마켓에는공개되지않은실정이다. 이러한문제를해결하기위해오픈플랫폼중의하나인 Android 상에일반 Linux에서동작하는 SELinux를사용할수있게끔환경을구축하여 Android 시스템의보안기능을강화하고자하였다. 2. Android 시스템의보안성 Android는일반 Linux kernel을 Android 플랫폼구동을위한부분을제외하고는아무런수정없이사용되고있다. 여러 Linux 배포판들은방화벽, SELinux등을활성화시키거나여러가지보안에관한어플리케이션을사용하여시스템의보안성을강화하려고하였다. 그러나 Android는일반 Linux kernel을사용한만큼보안관련기능이매우약하다. root의권한이시스템에악영향을미칠수있는가능성을갖고있는만큼이를보호하기위해 root의권한을갖더라도모든권한을가질수없는시스템이필요하다. SELinux는이렇게 root의권한을갖더라고모든권한을가질수없게하기위해개발되어졌다. SElinux는사용자가하고자하는모든동작을 network hooking의방식과비슷한동작으로 access 권한을처리하게된다. 즉, Linux kernel 내에발생되는 operation에대해 SELinux가 hooking을하여해당 operation이파일이나디렉토리에 access가가능한것인지아닌지확인하게된다. 그림 1에서와같이 SELinux가 access 권한을강제적으로제한할수있는가장큰원인은 Linux 내의모든파일이나디렉토리및모든 process에 security context라는것을부여하고이것을 security policy DB에따로저장하여 DB에없는동작은강제로차단하는데있다. [ 그림 1] SELinux가적용된시스템의구조 SELinux는사용하기가매우어렵지만환경설정만잘해놓으면매우뛰어난보안시스템이라고할수있다. 기능적인면에서의 SELinux는외부에서의시스템접속을허용하지않는다. 가령 DDoS (Distribute Denial of Service attack: 분산서비스거부 ) 공격과같은것을통하여 root의권한을얻어접속에성공하였다하더라도내부적으로 access 권한이 security context에따라다르기때문에모든동작에대하여강제로차단시킬수있게된다. SELinux는이러한서비스를제공하여사용자는시스템내의중요한정보를보호할수있다. 3. 전체시스템구성 Android는 Google에서개발한 Linux와오픈소스기반의개발플랫폼으로서모바일전용오픈소스소프트웨어 toolkit이며, 어플리케이션은 Java로작성해야하고가상머신 Dalvik 위에서실행된다. Google은대부분의 Android 소스코드를공개하였고, 이에따라제한없이 Android를임베디드시스템에탑재하여개발할수있게되었다. Android는완전한개방형환경을지향하고있고시스템의 kernel 또한개방형 OS 인 Linux kernel 2.6.x를채택하고있다. Android 플랫폼의가장아래부분이 OS를담당하고있는 Linux kernel이고, 이위에여러라이브러리와 Android 런타임 (run time) 이존재한다. 그위에어플리케이션프레임워크와중요어플리케이션들로이루어진다. Linux는이미수많은하드웨어에이식된바있는검증된 OS로, Android는하드웨어나주변기기에대응하기위하여 Linux kernel을사용한메모리관리, 프로세스관리등의 H/W 종속적인작업을수행한다. 우리나라모바일시장에서표준화된어플리케이션개 3006
SELinux 기반안드로이드보안시스템구축에관한연구 발을위해위피 (WIPI) 를이용하고있는것처럼 Android 도이와유사하게 virtual machine 방식의런타임계층을따로두고있다. Android의가장큰특징중의다른하나가바로모든어플리케이션이자바로개발된다는점이다. Android는모바일환경에서의성능최적화를위해자체적으로 Dalvik이라는 JVM (Java virtual machine) 을개발하였다. Android는 Dalvik이라는런타임환경을통해더확실하게 HW와 SW를계층화하고있다. 표준위피가탑재된어떠한단말에서도동일한어플리케이션을실행할수있는것과마찬가지로 Android도 Dalvik이동작하는모든단말기에서 Android 어플리케이션이동일하게실행가능하다. Android는오픈플랫폼답게여러오픈소스등을결합하여편리한어플리케이션개발도구를제공하고있다 [6,7]. Android 어플리케이션은자바로개발되기때문에자바통합툴로잘알려져있는이클립스 (Eclipse) 개발환경을이용하게된다. SDK를설치하면이클립스플러그인 (Eclipse Plug-in) 형태로 Android 전용어플리케이션을개발하여 Android 에뮬레이터등여러개발도구들과자동으로연결할수있게된다. Android 전체소스를받아서시스템을빌드하기위해서는몇가지시스템의제약으로서 Linux 상에서개발도구를갖추고있어야하지만, 일반어플리케이션개발을위해서는이클립스와 JDK만설치되면되기때문에 Windows XP/Vista, Linux, MacOS 등대부분의운영체제에서쉽게사용할수있다. 그림 2와같이전체시스템을설계하였으며, Android 의 OS Layer에서 SELinux를활성화 (enable) 시키고, Android 환경에맞게개발한 policy DB에따라작동할수있도록한다. 또, 라이브러리계층에서 SELinux 관련라이브러리를추가하고, user application을이용해손쉽게 SELinux를셋팅및작동제어할수있는환경을개발하였다. Android 플랫폼에서 Linux kernel 단에존재하는 SELinux를사용할수있는환경을구축하여시스템관리자와보안관리자의기능을분리하고, 슈퍼유저라도시스템의중요한파일및디렉터리, 그리고프로세스에함부로접근할수없도록한다. 또접근권한이없는 subject 가 object에 access하는것을차단할수있도록한다. 4. 시스템구현가. SELinux 환경구축 기존의 Linux, Unix 계열인증과권한시스템은해커가시스템의취약한부분을공격하여 root 권한을획득하면, 해당시스템의모든자료는물론, 모든데몬 (demon) 에대한실행권한이주어지면서해커에의해시스템이파괴될위험이있다. 이러한문제점을해결하고오픈소스인 Linux kernel의보안을강화시키기위해미국의 NSA에서 SELinux를개발하게되었다. 특정데몬의버그를통해 root 권한을획득하더라도다른데몬이나시스템에는접근할수없도록하여시스템의보안을강화하였다. Linux kernel 2.6 이상버전에는기본적으로 SELinux 가들어가있기때문에, Android kernel 안에도존재하지만 Android에서는 SELinux를사용하지않기때문에 Android의 Linux kernel에서도 SELinux가활성화되어있지않다. Android에서는 kernel에존재하는 SELinux를사용하지않기때문에, 어떤어플리케이션이시스템콜을호출하면 UID, GID와같은기본적인허가만확인을하고, 요청을허용해버린다. SELinux 환경을구축하기위하여우선그림 3과같이 SELinux kernel의 configuration을설정하였다. [ 그림 2] 전체시스템구성도 [ 그림 3] Security option setting 3007
한국산학기술학회논문지제 11 권제 8 호, 2010 에뮬레이션환경에서는 PC에서동작하는 ADB(Android Debug Bridge) 툴을사용해 ADBD 프로세스와통신함으로써 Linux의쉘을조작할수있다. 쉘조작으로이용하는 ls나 mv 등의명령어는일반 Linux의경우 busybox를통해관리하지만, Android에서는그림 4와같이 Google 에서자체적으로제작한 toolbox를이용하고있다. Busybox Settings ---> Build Options ---> [*] Build BusyBox as a static binary (no shared libs) 그림 6, 그림 7은각각 toolbox, busybox로 ls -1 실행한결과이며, 그림 8은타겟 board에보안관련 utility 디렉토리생성결과이다. [ 그림 4] Android toolbox 파일시스템구조 [ 그림 6] toolbox 로 ls -l 실행결과 그림 5와같이 Linux kernel 안에있는 SELinux를사용하기위해서는 busybox안의 SELinux 관련유틸리티를이용할수있어야한다. SELinux를활용하여 Android 보안환경을구축하기위해 busybox를 Android 환경에맞게 static build하여 Android 시스템에포함시켰다. [ 그림 7] busybox 로 ls -l 실행결과 [ 그림 5] 보안 Application 용 Root FS reorganization Android에는 GPL 기반라이브러리가없기때문에 Android 상에서구동되지않게되므로이들각각은모두 static build를해줘야하고, 이를위해서는타겟용으로 build하기위해사용되는크로스컴파일러 (cross compiler) 안에 SELinux 및방화벽관련동작을위한라이브러리를모두 build해서포함시켜주어야한다. 따라서 busybox configuration은아래와같이설정하였다. Busybox Settings ---> General Configuration ---> [*] Support NSA Security Enhanced Linux( 이부분을체크해야 SELinux Utilities 옵션이나타남.) SELinux Utilities -> [*] chcon [*] Enable long options [*] getenforce [*] getsebool [*] load_policy [*] matchpathcon [*] restorecon [*] runcon [*] Enable long options [*] selinuxenabled [*] setenforce [*] setfiles [*] Enable check option [*] setsebool [*] sestatus [ 그림 8] 보안관련 utility 디렉토리생성결과 SELinux 관련라이브러리의설치는아래와같다. libsepol-1.16.14.tar.gz (181KB) libselinux-1.34.15.tar.gz (130KB) libsemanage-1.10.9.tar.gz (154KB) checkpolicy-1.34.7.tar.gz (56KB) bison-2.3.tar.gz (6,920KB) flex-2.5.35.tar.gz (1,423KB) selinux package download : http://userspace.selinuxproject.org/trac/wiki/releases /nfsboot/nfsboot.android/init.rc파일에 SELinux 마운트시키는 shell명령추가는 mount selinuxfs none /selinux noauto 이며, 그림 9, 그림 10은각각 mount 상태와보안허가확인을나타낸다. 3008
SELinux 기반안드로이드보안시스템구축에관한연구 [ 그림 9] SELinux mount 상태확인 [ 그림 10] List security context and permission 현재에는보다완화된 policy 패키지 targeted policy가설치할때기본으로제공되고있다. 일반사용자들이 SELinux를사용하기위해서는수준높은전문기술이필요하다. targeted policy는자주문제시되는부분들만우선적으로적용시키고, 나머지는표준 Linux 보안과동일하게운영되도록적용한 policy이다. 현재, targeted policy에서는 dhcpd, httpd (apache.te), named, nscd, ntpd, portmap, snmpd, squid, syslogd 데몬을관리한다. 이들에대한 policy 파일은 /etc/selinux/targeted /src/policy/domains/program에서찾을수있다. 그림 12는 SELinux 작동테스트를위한 policy 로드설정이며, 그결과는그림 13과같다. 나. SELinux 작동테스트그림 11에서와같이 subject가 object에 access하기위해서는 subject가갖고있는 security context가 object의 security context에대하여 access 권한을갖고있는지 security policy DB에서확인하고권한이있으면 access할수있지만만일권한이없으면 access할수없게된다. [ 그림 12] SELinux disabled [ 그림 11] SELinux 의동작원리 이로써아무리모든권한을다가질수있는 root라도 root 에부여된 security context가특정 object의 security context 에대한권한이 DB에없다면 root는모든동작을다할수없게된다. 모든 subject와 object( 사용자, 프로그램, 프로세스및이들의동작대상인파일과디바이스를포함한시스템전체 ) 에대한 access 허가를포함한패키지로페도라 (Fedora) 에서사용가능한 policy에는 strict, targeted가있다. 페도라코어에서 SELinux policy로서 strict policy를적용함으로인해발생하게된여러가지문제점때문에 [ 그림 13] SELinux policy 로드 policy DB를 Android 타겟보드로이동한결과는다음과같다. [root@toryhost refpolicy]# pwd /project/selinux/refpolicy [root@toryhost refpolicy]# make [root@toryhost refpolicy]# cp policy.21 /nfsboot/ nfsboot.android/system/etc/selinux/targeted/policy/ 3009
한국산학기술학회논문지제 11 권제 8 호, 2010 그림 14는 Android cupcake 1.5 platform의 full source 를다운로드후 build한것이고, 그림 15는 Android 플랫폼안에존재하는 init.c source이다. 그림 16과같이 Android 시스템에 SELinux policy가적용된것을확인할수있다. sdcard를제외한나머지디렉터리에접근권한이없는어떠한 subject도 object에대해임의로접근하는것을막을수있다. [ 그림 14] Android cupcake 1.5 platform full source 다운후 build 다. 보안어플리케이션구현 Java로제작한 SELinux 설정어플리케이션이다. 기존의 x86계열의 Linux에서적용하고있는보안 policy에비해비교적간편하고보다쉽게 SELinux policy를시스템에적용할수있도록제작하였다. 그림 17, 18, 19과같이 Application단에서 SELinux를활성화또는비활성화시킬수있고, 접근레벨을조정할수있다. [ 그림 15] Android platform 내에존재하는 init.c 어플리케이션에서관리하는보안스크립트를부팅될때적용되도록하기위하여 Android가부팅될때수행되는 init 프로세스에스크립트가수행이되도록 selinux_setting() 함수를추가하였다. user application에서보안설정을변경하여스크립트의내용이달라졌을때, 달라진내용이적용되도록하기위해 SELinux setting demon을 kernel 상에서돌려준다. Android에서 SELinux를사용하기위해관련유틸리티들을필요로하는라이브러리와함께빌드를해서타겟에올린후, kernel에서비활성화되어있는 SELinux를활성화시키고, Android 환경에맞게보안 policy DB를구축하였다. policy DB에 Android 환경에서사용될 policy DB를 android.te 라는이름으로생성한후 Android 환경에맞게 context를새롭게정의하고각각의 context에대한접근권한을 "allow [ 컨텍스트 ] [ 대상 ] { 접근권한 }" 의형태로추가하였다. [ 그림 17] [ 그림18] [ 그림19] SELinux 활성화 policy적용 접근레벨조정 그림 20은 User Application을 S3C6410 Board[8] 상에서구동한결과를나타낸다. [ 그림 20] S3C6410 Board 상에서 User Application 의구동 라. 보안테스트앞에서 SELinux를적용하게되면 root의권한이라도강제적으로동작을차단할수있다고하였다. 따라서그림 21은 telnet으로 Android시스템에접속하여 root의권한으로로그인하였으나 SELinux의권한때문에아무런동작을할수없다는것을보여준다. [ 그림 16] SELinux policy 적용확인 3010
SELinux 기반안드로이드보안시스템구축에관한연구 Proc. of KIISE2009 Fall Conference, Vol.36, No.2(B), pp.388-393, 2009. [4] Frank Mayer, Karl Macmillan, David Caplan, SELinux by Example: Using Security Enhanced Linux, Peachpit Press, 2007. [5] James Morris, "File System Labeling in SELinux", Redhat, 2004. [6] M.Tim Jones, "Anatomy of Security-Enhanced Linux(SELinux)", IBM, 2008. [7] 문일헌외,.NET Compact Framework를활용한 SOA 환경기반의임베디드 RFID 미들웨어시스템설계및구현, 한국산학기술학회논문지, Vol.9, No.6, pp.1639-1646, 2009. [8] 이솝보드개발자, Aesop-6410 Board Manual, 이솝보드, 2009. [ 그림 21] SELinux 적용후 root 로 telnet 접속시파일삭제실패확인 노태정 (Tae-Jung Lho) [ 정회원 ] 5. 결론 Android 플랫폼은스마트폰뿐만아니라 Net-book PC 나 TV 셋톱박스, 디지털액자, 노래방기기, 유선전화기, 의료기기, 그리고레스토랑전자메뉴판등주변의거의대부분의전자제품속에들어갈가능성을갖고있고, 이들은가정의홈네트워크로연결되어유기적으로작동될수도있기때문에 Android의보안은한층더강화될필요성이있다. 이에대하여 SELinux를이용한 Android 시스템보안체계구축을목표로하였고, 기존 Linux에서사용하고있는보안기능들을 Android에적용함으로써시스템의활용성및효율성, 그리고호환성을높일수있도록 S3C6410 Board상에서구동가능한시스템을개발하였다. 참고문헌 [1] 김정훈, 구글의안드로이드프로그래밍, 성안당, 09. [2] 권오철, 김주성, 이창건, 하은용, 안드로이드모바일플랫폼에서의사용자인터페이스자동전환기술의개발, Proc. of KIISE2009 Fall Conference, Vol.36, No.2(B), pp.436-440, 2009. [3] 오용석, 박찬익, 안드로이드기반모바일플랫폼을위한새로운 NAND 플래시메모리파일시스템, 1984년 2월 : 부산대기계설계학과 ( 공학학사 ) 1986년 2월 : KAIST 생산공학과 ( 공학석사 ) 1992년 2월 : KAIST 정밀기계공학과 ( 공학박사 ) 1986년 2월 ~ 1999년 2월 : 삼성중공업기전연구소 ( 수석연구원 ) 1999년 3월 ~ 현재 : 동명대학교메카트로닉스공학과부교수 < 관심분야 > IT 융합 Mechatronics, Robotics, 제어. 자동화, LCD 물류반송자동화, 태양광발전 Module 제조장비등 정성화 (Sung-hwa Jung) [ 준회원 ] 2008 년 7 월 ~ 2010 년 2 월 : 삼성전자소프트웨어멤버십 18 기 2010 년 2 월 : 동명대학교메카트로닉스공학과 ( 공학학사 ) 2010 년 2 월 ~ 현재 : 삼성전자반도체사업부 ( 메모리 ) < 관심분야 > Robotics, Embedded System, 정보보안, 응용 Software 등 3011