검색 : [ author: Yunho Kim ] (11)

커맨드 라인 옵션을 변이 및 선택하여 테스팅 효과를 높이는 퍼징 기법

이아청, 김윤호, 김문주

http://doi.org/10.5626/JOK.2022.49.11.981

커맨드 라인 인터페이스 프로그램(CLI program)에서 커맨드 라인 옵션은 해당 프로그램이 어떻게 작동하는지에 지대한 역할을 하며, 테스트를 수행할 때 어떤 커맨드 라인 옵션을 사용하는지에 따라 테스트의 성능(커버리지 및 오류 탐지)은 매우 크게 변화할 수 있다. 본 연구에서는 유용한 옵션을 자동으로 선택하여 테스트를 진행하는 퍼징 기술인 PAW(Program option-AWare fuzzer)를 제시한다. PAW는 전체 퍼징 시간의 첫 10% 동안 다양한 옵션을 변이해본 뒤 실행하여, 생성된 옵션들 중 새로이 분기 커버리지를 달성하는 옵션을 유용한 옵션으로 판정하여, 이후 90%의 시간 동안에는 해당 유용한 옵션에 집중하여 테스트를 진행하도록 한다. 최신 퍼저인 AFL++을 기반으로 PAW를 구현한 뒤, 10개의 실제 C프로그램에서 최신 퍼저인 AFL++과 Angora와 비교하여 평가하였다. PAW는 10개의 실제 C 프로그램에서 AFL++과 Angora와 비교하여 높은 분기 커버리지를 달성하고, 보다 많은 크래시 오류를 탐지하였다.

동적 함수 관련도를 이용한 퍼징 커버리지 향상 기법

이아청, 김윤호, 김문주

http://doi.org/10.5626/JOK.2021.48.4.391

커버리지 기반 퍼징(Coverage Guided Fuzzing)은 테스트 케이스 생성 기법으로, 기법 자체가 간단하고, 큰 소프트웨어에도 적용이 가능하기 때문에 널리 이용되고 있다. 하지만, 기존의 퍼징 기법은 프로그램 내부의 시맨틱 정보를 쓰지 못하고 있다. 본 논문에서는 커버리지 향상을 위해 함수 관련도를 기반으로 변이할 바이트를 선택하는 새로운 2가지 휴리스틱을 제시한다. 두 함수 간의 함수 관련도는 두 함수가 같이 실행되는 테스트 케이스의 개수로 정의 되며, 높은 함수 관련도는 두 함수가 서로 높은 의존성을 가짐을 나타낸다. 어떤 타겟 함수의 커버리지 향상을 위해, 이 새로운 휴리스틱은 그 타겟 함수와 관련도가 높은 함수들이 읽고 쓰는 바이트만 변이하여 커버리지 향상을 꾀한다. 제시된 휴리스틱은 최신 퍼저(Fuzzer)인 Angora와 FairFuzz를 기반으로 구현되었으며, 최신 퍼저들에서 사용된 실제 C 프로그램으로 평가하여 기존 퍼저 대비 각각 17.88%와 11.03%의 경로 커버리지 향상을 보였다.

국방 무기 체계 SW 품질 향상을 위해 Concolic 테스팅을 통한 테스트 자동 생성

박건우, 이주현, 송형곤, 조규태, 김윤호, 김문주

http://doi.org/10.5626/JOK.2019.46.9.926

국방 무기 체계 SW 품질 향상을 위해 노동집약적 수작업 SW 테스트 관행이 아닌, 테스트 입력을 자동으로 그리고 체계적으로 생성하는 것이 필요하다. 본 연구는 concolic 테스팅을 국방 무기 체계 SW에 적용해 높은 커버리지의 테스트 입력값을 효과적으로 생성하고, 결함을 발견하여 SW의 품질향상에 기여하였다. 프로그램의 복잡성이 크고 전체 실행 경로가 많은 프로그램의 경우, concolic 테스팅의 효율을 높일 수 있는 방법(4개의 탐색 전략, LIA 로직)을 제안하였다. 또한, 실무자들이 concolic 테스팅을 확장 적용할 수 있도록 심볼릭 모델링 방법을 예시로 제안하였다.

Concolic 테스팅 도구 CROWN의 적용 가능성 및 사용성 개선 연구

김현우, 김윤호, 김문주

http://doi.org/10.5626/JOK.2018.45.10.1071

