Firefox OS

Digital Forensic Wikipedia
둘러보기로 가기 검색하러 가기

역사[편집]

Firefox OS는 Mozilla 재단이 개발한 스마트폰 및 태블릿 컴퓨터용 오픈 소스 운영체제이다. HTML5 응용 프로그램들이 자바스크립트를 이용하여 기기의 하드웨어를 통합할 수 있게 구현하였다.
Firefox OS는 중남미, 동유럽 등의 중진국 이하 신흥시장을 겨냥하고 있으며, 이에 따라 합리적 가격대의 중저가 단말기 출시를 목표로 하고 있다.
2013년 2월 스페인 바르셀로나에서 열린 모바일 월드 콩그레스(Mobile World Congress)에서 처음으로 ZTE사의 오픈(Open)과 알카텔(Alcatel)사의 원터치 파이어(One Touch Fire)가 발표되었으며,
이 중 ZTE사의 오픈(Open)은 2013년 7월 스페인 통신사업자인 텔로포니카를 통해 출시되었다.
Firefox OS의 개발주체인 Mozilla 재단에 따르면 현재 Firefox OS를 기반으로 한 단말기를 출시하기로 한 제조업체들은 다음과 같다.
장비제조사는 퀼컴(Qualcomm), LG전자, TCL이 있으며, 이동통신사로는 텔레포니카(Telefonica), T-모바일(T-Mobile), 차이나유니콤(China Unicom), 스프린트(Sprint), KT 등이 있다.
그밖에도 애플리케이션을 지원하는 회사들도 있다. Firefox OS와 제휴관계를 맺은 회사들은 그림과 같다. Firefox OS의 버전 변천사는 아래 표와 같다.


Firefox OS 제휴 회사


Firefox OS 버전 변천사
버전 출시일 코드네임 Gecko 버전 Security Fixes 포함
1.0 2013.02.21 TEF Gecko 18 Gecko 18
1.0.1 2013.07.02 Shira Gecko 18 Gecko 20
1.1.0 2013.03.29 Leo Gecko 18 Gecko 23
1.2.0 2013.09.15 Koi Gecko 26 Gecko 26
1.3.0 2013.12.09 Gecko 28 Gecko 28

특징[편집]

Firefox OS는 중저가 시장을 겨냥하고 있는 만큼 저사양에서 동작하도록 설계가 되었다. ARMv6이상이면 동작을 할 수 있으며, 스마트폰에 기본적으로 탑재해야 하는 센서를 탑재하지 않아도 된다.
그만큼 저사양 스마트폰의 하드웨어 성능에 최적화 할 수 있다. Firefox OS운영체제는 HTML5 기반으로 구현이 되었다.
운영체제 자체가 Firefox 기반이기 때문에 HTML5 기반 웹앱을 사용하고 Firefox에서 지원하는 것을 모두 지원하고 있다. 특히 Firefox의 확장기능을 그대로 쓸 수 있다.
Firefox OS는 대기 화면에서 두 가지 화면이 있는데 상단에 웹앱 검색화면과 하단에 자신의 웹앱 관리화면이 있다. 그 중에서 웹앱 검색화면은 Firefox OS의 특징이자 주요 기능이다.
웹앱은 사용자가 검색한 내용을 지원하는 애플리케이션들과 내용들을 사용자의 화면에 출력해준다. 이는 사용자의 편의성을 극대화시켜 구현한 것이다.
예를 들어 사용자가 Soccer라는 검색어를 웹앱 검색화면에 입력하였다고 하면, 배경화면이 Soccer와 관련된 화면으로 바뀌면서 Soccer와 관련된 혹은 내용을 포함하고 있는 애플리케이션들이 화면에 보이게 된다. 아래 그림은 Soccer를 검색한 화면이다.

Firefox OS 검색 기능


그리고 Firefox OS는 오픈소스 프로젝트로 소스를 다운받아 직접 빌드를 할 수 있다. 아래 그림은 Firefox OS 소스를 리눅스에서 빌드한 화면이다.

리눅스에서 Firefox OS 빌드한 화면


Firefox OS는 Firefox 웹 브라우저 부가기능으로 Firefox OS Simulator를 제공하고 있다. 사용자의 Firefox OS에 대한 접근성을 높인 것이다.
아래 그림은 Firefox 웹 브라우저에서 Firefox OS Simulator를 실행한 화면이다.

Firefox OS Simulator 구동 화면


Mozilla 재단은 Firefox OS가 설치된 기기뿐만 아니라 안드로이드 기기에서도 동작을 할 수 있게 지원하고 있다. 대표적으로 구글 레퍼런스 폰인 Nexus S와 갤럭시 S에 포팅할 수 있게 홈페이지에 명시를 해 놓았다.
이를 통해 기존 안드로이드 기기에 Firefox OS를 포팅할 수 있다. 아래 그림은 구글 레퍼런스 폰인 Nexus S에 Firefox OS를 포팅한 화면이다.

