"차세대 바이너리분석엔진 'B2-R2' 오픈소스로 푼다"

KAIST 차상길 교수 "내년 2월 2일 깃허브 프로젝트로 공개"

컴퓨팅입력 :2018/12/24 09:37

한국과학기술원(KAIST) 전산학부 차상길 교수가 이달초 소개한 바이너리분석엔진 'B2-R2'의 오픈소스화를 예고했다. 앞서 10여년 전부터 보급된 '아이다 프로(IDA Pro)' 등 선행 기술의 한계를 극복해 기술적 우위를 갖췄다는 B2-R2가 실제 업계에 확산될 수 있을지 주목된다.

KAIST 공과대학교 전산학부 차상길 조교수.

차상길 교수는 지난 21일 "연구실과 KAIST 사이버보안연구센터간 긴밀한 공동연구를 통해 과제를 수행할 수 있었다"며 "내년 2월초 B2-R2를 오픈소스로 공개할 예정이고, 이후 가능하면 논문을 통해 이 플랫폼에 녹인 개념과 이론을 정리해 발표하길 희망하고 있다"고 언급했다.

KAIST는 2016 4월부터 올해말까지 과학기술정보통신부 '바이너리 코드 분석을 통한 자동화된 역공학 및 취약점 탐지 기반기술 개발' 과제를 수행했다. 차상길 교수 연구실, 사이버보안연구센터가 과제를 주관하고 가천대학교 산학협력단, 한국시스템보증이 과제에 참여했다.

과제는 '바이너리 분석 및 취약점 탐지 플랫폼 개발'을 목표로 진행됐다. 주요 성과로 x86, ARM, MIPS 명령어셋아키텍처(ISA)에 대응하는 자동화된 역공학 도구 개발, 역공학 및 프로그램 분석이 용이한 중간언어 개발, 기호실행으로 탐지된 취약점 검증 기능, 3가지가 제시됐다.

KAIST 공과대학교 전산학부 차상길 조교수. 2018년 12월 4일 기술설명회에서 바이너리분석엔진 B2-R2의 특징과 개발배경을 소개하고 있다.

차상길 교수는 이달초 마련된 기술설명회 자리에서 과제 수행 결과물로 B2-R2를 소개했다. 그는 보안 분야에서 바이너리 분석 기술의 중요성, B2-R2 개발을 시작하게 된 배경, B2-R2의 기술적인 경쟁력을 설명했다. 그의 발표 가운데 주요 내용 및 발언, 향후 계획을 정리했다.

■ "바이너리분석 기술, 2000년초부터 관심…2016년 미국 CGC로 재조명"

바이너리 분석은 소프트웨어(SW)의 소스코드가 아니라 이를 컴파일해 기계어로 변환된 '바이너리코드(binary code)'를 다루는 기법이다. 차 교수에 따르면 SW 및 보안 전문가들은 1980년대 후반부터 바이너리코드 분석에 주목하기 시작했다. 이후 2000년대 중반까지 수많은 바이너리코드 분석 도구와 플랫폼이 등장했다. 1996년 인터넷 붐과 2000년초 비교적 해킹이 쉬운 윈도 운영체제 확산이 주요 배경이었다.

차상길 교수는 먼저 역대 주요 바이너리분석엔진을 소개했다.

러시아의 일파크 귈파노프(Ilfak Guilfanov)가 2005년 '헥스레이즈(Hex-Rays)'란 회사를 차리고 내놓은 아이다(IDA)는 '상업적으로 성공한' 최초 사례다. 2002년 줄리안 시워드(Julian Seward)가 기획한 동적알고리즘분석툴 프로젝트 '밸그린드(Valgrind)'가 나왔다. 같은해 런타임인트로스펙션툴 '다이나모리오(DynamoRIO)'도 바이너리분석에 쓰이기 시작했다. 2003년 인텔은 핀(Pin)을 내놨다.

2011년 공개된 뱁(BAP, Binary Analysis Platform)의 흥미로운 탄생이력이 언급됐다. BAP은 차 교수의 지도교수 데이빗 브럼리(David Brumley)가 주도했다.

차 교수에 따르면 브럼리 교수는 그가 카네기멜론대(CMU) 학생일 당시 버클리대 돈 송(Dawn Song) 교수와 만나면서 빗블레이즈(BitBlaze)라는 프로젝트를 진행했고, 이걸로 2008년 졸업하자마자 CMU 교수가 됐다. 그는 BAP을 자신만의 고유 프로젝트로 시작했다. BAP는 브럼리 교수가 현 구글 직원인 이반 재거(Ivan Jager)를 고용해 개발한 결과물로 현재까지 많은 관심을 받고 있다.

