[논문 리뷰] In Nomine Function: Naming Functions in Stripped Binaries with Neural Networks
이 논문은 딥러닝을 활용해 스타핑된 바이너리 실행 파일에서 함수를 자동으로 이름 붙이는 신경망 접근법을 제안한다. 다양한 소프트웨어에서 유래한 880만 개의 함수를 포함하는 대규모 공개 데이터셋을 제시하고, 트랜스포머 모델을 사용해 최신 기술 수준의 성능(재현율 점수: 0.230)을 달성하며, 특히 시스템 유틸리티와 같은 도메인 전용 바이너리에서의 정확도 향상이 뚜렷한 피지컬 토닝(fine-tuning)의 효과를 입증한다.
In this paper we investigate the problem of automatically naming pieces of assembly code. Where by naming we mean assigning to an assembly function a string of words that would likely be assigned by a human reverse engineer. We formally and precisely define the framework in which our investigation takes place. That is we define the problem, we provide reasonable justifications for the choices that we made for the design of training and the tests. We performed an analysis on a large real-world corpora constituted by nearly 9 millions of functions taken from more than 22k softwares. In such framework we test baselines coming from the field of Natural Language Processing (e.g., Seq2Seq networks and Transformer). Interestingly, our evaluation shows promising results beating the state-of-the-art and reaching good performance. We investigate the applicability of tine-tuning (i.e., taking a model already trained on a large generic corpora and retraining it for a specific task). Such technique is popular and well-known in the NLP field. Our results confirm that fine-tuning is effective even when neural networks are applied to binaries. We show that a model, pre-trained on the aforementioned corpora, when fine-tuned has higher performances on specific domains (such as predicting names in system utilites, malware, etc).
연구 동기 및 목표
- 함수 이름이 제거된 스타핑된 바이너리에서 악성코드 분석 및 소프트웨어 유지보수를 방해하는 문제를 해결한다.
- 동적 라이브러리 호출의 존재나 폐쇄형 어휘 기반 이름 붙이기에 의존하는 이전 연구의 제한된 가정을 극복한다.
- 실제 세계의 바이너리에서 유래한 대규모 공개 데이터셋을 구축하여, 바이너리 함수 이름 붙이기 분야에서 재현 가능한 평가 및 벤치마킹을 가능하게 한다.
- 특히 시퀀스 투 시퀀스(Sequence-to-Sequence, Seq2Seq) 및 트랜스포머 아키텍처를 포함한 딥 뉴럴 네트워크의 효과를 함수 이름 예측 작업에 대해 평가한다.
- 사전 훈련된 모델을 도메인 특화 바이너리 데이터셋에 대해 피지컬 토닝함으로써 예측 정확도 향상 효과를 분석한다.
제안 방법
- 시스템 유틸리티, 데이터베이스, 게임 등 다양한 도메인에서 22,000개의 다양한 소프트웨어 바이너리에서 유래한 880만 개의 함수를 포함하는 대규모 데이터셋인 UbuntuDataset을 구축한다.
- 소스 코드의 함수 이름을 참조 레이블로 사용하여, 순차적-순차적(Sequence-to-Sequence, Seq2Seq) 및 트랜스포머 모델을 훈련하고 평가한다.
- 전이 학습을 적용하여 전체 UbuntuDataset에서 사전 훈련된 모델을 더 작은 도메인 특화 서브셋(예: 시스템 유틸리티의 busybox)에 대해 피지컬 토닝한다.
- 평가 지표로 BLEU 점수와 F1 점수를 사용하며, F1 점수는 예측된 이름과 기준 이름 간의 정확한 단어 일치 및 부분 일치를 기반으로 계산한다.
- 트랜스포머 모델에서 문맥 임베딩과 어텐션 메커니즘을 활용해 어셈블리 수준의 함수 행동에서의 의미적 및 문법적 패턴을 더 잘 포착한다.
- 예측의 의미적 정합성과 실제 함수 행동과의 일치도를 평가하기 위해 추론 분석 및 정성적 분석을 수행한다.
실험 결과
연구 질문
- RQ1심층 신경망은 기호 정보가 없는 스타핑된 바이너리 코드에서 인간이 이해할 수 있는 의미 있는 함수 이름을 효과적으로 예측할 수 있는가?
- RQ2시스템 유틸리티, 악성코드, 애플리케이션 라이브러리와 같은 다양한 소프트웨어 도메인 간에 모델 성능은 어떻게 변화하는가?
- RQ3일반 목적 모델 대비 도메인 특화 서브셋에 대해 사전 훈련된 모델을 피지컬 토닝함으로써 함수 이름 붙이기 정확도는 어느 정도 향상되는가?
- RQ4제안된 모델은 F1 점수와 예측의 의미적 관련성 측면에서 기존 최신 기술 수준의 접근법과 어떻게 비교되는가?
- RQ5다중 기준 이름 붙이기 접근법은 다양한 유효한 이름 규칙을 고려함으로써 평가의 강인성을 향상시킬 수 있는가?
주요 결과
- 트랜스포머 모델은 전체 테스트 세트에서 F1 점수 0.230을 기록하여 Seq2Seq 기준 모델(F1 점수: 0.122)보다 뚜렷이 뛰어난 성능을 보였다.
- UbuntuDataset에서 사전 훈련된 모델을 도메인 특화 서브셋(예: busybox)에 대해 피지컬 토닝한 후 coreutils에서 테스트한 결과, F1 점수는 상대적으로 22% 향상되었다.
- 악성코드 샘플 gonnacry에서 트랜스포머 모델은 F1 점수 0.260을 기록하여 DEBIN(F1 점수: 0.0825)을 능가했으며, 기준 이름과 정확히 일치하지 않더라도 기능적 의미를 잘 반영한 예측을 보였다.
- 암호화/복호화 기능에 대해 'copy file'을, 키 생성 기능에 대해 'random'을 예측한 사례는 정상 이름과 다를지라도 실제 기능 행동과 의미적으로 일치함을 보였다.
- 이 연구는 피지컬 토닝이 바이너리 코드 분석에서 효과적이라는 점을 확인했으며, 자연어 처리에서의 성공을 저수준 바이너리 함수 이름 붙이기로 확장함을 보여주었다.
- UbuntuDataset(22,000개 소프트웨어에서 유래한 880만 개의 함수)의 제작 및 공개는 바이너리 함수 이름 붙이기 분야에서 재현 가능한 벤치마킹과 향후 연구를 가능하게 한다.
더 나은 연구,지금 바로 시작하세요
논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.
카드 등록 없음 · 무료 플랜 제공
이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.