본 연구에서는 Concolic 테스팅 기법의 적용 가능성 및 사용성을 개선하기 위한 CROWN(Concolic testing for Real-wOrld software aNalysis) 도구 확장에 대해 소개한다. 기존 CROWN 도구는 적용 대상 개발 환경이 Linux 환경으로 제한되어 있고 Concolic 테스팅 실행 결과를 쉽게 확인하기 어려워 사용자가 테스트 결과를 분석하기 어려웠다. 본 연구에서는 먼저 Concolic 테스팅의 적용 플랫폼을 넓히기 위해 CROWN 도구를 Windows 개발 환경에서 사용할 수 있게 확장하고 Concolic 테스팅 결과를 사용자가 쉽게 분석할 수 있도록 사용자 인터페이스를 개선하였다.

C 프로그램의 동적 및 정적 분석을 통한 시스템 실행에서의 유닛 입력 값 자동 수집 및 재연

임현수, 김윤호, 김문주

http://doi.org/10.5626/JOK.2018.45.10.1035

유닛 테스트의 높은 오류 검출력에도 불구하고, 시스템 문맥을 고려하지 않고 생성된 유닛의 “거짓 입력” 문제가 (즉, 실제 시스템에서는 불가능한 유닛 동작 생성) 있다. 이를 해결하기 위해, 시스템 테스트 케이스의 실행 과정에서 타겟 함수의 호출 시점의 프로그램 상태를 직렬화하고, 이를 역직렬화하여 유닛 테스트 케이스로 사용하는 Carving & Replay (CR) 기술이 있다. 그러나, Java등의 언어와 달리 C언어에서는 자체적인 직렬화 방법이 존재하지 않을뿐더러 포인터, 공용체, 구조체 등의 언어적 특성으로 인해 CR에 어려움이 있다. 본 논문에서는 이러한 문제를 프로그램이 사용하는 메모리의 추적, 동적 분석을 통한 런타임의 정보 활용, 정적 타입 분석을 통한 탐침 코드의 삽입 등을 이용해 해결하여 C언어용 CR 도구를 제시한다.

효과적인 변이 분석을 위한 C 프로그램 변이 도구 비교

김윤호, 김현우, 양웅규, 김문주

http://doi.org/10.5626/JOK.2018.45.4.342

변이 분석은 분석 대상 프로그램의 코드를 변형한 프로그램 변이를 실행해 프로그램 변형에 따른 실행 결과 변화를 분석하는 기법이다. 프로그램 변이 분석이 효과적이기 위해선 프로그램 변이 도구가 효과적인 프로그램 변이를 생성할 수 있어야 한다. 예를 들어 생성된 프로그램 변이가 분석 대상 프로그램과 의미가 동일한 동등 변이거나 다른 변이와 의미가 동일한 중복 변이인 경우 변이 분석을 통한 다양한 실행결과 변화를 볼 수 없기 때문에 변이 분석에 효과적이지 않다. 본 논문에서는 C 프로그램의 효과적인 변이분석을 위해 변이 도구 Proteum과 Milu를 대상으로 얼마나 효과적인 프로그램 변이를 생성하는지 비교하였다. 효율적으로 효과적인 프로그램 변이를 생성하기 위해 변이된 표현식의 정규형을 계산하고 정규형이 같은 변이를 중복 변이로 제거하였다. SIR 벤치마크의 4개 Linux/Unix 유틸리티 프로그램 프로그램을 대상으로 적용한 결과 Proteum과 Milu가 생성한 변이 중 각각 평균 48.7%, 46.4%가 유용한 변이였다.

HTTP 적응적 스트리밍 서비스의 QoE 향상을 위한 비디오 품질 유지 기법

김윤호, 김희광, 정광수

http://doi.org/10.5626/JOK.2018.45.2.187

최근 HTTP 적응적 스트리밍(HTTP adaptive streaming) 서비스가 주목을 받고 있다. 기존 HTTP 적응적 스트리밍 서비스의 비디오 품질 조절 기법은 네트워크의 대역폭이나 클라이언트의 버퍼량에 따라 비디오 품질을 조절한다. 그러나 기존 품질 조절 기법은 빈번한 대역폭 변화나 고정된 버퍼 임계로 인해 불필요한 품질 변경이 발생하여 QoE(Quality of Experience)가 저하되는 문제가 있다. 본 논문에서는 변화하는 네트워크 환경에서 HTTP 적응적 스트리밍 서비스의 QoE 향상을 위해 평균 비디오 품질을 높이면서 불필요한 품질 변경을 최소화하는 비디오 품질 유지 기법을 제안한다. 제안하는 기법은 버퍼 점유율과 비디오 품질이 높을 경우 품질 유지 기간을 길게 설정하여 높은 품질을 오래 유지한다. 실험을 통해 제안하는 기법이 평균 비디오 품질을 향상시키고 품질 변경을 최소화하여 QoE를 향상시키는 것을 확인하였다.