Nexus S에 Firefox OS를 포팅한 화면

아키텍처[편집]

Firefox OS는 Gonk, Gecko, Gaia로 이루어져 있다. 제일 하위 레이어인 Gonk는 Firefox OS 플랫폼의 더 낮은 레벨의 운영체제로, 리눅스 커널과 하드웨어 추상화 계층(Hardware abstraction layer : HAL)으로 구성되어 있다.
커널과 여러 개의 라이브러리들은 일반적인 오픈소스 프로젝트들이며, 리눅스, libusb, bluz 등이다. HAL의 또 다른 부분들은 안드로이드 프로젝트(GPS, camera 등)와도 공유된다.
Gonk는 think 리눅스이다. Firefox OS는 Gonk에 대한 전반적인 통제를 가지고 있으며 이를 이용하여 시스템을 구동한다.
Gecko는 중간계층에 있는 레이어로 Firefox OS 애플리케이션 런타임을 담당하고 있다. Gecko는 공개된 표준의 3가지 팩터(HTML, CSS, JavaScript)에 대한 모든 지원을 제공한다.
Gecko가 지원하는 모든 운영체제상에서 관련 PAI들이 제대로 동작하는 것을 보장한다. Gecko에는 네트워크 스택, 그래픽 스택, layout 엔진, JavaScript 버추얼 머신과 포팅 레이어들을 포함하고 있다.
Gaia는 Firefox OS에서 가장 상위 레이어이다. Firefox OS가 구동된 후에 화면에 표시되는 것들은 Gaia 층에서 생성된 것이다. Gaia는 최신의 스마트폰에서 보이는 잠금 화면, 홈 화면, 모든 표준화된 애플리케이션들을 구현하고 있다.
Gaia는 전적으로 HTML, CSS, JavaScript로 구현되어 있다. 내부 OS와의 유일한 인터페이스는 개방된 Web API들을 통해 이루어진다. 아래 그림은 Firefox OS 아키텍처를 나타낸 것이다.

Firefox OS 아키텍처

파티션 정보[편집]

Firefox OS의 파티션들 중에서 중요한 파티션은 /system, /data, /mnt/sdcard이다. /system 파티션의 경우 Firefox OS 시스템 정보를 얻을 수 있으며, /data는 애플리케이션 설치파일이 있는 공간이다.
또한 /mnt/sdcard는 내부 sdcard이다. /system과 /data는 ext4 파일시스템을 사용하며 /mnt/sdcard는 ext4 또는 vfat 파일시스템을 사용한다. 그리고 이 세 파티션에서 사용자가 사용한 주요한 데이터들을 얻을 수 있다.
아래 표는 Firefox OS가 사용하는 파티션의 정보, 파일시스템, 권한을 정리한 것이다.

신기술 - [표 4-6] 
Firefox OS 파티션 정보
Mount Point File System Options
/ rootfs read-only
/dev tmpfs read-write, nosuid, noexec,
mode=0755
/dev/pts ptsfs read-write, nosuid, noexec,
mode=0600
/proc proc read-write, nosuid, nodev, noexec
/sys sysfs read-write, nosuid, nodev, noexec
/cache yaffs2 or ext4 read-write, nosuid, nodev, noexec
/efs yaffs2 or ext4 read-write, nosuid, nodev, noexec
/system ext4 read-write, nodev
/data ext4 read-write, nosuid, nodev, noexec
/mnt/sdcard ext4 or vfat read-write, nosuid, nodev, noexec,
uid=1000, fmask=0702,
dmask=0702
/acct cgroup read-write, nosuid, nodev, noexec
/dev/cpuctl cgroup read-write, nosuid, nodev, noexec

부팅 프로세스[편집]

