Paper Review

PHP Webshell Detection - Opcode Processing

aiden0729

 

[개요 및 목적]

PHP Webshell을 탐지하는 새로운 방식인 Opcode Double-Tuples에 대해 설명하는 아래의 논문에 대한 리서치

https://arxiv.org/pdf/2502.19257

 

 

아래 언급되는 opcode 및 operand는 php 코드의 형식과 내용을 VLD(Vulcan Logic Dumper) 로 파악한 내용입니다

 

 

 

 

[기존 방식]

기존방식은 일반적으로 패턴 기반( 정규식 - YARA 등 ) , 딥러닝 기반(OST, Opcode Single-Tuples)  등을 적용

 

 

** YARA :  정규식의 방식으로 악성 패턴을 탐지하며, 대다수의 패턴을 처음부터 메뉴얼하게 설정 필요. 다만 아래와 같이 Rules에 관련된 깃헙도 존재하여 범용적으로 사용 중

https://github.com/Yara-Rules/rules

 

** OST (Opcode Single-Tuples) : opcode 부분과 빈도수를 보고 이상치 탐지.  아주 간단한 1-line Webshell이나 Backdoor Toolkit 등 opcode 자체가 비정상적이거나 opcode가 operand에 비해 비정상적으로 많은 코드 캐치 가능 

참고 : https://www.jatit.org/volumes/Vol101No18/26Vol101No18.pdf

 

 

 

 

 

 

[기존 방식의 한계]

1.YARA의 오픈소스가 존재하기 때문에 customize한 룰 이외의 오픈소스 룰은 공격자도 쉽게 파악 및 우회

 

2.OST(Opcode Single-Tuples)는 실질적인 피연산자(주어/목적어, operand)가 아닌 opcode(동사)만 주로 파악하는 시스템. 즉 내용이 아닌 동작만 가지고 이상치를 탐지

 

3.주로 RNN, LSTM 등의 알고리즘을 활용하기 때문에 장기기억 문제로 긴 문장에 대한 탐지 능력 저하

 

 

 

→ 실질적으로는 정상적인 opcode 내 operand에 악성코드를 조금씩 숨겨놓는 방식으로 접근

→ 코드 길이도 비정상적으로 길게 만들며, 난독코드로 만들어 실제 시스템이 탐지하기 어려워 현재 YARA + OST는 해당 방식 한계 존재 

 

 

 

 

 

[ODTs(Opcode Double-Tuples) 원리]

 

논문에서 제시한 방식.  Sliding Window Attention과 CodeBert + FastText의 2가지 기술을 사용하여 기존 문제를 보완하려는 부분.

행동(opcode)과 대상(operand) 을 한 번에 묶는 한 쌍으로 사용한다고 하여 Double-Tuples로 명명

 

 

 

 

Sliding Window Attention

-RNN과 LSTM 등이 가진 장기기억 문제 때문에 opcode만 훑고 넘어갔다면, 해당 방식 Transformer가 사용한 Attention 방식을 조금 개량하여 모든 코드를 조금씩 겹쳐가면서 꼼꼼하게 읽는 방식

 

 

새로 추가된 윈도우 마스크(M) 은 용어 그대로 윈도우 내 함수내에서만 Attention을 적용하게끔 설계

*softmax는 함수 특성상 거리가 멀면 굉장히 낮은 점수를 줌으로서 실제 Attention 계산에서 제외. Window 내의 Attention에는 M으로 가중치  

 

따라서 특정 Window 내 값만 Attention 계산을 하여 중요도나 의미를 파악하면서 코드를 순차적으로 계속 Sliding 하는 방식

기존 RNN LSTM 등이 코드 전체의 의미를 파악하려고 했던 것이 어려워 operand 계산에 실패한 부분을 해당 방식으로 보완

 

 

 

 

 

Feature Fusion: CodeBERT + FastText

 

CodeBERT와 FastText를 퓨전하여 탐지.

CodeBert가 중심이 되며 Embedding 모델로 opcode 분류작업에 성능이 좋았던 FastText 사용

 

 

1.CodeBERT

 

기존 NL만 학습한 BERT와 다르게 6개의 Programming Language까지 같이 학습한 Bi-Modal 모델

프로그래밍 코드와 구조 및 의미를 파악하는데 기존 BERT보다 뛰어나고 명시

해당 프로그래밍 코드의 구조와 흐름 등을 파악하여, 해당 코드가 어떤 의도를 파악하고 있는지 확인 

논문 : https://arxiv.org/pdf/2002.08155

 

