Radamsa Fuzzer

시스템 2022. 10. 22. 22:41

https://cpuu.postype.com/post/2069373

 

퍼즈 테스팅을 위한 Radamsa 소개

Radamsa는 Oulu University Secure Programming Group이 개발한 퍼즈 테스팅 도구이다. 이 도구를 활용하여 소프트웨어 제조사나 개인 개발자들이 보다 손쉽게 소프트웨어의 강건성(robustness) 테스트를 수행할

cpuu.postype.com

 

Radamsa는 Oulu University Secure Programming Group이 개발한 퍼즈 테스팅 도구이다. 이 도구를 활용하여 소프트웨어 제조사나 개인 개발자들이 보다 손쉽게 소프트웨어의 강건성(robustness) 테스트를 수행할 수 있도록 돕기 위한 취지로 개발되었다. 기존에 출시되어있던 유사한 프로그램들은 설치 자체가 굉장히 복잡하고, 개별 프로젝트에 적용하기 위해서 수많은 추가작업이 필요하다는 단점이 있었다. 이러한 문제점에 착안하여 새롭게 개발한 도구가 바로 Radamsa이다.

Radamsa는 커맨드라인 기반으로 작동할 수 있으며, 샘플 파일을 주입하면 자동으로 변이(mutated)된 결과물을 생산해준다. 그러므로 이 도구는 mutation-based fuzzer라고 구분할 수 있겠다. 

이 도구는 심지어 TCP Client 또는 서버로써 사용할 수도 있다. 즉, TCP 연결을 수립한 상태에서 서버 또는 클라이언트의 입장에서 mutation된 입력값을 송수신하게 만드는 것이다.

Radamsa는 하나의 패키지 안에 포함된 다수의 fuzzer를 통칭한다. 단순히 bit를 임의로 몇번 바꾸는 것에 그치지 않고, 샘플 파일의 구조를 분석하여 보다 색다른 퍼징 기법에 적용할 방안을 찾는다. 이러한 기술의 성과는 실제로 효과적이어서, real world의 다수의 소프트웨어에서 흥미로운 취약점들을 도출해내었다.

Radamsa는 무료로 사용할 수 있는 응용 프로그램이며, 필요한 경우 원본 소스코드를 다운로드 받아 각자의 용도에 받게 개조하여 사용하는 것 또한 허용된다. 소스코드는 MIT License를 따라 관리되고 있다.

 

사용법

Radamsa는 Windows 및 리눅스 용으로 prebuilt된 바이너리 형태가 제공되며, 자신의 환경에 알맞도록 직접 컴파일하여 사용할 수 있도록 소스코드 방식으로도 지원된다. 코드는 아래의 방법으로 얻을 수 있다.

*원래 Radamsa가 제공되던 페이지는 github였는데(https://github.com/aoh/radamsa), 2018년 6월 16일부로 gitlab(https://gitlab.com/akihe/radamsa) 으로 이전되었다는 안내가 게재되어 있다. 알만한 사람들은 알테지만 최근 Microsoft가 Github를 인수하였기 때문에 이와 관련해서 IT업계가 시끄러운 상황이고, 실제로 많은 개발자들이 gitlab으로 옮겨가고 있다고 하는데 아마 그 일환이라고 보는 개인적 소견.. (참고 : MS가 깃허브를 인수했는데, IT 업계가 왜 시끄러울까?

설치는 아래와 같이 가능하다(Ubuntu Linux 16.04 기준)

$ sudo apt-get install gcc make git wget
$ git clone https://gitlab.com/akihe/radamsa.git
$ cd radamsa/
$ make
$ sudo make install
 

대략적인 사용법이 적혀있는 help 문서가 있다.

https://gitlab.com/akihe/radamsa/blob/master/README.md 

 

간단히 예제를 보면..

 
$ echo "aaa" | radamsa
 aaaa
$ echo "aaa" | radamsa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ▒▒
$ echo "aaa" | radamsa
aaa▒▒1▒3
$ echo "aaa" | radamsa
แbaa
$ echo "aaa" | radamsa
aaab
 

 위와 같이 echo "aaa" 명령어의 결과를 radamsa로 전달했더니 처음에는 a라는 문자가 하나 더 붙는 형태로 나타났지만 여러번 재수행할때마다 새로운 방식으로 결과물이 mutate되는 것을 확인할 수 있다. 기본적으로는 /dev/urandom을 사용해서 난수적 흐름을 주입하는 것으로 알려져 있다.

 

Radamsa는 퍼즈 테스팅을 자동화할 수 있도록 하기 위해 다양한 환경을 제공한다. 특히 command-line 파라미터를 이용해서 원하는 숫자값을 자동으로 계속 생성해낼 수 있다. 그리고 입력으로 주입되는 seed 값을 이용해서 지속적인 변화 흐름을 만들어낼 수 있다. 다만 target monitoring을 기본적으로 지원하지는 않는다. 개발진은 이를 도울 수 있는 shell script example을 readme 파일을 통해 간단히만 설명하고 있다. 이를 참고하여 사용자가 직접 관련 기능을 구현해야 한다.

Radamsa는 샘플파일을 이용해 mutation 기능을 수행한다. 따라서 mutation 기반이기 때문에 모델을 분석하여 data를 스스로 generating 하는 방식은 아니다.

 

더욱 자세한 설명은 아래의 논문을 참고하면 된다.

An Evaluation of Free Fuzzing Tools 에서 발췌한  Radamsa 도구 평과결과 요약

[Mikko, V. "An Evaluation of Free Fuzzing Tools." University of Oulu Department of Information Processing (2015).]

아래는 Radamsa의 사용 편리성을 언급한 대목이다.

Ease of use criterionPossible advantage

Getting the executable Yes. Source and binaries available.
Documentation of the tool Yes. Comprehensive documentation exists.
Support for the tool Yes. Support is available and the project is still alive.
Environmental requirements Yes. Radamsa runs under Windows, Mac OS X, Linux, and OpenBSD.

아래는 Radamsa를 통해 실용적으로 얼마나 많은 이득을 취할 수 있는지에 대한 평가이다

Practical features criterionPossible advantage

Automation support Maybe. Supports generating multiple mutations and also TCP connections.
Target monitoring support No. No monitoring support.
Customization options Yes. Can control the samples, seed, mutations, patterns and generators. Also source code is available.

아래는 Radamsa가 퍼징하는 방식에 대한 설계적 탁월성을 뜻한다

Intelligence of the fuzzing criterionPossible advantage

Is the data generated or mutated, or totally random Yes. The data is mutated from the input samples.
Does the fuzzer utilize fuzzing heuristics Yes. The mutations include both random and smart mutations.
Creating a model for data generation No.

 

결론

Radamsa는 아주 간단하면서도 꽤나 강력한 fuzzer이며, 개발자가 자신의 구미에 맞게 적절히 수정하여 사용할 수 있다는 장점을 가지고 있다. 스스로 적절한 퍼즈 테스팅 구조를 수립하고, 그에 알맞게 구현을 변경할 수 있는 개발자들에겐 굉장히 좋은 도구일 것이다. target application에 대한 monitoring 기능은 꼭 추가적으로 제작을 해서 사용하는 것이 좋을 것이다.

'시스템' 카테고리의 다른 글

Buffer OverFlow 대응방안  (0) 2022.10.24
Init 프로세스  (0) 2022.10.23
ASL Persistent Mode  (0) 2022.10.22
AFL Fuzzer Error  (0) 2022.10.22
AFL fuzzer & Exploit  (0) 2022.10.22
블로그 이미지

wtdsoul

,