Firefox OS를 구동하면, 첫 번째로 부트로더를 실행한다. 그 다음 주 운영체제를 불러오는 과정을 진행한다. 점진적으로 높은 레벨의 부트로더들을 연속적으로 두어서 다음 부트로더를 부팅을 한다.
이 단계의 마지막에서는 Linux Kernel로 실행이 넘어간다. 부트로더들은 장치로 이미지를 플래싱(flashing)한다.
각각의 장치들은 각각 다른 프로토콜을 사용하는데, Firefox OS 단말기와 보통의 Android 단말기들은 fastboot 프로토콜을 사용한다.
Firefox OS가 사용하는 Linux Kernel은 안드로이드 오픈소스 프로젝트를 기반으로 만들어졌다. 그렇기 때문에 Gonk가 사용하는 리눅스 커널은 오리지널 리눅스와 거의 같다고 이야기할 수 있다.
Linux Kernel을 구동하게 되면 마지막에는 init 프로세스가 시작된다. 이 시점에서 마운트된 디스크는 램디스크(RamDisk) 뿐이다.
이 램디스크는 Firefox OS 빌드과정에서 만들어졌으며, init 및 시작 과정 스크립트, 로드할 수 있는 커널 모듈들과 같은 중요한 유틸리티를 가지고 있다.
일단 init 프로세스가 시작되면 리눅스 커널은 사용자 공간(User Space)으로부터의 시스템 콜, 인터럽트, 하드웨어 기기로부터의 요청들을 처리한다.
init 프로세스는 필요한 파일 시스템들을 마운트하고 시스템 서비스들을 시작하는 일을 처리한다. 이 일들의 처리 후에는 프로세스 매니저로 역할하게 된다.
먼저 다양한 서비스들을 시작시키기 위해서 필요한 명령들을 가지고 있는 스크립트들(init*.rc 파일들)을 수행한다.
Firefox OS의 init.rc는 오리지널 안드로이드의 init.rc에서 Firefox OS를 시작하는데 필요한 것들을 추가한 형태이다. init 프로세스의 가장 중요한 작업 중 하나는 b2g(boot to Gecko) 프로세스를 시작시키는 것이다.
b2g 프로세스는 어플리케이션이 하드웨어 장치나 API로 접근하는 것을 제어한다. 아래 그림은 Firefox OS userspace process architecture를 나타낸 것이다.
b2g 프로세스는 높은 권한을 가지며 대부분의 하드웨어 장치를 액세스할 수 있다. b2g는 modem, display framebuffer, GPS, Camera 및 기타 하드웨어 기능을 제공한다.
b2g는 Gecko layer의 libxul.so에 의해 구현이 되어있다. b2g프로세스 이외의 주요 프로세스의 정보는 다음과 같다.
rild 프로세스는 modem interface이다. rild는 무선 인터페이스 계층(RIL)을 구현하는 데몬이다. rild는 바인딩된 UNIX-domain socket과 연결할 수 있다. 이것은 init 프로세스에 의해 실행이 된다.
Firefox OS에서 RILD 클라이언트는 rilproxy 프로세스이다. 이 프로세스는 RILD와 b2g 프로세스에서 프록시 역할을 한다. rilproxy 코드는 github에서 찾을 수 있다.
mediaserver 프로세스는 오디오 및 비디오 재생을 제어한다. Gecko는 Android Remote Procedure Call(RPC) 메커니즘을 이용하여 통신을 한다.

Firefox OS userspace process architecture


재생할 수 있는 OGG Vorbis audio, OGG Theora video, WebM video는 Gecko가 디코드되어 mediasever process로 직접 전달된다.
다른 미디어 파일들은 libstagefright에 의해 디코딩되어 mediaserver process로 전달된다.
그밖에도 network interface를 설정하는 netd 프로세스, Wifi Access point와의 연결을 처리하는 표준 UNIX 스타일 데몬인 wpa_supplicant, 블루투스 통신을 처리하는 dbus-daemon 등이 있다.

데이터 수집 기법[편집]

논리적 추출 방법은 USB(Universal Serial Bus) 인터페이스를 이용하여 스마트폰의 플래시 메모리 파일 시스템으로부터 스마트폰에 저장된 파일과 디렉터리를 추출하는 방법이다.
Firefox OS는 안드로이드 운영체제와 같이 해당 기기를 PC와 USB 케이블로 연결한 후 adb 프로토콜을 이용하여 데이터를 수집할 수 있다. 아래 그림은 adb 프로토콜을 이용하여 파일을 추출하는 예이다.

adb 프로토콜을 이용한 데이터 수집

아래 그림은 Firefox OS에서 데이터 수집 절차도이다. adb와 dd명령어로 선별수집 및 파티션을 이미징 할 수 있다. 데이터 수집 절차도

[[아티팩트/Firefox OS|아티팩트]][편집]

bluetooth, wifi, dhcp 정보를 저장하는 misc폴더에는 bluetooth, wifi, vpn 등의 폴더가 존재하며 안에는 각 해당 정보가 저장된다.
bluetooth가 연결되면 /misc/bluetoothd/ 아래에 bluetooth MAC주소로 폴더가 생성된다. 그 폴더아래에 bluetooth로 연결된 기기에 대한 정보와 설정 정보가 저장되게 된다.
우선 config파일을 보게 되면 해당 bluetooth의 설정정보가 존재한다. 아래그림은 config파일의 내용을 캡처한 것이다. config 파일을 보게 되면 기기끼리 paring 여부와 onmode, mode와 같은 정보를 얻을 수 있다.

4-71