2011년 유럽에선 빈코아(BINCOA)라는 프로젝트가 등장했다. 이는 차 교수가 발표 후반에 비중있게 소개한 빈섹(BINSEC) 프로젝트의 기반을 닦은 프로젝트로 묘사됐다.

프랑스 CEA 연구원중 세바스티앙이라는 정형기법 연구자가 2000년대 중후반경 바이너리에 관심을 갖고 추진한 것이다. 이후 유럽권에서 또 많은 연구자를 불러모아 5년간 기획한 프로젝트의 결과로 2016년 빈섹(BINSEC)이 공개됐다. 차 교수는 BINSEC을 두고 "정말 잘 만든 바이너리분석 엔진이지만 그 뛰어난 성능에 비해 대중의 인지도는 거의 제로에 가깝다"고 지적하기도 했다.

차 교수는 "이런 프로젝트는 2010년 이후 많이 등장했고 2016년께 미국 사이버그랜드챌린지(CGC)로 그 가치를 세상에 널리 알렸다"고 평했다.

CGC는 미국 국방부 산하 방위연구고등계획국(DARPA)가 주최한 최초의 '기계간 해킹' 대회다. 차 교수는 "이 대회 상위 3팀의 각 시스템이 활용한 분석엔진 중 우승팀의 '메이헴'이 쓴 BAP, 3위 '셸피시(shellphish)'가 쓴 앵거(Angr), 그리고 앞서 소개한 BINSEC, 이 3가지가 주요 오픈소스"라고 설명했다. 차 교수는 이 CGC 대회의 우승 시스템인 메이헴의 핵심 엔진을 설계한 주요 구성원이기도 했다.

■ "최고의 함수형 언어 F#으로 편리하고 실용성도 갖춘 엔진 만들고 싶었다"

KAIST 공과대학교 전산학부 차상길 조교수가 2018년 12월 4일 기술설명회 발표에 삽입한 표 중 하나. 여타 오픈소스 프로젝트 바이너리분석엔진과 B2-R2의 특징을 대조했다.

BAP과 BINSEC은 오캐멀(OCaml)이라는 함수형 프로그래밍 언어로 구현됐다. 바이너리분석에 쓰기 편리하나 처리 속도가 느리다. 반면 Angr는 파이썬과 C 언어로 만들어졌다. 속도는 빠르지만 분석기 개발이 까다롭고 분석이 덜 용이하다.

차 교수에 따르면 페이스북은 OCaml 기반의 분석기 '인퍼(Infer)'를 만들어 사용하고 있다. 마이크로소프트(MS)는 '마이크로소프트 시큐리티 리스크 디텍션(MSRD)'이라는 바이너리분석 및 취약점 안내 서비스를 웹기반으로 제공하는데, 역시 함수형 언어 '에프샵(F#)'을 썼다. MSRD는 비교적 대규모 서비스였는데 개발자 3명이 단 3개월만에 만들어냈다.

차 교수는 "(함수형 언어 특성상) 타입을 마음대로 조립하거나 조립된 타입을 패턴매칭 방식으로 추가할 수 있다는 게 분석할 때 중요한 요소"라며 "많은 분석가가 이런 이유로 함수형 언어를 사용한다"고 말했다. 이어 "F#도 타입을 마음대로 조립할 수 있고, 코드가 간결하며 가독성이 높고 강력한 타입시스템을 갖고 있어 실수를 줄일 수 있다는 장점을 지녔다"고 강조했다.

하지만 함수형 언어를 쓰지 않고 Angr나 IDA 등을 쓰는 분석가들도 많다. 차 교수는 "현실에선 함수형 언어가 수많은 오해로 외면받고 있어서, 아직 (C언어를 사용하는) 아이다 프로가 가장 많은 이들이 쓰는 바이너리분석툴"이라고 지적했다. 아이다 프로(IDA Pro)는 앞서 소개된 IDA의 상용화 제품으로 전세계 수많은 보안연구자, 대기업 보안담당자가 실무적인 분석업무에 쓰고 있는 SW다.

