최근 한 개발자가 로컬에서 구동되는 대규모 언어모델(LLM)이 얼마나 복잡한 코드를 잘 처리하는지 측정하는 흥미로운 벤치마크 프로젝트를 공개했습니다. 이 프로젝트는 LLM이 난독화된 C 바이너리를 역분석(reverse-engineer)하여 숨겨진 평문 메시지를 복구하는 능력을 평가하며, 복잡도가 높아질수록 LLM의 성능이 급격히 저하되는 양상을 보였습니다. 이는 LLM의 코드 이해 및 추론 능력 한계를 보여주는 동시에, 실제 복잡한 소프트웨어 환경에서의 활용 가능성에 대한 중요한 질문을 던집니다.
이 벤치마크는 NVIDIA DGX Spark 단일 장비에서 다양한 로컬 LLM을 대상으로 진행되었습니다. 각 테스트(fixture)는 구성 가능한 수의 변환 라운드를 사용하여 분석 난이도를 높였으며, LLM은 Ghidra MCP 서버를 통해 바이너리에 접근하여 심볼, 바이트, 디스어셈블리(disassembly), 디컴파일(decompilation) 등의 정보를 얻습니다. 이후 LLM은 이 정보를 바탕으로 상태 초기화, 라운드 함수, 상수 및 최종 XOR 키스트림을 추론하여 파이썬(Python) 복호화 스크립트를 제출해야 합니다. 제출된 스크립트가 예상 평문을 출력하면 성공으로 간주됩니다. 테스트 결과, 총 62라운드 중 18라운드만 통과하여 29.0%의 통과율을 기록했으며, 특히 복잡도가 증가하는 라운드 3 이후부터는 대부분의 모델이 실패하는 경향을 보였습니다.
이 벤치마크는 LLM이 컴파일된 바이너리를 탐색하고, 난독화된 코드에서 상태 변환과 상수를 복구하며, 여러 라운드의 복잡한 코드를 추론하고, 실행 가능한 복호화 스크립트를 생성하는 능력을 종합적으로 평가합니다. 이는 LLM이 단순한 코드 생성이나 디버깅을 넘어, 소프트웨어 보안, 취약점 분석, 악성코드 분석 등 고도의 리버스 엔지니어링 작업에 실제로 투입될 수 있는지 가늠하는 중요한 척도가 됩니다. 현재 LLM의 성능은 아직 초기 단계에 머물러 있지만, 이러한 벤치마크를 통해 약점을 파악하고 개선점을 찾아나가는 과정은 미래 LLM 기반 보안 도구 개발에 필수적인 밑거름이 될 것입니다.