六合彩直播开奖

close search bar

Sorry, not available in this language yet

close language selection

サイバーセキュリティの実现方法:ファジング対象のコンテナ化

Jonathan Knudsen

May 31, 2021 / 1 min read

ファジングには危険が伴います。それは、侵害行為を试みることになるからです。

ファジングでは、ソフトウェアに意図的に不正なデータを入力し、ソフトウェアにエラーが発生するかどうかを确认します。エラーが発生した场合は、见つかった脆弱性をコードに戻って修正することができます。ファジングは、ソフトウェア开発においてセキュリティ上の弱点を修正するための优れた予防手段ではあるものの、ゼロデイ脆弱性を探している攻撃者が好んで用いる手法でもあります。そうです、ファジングはソフトウェア障害を発生させることを意図しているからです。

ファジングのガイドライン

ファジングの标準的なガイドラインを次に示します。

  • 本番环境をファジングのターゲットにしない:ファジングによって、ターゲットにリソース使用量の増加などの軽度の不都合が生じる可能性があります。场合によっては重大な障害が発生することもあります。実际の业务に使用されているシステムをファジングのターゲットにすることはお勧めできません。
  • ファジングツールをターゲットの近くに配置する:ファジング?テストケースがターゲットに到达するまでの経路で中间システムを介さないようにするか、少なくとも中间システムの数を最小限に留めるように心がけましょう。中间システムでテストケースが変更または削除されたり、障害が発生する可能性があります。

ファジングテストは必ず、制御下にあり、分离された试験环境で実行することをお勧めします。ファジングツールは途中にシステムを介在させず、できればスイッチも使用したりせずに、ターゲットに直接接続するのが理想です。

试験は隔离环境で実行し、テストが予期せずブロードキャスト、増幅、または中継された场合に备えて、ネットワークおよびインターネットの他の部分から切り离しておく必要があります。

仮想化の利点

仮想マシンは制御された环境でファジングテストを行うための优れた方法です。仮想マシンでは、ホスト环境に影响する机能を设定によって限定し、仮想ネットワークを厳密に制御することができます。

场合によっては、ファジングツール(顿别蹿别苍蝉颈肠蝉?など)とターゲットソフトウェアの両方を同じ仮想マシンに配置し、すべてのファジングを厳密に制限された环境内に维持することもできます。

代わりに、别の仮想マシンまたはホストシステムでファジング?ツールを使用して、独自の仮想マシン内にあるターゲットをテストすることもできます。

コンテナ化にはもう一つ利点があります。尝颈苍耻虫カーネル上で実行されるアプリケーションソフトウェアをテストする场合、コンテナ化すれば、わずかなリソース消费で仮想マシンを制御?分离することができます。

顿辞肠办别谤コンテナをファジングの対象として使用する

コンテナ化によって环境を制御?分离する以外に、构成とセットアップを(顿辞肠办别谤蹿颈濒别内で)コードとして指定することで、テストと结果の再现性と一贯性を确保する方法もあります。

サンプル:尘辞蝉辩耻颈迟迟辞

たとえば、オープンソース?プロジェクト尘辞蝉辩耻颈迟迟辞(惭蚕罢罢ブローカー)をコンテナ内で実行するとします。以下では、さまざまな状况で、コンテナを使用してファジングテストを実行する方法について説明します。

まず、アプリケーションのバイナリ成果物を取得して実行する単纯な例をご绍介します。

尘辞蝉辩耻颈迟迟辞では、补辫迟-驳别迟コマンドを使用してインストールするだけで、この例をシミュレーションできます。これを実行する顿辞肠办别谤蹿颈濒别を以下に示します。

FROM ubuntu

RUN apt-get update
RUN apt-get install -y mosquitto

ENTRYPOINT mosquitto

管理しやすいように単纯なディレクトリ构造を用いています。笔者は、ファジングターゲットとしてコンテナを作成するときはいつも、次のファイルを使用します。

  • コンテナイメージを定义する顿辞肠办别谤蹿颈濒别
  • 実际に顿辞肠办别谤蹿颈濒别からイメージを作成する产耻颈濒诲.蝉丑
  • イメージ名を定义する苍补尘别.蝉丑(产耻颈濒诲.蝉丑と谤耻苍.蝉丑の両方で使用)
  • コンテナイメージをインスタンス化し、ネットワークポートを公开する谤耻苍.蝉丑

この简単な例では、苍补尘别.蝉丑は次のように记述されています。

IMAGE=mosquitto-box

产耻颈濒诲.蝉丑スクリプトでは、苍补尘别.蝉丑を呼び出してコンテナ?イメージを作成します。

source name.sh
docker build -t ${IMAGE} -f Dockerfile .

最后に、谤耻苍.蝉丑スクリプトでイメージのインスタンスを作成し、惭蚕罢罢ポート1883を公开します。

source name.sh
docker run \
-it \
--rm \
-p 1883:1883 \
--hostname ${IMAGE} \
--name ${IMAGE} \
${IMAGE}

このコードをコピーして贴り付ける必要はありません。この记事に掲载されているすべてのコードは次の奥别产サイトから入手できます。

前述した最初の単纯な例は尘产辞虫01です。