차 교수는 "최고의 함수형 언어로 실제 분석에도 용이한 바이너리분석 엔진을 만들고자 했다"며 "B2-R2는 그 시작"이라고 말했다. 그는 SF영화 '스타워즈' 시리즈에 등장하는 로봇 캐릭터의 이름 '알투디투(R2-D2)'에서 얻은 영감으로 B2-R2란 이름을 붙였다. 이름의 B는 '바이너리(Binary)'를, R은 '역공학(Reverse engineering)'을, 숫자 2는 역시 '이진수(binary)'를 뜻한다. 내부에선 줄여서 '비투알'이라고도 읽는다.

차 교수는 "아이다프로(IDA Pro), 빗블레이즈(Bitblaze) 프로젝트에서 파생된 BAP, 밸그린드에서 파생된 앵거(angr), 그리고 빈섹(BINSEC)까지, 모두 10년 이상의 오랜 역사를 자랑하는 바이너리분석 엔진"이라며 "여기에 더해, 역사가 짧아서 사용자가 해야 할 게 많다는 단점이 있지만 다른 장점이 많은 비투알투(B2-R2)를 우리가 선보이는 것"이라고 밝혔다.

KAIST 공과대학교 전산학부 차상길 조교수가 2018년 12월 4일 기술설명회 발표에 삽입한 이미지. 상용 분석엔진 아이다 프로(IDA Pro) 대비 뛰어난 B2-R2의 분석결과 시각화 기능을 소개하고 있다.

■ "BAP·angr·BINSEC 등 기성 오픈소스 바이너리분석 엔진대비 성능·정확도 낫다"

차 교수가 강조한 B2-R2의 특징을 정리하면 아래와 같다. 요약하면 앞서 칭찬한 함수형 언어 F#의 이점을 바탕으로 프로그래밍 언어 32종 이상을 지원해 언어 다양성을 보장하고, 코드를 변경하기가 쉽고, 외부 의존성이 없이 구현돼 다양한 환경에서 복잡한 과정 없이 실행되므로 누구나 개발에 쉽게 참여할 수 있고, 바이너리분석이라는 용도에 전적으로 특화돼 다른 기존 엔진 대비 더 빠르고 정확하다.

먼저 B2-R2는 함수형 언어 F#으로 구현돼 있다. F# 언어는 활용도가 낮다는 이유로 많은 보안전문가에게 환영받지 못하고 있지만, 원한다면 이 엔진을 사용하는 분석에 다른 언어를 쓸 수 있다. C 또는 C++ 및 파이썬 등을 사용할 수 있는 API를 제공한다. 자바스크립트도 쓸 수 있다. 엔진의 기반이 닷넷(.NET) 플랫폼이고, 닷넷 플랫폼이 현재 지원하는 32가지 프로그래밍 언어를 모두 사용할 수 있다는 설명이다.

또 B2-R2는 외부 의존성 없이 구현된 4만5천라인(주석 제외)의 F# 코드로 구현돼 있고, 이 언어의 강력한 타입시스템 덕분에 이미 작성한 코드를 쉽게 변경할 수 있는 구조다.

차 교수는 "얼마전 국내서 진행된 한국판 CGC 대회(KISA '정보보호R&D데이터챌린지2018' 인공지능(AI)기반 취약점 자동탐지 분야)를 준비하면서 한두시간만에 중간표현(IR)언어를 뜯어고쳐서 B2-R2에 바로 구현한 적이 있었다"며 "그만큼 고치는 데 부담이 없다"고 강조했다.

그리고 닷넷이 돌아가는 모든 플랫폼을 다 지원한다. 리눅스와 윈도, iOS와 안드로이드에 대응한다. 리눅스에서는 make 명령어 입력만으로 컴파일이 끝난다. 이는 특히 BAP의 경우 개발환경 주류인 리눅스 중 인기 배포판인 '우분투' 18버전에 설치시 자동 컴파일에 실패하고 수많은 패키지 직접 설치를 수반한 수동 컴파일도 별도의 우회방법을 쓰지 않으면 진행되지 않는 문제를 보이는 점과 대조된다.

차 교수는 바이너리분석에 특화된 엔진이라는 점을 비중있게 설명했다. 특히 엔진에 제어흐름그래프(CFG) 시각화를 위한 모듈을 자체 보유했다는 점을 부각시켰다. 그는 "그래프를 그리기 위한 알고리즘은 대개 NP완전 또는 NP하드 문제로 분류돼 잘 만들기가 어려운데, 우리는 바이너리분석에 특화된 휴리스틱 알고리즘을 쓰기 때문에 빠르고, 아이다 프로 대비 시각화한 결과물도 효율적"이라고 주장했다.

