미국의 카네기멜론 대학은 소프트웨어공학 분야에서 명불허전 1위다. 지난번 포스팅 <정보보안 분야 대학·연구소의 논문실적 랭킹>에서도 미국 뿐만 아니라 Worldwide #1을 달성하였다. (참고 : Carnegie Mellon University)


카네기멜론대학 부설연구기관으로 소프트웨어공학 연구소(SEI, Software Engineering Institute)가 있고, 또 그 하위조직으로 CERT 부서가 존재한다. 일반적으로 CERT라 함은, 컴퓨터 침해사고 대응팀(Computer Emergency Response Team)을 의미하지만, 이곳은 그것보다 폭넓은 의미로 연구하는 조직인 듯 하다. 실제로 CERT_Division의 소개글이나 프로필을 보면, 보다 국제적인 사이버보안 임무에 대한 총체적 사명을 담고 있는 듯 하다. 이들의 업무에는 보안공학, 시큐어코딩, 사이버범죄대응, 취약점 분석 등이 있으며, 특히 CERT/CC 라는 블로그를 통해 소프트웨어취약점에 대한 정보를 공유한다.


본 포스팅에서 소개할 내용은, CERT팀에서 공개한 Basic Fuzzing Framework Version 2.8이다. 퍼징에 대해서는 이전의 글에서 소개했으므로, 생략하도록 하고 이러한 퍼징작업을 쉽게 수행할 수 있도록 제공되는 멋진 예제라고 할 수 있다.


다운로드 링크 : CERT Basic Fuzzing Framework Downloads

Github : https://github.com/CERTCC-Vulnerability-Analysis/certfuzz

논문 : Householder, Allen D., and Jonathan M. Foote. "Probability-based parameter selection for black-box fuzz testing." (2012).


(아래의 내용은 BFF 소개글, CERT/CC 블로그의 내용, Github의 README.md, 기타 튜토리얼 유튜브 영상 등을 종합하여 번역 및 재구성하였음을 밝힌다.)


CERT Basic Fuzzing Framework (이하 BFF)는 Linux 및 Mac OS X, 윈도우 플랫폼에서 실행되는 응용프로그램의 결함(Defect)를 찾는 소프트웨어 테스팅 진단 도구이다. 특히 프로그램이 파일형태로 Input을 로드할 때 을 뮤테이션 퍼징을 수행한다. 참고로, 퍼지 테스팅에서는 'Mutation'이라는 용어가 자주 쓰인다. 생물학에서 '돌연변이'를 뜻하는데, 유전자 재조합 과정에서 일어나는 현상을 의미한다. 컴퓨터공학에서 뮤테이션 테스팅이란 아래와 같이 정의하고 있다.

의도적으로 컴포넌트나 시스템의 소스 코드(source code)을 변형시키고 이에 맞게 디자인된 테스트 데이터를 실행시켜 프로그램 코드 내에 존재할 수 있는 애매모호한 부분을 찾아내는 테스트 기법 또는 테스트 과정(process).

즉, 퍼징에서 이러한 기능을 수행하는 Mutator는 '올바른 형식'의 입력 데이터를 기반으로 하여 여러가지 방법으로 데이터를 이리저리 바꿔치기하여 손상시키는 역할을 한다. 이렇게 얻은 Input을 프로그램에 넣어보면 충돌오류(Crash)가 발생할 수도 있다. 만약 이것을 사람이 직접 수동으로 시도한다면 상당한 시간과 노력이 들 것이나, 프로그램을 사용하여 자동화할 수 있으며 BFF는 이러한 목적을 가지고 다양한 테스트 결괏값과 충돌 여부를 수집하고, 관련된 디버깅 정보를 제공한다. BFF를 통해 소프트웨어 제조업체는 보안적 관점에서 자사 제품의 취약점을 효율적으로 발견하고 분석하여 이를 방지할 수있는 대책을 세울 수 있을것이다.


퍼징은 그동안 취약점분석 분야에서 상당한 효과를 갖는다는 것이 입증되었지만, 본질적으로 추측 통계학(推計學:stochastic)적 성질을갖기 때문에 시스템을 어떻게 구성하느냐에 따라서 그 결과가 상당히 다른 양상을 보일 수 있다. BFF는 머신러닝 등 현대적인 최신 컴퓨팅 기법을 적용하여 파라미터 세팅 등을 수행하며, 사람이 수동으로 처리해야할 부분을 최소한으로 줄임으로써 효과적인 퍼징 작업을 수행할 수 있도록하였다. 때문에 퍼징을 처음 수행하는 사람이더라도 전문가 못지않게 취약점을 매우 빨리 발견하고 분석할 수 있을 것이다.


CERT / CC에서는 BFF 인프라를 사용하여 다음과 같은 주요 제품들의 여러 가지 중요한 취약점을 찾았다.


2016년 10월 5일 공개된 포스트에 따르면,  CERT Basic Fuzzing Framework Version 2.8 (BFF 2.8)가 공개되면서 기존의 버전들과 구별되는 중대한 차이점이 생겼다.


FOE와 BFF 통합

기존 CERT에서 제공하던 Tool은 BFF와 Failure Observation Engine(FOE)으로 이원화되어 있었다. 그러나 결국 FOE는 윈도우즈 운영체제상의 BFF로 볼 수 있는데, 이 점이 사용자에게 혼동을 가져다준다는 의견이 있었던 것 같다. 사실 두 프로그램의 핵심 코드는 같은 맥락을 공유하므로 이것들을 단일화하여 통합하였고, 이제는 다양한 플랫폼을 지원하는 하나의 제품으로 자리매김하였다.


개선사항

BFF 2.8은 기존 2.7에 비해 다양한 수정사항이 반영되었다. 그 내용은 다음과 같다.


통합형 Mutator

가 퍼저의 핵심인데 그동안은 운영체제에 따라 이원화되어 있었으나 2.8버전부터는 윈도우, Linux, macOS 등에서 환경설정을 통해 각각의 시스템에 적합한 방식으로 뮤테이션을 수행하게 된다.


Verify Mode 지원(Linux, Mac)

기존 윈도우 운영체제용 FOE에서만 지원되던 Verify(검증)모드가 리눅스와 맥용에서도 가능하도록 변경.


Drillresult 기능

윈도우용 FOE 2.0에서만 지원되던 드릴보고서(Drillresult) 독립형 스크립트를 모든 플랫폼에서 사용가능하도록 추가. 퍼징을 통해 exploitable한 취약점들을 일목요연하게 정리.


기타

설정 간소화, 정책 업데이트를 위한 updatebff.py 지원, 최신 Apple운영체제(Mavericks, Yosemite, El Capitan, Sierra) 지원, MS winodws exploitable 등



CPUU님의 창작활동을 응원하고 싶으세요?