DroidBot : A Lightweight UI-Guided Test Input Generator for Android

DeepDIV!·2024년 6월 6일
0

논문 리뷰

목록 보기
1/10
post-thumbnail

Paper : https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7965248

0. Abstract

DroidBot : 안드로이드 앱을 자동으로 테스트하기 위해 사용되는 프로그램
(안드로이드 앱의 동작을 테스트하고, 오류를 찾고, 성능을 분석하는데 사용되고 있음)

  • 어떤 안드로이드 앱이든 관계없이 UI-guided Test input 을 생성할 수 있음

  • App instrumentation이 필요 없음

    • 프로그램이 가벼워짐
    • 암호화된 앱에도 적용할 수 있음
    • Tested vesion과 Original version이 다를 수도 있다는 걱정을 할 필요 없어짐
  • Android-based 시스템, Customize sandboxes, Commodity device에 모두 적용 가능함

UI-guided Test input
사용자 인터페이스(UI)를 기반으로 Test input을 자동으로 생성하여 애플리케이션을 테스트하는 방법

  • 애플리케이션의 품질 보증을 할 수 있음
  • Test Coverage를 제공할 수 있음

App instrumentation
애플리케이션의 동작을 모니터링하고 분석하기 위해 애플리케이션 코드에 추가되는 코드나 도구

  • 안드로이드 환경에서는 주로 테스트 자동화 및 성능 분석을 위해 사용됨

Sandboxes : 가상화 프로그램
Commodity Device : 특정 task를 수행하기 위해 만들어진 장치

1. Introduction

DroidBot의 필요성

  • 안드로이드 앱을 자동으로 테스트할 수 있음

    • 자동으로 test input을 생성하여 테스트하기 때문에 여러 시나리오에 대해 다양하게 테스트 가능함
  • 어떤 안드로이드 앱이든 가능함

    • 안드로이드에 내장된 Testing/Debugging utilities 를 base로 모델링 알고리즘을 개발했기 때문에, unexplored code에 대한 prior knowledge가 필요없음
  • Test input에 대한 effectiveness를 판단할 수 있음
    (암호화된 앱도 test coverage를 계산할 수 있음)

    • 기존 프로그램(EMMA)는 암호화된 앱에 접근할 수 없었음
    • DroidBot은 각 test input에 대한 call stack trace 를 생성할 수 있기 때문에, call stack을 test input의 effectiveness를 판단하는 근거로 사용할 수 있음

Test Coverage
프로그램 검사할 때 사용하는 지표

  • 명령을 준 횟수에 비해 얼마나 명령을 실행했는지를 판단함

Test Input
테스트를 수행하기 위해 사용되는 입력 데이터나 시나리오

  • DroidBot은 여러가지 test input을 생성하여 다양한 시나리오에서 앱을 실행하고, 앱의 동작을 검사함

Call stack trace
프로그램 실행 중 호출되는 모든 함수들을 기록한 것들

  • 코드가 어떤 경로를 통해 실행됐는지, 어떤 함수가 호출됐고, 어떤 함수가 반환됐는지 등을 추적해줌
  • 특히 예외나 오류가 발생했을 때, 해당 오류가 발생한 위치와 그 전에 호출된 함수들의 정보를 제공해줘서 디버깅에 유용함

2. Tool Design

Android Device

DroidBot이 디바이스 내에서 앱을 테스트하기 위해, ADB에 연결된 디바이스가 필요함

ADB (Android Debug Bridge)
안드로이드 디바이스와 컴퓨터를 연결해서 명령을 전달하고, 디바이스를 제어할 수 있는 도구

  • 디바이스를 원격 제어함
  • 디버깅할 때 꼭 필요함

Adapter

