악의적인 소프트웨어 역공학으로부터 프로그램이 가지는 코드를 보호하기 위해서 코드 난독화가 제안되었다. 이것은 기존에 존재하는 프로그램 코드를 어렵게 변환시키는 것으로 프로그램 코드에 대한 악의적인 정적 분석을 어렵게 만든다. 코드 난독화는 난독화 목적에 따라 레이아웃, 데이터, 제어 난독화로 분류되어진다. 이 중 제어 난독화는 프로그램이 가지는 제어 흐름에 대한 추상적인 정보를 보호하는 것으로 다양한 종류의 개별 제어 흐름 난독화 변환이 제안되었지만, 이를 효과적으로 적용할 수 있는 방법은 제안되지 않았다. 본 논문에서는 제어 흐름 난독화 변환을 프로그램에 효과적으로 적용할 수 있는 난독화 전략을 제안하고, 실험을 통해서 제안한 난독화 전략의 효용을 보였다.
악의적인 소프트웨어 역공학으로부터 프로그램이 가지는 코드를 보호하기 위해서 코드 난독화가 제안되었다. 이것은 기존에 존재하는 프로그램 코드를 어렵게 변환시키는 것으로 프로그램 코드에 대한 악의적인 정적 분석을 어렵게 만든다. 코드 난독화는 난독화 목적에 따라 레이아웃, 데이터, 제어 난독화로 분류되어진다. 이 중 제어 난독화는 프로그램이 가지는 제어 흐름에 대한 추상적인 정보를 보호하는 것으로 다양한 종류의 개별 제어 흐름 난독화 변환이 제안되었지만, 이를 효과적으로 적용할 수 있는 방법은 제안되지 않았다. 본 논문에서는 제어 흐름 난독화 변환을 프로그램에 효과적으로 적용할 수 있는 난독화 전략을 제안하고, 실험을 통해서 제안한 난독화 전략의 효용을 보였다.
Code obfuscation has been proposed to protect codes in a program from malicious software reverse engineering. It converts a program into an equivalent one that is more difficult to understand the program. Code obfuscation has been classified into various obfuscation technique such as layout, data, c...
Code obfuscation has been proposed to protect codes in a program from malicious software reverse engineering. It converts a program into an equivalent one that is more difficult to understand the program. Code obfuscation has been classified into various obfuscation technique such as layout, data, control, by obfuscating goals. In those obfuscation techniques, control obfuscation is intended to complicate the control flow in a program to protect abstract information of control flow. For protecting control flow in a program, various control obfuscation transformation techniques have been proposed. However, strategies for effectively applying a control flow obfuscation to program have not been proposed yet. In this paper, we proposed a obfuscation strategy that effectively applies a control flow obfuscation transformation to a program. We conducted experiment to show that the proposed obfuscation strategy is useful for applying a control flow transformation to a program.
Code obfuscation has been proposed to protect codes in a program from malicious software reverse engineering. It converts a program into an equivalent one that is more difficult to understand the program. Code obfuscation has been classified into various obfuscation technique such as layout, data, control, by obfuscating goals. In those obfuscation techniques, control obfuscation is intended to complicate the control flow in a program to protect abstract information of control flow. For protecting control flow in a program, various control obfuscation transformation techniques have been proposed. However, strategies for effectively applying a control flow obfuscation to program have not been proposed yet. In this paper, we proposed a obfuscation strategy that effectively applies a control flow obfuscation transformation to a program. We conducted experiment to show that the proposed obfuscation strategy is useful for applying a control flow transformation to a program.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 제어 난독화 가운데 [2][3][4][5] 등과 같이 계산 난독화로 분류되어진 난독화 변환을 효과적으로 적용할 수 있는 새로운 전략을 제안한다. 즉, 제안하는 난독화 전략은 불분명 술어를 기반으로 수행되는 난독화 변환을 프로그램에 적용하는데 유용하게 사용될 수 있다.
하지만, 제어 흐름 난독화 변환을 효과적으로 적용하는 방법론은 제시되지 않았다. 본 논문에서는 제어 흐름 난독화 변환을 효과적으로 적용하기 위한 새로운 난독화 전략을 제안했다. 새롭게 제안하는 난독화 전략은 함수에 존재하는 코드들을 최상위 분기들을 기준으로 n 개의 코드 영역으로 분할하고, 이것들을 난독화 후보 영역으로 결정한다.
제안 방법
적용 대상 코드의 선택은 프로그래머를 통해 직접적으로 또는 발견적인 방법(heuristic approach)들을 이용하여 결정될 수 있다. 그 다음, 여러 가지 난독화 변환 가운데 선택된 소스 코드 객체에 적용 가능한 난독화 변환을 선택하여 이를 대상 소스 코드 객체에 적용하는 방법으로 사용자가 요구하는 난독화 조건(프로그램의 복잡도 및 크기의 증가)을 만족할 때 까지 반복적으로 위의 절차를 수행한다.
본 논문에서 제안하는 난독화 전략에서는 를 난독화 변환 위치를 결정하기 위해서 이용한다.
본 논문에서 제안하는 난독화 전략은 분할된 코드 영역 전체에 대해서 난독화 우선 순위를 평가하고 적용 유무를 결정했다. 그렇지만, 분할된 코드 영역이 가지는 기본 블록들 사이의 연산자, 데이터 등을 분석하고, 이들 사이의 난독화 우선 순위를 결정할 수 있다면 더 나은 난독화 결과를 기대할 수 있을 것으로 예상된다.
본 논문에서는 제어 흐름 난독화 변환을 효과적으로 적용하기 위한 새로운 난독화 전략을 제안했다. 새롭게 제안하는 난독화 전략은 함수에 존재하는 코드들을 최상위 분기들을 기준으로 n 개의 코드 영역으로 분할하고, 이것들을 난독화 후보 영역으로 결정한다. 그리고 분할된 코드 영역들이 가지는 복잡도와 난독화 비율을 고려하여 변환 우선 순위를 결정하고, 가장 높은 우선 순위를 가지는 코드 영역에 난독화 변환을 적용한다.
실험의 목적은 제안하는 난독화 전략의 효용을 알아보는 것이기 때문에 아무런 방법론 없이 수행한 난독화 결과와 본 논문에서 제안하는 전략으로 수행한 난독화 결과의 비교를 통해서 평가한다. 평가는 두 가지 방법으로 수행한 BIT의 결과로 제어 흐름 그래프가 가지는 복잡도를 N-Scope 복잡도 메트릭으로 평가하여 비교한다.
제안하는 난독화 전략에 대한 자세한 설명은 4장에서 알아보고, 다음 장에서는 제어 흐름 난독화 결과에 대한 평가와 제안하는 난독화 전략에서 목적 코드 객체들이 가지는 복잡도를 평가하기 위해 본 논문에서 사용되는 평가 메트릭들에 대해서 알아본다.
대상 데이터
본 논문에서 제안하는 난독화 전략의 효용은 C로 구현된 cflow를 대상으로 실험을 통해서 알아본다. 실험은 Windows 7, Core2 Duo CPU 2.
데이터처리
실험의 목적은 제안하는 난독화 전략의 효용을 알아보는 것이기 때문에 아무런 방법론 없이 수행한 난독화 결과와 본 논문에서 제안하는 전략으로 수행한 난독화 결과의 비교를 통해서 평가한다. 평가는 두 가지 방법으로 수행한 BIT의 결과로 제어 흐름 그래프가 가지는 복잡도를 N-Scope 복잡도 메트릭으로 평가하여 비교한다.
성능/효과
결론적으로 에서와 같이 전략적 방법이 랜덤한 방법에 비해 각각 20%, 26%의 향상된 복잡도 증가를 보인다.
그 결과, 난독화 결과 33개의 함수들 가운데 23개가 랜덤한 방법보다 전략적 방법으로 BIT를 적용했을 때 더 높은 복잡도 값을 가지는 것을 보였다. 그 외 10개의 함수는 무전략(랜덤) 및 전략적 방법의 결과가 같았다.
결론적으로 <표 2>에서와 같이 전략적 방법이 랜덤한 방법에 비해 각각 20%, 26%의 향상된 복잡도 증가를 보인다. 따라서 제안된 난독화 전략을 적용 시에, 무전략으로 수행하는 경우에 비하여 전체적으로 프로그램의 평균 제어 흐름 복잡도가 더 높아진다고 볼 수 있다.
본 논문에서 제안하는 난독화 전략은 계산 난독화 변환을 적용하기 위해 변환 대상이 되는 목적 소스 코드 객체들 중에 변환이 적용되었을 때 변환 후 가장 복잡한 결과를 초래할 수 있는 소스 코드 객체를 선택하는 방법으로 코드난독화 알고리즘은 이것을 이용해서 계산 난독화를 효과적으로 수행할 수 있다.
실험에서는 제안하는 난독화 전략과 무전략을 이용하여 BIT를 수행한 결과를 통해 제안한 난독화 전략의 효용을 보였다. 실험 결과 기본적으로 단순한 제어 구조 및 코드량이 적은 함수들을 제외하고 새롭게 제안하는 난독화 전략이 무전략으로 수행하는 방법보다 더 높은 제어 흐름 복잡도 값을 가지는 것을 보였고, 실험 프로그램이 가지는 평균 복잡도 증가율 또한 20%, 26% 향상된 결과를 보였다.
실험에서는 제안하는 난독화 전략과 무전략을 이용하여 BIT를 수행한 결과를 통해 제안한 난독화 전략의 효용을 보였다. 실험 결과 기본적으로 단순한 제어 구조 및 코드량이 적은 함수들을 제외하고 새롭게 제안하는 난독화 전략이 무전략으로 수행하는 방법보다 더 높은 제어 흐름 복잡도 값을 가지는 것을 보였고, 실험 프로그램이 가지는 평균 복잡도 증가율 또한 20%, 26% 향상된 결과를 보였다.
은 무전략(랜덤 수행)과 제안한 방법(전략적 방법)으로 수행한 BIT 결과로 cflow가 포함하는 각 함수가 가지는 제어 흐름 그래프의 N-Scope 값이 변환 전 복잡도이며, 이후 각각 랜덤 및 제안된 방법으로 5회 적용한 후의 변환 후 복잡도를 보여준다.
즉 전체 33개의 함수들 중 29개의 유효한 복잡도 증가량을 가지는 함수들을 대상으로 “복잡도 증가율 1”은 변환 후 동일한 복잡도 증가율을 가지는 함수들을 모두 포함한 경우(29개)의 변환 전 대비 평균 복잡도 증가율이고, “복잡도 증가율 2”는 변환 후 동일한 복잡도 증가율을 가지는 함수를 제외한 경우(23개)의 평균 복잡도 증가율이다.
일반적으로 복잡도가 낮은 소프트웨어가 이해하기 쉽고, 유지보수성이 뛰어나기 때문에 높은 품질의 소프트웨어로 평가되지만, 코드 난독화에서는 반대의 기준으로 평가된다. 즉, 코드 난독화가 적용된 2개의 프로그램에 가운데 높은 복잡도를 가지는 프로그램이 높은 난독화 품질을 가진다고 평가된다.
후속연구
본 논문에서 제안하는 난독화 전략은 분할된 코드 영역 전체에 대해서 난독화 우선 순위를 평가하고 적용 유무를 결정했다. 그렇지만, 분할된 코드 영역이 가지는 기본 블록들 사이의 연산자, 데이터 등을 분석하고, 이들 사이의 난독화 우선 순위를 결정할 수 있다면 더 나은 난독화 결과를 기대할 수 있을 것으로 예상된다. 또한 현재 제어 구조상의 최상위 분기를 대상으로 적용하였으나, 이후 분기의 계층 구조까지 고려하여 보다 정교하게 적용할 수 있을 것이다.
그렇지만, 분할된 코드 영역이 가지는 기본 블록들 사이의 연산자, 데이터 등을 분석하고, 이들 사이의 난독화 우선 순위를 결정할 수 있다면 더 나은 난독화 결과를 기대할 수 있을 것으로 예상된다. 또한 현재 제어 구조상의 최상위 분기를 대상으로 적용하였으나, 이후 분기의 계층 구조까지 고려하여 보다 정교하게 적용할 수 있을 것이다. 향후 연구로는, 기술한 바와 같이 연산자 및 데이터 분석 결과와 분기 계층 구조를 활용하도록 하며, 최종적으로는 제어 난독화에서 계산 난독화 이외의 기법까지 고려한 제어 난독화 프레임워크로 확장할 것이다.
본 논문에서는 제어 난독화 가운데 [2][3][4][5] 등과 같이 계산 난독화로 분류되어진 난독화 변환을 효과적으로 적용할 수 있는 새로운 전략을 제안한다. 즉, 제안하는 난독화 전략은 불분명 술어를 기반으로 수행되는 난독화 변환을 프로그램에 적용하는데 유용하게 사용될 수 있다.
또한 현재 제어 구조상의 최상위 분기를 대상으로 적용하였으나, 이후 분기의 계층 구조까지 고려하여 보다 정교하게 적용할 수 있을 것이다. 향후 연구로는, 기술한 바와 같이 연산자 및 데이터 분석 결과와 분기 계층 구조를 활용하도록 하며, 최종적으로는 제어 난독화에서 계산 난독화 이외의 기법까지 고려한 제어 난독화 프레임워크로 확장할 것이다.
질의응답
핵심어
질문
논문에서 추출한 답변
코드 난독화는 무엇인가?
여러 가지 보호 기법 가운데 코드 난독화(code obfus cation)는 소프트웨어 배포자가 악의적인 역공학으로부터 자신의 프로그램 코드를 보호하기 위해서 기능적으로 동일하면서 이해하기 어려운 코드로 변환하는 것이다. 이것은 악의적인 역공학 작업을 어렵게 만드는 여러 가지 기법 가운데 비용 대비 효과가 우수한 보호 기법에 속한다[1][2].
악의적인 역공학으로부터 소프트웨어를 보호하기 위한 방법은 어떻게 분류할 수 있는가?
악의적인 역공학으로부터 소프트웨어를 보호하기 위한 방법으로는 크게 법률적인 방법과 기술적인 방법으로 분류할 수 있다[2]. 법률적인 방법은 소프트웨어의 이용에 관한 배타적인 권리를 부여 받고, 타인에 의한 침해 행위에 대해 법적인 보호를 받을 수 있는 방법이다.
악의적인 역공학으로부터 소프트웨어를 보호하기 위한 방법 중 법률적인 방법은 무엇인가?
악의적인 역공학으로부터 소프트웨어를 보호하기 위한 방법으로는 크게 법률적인 방법과 기술적인 방법으로 분류할 수 있다[2]. 법률적인 방법은 소프트웨어의 이용에 관한 배타적인 권리를 부여 받고, 타인에 의한 침해 행위에 대해 법적인 보호를 받을 수 있는 방법이다. 기술적인 방법으로는 암호화, 서버 측 실행, 코드 난독화 등과 같이 프로그램 코드를 직접적으로 보호하는 방법으로 역공학 작업을 어렵게 만든다.
참고문헌 (14)
E. Eilam, "Reversing: Secrets of Reverse Engineering," Wiley Publishing, Inc., pp. 327-357, Apr. 2005.
C.Colleberg, C.Thomborson, D.Low, "A Taxonomy of Obfuscating Transformations," Technical Report 148, University of Auckland, Jul. 1997.
D. Low, "Java control flow obfuscation," Master's Thesis, Department of Computer Science, University of Auckland, New Zealand, Jun. 1998.
C.Collberg, C.Thomborson, and D.Low, "Manufacturing cheap, resilient, and stealthy opaque constructs," In Principles of Programming Languages 1998, POPL'98, San Diego, CA, Jan. 1998.
T. Hou, H. Chen, and M. Tsai, "Three control flow obfuscation methods for Java software,"Proc. Inst. Elect. Eng. Software, vol. 153, no. 2, pp. 80-86, Jan. 2006.
T. Ogiso, Y.Sakabe, M.Soshi, and A. Miyaji, "Software obfuscation on a theoretical basic and its implementation," IEICE Trans. Fundamentals, vol. E86-A(1), no.1, pp.176-186, Jan. 2003.
Y. Sakabe, M. Soshi, A.Miyaji, "Java Obfuscation Approaches to Construct Tamper-Resistant Object-Oriented Programs," IPSJ Digital Courier, vol.1, pp. 134-146, Dec. 2005.
T. Toyofuku, T. Tabata, and K. Sakurai, "Program obfuscation scheme using random numbers to complicate control flow," EUC Workshops, IEIC Tech. Rep, pp. 916-925, Jan. 2005.
Woosung Jung, Eunjoo Lee,"A Structural Complexity Metric for Web Application based on Similarity," Journal of the Korea Society of Computer and Information, vol.15, no.8, pp.117-126, Aug. 2010.
Sungkyun Oh, Mijin Kim, " A Study of Estimation for Web Application Complexity," Journal of the Korea Society of Computer and Information , vol.9, no.3, pp.27-34, Sep. 2004.
H.Yi Tsai, Y.Lun Huang, D.Wagner, "A graph approach to quantitative analysis of control-Flow obfuscationg transformations," IEEE Transactions On Information Forensics and Security, vol.4, pp 257-267, Jun. 2009
J. S. Davis, R. J. Leblanc, "A Study of the Applicability of Complexity Measures," IEEE Transactions on Software Engineering archive, vol. 14, No.9, pp. 1366-1372, Sep. 1988.
※ AI-Helper는 부적절한 답변을 할 수 있습니다.