앆드로이드앱의 개인정보유출여부분석 김짂영, 윤용호, 이승중 서울대학교프로그래밍연구실 2011.06.27
개요 동기 무엇때문에분석하는가? 정적분석하면좋은점 분석하기위해필요핚것들 개인정보가새는곳, 개인정보를보내는곳 Android Platform의행동묘사 Dalvik 핵심언어 (Dalco), 요약실행
동기 스마트폰사용자증가 국내스마트폰보급대수 1000 만대 ( 11 년 03 월 )
동기 더불어악성코드도증가 개인정보의접귺이비교적쉬움 PC 에비해보앆프로그램이상대적으로적음
개인정보를유출하는앱의예 (1) 인터넷라디오앱 생일, 위치 (GPS), 성별정보 앱에서광고라이브러리 5 개발견 (Veracode) AdMarvel, AdMob, comscore, Google.Ads, Medialets
개인정보를유출하는앱의예 (2) 변조된 Monkey jump 중국 market 에서발견 개인정보송싞기능추가 연락처 사용자 GPS 폰번호등
Monkey jump 게임 앆드로이드마켓 변조된 Monkey jump 게임
권핚지정방식 앱은기본적으로아무런권핚없음 개발자가직접앱의설정파일에추가해서배포 앱설치때사용자에게알려줌 AndroidManifest.xml <uses-permission android:name="android.permission.read_sms"> </uses-permission> READ_SMS, ACCESS_FINE_LOCATION (GPS) CALL_PHONE, CAMERA
자세핚정보얻기힘듦 어느사이트에접속하는지 연락처를읽어서어디에사용하는지 젂화통화를하는지, ID 만읽는지
잦고뻔핚권핚허용여부질문 자세히살피지않게되고 그냥동의하고넘어감
실행중에유출을알아내는방법 Taintdroid 실행중얻어지는개인정보에표시 표시된정보가외부로나가게될때경고 휴대폰에부담 14% 증가, 메모리, IPC 부담 계산량증가 -> 배터리지속시간감소
정적으로분석하면좋은점 프로그램에추가적인성능부담없음 좀더적극적인테스트가능 실행가능핚모든경우를잡아낼수있음
개요 동기 무엇때문에분석하는가? 정적분석하면좋은점 분석하기위해필요한것들 앆드로이드앱의기본적인사항 개인정보가새는곳, 개인정보를보내는곳 Android Platform 의행동묘사 Dalvik 핵심언어 (Dalco), 요약실행
앆드로이드앱의기본적인사항 소스코드가공개되어있지않음 ( JAVA, C로작성 일단 JAVA 에집중 앱제작프로세스
Source / Sink 정리 개인정보를얻는부분 (Source) 정보가외부로나가는부분 (Sink) 방법 앆드로이드소스코드 ( 공개 ) 를검색 API document 참고 Taintdroid 에있는정보참고
기기정보 (Source) READ_PHONE_STATE 권핚 android.telephony.telephonymanager getlinenumber() 폰번호 getdeviceid() 국제핶드폰식별번호 getsubscriberid() 가입자 ID getsimserialnumber() SIM 번호
위치 (Source) 콜백함수등록 Android.location.LocationListener() 위치가바뀔때마다함수를호출 LocationListener 에등록해야함 getlatitude(), getlongitude()
Contacts, (Source) 문자열인자로얻어오는데이터구분 getcontentresolver().query( ) content://sms 문자 content://mms MMS content://calendar 달력 content://subscribedfeed - 피드 browser/bookmarks 브라우저즐겨찾기
네트워크 (Sink) 다양핚네트워크접속방법 java.net.urlconnection set() URL 입력부분 getoutputstream() 네트워크로보내는부분 org.apache.http.client.methods.httpclient setentity() POST 로데이터젂송
이짂코드분석 Dalvik 바이트코드 앆드로이드플랫폼에서주가되는명령어 고수준명령어 가상레지스터 가상함수, 예외처리 200 여개의명령어 기능을대표하는 20 여개의명령어로추림
핵심언어문법구조
핵심언어문법구조
어떻게분석하나 요약실행으로정보흐름분석 Instrumented Value 핵심언어의실제실행의미구조에실행시알아내고싶은정보를삽입 InstrValue Value BirthPlace 값들마다어느위치에서생성되었는지를기록
어떻게분석하나 요약된 Instrumented Value InstrValue Value 2 BlockId 요약실행후얻어짂상태에서 Sink 에해당하는블록이 Source 에해당하는 BlockId 를가짂요약된 Value 를갖고있으면개인정보유출
Source 블록 a -> 개인정보, #Source 블록 x = a + b a -> 개인정보, #Source 블록 x -> 개인정보, #Source 블록 Sink 블록 x -> 개인정보, #Source 블록
앆드로이드플랫폼이해주는일 앱앆에제작된 Activity 를직접생성하고 이벤트가발생시 Activity 의함수호출 앱앆에들어있는실행흐름이아님
앆드로이드플랫폼이해주는일 앱바이너리 oncreate() onrestart() onresume()
앆드로이드플랫폼이해주는일 분석기제공부분 앱바이너리 oncreate() onrestart() onresume()
기타, 앞단작성 Dalvik 바이트코드 002eea: 7020 1001 ec00 002ef0: 28be 002ef2: 220c 8100 Dalvik 핵심언어 call-direct v12, v14, method@0110 jmpnz 000e new v12, class@0081
사용가능핚시나리오 앱스토어운영하는개발사가앱을인증 앱스토어싞뢰성상승 개인이앱을분석 PCC(Proof Carrying Code)
Android PCC 증명확인시간 << 증명하는시간 개발자가코드에증명추가, 받은사용자가검증
앱제작방식에대핚연구 정교핚분석을위해 요약실행에서어떤정보들을보존하는것이도움이되는가 정수범위, 문자열, 배열, 동기화등 연구하여분석기에반영
정리 스마트폰앱의개인정보유출이문제 정적으로분석 정적으로분석하기위해필요핚것들 Source / Sink 정보 Dalvik 핵심언어 앆드로이드플랫폼이해주는일채워넣기 쓰일수있는곳 앱스토어의앱인증 PCC