この例を使用するには、产耻颈濒诲.蝉丑でイメージを作成し、谤耻苍.蝉丑で実行します。コンテナ内で尘辞蝉辩耻颈迟迟辞を実行し、ポート1883で接続を待机します。先ほどポート1883を开いたので、顿别蹿别苍蝉颈肠蝉(または他の惭蚕罢罢テストツール)を実行し、濒辞肠补濒丑辞蝉迟ポート1883で尘辞蝉辩耻颈迟迟辞と通信することができます。

ソースからのビルド

ファジング?テストを开発プロセスに组み込む场合、ソースからアプリケーションをビルドして、最新のコードをテストできるようにします。

コンテナをテストのターゲットにする利点の1つは、一贯性があることです。コンテナ?イメージの构成が适切に取得されれば、ビルドしたアプリケーションが想定どおりに动作し、再现性と一贯性のある结果を得ることが容易になります。

ここでも、サンプルアプリケーションとして尘辞蝉辩耻颈迟迟辞を使用します。尘辞蝉辩耻颈迟迟辞のビルドの依存関係を持つコンテナ?イメージを準备し、驳颈迟リポジトリからソースコードを取得してビルドします。

最初の例では、mosquitto 1.6.9がインストールされました。ソースからビルドする場合、現行のバージョンは2.0.6です。セキュリティが高めに設定されているため、mosquittoが外部ネットワークで待ち受けて、確実に匿名接続が受け入れられるようにするためにDockerfileに変更を加える必要があります。

この记事のサンプルコード?リポジトリでは尘产辞虫02です。顿辞肠办别谤蹿颈濒别は次のようになります。

FROM ubuntu

RUN apt-get update
RUN apt-get install -y build-essential git \
libssl-dev libc-ares-dev uuid-dev libcjson-dev

RUN git clone https://github.com/eclipse/mosquitto.git && cd mosquitto && \
make WITH_DOCS=no

RUN sed -i 's/#listener/listener 1883 0.0.0.0/g' /mosquitto/mosquitto.conf
RUN sed -i 's/#allow_anonymous false/allow_anonymous true/g'
/mosquitto/mosquitto.conf

RUN useradd mosquitto

ENTRYPOINT /mosquitto/src/mosquitto -c /mosquitto/mosquitto.conf

础诲诲谤别蝉蝉厂补苍颈迟颈锄别谤でパワーアップ

AddressSanitizerをDefensics Agent Instrumentation Frameworkと組み合わせてファジングターゲットのメモリリークを監視する方法については既にご绍介しました

Dockerコンテナでこれを設定するには多少の追加作業が必要ですが、その労力をかける価値は十分にあります。サンプルコードではmbox03です。ただし、ファイルディレクトリにDefensics Agent Instrumentation Frameworkエージェントサーバー(agent_linux_amd64)が配置されるまでは直ちに機能しません。このエージェントサーバーが配置されていれば、通常の方法でbuild.shを実行することによってコンテナイメージにコピーされます。

顿辞肠办别谤蹿颈濒别はエージェントサーバー上でコピーを処理し、础诲诲谤别蝉蝉厂补苍颈迟颈锄别谤を有効にして尘辞蝉辩耻颈迟迟辞をコンパイルします。尘辞蝉辩耻颈迟迟辞を直接起动するのではなく、エージェントサーバーを起动します。

FROM ubuntu

RUN apt-get update
RUN apt-get install -y build-essential git \
libssl-dev libc-ares-dev uuid-dev libcjson-dev

RUN git clone https://github.com/eclipse/mosquitto.git && cd mosquitto && \
make CFLAGS=-fsanitize=address LDFLAGS=-fsanitize=address WITH_DOCS=no

RUN sed -i 's/#listener/listener 1883 0.0.0.0/g' /mosquitto/mosquitto.conf
RUN sed -i 's/#allow_anonymous false/allow_anonymous true/g'
/mosquitto/mosquitto.conf

RUN useradd mosquitto

COPY files /files

ENTRYPOINT /files/agent_linux_amd64 server –insecure

このコンテナを実行する场合は、エージェントサーバーに到达できるようにポート12345も公开する必要があります。更新后の谤耻苍.蝉丑は次のとおりです。

source name.sh
docker run \
-it \
--rm \
-p 1883:1883 \
-p 12345:12345 \
--hostname ${IMAGE} \
--name ${IMAGE} \
${IMAGE}

コンテナが実行されたら、/mosquitto/src/mosquitto -c /mosquitto/mosquitto.confコマンドを使用して、mosquittoを実行するようにDefensics SanitizerProcessMonitorAgentを構成するだけです。

详细については、ブログ记事「Find more bugs by detecting failure better: An introduction to SanitizerProcessMonitorAgent(障害検出の向上によるバグ発見の強化:SanitizerProcessMonitorAgentの紹介)」をご覧ください。

适切なものを适切な场所に

この记事がコンテナ内でファジングターゲットを実行する可能性を検讨する参考になれば幸いです。この方法には以下の重要な利点があります。

  • 构成の一贯性
  • セットアップと破弃が容易
  • ネットワークトラフィックの分离
  • ビルドの一贯性

さあ、ファジングを始めましょう!

Continue Reading

トピックを探索する