LoginSignup
0
0

More than 1 year has passed since last update.

GitLab Protocol Fuzzer Community Editionの導入からチュートリアルまで

Posted at

はじめに

ブラックボックスファジングに興味があったので、2021年3月にオープンソース化されたGitLab Protocol Fuzzer Community Editionを触ってみました。
本記事ではGitLab Protocol Fuzzer Community Editionの導入からチュートリアルまでの手順を記述します。

導入

ソースからビルドするのがやや面倒だったため、issueにて提供されていたDockerfileを利用してDockerイメージをビルドしました。
Dockerfileはこちらから入手できます。

$ git clone https://github.com/vanhauser-thc/peachpro.git
$ cd peachpro
$ docker image build -t peach ./ 

Hello World

doc/samples/にいくつかサンプルファイルがあったので、ひとまずHelloWorld.xmlを実行します。

$ docker container run -it --rm --entrypoint "bash" --name peach-container peach
root@xxx# ./peach ./doc/samples/HelloWorld.xml 

上記コマンドを実行したところ、ターミナルに様々な文字列が出力され続けました。(Ctrl-Cで中断できます)

Tutorials (Dumb Fuzzing)

GitLab Protocol Fuzzer Community Editionの前身であるPeach FuzzerTutorials (Dumb Fuzzing) を参考に、実際にファジングを行ってみます。
具体的には、画像表示ソフトfehに対して様々な.pngファイルを読み込ませるファジングを行います。
なお、以降のxmlファイルについての解説は調査中により推測も含みますので、誤りがありましたらご指摘いただけると幸いです。

Creating the data model

こちらのページtemplate.xmlに相当するファイルがpeach/内に見つからなかったので、HelloWorld.xmlをひな形にしてTutorialを進めます。

root@xxx# cd /peach/pits/
root@xxx# cp ../doc/samples/HelloWorld.xml ./png.xml

DataModelエレメントでは、ファジング用のデータ生成に使用するデータの形式を指定します。
NumberBlobStringなどを指定できますが、今回はBlobを指定します。

png.xml
(中略)
<DataModel name="TheDataModel">
    <Blob />
</DataModel>
(中略)

Creating the state model

StateModelエレメントでは、ファジング用のファイルを読みだすoutput、ファイルを閉じるclose、起動するアプリケーションを指定するcallを記述します。

png.xml
(中略)
<StateModel name="TheState" initialState="Initial">
    <State name="Initial">
        <Action type="output">
            <DataModel ref="TheDataModel"/>
            <Data name="data" fileName="/peach/doc/samples/samples_png/*.png"/>
        </Action>
        <Action type="close"/>
        <Action type="call" method="LaunchViewer" publisher="Peach.Agent"/>
    </State>
</StateModel>
(中略)

Configuring a publisher

前節で設定したpublisherを呼び出します。

png.xml
(中略)
<Test name="Default">
    <Publisher />
</Test>
(中略)

Adding an agent and monitor

調査中

最終的にpng.xmlは以下の内容になります。

png.xml
<?xml version="1.0" encoding="utf-8"?>
<Peach xmlns="http://peachfuzzer.com/2012/Peach" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://peachfuzzer.com/2012/Peach ../peach.xsd">

	<DataModel name="TheDataModel">
		<Blob />
	</DataModel>
	
	<StateModel name="TheState" initialState="Initial" >
		<State name="Initial"  >
			<Action type="output" >
				<DataModel ref="TheDataModel"/>
				<Data name="data" fileName="/peach/doc/samples/samples_png/*.png"/>
			</Action>
			<Action type="close"/>
			<Action type="call" method="LaunchViewer" publisher="Peach.Agent"/>
		</State>
	</StateModel>

	<Agent name="LinAgent">
		<Monitor class="LinuxDebugger">
			<Param name="Executable" value="feh"/>
			<Param name="Arguments" value="fuzzed.png"/>
			<Param name="CpuKill" value="true"/>
		</Monitor>
	</Agent>

	<Test name="Default">
		<Agent ref="LinAgent" platform="linux"/>
		<StateModel ref="TheState"/>
		<Publisher class="File">
			<Param name="FileName" value="fuzzed.png"/>
		</Publisher>

		<Strategy class="Random"/>

		<Logger class="Filesystem">
			<Param name="Path" value="logs" />
		</Logger>
	</Test>

</Peach>

ファジングの実行

コンテナ内で以下のコマンドを実行します。

# fehをインストール
root@xxx# apt install feh

# fehに対してファジングを実行
root@xxx# peach png.xml

ファジングが正しく実行されれば以下のような画面になります。
fuzzing.png

あとがき

本記事ではGitLab Protocol Fuzzer Community Editionの導入とチュートリアルの解説を行いました。
チュートリアルに関してはまだ理解が不足していますので、後々追記していきたいと思います。

参考文献

IoT診断とファジング - ラック・セキュリティごった煮ブログ
Peach Fuzzer
IPA ファジング実践資料

環境

Ubuntu 20.04

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0