팀명
BinAIDA
팀원 명단
김선규, 안형진, 유형곤
지도교수
이성호 교수님
작품 배경 및 목적
정적 프로그램 분석은 프로그램의 정확도와 안정성 등을 평가하는 데 사용되는 기술입니다. 필요에 따라서는 악성 프로그램과 같이 소스 코드가 없는 상황에서도 정적으로 프로그램을 분석해야 합니다. LLVM 기반 정적 분석 도구는 LLVM IR 수준에서 동작하지만, 소스 코드가 없기 때문에 일반적인 프로그램 분석 도구를 사용하기 어렵습니다. 바이너리의 정적 분석을 위해 바이너리를 LLVM IR로 복원하는 바이너리 리프터 (Binary Lifter) 연구를 진행하게 되었습니다.
작품 내용
많은 정적 분석 도구가 IR 수준에서 동작하기 때문에, 정적 분석의 결과가 원본 프로그램과 크게 차이가 나지 않도록 바이너리 리프팅을 하는 것이 연구의 목적입니다.
대표적인 중간 표현으로는 LLVM IR이 있습니다. LLVM IR은 프로그래밍 언어와 아키텍처에 독립적인 범용 컴파일러 프레임워크인 LLVM에서 사용되는 중간 표현입니다. LLVM IR은 LLVM 프레임워크에서 지원하는 모듈을 사용하여 프로그램을 분석하거나 변환할 수 있습니다. 이러한 이유로, 일부 바이너리 리프터는 바이너리 파일을 LLVM IR로 변환합니다. BinAIDA도 LLVM IR의 풍부한 정적 분석 도구를 활용하고자 바이너리로부터 LLVM IR을 리프팅합니다.
현존하는 바이너리 리프터들은 EIR(Emulation-style IR) 또는 HIR(High-level IR) 형태로 바이너리 파일을 변환합니다. EIR은 바이너리 파일의 실행 동작을 재현하는 데 초점을 맞추어 프로그램의 실행 동작에 대해 정확도가 높습니다. 하지만, 변수 복원, 타입 추론 등이 이루어지지 않아 정적 분석 도구를 적용하기는 어렵습니다. 또 다른 형태인 HIR은 EIR에서 더 추상적으로 변환된 형태로 변수 복원, 타입 추론등이 이루어져 정적 분석 도구를 적용할 수 있습니다. 하지만, 컴파일 과정에서 사라진 정보를 복원하다보니 정확도가 높지 않아 정적 분석의 결과가 원본 프로그램에 비해 크게 달라지게 됩니다.
우리는 기존의 LLVM IR 기반 바이너리 리프터인 RetDec을 개선하여 변수 복원과 타입 추론 부분에서 정확도가 개선된 바이너리 리프터(BinAIDA) 개발을 목표로 하고 있습니다. 정확도를 향상하기 위해 대규모 언어 모델(Large Language Models)을 활용하고 있습니다.
Comments