코드 재사용 공격은 프로그램 메모리상에 존재하는 실행 가능한 코드 조각을 조합하고, 이를 연속적으로 실행함으로써 스택에 직접 코드를 주입하지 않고도 임의의 코드를 실행시킬 수 있는 공격 기법이다. 코드 재사용 공격의 대표적인 종류로는 ROP(Return-Oriented Programming) 공격이 있으며, ROP 공격에 대응하기 위한 여러 방어기법들이 제시되어왔다. 그러나 기존의 방법들은 특정 규칙을 기반으로 공격을 탐지하는 Rule-base 방식을 사용하기 때문에 사전에 정의한 규칙에 해당되지 않는 ROP 공격은 탐지할 수 없다는 한계점이 존재한다. 본 논문에서는 RNN(Recurrent Neural Network)을 사용하여 ROP 공격 코드에 사용되는 명령어 패턴을 학습하고, 이를 통해 ROP 공격을 탐지하는 방법을 소개한다. 또한 정상 코드와 ROP 공격 코드 판별에 대한 False Positive Ratio, False Negative Ratio, Accuracy를 측정함으로써 제안한 방법이 효과적으로 ROP 공격을 탐지함을 보인다.
코드 재사용 공격은 프로그램 메모리상에 존재하는 실행 가능한 코드 조각을 조합하고, 이를 연속적으로 실행함으로써 스택에 직접 코드를 주입하지 않고도 임의의 코드를 실행시킬 수 있는 공격 기법이다. 코드 재사용 공격의 대표적인 종류로는 ROP(Return-Oriented Programming) 공격이 있으며, ROP 공격에 대응하기 위한 여러 방어기법들이 제시되어왔다. 그러나 기존의 방법들은 특정 규칙을 기반으로 공격을 탐지하는 Rule-base 방식을 사용하기 때문에 사전에 정의한 규칙에 해당되지 않는 ROP 공격은 탐지할 수 없다는 한계점이 존재한다. 본 논문에서는 RNN(Recurrent Neural Network)을 사용하여 ROP 공격 코드에 사용되는 명령어 패턴을 학습하고, 이를 통해 ROP 공격을 탐지하는 방법을 소개한다. 또한 정상 코드와 ROP 공격 코드 판별에 대한 False Positive Ratio, False Negative Ratio, Accuracy를 측정함으로써 제안한 방법이 효과적으로 ROP 공격을 탐지함을 보인다.
A code reuse attack is an attack technique that can execute arbitrary code without injecting code directly into the stack by combining executable code fragments existing in program memory and executing them continuously. ROP(Return-Oriented Programming) attack is typical type of code reuse attack an...
A code reuse attack is an attack technique that can execute arbitrary code without injecting code directly into the stack by combining executable code fragments existing in program memory and executing them continuously. ROP(Return-Oriented Programming) attack is typical type of code reuse attack and serveral defense techniques have been proposed to deal with this. However, since existing methods use Rule-based method to detect attacks based on specific rules, there is a limitation that ROP attacks that do not correspond to previously defined rules can not be detected. In this paper, we introduce a method to detect ROP attack by learning command pattern used in ROP attack code using RNN(Recurrent Neural Network). We also show that the proposed method effectively detects ROP attacks by measuring False Positive Ratio, False Negative Ratio, and Accuracy for normal code and ROP attack code discrimination.
A code reuse attack is an attack technique that can execute arbitrary code without injecting code directly into the stack by combining executable code fragments existing in program memory and executing them continuously. ROP(Return-Oriented Programming) attack is typical type of code reuse attack and serveral defense techniques have been proposed to deal with this. However, since existing methods use Rule-based method to detect attacks based on specific rules, there is a limitation that ROP attacks that do not correspond to previously defined rules can not be detected. In this paper, we introduce a method to detect ROP attack by learning command pattern used in ROP attack code using RNN(Recurrent Neural Network). We also show that the proposed method effectively detects ROP attacks by measuring False Positive Ratio, False Negative Ratio, and Accuracy for normal code and ROP attack code discrimination.
* AI 자동 식별 결과로 적합하지 않은 문장이 있을 수 있으니, 이용에 유의하시기 바랍니다.
문제 정의
본 논문에서는 Rule-base 방식의 한계점을 해결하기 위해 딥 러닝(Deep learning)을 사용하여 학습된 인공 신경망을 통해 ROP 공격을 탐지하는 방법을 제안한다. 연속적으로 실행되는 명령어의 패턴을 학습하기 위해 Recurrnet Neural Network(RNN)이라는 인공 신경망 모델을 사용하였으며, DBI(Dynamic Binary Instrumentation) 도구와 텐서플로우(Tensorflow)를 이용하여 성능 측정을 위한 실험을 진행하였다.
본 논문에서는 시퀀스 데이터 학습에 적합한 딥 러닝 모델인 RNN을 사용하여 ROP 공격을 탐지하는 방법을 제시하였다. 기존에 ROP 공격을 탐지하는 방법은 가젯의길이를 통해 가젯의 공격 여부를 판단하는 Rule-base 방식을 사용하기 때문에 쉽게 우회가 가능하다.
제안 방법
학습이 완료된 RNN을 이용하여 ROP 공격을 탐지한다. DROP의 경우 가젯의 길이를 통해 공격 의심 가젯을판별하였으나[2], 본 논문에서는 RNN에 가젯의 명령어를 입력하고 그 출력 값을 통해 공격 의심 가젯을 판별한다. ROP 공격 탐지는 DROP와 마찬가지로 공격 의심 가젯이특정 횟수(T) 이상 연속적으로 등장하는 경우 ROP 공격으로 간주한다.
04 amd64에 존재하는 정상 프로그램 30개를 선정하였다. ROP 공격 코드를 얻기 위해 악성코드 수집 웹 사이트인 Exploit-DB를 이용하였고, 총 20개의 ROP 코드를 획득하였다. ROP 공격에 사용된 가젯의 총 개수는 720개이며, 이 중 가장 긴 가젯의 길이는 8이다.
그림 5는 ROP 공격 탐지를 위한 RNN의 전체적인 구조를 나타낸 것이다. Vanishing gradient 현상을 보완하기 위해 LSTM 메모리 셀을 사용하였다. RNN의 시간 스텝은 입력되는 가젯의 길이, 즉 가젯을 구성하는 명령어의 개수와 같다.
Accuracy는 전체 테스트 데이터 중 올바르게 판별된 데이터의 비율을 의미하고 표 3에서 # 을 의미한다. 각 T에 대하여 총 10번의 탐지 성능을 측정 실험을 진행하였다. 1회 실험에 사용된 ROP 공격 코드의 개수는 20개이고, 정상 프로그램의 개수는 6개이다.
공격 가젯을 샘플링하기 위해 먼저 기존에 확보한 ROP 공격 가젯으로부터 가젯 길이 분포와 가젯의 첫 번째 opcode의 분포, 그리고 임의의 opcode에 대하여 다음에 등장하는 opcode의 분포를 얻었다. 본 논문에서는 위세 가지 분포를 각각 Plength, Pfirst, Popcode라고 정의한다.
인공 신경망을 효과적으로 학습시키기 위해선 많은 양의 데이터가 필요하다. 그러나 ROP 공격에 사용되는 데이터는 일반적으로 정상 데이터에 비해 많은 양의 데이터를 확보하기 어렵기 때문에, 본 논문에서는 샘플링(sampling)을 이용하여 추가적으로 학습 데이터를 확보하였다.
그러나 위와 같은 방법을 사용하면 사전에 정의한 T0보다 큰 길이의 가젯을 사용하는 경우 절대 공격 의심 가젯으로 판별되지 않는다는 한계를 갖고 있다. 따라서 본 논문에서는 RNN을 이용하여 가젯을 구성하는 명령어의 패턴울 학습하고, 이를 통해 공격 의심 가젯을 판별한다.
이를 보완하기 위한 해결책으로는ReLU를 활성 함수로 사용하는 방법과 GRU(GatedRecurremt Units)[3], LSTM(Long Short-Term Memory)[4]을사용하는 방법이 있다. 본 논문에서는 LSTM을 사용함으로써 Vanishing gradient 문제를 보완한다.
따라서 제한된 길이의 가젯에대하여 정상 가젯과 공격 가젯을 구분할 수 있도록 RNN을 학습시킬 필요가 있다. 본 논문에서는 RNN 학습에 사용되는 가젯의 길이를 제한하며, 제한 길이는 학습에 사용되는 ROP 공격 가젯의 최대 길이로 한다.
본 논문에서는 ROP 공격 탐지를 위해 RNN을 사용하며, LSTM 메모리 셀을 사용하여 Vanishing gradient 현상을 보완하였다. 가젯을 구성하는 명령어들은 RNN의 입력 데이터로 주어지는데, 각 명령어들은 RNN이 처리하기 용이한 데이터 형태로 인코딩(encoding)된다.
따라서 ROP 공격 코드의 가젯은 정상 프로그램의 가젯에 비해 확보하는데 많은 어려움이 따른다. 본 논문에서는 샘플링 기법을 이용하여 ROP 공격 가젯데이터를 추가로 확보하고 이를 학습에 사용한다.
연속적으로 실행되는 명령어의 패턴을 학습하기 위해 Recurrnet Neural Network(RNN)이라는 인공 신경망 모델을 사용하였으며, DBI(Dynamic Binary Instrumentation) 도구와 텐서플로우(Tensorflow)를 이용하여 성능 측정을 위한 실험을 진행하였다. 실험 과정에서는 샘플링을 통해 학습 데이터를 재생성함으로써 학습 데이터 부족 현상을 보완하였다.
학습이 완료된 RNN을 이용하여 ROP 공격을 탐지한다. DROP의 경우 가젯의 길이를 통해 공격 의심 가젯을판별하였으나[2], 본 논문에서는 RNN에 가젯의 명령어를 입력하고 그 출력 값을 통해 공격 의심 가젯을 판별한다.
대상 데이터
각 T에 대하여 총 10번의 탐지 성능을 측정 실험을 진행하였다. 1회 실험에 사용된 ROP 공격 코드의 개수는 20개이고, 정상 프로그램의 개수는 6개이다. 따라서 10회 실험에 대한 FPR, FNR, Accuracy는 다음과 같이 계산된다.
RNN 학습을 위한 정상 데이터는 총 30개의 정상 프로그램 중 24개의 프로그램에 존재하는 가젯이 사용되었고,그 중 8이하의 길이를 갖는 약 2,800개의 가젯이 사용되었다. 테스트용 정상 데이터는 학습에 사용되지 않는 6개의 프로그램의 가젯이 사용되었다.
샘플링된 가젯과 기존 가젯의 분포가 거의 일치함을 확인할 수 있다. 본 실험에서는 샘플링을 통해 총 3,200개의 가젯을 추가로 확보하였고 이를 학습 데이터로 사용하였다.
정상 프로그램의 가젯을 확보하기 위해 표 2와 같이 Ubuntu 14.04 amd64에 존재하는 정상 프로그램 30개를 선정하였다. ROP 공격 코드를 얻기 위해 악성코드 수집 웹 사이트인 Exploit-DB를 이용하였고, 총 20개의 ROP 코드를 획득하였다.
학습용 공격 데이터는샘플링을 통해 확보한 3,200개의 가젯이 사용되었다. 테스트용 공격 데이터는 Exploit-DB에서 확보한 20개의 실제 ROP 공격 코드가 사용되었고, 총 720개의 가젯이 사용되었다.
RNN 학습을 위한 정상 데이터는 총 30개의 정상 프로그램 중 24개의 프로그램에 존재하는 가젯이 사용되었고,그 중 8이하의 길이를 갖는 약 2,800개의 가젯이 사용되었다. 테스트용 정상 데이터는 학습에 사용되지 않는 6개의 프로그램의 가젯이 사용되었다. 학습용 공격 데이터는샘플링을 통해 확보한 3,200개의 가젯이 사용되었다.
테스트용 정상 데이터는 학습에 사용되지 않는 6개의 프로그램의 가젯이 사용되었다. 학습용 공격 데이터는샘플링을 통해 확보한 3,200개의 가젯이 사용되었다. 테스트용 공격 데이터는 Exploit-DB에서 확보한 20개의 실제 ROP 공격 코드가 사용되었고, 총 720개의 가젯이 사용되었다.
이론/모형
그림 3은 ROP 공격을 탐지하는 전체 시스템을 나타낸 것이다. DBI(Dynamic Binary Instrumentation) 도구를 사용하여 제작된 실행 제어 모듈(Execution Control Module)을이용하여 바이너리의 실행을 제어한다. 실행 제어 모듈은 바이너리가 실행한 명령어를 동적으로 추출하고, 명령어를 인코딩하여 RNN의 입력으로 전달한다.
RNN을 학습하기 위해 Gradient Descent와 BPTT(Backpropagation Through Time)[5] 알고리즘이 사용된다. 기존의 Backpropagation 알고리즘은 시간을 거슬러 올라가는 형태의 학습이 불가능하다는 문제가 있다.
기존의 Backpropagation 알고리즘은 시간을 거슬러 올라가는 형태의 학습이 불가능하다는 문제가 있다. RNN의 학습 과정에서 Backpropagation 알고리즘을 확장한BPTT 알고리즘을 사용한다. 그러나 RNN의 학습 과정은 에러가 발생한 시점에서 멀리 떨어진 과거 시점일수록에러의 그래디언트가 전달되지 않는 Vanishing gradient 문제를 내포하고 있다[12, 13].
본 논문에서는 Rule-base 방식의 한계점을 해결하기 위해 딥 러닝(Deep learning)을 사용하여 학습된 인공 신경망을 통해 ROP 공격을 탐지하는 방법을 제안한다. 연속적으로 실행되는 명령어의 패턴을 학습하기 위해 Recurrnet Neural Network(RNN)이라는 인공 신경망 모델을 사용하였으며, DBI(Dynamic Binary Instrumentation) 도구와 텐서플로우(Tensorflow)를 이용하여 성능 측정을 위한 실험을 진행하였다. 실험 과정에서는 샘플링을 통해 학습 데이터를 재생성함으로써 학습 데이터 부족 현상을 보완하였다.
ROP 공격에 사용된 가젯의 총 개수는 720개이며, 이 중 가장 긴 가젯의 길이는 8이다. 정상 프로그램으로부터 RNN 학습 및 테스트에 필요한 가젯을추출하기 위해 DBI 도구인 Pin[8]을 사용하였다. Pin을 이용하여 정상 프로그램에서 확보한 가젯의 총 개수는 20,003개이며, 8 이하의 길이를 갖는 가젯의 총 개수는 3,556개이다.
성능/효과
이 경우 False Positive는 발생하진 않았지만, 전체 ROP 공격 코드의 25%를 정상으로 탐지하여 25%의FNR을 보였다. T = 6인 경우 1.7%의 FPR과 3.0%의 FNR을 보였지만 Accuracy의 경우 98.46%의 탐지율을 보임으로써 실험적으로 6이 최적의 T값임을 확인하였다.
T =1인 경우 공격 의심 가젯이 한번이라도 발견되면 ROP 공격으로 간주한다. 따라서 모든 프로그램을 ROP 공격으로 탐지하여 FPR 100%, FNR 0%의 성능을 보였다. T =10인 경우 공격 의심 가젯이 10번 연속으로 발견되면 ROP 공격으로 간주한다.
그림 7과 그림 8은 Table 2의 알고리즘을 사용하여 샘플링된 1000개의 가젯과, 기존에 확보하고 있던 실제 ROP 공격 가젯의 Plength와 Pfirst분포를 나타낸 것이다. 샘플링된 가젯과 기존 가젯의 분포가 거의 일치함을 확인할 수 있다. 본 실험에서는 샘플링을 통해 총 3,200개의 가젯을 추가로 확보하였고 이를 학습 데이터로 사용하였다.
표 4는 T값의 변화에 따른 ROP 공격 탐지의 성능을 나타낸 것이다. 성능 실험 결과 T값이 커질수록 FPR은 줄어들고, FNR은 높아지는 경향을 보인다. T =1인 경우 공격 의심 가젯이 한번이라도 발견되면 ROP 공격으로 간주한다.
후속연구
그러나 본 논문에서 제안한 방법은 최종적으로 ROP 공격을 판별하기 위한 변수 T값을 실험적으로 결정해야 한다는 한계점이 존재한다. 따라서 RNN을 학습하는 과정에서 최적의 T값 또한 학습할 수 있도록 향후 연구가 이루어질 필요가 있다.
그러나 본 논문에서 제안한 방법은 최종적으로 ROP 공격을 판별하기 위한 변수 T값을 실험적으로 결정해야 한다는 한계점이 존재한다. 따라서 RNN을 학습하는 과정에서 최적의 T값 또한 학습할 수 있도록 향후 연구가 이루어질 필요가 있다.
질의응답
핵심어
질문
논문에서 추출한 답변
ROP 공격에서 사용하는 가젯은 항상 무엇으로 끝나는가?
ROP 공격은 적은 개수의 명령어로 이루어진 짧은 코드 조각을 사용하며, 이 때 사용하는 코드 조각을 가젯이라고 한다. ROP 공격에서 사용하는 가젯은 항상 RET 명령어로 끝난다. RET 명령어는 다음에 실행할 명령어의 주소를 스택 최상단으로부터 가져오고, 스택 포인터를 증가시킨다.
LSTM은 무엇을 보완하기 위해 등장한 알고리즘인가?
LSTM은 길이가 긴 시퀀스 데이터에 대한 학습이 어려운 RNN을 보완하기 위해 등장한 인공 신경망 알고리즘이다. 그림 2는 LSTM의 기본 구조를 나타낸 것이다.
Vanishing gradient 문제를 내포하고 있는 RNN의 학습과정은 어떤 한계점을 보이는가?
그러나 RNN의 학습 과정은 에러가 발생한 시점에서 멀리 떨어진 과거 시점일수록에러의 그래디언트가 전달되지 않는 Vanishing gradient 문제를 내포하고 있다[12, 13]. 이 문제로 인해 기본적인 형태의 RNN은 시퀀스 길이가 긴 데이터를 학습하는데 한계점을 보인다. 이를 보완하기 위한 해결책으로는ReLU를 활성 함수로 사용하는 방법과 GRU(GatedRecurremt Units)[3], LSTM(Long Short-Term Memory)[4]을사용하는 방법이 있다.
참고문헌 (13)
P.Bania, "Security Mitigations for Return-Oriented Programming Attacks", http://piotrbania.com/all/articles/pbania_rop_mitigations2010.pdf, 2010.
P. Chen, H. Xiao, X. Shen, X. Yin, B. Mao, and L. Xie, "DROP: Detecting return-oriented programming malicious code", 5th Internationak Conference on Information System Security, LNCS Vol 5905, pp. 163-177, 2009. https://link.springer.com/chapter/10.1007%2F978-3-642-10772-6_13
K. Cho, B. van Merrienboer, C. Gulcehre, D. Bahdanau, F. Bougares, H. Schwenk, and Y. Bengio, "Learning phrase representations using RNN encoder-decoder for statistical machine translation", Empirical Methods in Natural Language Processing, pp. 1724-1734, 2014.
S. Hochreiter, and J. Schmidhuber, "Long Short-Term Memory", Neural computation, 1997.
P. J. Werbos, "Backpropagation through time: what it does and how to do it", Proceedings of the IEEE, 1990.
M. Kayaalp, T. Schmitt, J. Nomani, D. Ponomarev, and N. Abu-Ghazaleh, "Scrap: Architecture for signature-based protection from code reuse attacks", Proceedings of the 2013 IEEE conference on High Performance Computer Architecture, 2013.
J. Li, Z. Wang, X. Jiang, M. Grace, and S. Bahram, "Defeating return-oriented rootkits with return-less kernels". 5th ACM SIGOPS EuroSys conference, 2010.
CK. Luk, R. Cohn, R. Muth, H. Patil, A. Klauser, G. Lowney, S. Wallace, V. J. Reddi, and K. Hazelwood, "Pin: Building customized program analysis tools with dynamic instrumentation", PLDI '05 Proceedings of the ACM SIGPLAN conference on Programming language design and inplementaion, pp. 190-200, 2005.
Microsoft, Data Execution Prevention(DEP), http://support.microsoft.com/kb/875352/EN-US/, 2006.
K. Onarlioglu, L. Bilge, A. Lanzi, D. Balzarotti, and E. Kirda, "G-free: Defeating return-oriented programming through gadget-less binaries", ACSAC '10 Proceedings of the 26th Annual Computer Security Applications Conference, pp. 49-58, 2010.
H.Shacham, "The Geometry of Innocent Flesh on the Bone: Return-into-libc without Function Calls (on the x86)", CCS '07 Proceedings of the 14th ACM conference on Computer and Communicatopns Security, pp. 552-56, 2007.
K. Yao, B. Peng, Y. Zhang, D. Yu, G. Zweig, and Y. Shi, "Spoken Language Understanding Using Long Short-Term Memory Neural Network", IEEE - Institute of Electrical and Electronics Engineers, 2014.
K. Yao, B. Peng, G. Zweig, D. Yu, X. Li, and F. Gao, "Recurrent Conditional Random Field For Language Understanding", IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), 2014. https://doi.org/10.1109/ICASSP.2014.6854368
※ AI-Helper는 부적절한 답변을 할 수 있습니다.