어떤 종류의 Android Device든 DroidBot와 연결되도록 하는 장치

  • Test 환경과 Test 알고리즘을 이어줌

    • test 환경(디바이스와 AUT에 대한 state)에 대한 정보를 알고리즘에 넣을 수 있도록 structured data로 바꿔줌
    • 알고리즘이 생성한 test input을 받아서 command로 바꿔줌
  • 쉽고 간단한 API를 통해 사용자에게 알고리즘을 제공함

    • 어떤 테스트 환경에서도 모두 실행 가능한 알고리즘임

AUT (App Under Test)
테스트 중인 어플리케이션

  • QA(품질 관리)에서 많이 사용됨

Brain

Adapter가 제공해주는 device와 app information을 받아서 test input을 생성하고 Adapter에게 다시 전달해줌

  • State Transition Graph를 이용해서 test input을 생성함

    • Node(노드) : 디바이스 상태
    • Edge(엣지) : state transition을 통해 발생된 test input
  • DFS 알고리즘을 사용함

State Transition Graph
시스템의 상태(node)와 상태 간 전이(edge)를 나타내는 그래프

  • 시스템의 동작을 시각화해줌

3. Implementation

Lightweight Monitor and Input

디바이스에 내장되어있는 Android Debugging/Testing Utilities를 사용해서 device/app information을 얻기 때문에 프로그램이 가벼움

[ Information from Device ]

1. GUI information
DroidBot이 UI Screenshot을 녹화함

2. Process information
DroidBot이 system-level process status와 app-level process status를 모니터링함

  • system-level process status : 운영체제 전체에서 실행 중인 모든 프로세스의 상태
	$ ps
    리눅스 시스템에서 현재 실행 중인 프로세스의 상태를 표시하는 데 사용되는 명령어
  • app-level process status : 특정 애플리케이션 내에서 실행되는 프로세스 및 스레드의 상태
	$ adb shell dumpsys
    안드로이드 디버깅 및 시스템 정보를 추출하기 위해 사용되는 명령어

3. Logs
test input으로 발생되는 trace나 앱에서 제공하는 log를 기록함

	$ logcat
    안드로이드 운영체제에서 로그 메시지를 출력하는 명령어
    안드로이드 시스템 및 애플리케이션의 로그 메시지를 실시간으로 확인하거나 파일로 저장할 수 있게 해줌

SDK
SDK 정리글

UI Automator
안드로이드 앱과 사용자 UI를 자동으로 테스트할 수 있는 framework

  • Android SDK에 있음

On-the-fly Model Construction

[ State Transition Model flow chart]
이걸 참고해서 DroidBot을 설계함

이 그림 속 State Transition Graph 와 같이 DroidBot은 runtime동안 그때 그때마다(on-the-fly) State Transition Graph 에 새로운 node와 edge를 추가하고 모니터링하면서 최적의 test input을 생성할 수 있도록 generation 알고리즘 모델을 업데이트함

  • Node(노드) : 디바이스의 state를 나타냄

    • GUI information
    • running process information
  • Edge(엣지) : 두 노드 간에서 state transition이 일어날 때 생기는 test input event를 나타냄

    • test input에 대한 detail information (type, view, command 등)
    • test input으로 인해 발생하는 methods/logs

따라서, DroidBot은

  1. current state에 대한 정보를 유지하면서
  2. test input을 device에 보냄
  3. device state가 변하면 state transition graph 에 test input과 새로운 state를 새로운 edge와 새로운 node로 입력함
  4. Underlying state comparison Algorithm 을 이용해서 이 과정을 반복적으로 수행함

Underlying state comparison Algorithm
두 개 이상의 시스템 상태나 객체의 내부 상태를 비교하여 일치하는지, 유사한지, 또는 특정 기준에 따라 다른지를 평가하는 알고리즘

  • Content-based comparison : 두 객체의 외형적 특성이나 메타데이터가 아닌, 그 내부의 실제 데이터와 구조를 비교하는 방법
    (DroidBot은 이 방법을 사용해서 UI content가 다른 노드는 다른 노드 라고 판단하고 있음)

Quantifying the Effectiveness of Test Input

