기호 형태의 값-집합 분석을 이용한 ARM 위치 독립적 코드의 정교한 역어셈블리 기법
A Disassembly Technique of ARM Position-Independent Code with Value-Set Analysis Having Symbol-Form Domain
0
조회
0
다운로드
0
인용
0
참고문헌
키워드
초록
스마트 모바일의 보급에 따라, 컴퓨터 보안에서 ARM 아키텍처 명령어로 구성된 위치 독립적 코드의 역어셈블리기법이 중요해지고 있다. 그러나 대부분의 기존 기법들은 x86 아키텍처 대상으로 연구되었으며, 위치 종속적 코드의문제 해결과 범용성에 초점이 맞추어져 있다. 따라서, ARM 아키텍처의 고정 길이 명령어와 위치 독립적 코드의 특징이 제대로 반영되지 않아, 바이너리 계측과 같이 바이너리 자체를 직접 수정하는 수준의 고도화된 응용 보안 기술에 적용하기에는 수집되는 주소 정보의 정확도가 낮다. 본 논문에서, 우리는 ARM 명령어로 구성된 위치 독립적인코드의 특성을 반영한 역어셈블리 기법을 제안한다. 정확하고 추적 가능한 주소의 수집을 위해, 도메인이 기호화된값-집합 분석을 설계하였다. 또한, 역어셈블의 주요 문제점을 해결하기 위해, 컴파일러가 생성하는 코드의 특징을 활용한 휴리스틱을 고안하였다. 우리 기법의 정확도와 유효성을 검증하기 위해, 안드로이드 8.1 빌드에 포함된 669개의 공유라이브러리 및 실행 파일을 대상으로 실험하였으며, 그 결과 완전한 역어셈블의 비율이 91.47%로 나왔다.
Abstract
With the proliferation of smart mobiles, disassembly techniques for position-independent code (PIC) composed of ARMarchitecture instructions in computer security are becoming more important. However, existing techniques have been studiedon x86 architecture and are focused on solving problems of non-PIC and generality. Therefore, the accuracy of the collectedaddress information is low to apply to advanced security technologies such as binary measurement. In this paper, wepropose a disassembly technique that reflects the characteristics of PIC composed of ARM instructions. For accuratlycollecting traceable addresses, we designed value-set analysis having symbol-form domain. To solve the main problem ofdisassembly, we devised a heuristic using the characteristics of the code generated by the compiler. To verify the accuracyand effectiveness of our technique, we tested 669 shared libraries and executables in the Android 8.1 build, resulting in atotal disassembly rate of 91.47%.
참고문헌 (30)
- M. Abadi, "Control-flow Integrity", Proc. CCS, pp.340~353 (2005)
- J. Ansel, "Language-independent Sandboxing of Just-in-time Compilation and Self-modifying Code", Proc. PLDI, pp.355~366 (2011)
- U. Erlingsson, "XFI:Software Guards for System Address Spaces", Proc. OSDI, pp.75~88 (2006)
- M. Zhang, "Control Flow Integrity for COTS Binaries", Proc. USENIX Security, pp.337~352 (2013)
- B. Niu, "Modular Control-flow Integrity", Proc. PLDI, pp.577~587 (2014)
- R. Wahbe, "Efficient Software-based Fault Isolation", Proc. SOSP, pp.203~216 (1993)
- A.-R. Adl-Tabatabai, "Efficient and Language-independent Mobile Programs", Proc. PLDI, pp.127~136 (1996)
- S. L. Graham, "AdaptableBinary Programs", Proc. USENIX Security, pp.315~325 (1995)
- B. Ford, "Vx32:Lightweight User-level Sandboxing on the x86", Proc. USENIX ATC, pp.293~306 (2008)
- T.-c. Chiueh, "RAD: A Compile-time Solution to Buffer Overflow Attacks", Proc. ICDCS, pp.409~428 (2001)
- L. Szekeres, "Sok: Eternal War in Memory", Proc. SP, pp.48~62 (2013)
- M. Prasadand, ""A BinaryRewriting Defense Against Stack based Buffer Overflow Attacks", Proc. USENIX ATC, pp.211~224 (2003)
- A. Baratloo, "Transparent Run-time Defense Against Stack Smashing Attacks", Proc, pp.251~262 (2000)
- T. H. Dang, "The Performance Cost of Shadow Stacks and Stack Canaries", Proc. ASIA CCS, pp.555~566 (2015)
- C. Linn, "Obfuscation of Executable Code to Improve Resistance to Static Disassembly", Proc. CCS, pp.290~299 (2003)
- I. V. Popov, "Binary Obfuscation using Signals", Proc. USENIX Security, pp.275~290 (2007)
- H. Chen, "Control Flow Obfuscation with Information Flow Tracking", Proc. MICRO, pp.391~400 (2009)
- Z. Deng, "Bistro : Binary Component Extraction and Embedding for Software Security Applications", Proc. ESORICS, pp.200~218 (2013)
- T. Kim, "RevARM: A Platform-Agnostic ARM Binary Rewriter for Security Applications", Proc. ACSAC, pp.412~424 (2017)
- D. Andriesse, "An In Depth Analysis of Disassembly on Full-Scale x86", x64 Binaries, 2016, 583~600
- R. Qiao, "Function interface analysis: A principled approach for function recognition in COTS binaries", Proc. DSN, pp.201~212 (2017)
- A. Pawlowski, "MARX: Uncovering class hierarchies in C++ programs", Proc. NDSS, pp.1~15 (2017)
- P. Cousot, "Abstract Interpretation Frameworks", Journal of Logic and Computation, 2(4), pp.511~547 (1992)
- P. Cousot, "Comparing the Galois Connection and Widening", Narrowing Approaches to Abstract Interpretation, 1992, 269~295
- G. Balakrishnan, "Analyzing Memory Accesses in x86Executables", Proc. CC, pp.5~23 (2004)
- J. Brauer, "Adaptable value-set analysis for low-level code", Proc. SSV, pp.32~43 (2011)
- Z. Zhang, "Generic value-set analysis on low-level code", Proc. AVICPS, pp.1~8 (2014)
- C. Kruegel, "Using Static Binary Analysis to Find Vulnerabilities And Backdoors in Firmware", presented at BlackHat USA (2015)
- "Radare2"[URL]
- "Cutter"[URL]
