드디어.. 다른걸 공부할 수 있다는것에 소모임 형님들께 정말 깊은 감사를 드립니다..
이번년도에 소모임 부회장 형님덕분에 Android에 있는 취약점 분석을 위한 Android공부를 시작 할 수 있었다.
그러므로 오늘은 Android가 정확히 무엇인지 알아보는 시간을 가질것이다.
목차(큰 틀)
- 안드로이드란 무엇인가?
- 안드로이드의 4대 구성요소가 무엇인가?
안드로이드란 무엇인가?
Android란?
핸드폰이나 태블릿등과 같은 '모바일'기기(터치스크린과 GUI를 가지는 기계)에서 쓰이는 'OS'다.
안드로이드 1.0에서 리눅스 커널 버전 2.6.25에서부터 시작된 리눅스 기반 OS이다.
Android와 다른 운영체제와의 차이점.
바로 포괄적 라이브러리 세트, 풍부한 멀티미디어 사용자 인터페이스 등등의 유저 친화적인 기능과
다른 정보 가전기기에 적용할 수 있는 연동성마저도 엄청난 OS라고 한다.
게다가 구글이 Android사를 인수해서 그 기술을 뿌리고, 사용자에게 보안 수준을 고를 수 있게 넘겨준 탓에 여러가지 보안 문제점이 있는것은 덤.
그러한 이유로 내가 앞으로 알아볼것은 이런것에 초점이 아닌 포괄적 라이브러리 세트, 연동성에 초점을 둬서 알아볼것이다.
여기서 생각나는 것들.
아무래도 Android에서의 취약점을 찾을거기 때문에 대체 어느부분에서 취약점이 생기는거지? 라는 생각으로 android의 구조와 취약점 예시를 찾아야겠다 생각하였다.
1. 구조
위 사진은 Android의 전체적인 구조라고한다.
이제 우리가 주목해야할 점은 저 Native C/C++ Libraries이다.
2. 안드로이드의 역사.
1.0 애(A)플파이 |
1.1 쁘띠 푸르,바나나 브래드 |
1.5 컵(C)케이크 |
1.6 도(D)넛 |
2.0~2.1 에(E)클레어 |
2.2 프로요(F) |
2.3 진저브레드(G) |
3.0~3.2 허니콤(H) |
4.0 ~ 아이스크림 샌드위치(I) |
4.1~4.3 젤리빈(J) |
4.4~ 킷캣(K) |
5.0~ 롤리팝(L) |
6.0~ 마시멜로(M) |
7.0~ 누가(N) |
8.0~ 오레오(O) |
9.0 파이(P) |
10 (퀸 케이크(Q)) |
11 (레드벨벳 케이크(R)) |
12 (사브리나(S)) |
13 (티라미수(T)) |
4.4까지는 그냥 .x가 바뀌어도 이름이 바뀌는데 5.0부터는 아예 큰 틀로 이름을 가져가는 역사를 가졌던것 같다.
A부터 해서 지금은 T까지 왔다.(지금은 U(14)p side down cake의 프리뷰까지 나왔다..)
3. 과거 취약점
일단 이 Android자체가 처음나왔을때에 보안패치가 아무것도 없을줄 알았는데.. 기본적인 대응은 했었다고한다.
1.5~ 2.2 스택 버퍼 오버런 방지, 정수 오버플로, double free()등등의 취약점을 방지하는등의 보안이 구현되있었다고 한다. but, CVE-2011-2357 - Android 브라우저 크로스 애플리케이션 스크립팅 CVE-2011-1823 - ?? CVE-2011-1149 - 2.3 이전 버전의 Android에서 발견된 취약점. 시스템 속성 공간에 접근을 그렇게 막아두지 않아서 생긴 일. |
,,, ~5.1 CVE-2015-1538 - MP4 Atom 처리 중 정수 오버플로우 CVE-2015-1539 - ESDS 처리 중 정수 언더플로우 CVE-2015-3824 - MPEG4 tx3g Atom 파싱 중 libstagefright의 정수 오버플로우 CVE-2015-3827 MPEG4 covr Atom 처리중 libstagefright의 정수 언더플로우 .... stagefright는 진짜 파도파도 괴담만 나오네요. 나중에 stagefright를 따로 다뤄바야겠네요.. |
CVE-2015-6640 - 커널의 권한 승격 취약점. -> 로컬 악성 애플리케이션이 커널 내에서 임의의 코드를 실행할 수 있다고 한다.
여기서 내가 초등학교 6학년때 유행했던 루팅이나 그런게 여기서 나왔던거 같기도 하다.
++Lucky patcher
CVE-2015-6641 - 블루투스의 권한 승격 취약성.
...
이외의 다른 취약점들을 보면 참 많은곳에서 시도가 가능하구나하는 생각이 들었다.
근데 여기서 몇가지 공통점을 발견할 수 있었다.
다들 멀티미디어 라이브러리에서 공격을 받고, 커널에 권한상승을 한것을 이용해서 이상한 짓거리를 하는것이였다.
여기서 나는 Android 취약점 발견하는 법중에서 OS안에 라이브러리에 있는 취약점을 이용할 수 있다는 것을 알 수 있었다.
Android의 가용언어
저런 취약점중에서는 어플리케이션을 이용하는 취약점이 많았다. 그런데 이런 어플리케이션은 어떤 언어로 이뤄져있을까?
1. JAVA
Android의 공식 언어. 엄청난 유연성을 지닌 언어이자 크로스 플랫폼 앱 개발 과정에서도 활용할 수 있다고 한다.
-> 다양한 라이브러리와 함께 활용할 수 있는 오픈소스 자료가 다양함.
but 학습이 어렵다. 작성된 코드가 많을수록 꼬일 가능성이 있다.
2. Kotiln
자바가 있는곳에는 코틀린도 있다. 라는 말을 들었던것 같다.
위와 같은 우스갯소리가 괜히 나온것이 아니다.
코틀린은 무료 오픈소스이자 자바보다 코드 작성 과정이 쉬운 언어라고 한다. 에러 발생률이 낮은것은 덤.
but 자바보다 실행 속도가 느리다고 한다.
3. C++
이 C++로 안드로이드 앱을 만들 수 있다는거 자체를 처음 알았다..
다른 언어들보다 복잡하지만, 매우 유연하다 한다.
--> 네이티브 앱에서 매우 빠르게 실행 할 수 있다는 장점으로 인해 쓰인다고 한다.
but, 여기서 취약점이 잘 터진다는 이야기가...
etc...
여기서 SDK, NDK이야기가 나오는데 이는 나중에 다뤄보도록 하겠다.
안드로이드의 4대 구성요소가 무엇인가?
안드로이드에는 4대 구성요소(컴포넌트)가 있다고 한다.
여기서 컴포넌트는 안드로이드 앱을 구성하는데 필요한 4개의 요소를 의미한다고 한다.
● 액티비티
|
- 사용자와 상호작용하기 위한 진입점
- 흔히 말해서, 실제로 사용자에게 보여지는 화면을 의미한다.
- 어플리케이션에 화면이 하나도 없으면, 사용자와 상호작용 할 수 없으므로, 적어도 하나의 액티비티는 반드시 필요하다.
- 하나 이상의 view 또는 viewgroup을 가지고 있어야 한다.
view = 텍스트, 버튼 이미지등등의 눈에 보이는것.
viewgruop = 레이아웃.
● 서비스
|
- 여러 가지 이유로 백그라운드에서 앱을 계속 실행하기 위한 다목적 진입점.(=액티비티랑 반대?)
=> 백그라운드에서 실행되는 구성요소로, 오랫동안 실행되는 작업을 수행하거나, 원격 프로세스를 위한 작업을 수행한다.
- ex) 예전에 유튜브를 종료해도 백그라운드에서 유튜브가 실행되어서 노래를 들을 수 있었다...(지금은 프리미엄 기술..)
● 방송 수신자(Broadcast Receiver)
|
- 시스템이 정기적인 사용자 플로우 밖에서 이벤트를 앱에 전달할 수 있도록 지원하는 구성 요소.
- 흔히 말해, 안드로이드 OS로부터 발생하는 이벤트 정보를 받고 대응하는 컴포넌트라고 한다.
- ex) 배터리 부족, 문자 수신, 전화 수신과 같은 정보를 받아서 이를 처리할 때 동작한다.
●콘텐츠 제공자
|
- 파일 시스템, SQLite 데이터베이스, 웹상이나 앱이 액세스할 수 있는 다른 모든 영구 저장 위치에 저장 가능한 앱 데이터의 공유형 집합을 관리하는 것이라고 한다.
- 용량이 큰 데이터를 공유하는데 적합하다.
- 우리가 앱을 처음깔면 나오는 '위치' 허용이나 파일 저장 허용과 같은 그런 창에서 위치나 파일 저장과 같은 능력이 콘텐츠 제공자라고 한다.
위의 취약점등의 자료 출처.
c++에 대한 생각을 담은 글들 - https://okky.kr/articles/445138
OKKY - 안드로이드 어플을 c++로는 만들 수 없나요?
c++이 빠르다라고 다들 말하는데 그런데 왜 안드로이드 어플은 자바로 만듭니까??
okky.kr
위의 취약점 출처 - https://source.android.com/docs/security/bulletin/2016-01-01?hl=ko
Nexus 보안 게시판—2016년 1월 | Android 오픈소스 프로젝트 | Android Open Source Project
Nexus 보안 게시판—2016년 1월 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 2016년 1월 4일 게시됨 | 2016년 4월 28일 업데이트됨 Google의 Android 보안 게시판 월간
source.android.com
안드로이드의 플랫폼 아키택처구조 출처 - https://developer.android.com/guide/platform?hl=ko
플랫폼 아키텍처 | Android 개발자 | Android Developers
Android is an open source, Linux-based software stack created for a wide array of devices and form factors. The following diagram shows the major components of the Android platform. The foundation of the Android platform is the Linux kernel. For example…
developer.android.com
안드로이드의 4대 구성요소 - https://developer.android.com/guide/components/fundamentals?hl=ko
애플리케이션 기본 항목 | Android 개발자 | Android Developers
애플리케이션 기본 항목 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android 앱은 Kotlin, Java, C++ 언어를 사용하여 작성할 수 있습니다. Android SDK 도구는 모
developer.android.com
[안드로이드] 4대 컴포넌트
컴포넌트 (Component) ? 컴포넌트는 구성 요소라는 뜻을 지니고 있다. 다시 말해서, 안드로이드 4대 컴포넌트는 안드로이드 앱을 구성하는데 필요한 4개의 요소를 의미한다. 안드로이드 4대 컴포넌
wookkingkim.tistory.com
'Android' 카테고리의 다른 글
안드로이드 부팅시 작동 순서 찾아보기 (0) | 2023.03.27 |
---|---|
JNI와 NDK에 대한 간단한 고찰. (0) | 2023.03.15 |
안드로이드에서 사용하는 자바는 뭐가 다를까? (0) | 2023.03.15 |
apk tool이란 무엇일까? (0) | 2023.03.15 |