Source code와 app instrumentation 없이 Test Input의 effectiveness를 판단할 수 있음

  • Method tracing : Android official profiling tool을 이용해서 각 test input에 method trace를 찍어낼 수 있음

    • method trace는 test input으로 발생하는 app method와 system method를 기록함
    • method trace를 사용하면 총 method의 수를 알 경우, method coverage도 계산할 수 있음
  • Sensitive behavior monitoring : Sensitive behavior가 얼마나 발생했느냐에 따라서 test input의 effectiveness를 판단할 수 있음

    • ex. DroidBot은 DroidBox를 이용해서 Sensitive behavior의 발생 빈도수를 측정할 수도 있음

Method tracing 은 거의 모든 디바이스와 앱에서 사용 가능하지만, Sensitive behavior monitoring 은 특정 sandbox에서 작동하는 앱에만 적용 가능함

하지만! 악성 소프트웨어를 분석할 땐, Sensitive behavior monitoring 가 더 유용함

두 측정 기법을 이용해서 모든 앱에 대해 이 test input이 얼마나 effectiveness한지 정량화된 평가 지표를 제공할 수는 없지만, 같은 앱 내에서 각 test case들이 얼마나 effectiveness한 지는 판단해줄 수 있음

Black-box testing
소프트웨어 테스트 방법론 중 하나로, 테스트 대상 시스템의 내부 구조나 동작 원리를 모른 채, 외부에서 주어진 입력과 출력만을 가지고 테스트하는 기법

  • 내부 구현에 대한 지식 없이 시스템이 올바르게 동작하는지 확인함

Method trace
애플리케이션의 성능을 분석하기 위해 메서드 호출의 순서, 빈도, 실행 시간을 기록하는 기법
(이 기법을 이용하면, 애플리케이션 성능의 bottleneck을 찾고 최적화할 수 있음)

  • app method : 애플리케이션 코드에서 정의되고 실행되는 메서드
    (개발자가 작성한 사용자 정의 메서드나 라이브러리에서 호출된 메서드 포함)
  • system method : 운영체제나 런타임 환경에서 제공하는 메서드
    (안드로이드 OS나 자바 런타임 라이브러리의 일부로, 애플리케이션이 시스템 리소스나 서비스를 사용할 때 호출됨)
  • method coverage : 테스트가 소스 코드 내의 메서드들을 얼마나 커버했는지 평가하는데 사용됨
    (코드 품질을 보장하고, 테스트의 철저함을 측정하는 중요한 지표)

Malware Anaylsis
악성 소프트웨어 분석

  • sensitive behaviors : 시스템이나 사용자에게 잠재적으로 해를 끼칠 수 있는 악성 소프트웨어의 행동을 의미함
    (시스템의 보안과 개인 정보 보호를 위협할 수 있는 것들)

4. Usage Scenarios

Compatibility Anaylsis

DroidBot을 이용하면 개발한 앱을 단시간에 다양한 디바이스 내에서 호환 가능한지 실험해볼 수 있음

Malware Analysis

DroidBot을 이용해서 Malware Analysis(악성 소프트웨어 분석)을 할 수 있음

5. Conclusion

  • DroidBot은 거의 모든 안드로이드 앱에 환경 설정없이 테스트 가능함
  • DroidBot은 extensible한 API를 사용하기 때문에, 사용자가 사용하기 쉬움
  • DroidBot은 test input의 effectiveness를 평가하기 위한 도구들을 제공함
  • DroidBot은 compatibility anaylsis, malware analysis 하기위해 사용될 수 있음

Code/Demo

Code : https://github.com/honeynet/droidbot
Demo : https://www.youtube.com/watch?v=jtvXZzeTbVE

연구에 DroidBot을 사용하려는 목적

  • DroidBot을 이용해 최적의 UTG를 찾을 수 있음
  • DroidBot을 이용해 LAM을 학습하기 위한 UI Transition 데이터를 구축할 수 있음
  • AutoDroid를 이해하기 위한 선행 논문

0개의 댓글