문자열 조작 언어를 위한 정적 프로그램 분석

읽는 시간: 4 분
...

📝 원문 정보

  • Title: Static Program Analysis for String Manipulation Languages
  • ArXiv ID: 1808.07827
  • 발행일: 2019-08-21
  • 저자: Vincenzo Arceri (University of Verona, Department of Computer Science, Verona, Italy), Isabella Mastroeni (University of Verona, Department of Computer Science, Verona, Italy)

📝 초록 (Abstract)

최근 몇 년 동안 JavaScript나 Python과 같은 동적 언어가 다양한 분야와 애플리케이션에서 점점 더 많이 사용되고 있다. 이러한 언어들의 복잡하고 오해되기 쉬운 행동은 해당 프로그래밍 언어의 정적 분석을 어렵게 만든다. 동적 언어 프로그램의 핵심 측면 중 하나는 문자열의 다중 사용으로, 이들은 암시적으로 다른 유형 값으로 변환되거나 코드로 변환되는 문자열-코드 원시 함수에 의해 변환될 수 있으며 객체 속성을 참조하는 데도 사용된다. 불행히도 동적 언어를 위한 문자열 분석은 여전히 정확성이 부족하며 중요한 문자열 특징들을 고려하지 못하고 있다. 또한, 동적 언어 악성 코드의 맥락에서 문자열 가리기 기법이 매우 인기가 있으며, 이를 통해 코드 정보가 문자열 내부에 숨겨지고 나중에 문자열을 실행 가능 코드로 동적으로 변환된다. 이러한 상황에서는 더 정확한 문자열 분석이 필수적이다. 본 논문은 추상 해석에 기반한 정적 문자열 분석의 맥락에서 새로운 문자열 분석 의미론을 제안하며, 이는 동적 언어의 문자열 특징들을 처리하기 위한 첫 걸음이다.

💡 논문 핵심 해설 (Deep Analysis)

This paper focuses on improving static analysis of string manipulation in dynamic programming languages such as JavaScript and Python. Dynamic languages have complex features like implicit type conversion, which make them challenging to analyze statically. Additionally, they allow for sophisticated string manipulations and code generation that can be used to obfuscate malicious activities.

The authors propose a novel approach based on abstract interpretation to better handle the intricacies of dynamic language strings. They design an abstract domain capable of dealing with various primitive types (strings, integers, booleans) in concert to capture dynamic typing accurately. The paper introduces new algorithms for string operations using finite state automata and provides formal definitions and proofs of their soundness.

The key contribution is a more precise way to analyze strings in dynamic contexts, which can help detect and understand obfuscated code better. This work lays the groundwork for developing tools that can handle more complex dynamic language features, providing valuable insights into how strings are manipulated during program execution.

📄 논문 본문 발췌 (Translation)

최근 몇 년 동안 JavaScript나 Python과 같은 동적 언어가 다양한 분야와 응용 프로그램에서 점점 더 많이 사용되고 있습니다. 이러한 언어의 복잡하고 오해되기 쉬운 특성은 이들 언어에 대한 정적인 분석을 어렵게 만들고 있습니다. 동적 언어 프로그램의 핵심 요소 중 하나는 문자열의 다양한 활용입니다. 문자열은 다른 타입 값으로 암시적으로 변환되거나 코드로 변환되는 문자열-코드 원시값을 통해 변형될 수 있으며, 객체 속성에 접근하기 위해 사용될 수도 있습니다. 불행히도 동적 언어를 위한 문자열 분석은 여전히 정확성이 부족하며 중요한 문자열 기능들을 고려하지 못하고 있습니다. 또한 문자열 난독화는 동적 언어 악성 코드의 맥락에서 매우 인기가 있으며, 여기서는 코드 정보를 문자열 내에 숨기고 나중에 이 문자열을 실행 가능한 코드로 동적으로 변환하는 방법이 사용됩니다. 이러한 상황에서 더욱 정확한 문자열 분석이 필요합니다.

본 논문은 추상 해석의 맥락에서 정적 문자열 분석을 다루며, 동적 언어의 문자열 기능을 처리하기 위한 새로운 의미론을 제안하고 있습니다. 이를 위해 우리는 문자열 조작에 대한 추상 도메인을 설계하고, 이 도메인은 다른 원시 타입 (정수와 불리언)과 함께 작동합니다.

[[IMG_PROTECT_1]]

우리는 유한 상태 오토마타를 사용하여 문자열 조작 연산의 추상 의미론을 정의하였습니다. 이를 통해 동적 언어에서 문자열이 어떻게 변환되고 활용되는지에 대한 더 정확한 이해가 가능해졌습니다.

[[IMG_PROTECT_2]]

우리는 이 추상 해석을 테스트하기 위해 유한 상태 오토마타 라이브러리를 구현하였습니다. 이 라이브러리에는 오토마타와 관련된 알고리즘들이 포함되어 있으며, 다양한 연산 (예: 접미사, 오른쪽 몫)과 추상 도메인 관련 연산 ($`\lubfa`$, $`\glbfa`$, 그리고 수렴을 강제하기 위한 매개변수화된 범위 넓히기)들이 구현되어 있습니다. 이 라이브러리는 기존 정적 분석기에 쉽게 통합할 수 있으며, 병목 현상은 결정화 작업에 있습니다 (결정화는 추상 연산 중에서 지수 시간을 필요로 합니다).

[[IMG_PROTECT_3]]

예를 들어, 다음의 동적 언어 프래그먼트를 고려해보겠습니다:

PLAINTEXT
str = ""; while (x++ < 100) { str += "a"; }
클릭하여 더 보기

변수 x의 값이 알려져 있지 않기 때문에, while 루프의 반복 횟수가 알려져 있지 않습니다. 이러한 경우, 정확성을 보장하면서도 수렴을 달성하기 위해 범위 넓히기를 적용합니다.

[[IMG_PROTECT_4]]

우리는 이 추상 해석을 통해 악성 코드에서 문자열이 어떻게 사용되는지를 분석하였습니다. 이를 통해 d 변수의 추상 값은 아래 그림과 같은 오토마타로 표현될 수 있습니다:

[[IMG_PROTECT_5]]

이 추상 오토마타를 통해 여러 중요한 정보를 얻을 수 있습니다. 예를 들어, d가 특정 문자열을 포함할 수 있는지 확인하거나, 악성 코드에서 특정 동작이 수행되었는지를 판단하는 데 도움이 됩니다.

Reference

이 글은 ArXiv의 공개 자료를 바탕으로 AI가 자동 번역 및 요약한 내용입니다. 저작권은 원저자에게 있으며, 인류 지식 발전에 기여한 연구자분들께 감사드립니다.

검색 시작

검색어를 입력하세요

↑↓
ESC
⌘K 단축키