무선 환경에서 끊김 없는 HTTP 적응적 스트리밍을 위한 지터 기반 전송률 조절 기법

김윤호, 박지우, 정광수

http://doi.org/10.5626/JOK.2017.44.6.628

HTTP 적응적 스트리밍(HTTP adaptive streaming)은 서버가 다양한 품질의 비디오를 저장해놓고 클라이언트가 세그먼트 처리량을 기반으로 가용대역폭을 예측하여 알맞은 품질을 요청함으로 체감 품질을 향상시키는 기법이다. 그러나 대역폭 변화가 빈번하고 높은 손실률을 갖는 무선 환경에서는 실제 네트워크의 대역폭을 측정하는데 어려움이 있다. 대역폭 측정 오류로 인한 빈번한 품질 변화와 재생 끊김 현상은 체감 품질을 저하시킨다. 본 논문에서는 지연의 편차인 지터를 패킷 단위로 측정하고 지터에 따라 가중치를 부여하여 가용대역폭을 측정하는 기법을 제안한다. 제안하는 기법은 급격한 대역폭 변화로 인해 높은 지터가 발생하는 경우 대역폭 변화를 적게 반영하여 비디오 품질 변화를 줄이고 버퍼 언더플로우를 완화시킨다. 실험을 통해 제안하는 기법이 무선 환경에서 버퍼 언더플로우를 완화시키고 빈번한 품질 변화를 감소시켜 체감 품질을 향상시키는 것을 확인하였다.

안드로이드 커널 모듈 취약점 탐지를 위한 자동화된 유닛 테스트 생성 기법

김윤호, 김문주

http://doi.org/

본 논문에서는 안드로이드 커널 모듈의 취약점을 탐지하기 위한 자동 유닛 테스트 생성 기법을 제안한다. 안드로이드 커널 모듈의 각 함수를 대상으로 테스트 드라이버/스텁 함수를 자동 생성하고 동적 기호 실행 기법을 사용하여 테스트 입력 값을 자동으로 생성한다. 또한 안드로이드 커널 모듈의 함수 포인터와 함수 선행 조건을 고려하지 않은 테스트 생성으로 인한 거짓 경보를 줄이기 위해 정적 분석을 통한 함수 포인터 매칭 기법과 def-use 분석을 사용한 함수 선행 조건 생성 기법을 개발하였다. 자동 유닛 테스트 생성 기법을 안드로이드 커널 3.4 버전의 세 모듈에 적용한 결과 기존에 존재하던 취약점을 모두 탐지할 수 있었으며 제안한 거짓 경보 감소 기법으로 평균 44.9%의 거짓 경보를 제거할 수 있었다.

Mutagen4J : 효과적인 Java 프로그램 변이 생성 도구

전이루, 김윤호, 홍신, 김문주

http://doi.org/

프로그램 변이 분석은 분석대상 프로그램의 코드를 변형한 다양한 프로그램 변이를 활용해 분석대상 프로그램의 특성을 분석하는 기법이다. 효과적인 변이 분석을 위해서는 분석대상 프로그램의 동작을 다양하게 변화시키는 유용한 변형 연산자의 사용이 필수적이다. 현재까지 Java 프로그램을 대상으로 제안된 변이 생성 도구들은 변형 연산자의 종류가 제한적이거나, 최근 Java 언어 요소로 작성된 분석대상 프로그램의 경우 올바른 변이 생성을 지원하지 못하는 한계가 있다. 본 논문은 Java 프로그램을 위한 새로운 변이 생성 도구 Mutagen4J를 소개한다. Mutagen4J는 기존 연구를 통해 유용한 것으로 알려진 프로그램 변형 연산자를 추가로 지원하며, 최근 Java 언어요소를 처리함으로써, Java 프로그램에 대한 효과적인 변이 분석을 지원한다. 기존 Java 프로그램 변이 생성 도구와 비교 실험을 수행한 결과, Mutagen4J이 기존 도구보다 유용한 변이를 평균 2.3배 생성하였다.


Search




Journal of KIISE

  • ISSN : 2383-630X(Print)
  • ISSN : 2383-6296(Electronic)
  • KCI Accredited Journal

사무국

  • Tel. +82-2-588-9240
  • Fax. +82-2-521-1352
  • E-mail. chwoo@kiise.or.kr