KAIST 공과대학교 전산학부 차상길 조교수가 2018년 12월 4일 기술설명회 발표에 삽입한 그래프. B2-R2가 동일한 바이너리 분석시 다른 오픈소스 분석엔진 대비 우월한 성능을 보인다는 내용.

그는 이어 "여타 오픈소스 3개 엔진은 모두 그래프비즈(graphviz)라는 외부 라이브러리에 의존하는데 이 경우 매번 CFG 덤프, 명령어 실행, png나 pdf 파일 변환, 뷰어 확인 과정을 거쳐야 하는 UX 문제가 있고, 어떤 함수는 CFG 그리기 연산에 짧게는 10초, 어떤 건 5분 이상, 길게는 1시간까지 결과가 뜨지 않고 대기하는 상황도 벌어진다"고 지적했다.

차 교수는 시각화와 별개로 B2-R2의 분석성능도 타 엔진보다 월등하다고 강조했다. 그는 우분투 배포판의 ELF 바이너리 4천여개를 '리프팅(lifting, 바이너리를 IR로 바꾸는 작업)'한 시간과 그중 파일크기 상위 100개를 리프팅한 시간을 엔진별로 각각 측정해 제시했다. 전/후 테스트 결과 B2-R2는 1.3초/10초, BAP는 12초/200초, Angr는 3.5초/53.6초, BINSEC은 1.3초/24.8초를 기록했다.

그는 "BAP은 파일을 한 번에 읽어들여 버퍼에 담지 않고 인스트럭션 하나하나를 몇 바이트씩 읽는 식으로 구현돼 성능이 크게 저하되는 문제가 있고, 그외에도 아주 강조하고 싶지 않은 부분이 있어 비교대상에선 제외하고자 한다"며 "B2-R2는 Angr와 BINSEC만 보더라도 큰 바이너리를 더 빨리 처리할 수 있고, 특히 C로 짠 것보다도 5배 이상 빠르다"고 강조했다.

차 교수는 B2-R2 분석 결과 정확도가 타 엔진대비 높다고 자부하기도 했다. 그는 "1년반전 BAP 공식 홈페이지에서 그들의 엔진이 제공하는 IR언어 정확도가 100% 가깝다는 자랑이 있었는데, 그 표현이 우리가 2017년 자동화소프트웨어엔지니어링(ASE) 학회에서 (B2-R2의) IR언어 정확도 테스팅 논문을 발표한 뒤 빠졌다"며 "이후 BAP, Angr, BINSEC 팀에서 '좋은 연구해줘 고맙다'는 피드백도 받았다"고 말했다.

■ "기호실행 비롯한 익스플로잇 자동생성, 익스플로잇 특화된 전용언어 구현도 가능"

분석가들은 B2-R2를 어떻게 활용할 수 있을까. 기호실행을 포함한 익스플로잇 자동생성 시스템 등 실용적인 애플리케이션을 구현할 수 있다는 설명이다.

기호실행은 SW에서 오작동이나 오류를 일으키는 실행경로를 찾아내는 기법을 의미한다. 기호실행 결과로 문제를 일으키는 실행경로를 표현하는 일종의 방정식을 얻을 수 있다. 이 방정식을 풀면 SW에 문제를 일으킬 수 있는 입력값이 구해진다. SW개발자는 재현 가능한 입력값과 실행경로를 찾아 패치함으로써 보안상 취약점을 해결할 수 있다. 반대로 악의적 공격자가 이를 통해 SW 구동환경을 공격할 수도 있다.

일례로 KAIST는 '바이롬(BiRoam)'이란 이름으로 B2-R2 기반 기호실행기를 개발 중이다. 리눅스의 '/bin/ls' 경로 파일을 대상으로 10분간 실행경로 탐색을 해 보면 4만개를 찾아낸다. 해커들이 기호실행기로 즐겨 쓰는 Angr로 같은 작업을 해서 탐색되는 경로는 1만개 정도다. 차 교수는 "단순한 프로그램이 아니라 (더 복잡한) 다른 프로그램을 대상으로 하면 이 격차는 더 벌어질 것"이라고 강조했다.

차 교수는 기호실행기와 퍼징도구 기능을 갖춘 B2-R2 기반 익스플로잇 자동생성 시스템 구현 경험도 밝혔다. 앞서 한국판 CGC 대회라고 지칭한 KISA '정보보호R&D데이터챌린지2018' 대회에 참가하면서다. 3개월간 차 교수 본인, 박사 3명과 석사 3명, 이렇게 7명이 함께 했던 작업이다. 이들은 시스템의 익스플로잇 생성 결과를 나타내기 위해 'PoE'라는, 익스플로잇 자동생성용 '도메인 특화 언어'를 함께 만들었다.