ODTs 내 역할: 

- 문맥 파악: eval이라는 함수가 단독으로 쓰일 때와 $_POST 같은 사용자 입력과 함께 쓰일 때의 위험도가 다르다는 것을 인지

- 구조 파악: 변수가 어디서 선언되고, 어떻게 변형되어, 어느 함수로 전달되는지 그 데이터의 흐름을 추적

- 의도 추론: 코드의 전체적인 구조를 보고 악성 행위의 의도나 목적을 파악

 

ODTs 내 한계: 

-새로운 구조에 대한 탐지 한계 : 인코딩 및 난독화된 문자열을 쓰면, CodeBERT의 단어 사전에 없는 단어(OOV)가 되어 탐지 어려움 존재

 

 

 

 

 

2.FastText

과거 Word2Vec을 개량하기 위한 나온 알고리즘. Word2Vec은 모든 학습 단어에 대한 개별적 indexing을 하므로 앞서 설명한 사전에 없는 단어 (OOV) 문제가 있는 모델 

FastText는 Character n-grams를 사용하여 단어를 n개로 분할 및 summing up하여 의미를 파악 

 

예시) Word2Vec은 apple을 ID 1로 통째로 인덱싱하여, apples 혹은 ap_ple 등이 나오면 OOV 문제 발생.

FastText는 아래와 같이 나눠서 의미(벡터) 파악

 

 

ODTs 내 역할: 

- OOV 문제 극복: 앞서 codeBERT의 한계 중 하나인 OOV를 극복 가능. eval을 학습했다면, eva_l_fun_ction 등의 변형 함수도 의미 파악 가능

-코드 디테일 파악 : codeBERT가 전체적인 의존성 및 구조를 파악, FastText는 주석이나 문자열 등도 상세히 파악

-변종 대처 : codeBERT는 대체로 변종에 약할 수 있으나, FastText는 분할하여 코드를 벡터로 파악하므로 상대적으로 강한 모습

 

ODTs 내 한계:

단어의 유사성 파악 능력과 별개로 전체적인 구조 및 Indexing별 유사성은 codeBERT에 거의 전적으로 의존

 

 

 

 

 

Result

아래와 같은 공식으로 최종 E ( Final Feature Vector ) 를 구합니다. 

 λ의 가중치를 기반으로 codeBERT와 FastText의 가중치를 도출합니다.

ex ) λ = 0.8 이라면, codeBERT에 80%가중치 FastText 20% 가중치

 

 

해당 부분은 사용자가 파라미터 설정하는 것이 아닌 최적값이 실험을 통해 결정되게 해야합니다. 

 

 

 

 

 

[ODTs(Opcode Double-Tuples) 의 한계]

 

정적 분석의 한계  

정적 분석은 동적 분석보다 다소 한계를 가질 수 있으며, 실제 변수나 소스가 외부 등에 있다면 대처가 불가능

 

 

높은 수준의 자원 소모량

codeBERT는 Transformer 기반의 모델로 무거운 모델. 베이스 모델 기준 125M 파라미터. 실시간성으로 모델을 돌린다면 서버 부하

 

새로운 방식의 공격에 여전히 취약

의미적 유사성 및 operand를 검사하여도 여전히 기학습 모델이므로 미학습 데이터에 대한 한계 존재

 

결과 해석의 한계

YARA는 정규식으로 정확한 탐지 근거를 제공하지만, ODTs는 기본적으로 벡터기반 모델이므로 탐지 결과가 명확하지 않음. 악성 스코어는 Attention 가중치 혹은 코사인 거리 정도로 표현 가능할 것으로 예상

 

 

 

 

 

[결과 코멘트]

1.정적방식 내에서는 해당 operand를 구체적으로 추적하는 시스템이 없다면 대체제가 아닌 보완재로 고려 가능

 

2.다만 GPU 등의 리소스 확보 및 다양한 시나리오에 대한 검증이 격리된 샌드박스 내에서 필요

 

3.https://scholar.google.com/scholar?hl=ko&as_sdt=0%2C5&q=PHP+webshell&btnG= 등에서 PHP webshell을 deep learning 및 Graph 등을 활용하여 다른 방식으로 탐지하는 논문들도 존재. 2025년 2월에 발표된 해당 논문의 인용수 등 추이 확인 필

 

4. 논문에 따르면 OSTs의 F-1 Score 대비 4.4%p 정도 높아진 결과. OSTs는 간단한 TF-IDF나 SVM 등으로 구현이 가능하므로, 해당 트레이드 오프에 대해 고려 필요