Park, Geon (re-st)

Abstract

콘콜릭 테스팅이 사용하는 다양한 기술적 접근을 알아보고 이와 무지향성 퍼징을 비교 분석하여 프로그램 커버리지를 효과적으로 증가시키는 방법을 탐색해 본다. 무지향성 퍼징의 한계를 극복하기 위해 콘콜릭 테스팅에서 사용하는 다수의 상태 특징을 활용하면 어떨지 제안한다.

본문

% 기 - 집중하는 콘콜릭 테스팅이란 이러하다. % 승 - 무엇을 했는가 % 전 - 뭐가 나아졌나 % 결 - 이러한 접근법으로 내 문제를 어떻게 접근할까

콘콜릭 테스팅은 구체적 실행과 기호적 실행을 결합하여 프로그램의 모든 가능한 경로를 체계적으로 탐색하고, 분기문의 조건을 분석한다. 이 기법은 프로그램을 실행하면서 변수를 기호로 대체하여 각 경로의 제약 조건을 확인하지만, 경로 폭발 문제로 인해 모든 경로를 검사하는 것은 어렵다. 따라서 테스트 목적에 맞게 특정 경로에 집중하는 선택이 필요하다.

보통의 테스팅 목적은 커버리지 증가로, 이를 위해서 각 상태에 점수를 부여하여 다음에 시도할 상태를 선택하는 데 사용한다. 예로 KLEE와 같은 도구들은 가까운 미래에 새로운 코드 줄을 실행할 가능성을 기준으로, 하위경로유도검색은 방문된 하위경로가 적은 상태에 높은 점수를 부여한다. 이는 경로 폭발 문제를 완화하고, 시간 내에 더 많은 조건을 만족하는 입력을 찾도록 한다.

높은 커버리지로 프로그램을 검사하는 도구인 무지향성 퍼징도 경로의 선별이 요구되고 있다. 대표적 무지향성 퍼징 도구인 AFL로 swftophp 프로그램을 24시간 검사할 때, 72천줄의 C 코드 중 60%만이 실행되었고, 최초 5시간 이후로는 1.5%의 변화만 있었다. 작은 프로그램임에도, 약 40% 코드에 대한 접근 방법을 모르는 것이다. 방문이 안 되던 줄의 특징을 알고 그곳으로 퍼징이 유도된다면 제한 시간내 더 충실하게 많은 경로를 찾아낼 것이다.

AFL은 현재 간선(코드 줄간 실행연결) 커버리지가 새로운 시드를 저장하는 피드백이 주이지만, 콘콜릭 테스팅에서 다수의 상태 특징을 사용하는 변화를 보고 배울 수 있을 것이다. 콘콜릭 테스팅의 ‘매개화된 탐색 전략’은, 상태마다 실행 분기문 수 조건 등 26개의 참-거짓 조건을 통해 벡터 점수를 매긴다. 이는 분기문 커버리지에서 우수한 성적을 보인다고 한다. 따라서 분기 간선 커버리지만 세지 말고 오히려 여러 가지 상태 특징을 사용해 점수를 매겨 새로운 접근을 유도하는 것이 간선 커버리지를 더 늘릴수도 있을 것이다.

#Essay