KAIST 공과대학교 전산학부 차상길 조교수가 2018년 12월 4일 기술설명회 발표에 삽입한 그래프. 10년이상 지난 기존 바이너리분석툴 시장에 차세대 분석엔진으로 등장한 B2-R2의 출발점을 시사한다.

차 교수는 "요즘 복잡한 CTF에서는 단순한 문자열 입력만으로 익스플로잇을 구현할 수 없고 서비스 응답에 따라 동적으로 대응하는 프로그램이 돼야 하기 때문에, 미국 CGC 대회는 이렇게 읽고 쓰는 걸 XML로 표현하는 'PoV'라는 데이터포맷을 만들었다"며 "하지만 PoV는 불필요하게 복잡하고 길어 사람이 이해하기 어렵고, 셸 획득 관련 문법도 전혀 존재하지 않는다"고 설명했다.

이어 "익스플로잇 생성 시스템은 바이너리를 퍼징하고, 기호실행하고, 취약점을 쓰고, 생성된 익스플로잇에 해당하는 PoE를 만든다"며 "기호실행 이후 과정을 모두 B2-R2가 처리할 수 있다"고 말했다. 그에 따르면 PoE는 '4바이트 크기의 변수 2개에서 값을 읽은 다음, 첫째 값을 x번 곱한 결과가 둘째 값과 같다면 x값이 버그의 트리거가 된다'는 내용이 담긴 익스플로잇을 단 다섯 줄짜리 코드로 표현할 수 있다.

■ 2월 2일 오픈소스 프로젝트로 공개 예고…"기업과 협업 환영"

차 교수는 내년 2월 2일 온라인 소스코드 공유 및 협업 사이트 깃허브를 통해 B2-R2 소스코드를 오픈소스로 공개하겠다고 예고했다. 지난 2015년 8월 귀국해 국내서 만 3년 이상 준비해 온 엔진 개발의 결과물을 개방한다는 계획이다. 본격적으로 B2-R2 개발을 시작한 시점은 2016년 3월부터지만, 앞서 그의 동료 개발자 몇 명이 2015년 10월부터 2016년 2월까지 4~5개월간 컴파일러 이론, F# 언어도 익혀야 했다.

차 교수는 "돌이켜보면 3년이 정말 빨리 지나갔다 생각하고, 저를 포함한 연구실의 여러 학생들 모두 B2-R2에 크고작은 컨트리뷰션을 해줬던 점 굉장히 고맙게 생각한다"며 "이제까지는 B2-R2가 단독으로 커왔다고 할 수 있지만 앞으로는 (영화 스타워즈 시리즈에 R2-D2 캐릭터의 콤비로 등장하는 로봇) '씨쓰리피오(C3PO)'가 필요하다"고 말했다.

그는 "더 잘 만들고 싶다는 욕구가 강해 어쩌면 영원히 할 수 없을 것이라 생각하고 이런 자리에서 여러분께 약속한다"며 "우리는 내년 2월 2일 여러분에게 B2-R2를 공개할 것"이라고 말했다. 이어 "B2-R2를 여러분과 함께 깃허브에서 오픈소스 프로젝트로 유지하고, 여러분의 컨트리뷰션을 통해 함께 이 바이너리분석플랫폼을 발전시켜나갔으면 하는 바람"이라고 덧붙였다.

관련기사

그는 발표 후 참석자들과의 질의응답 중 '기업과 협력해 발전시켜나갈 계획이 있느냐'는 질문에 답하면서 "이미 기업과 협력하고 있다"고 답했다. 그에 따르면 삼성전자 삼성리서치와 B2-R2 기술을 활용한 협업이 진행 중이다. 그는 "MIT라이선스로 오픈소스화할 계획이고 기업들은 이걸 제품화하거나 자유롭게 써도 무방하다"며 "함께 프로젝트를 계속 발전시킨다는 측면에선 누구든 환영"이라고 강조했다.

차 교수는 2008년 고려대학교 전기·컴퓨터공학부 학사, 2009년 미국 CMU 전기·컴퓨터공학부 석사, 2015년 미국 CMU 전기·컴퓨터공학부 박사 학위를 받았다. 2014년 미국 컴퓨터학회(ACM) 우수논문상(Distinguished Paper Award)을 수상했다. 이후 2015년부터 현재까지 KAIST 전산학부 조교수를 맡고 있다.