連載 [第4回] :
  脆弱性診断の現場から

アップロード機能の検証のためのファイルを作成するツール「dummy」を作った話

2024年10月18日(金)
小竹 泰一
第4回の今回は、脆弱性診断やQAに役立つ静的ファイルを作成するコマンドラインツール「dummy」の使い方を解説します。

はじめに

株式会社ステラセキュリティ 取締役CTOの小竹(@tkmru)です。

先日、dummyというファイルアップロード機能の検証用の静的ファイルを作成するコマンドラインツールを公開しました。

指定したテキストを書き込んだJPEGファイル、PNGファイル、PDFファイルを生成でき、PNGファイルに関してはサイズ(バイト数)の指定も行えます。

この記事では、作成した「dummy」の使い方、仕組みを紹介します。

アップロード機能の検証の際に困ること

ファイルアップロード機能を対象に脆弱性診断を行うとき、どんな画像をアップロードするか、いつも悩みます。ペンテスターでなくともフリー素材ではないネットミームの画像や自分が食べた美味しいご飯の画像を業務で使用するのには少し気が引けるでしょう。クライアント(顧客)のサーバにファイルをアップロードする脆弱性診断では、なおさらです。

そこで、誰が見ても悪い印象を受けない検証用の画像を作成するためにツールを作りました。

また、扱えるファイルのサイズに制限がある場合、その制限が有効になっているか確認したいときがあります。その制限に引っかかるような大きいサイズのファイルを用意するのは少し大変です。そういう場合にも対応できる、任意のサイズのファイルを作成できるツールが必要でした。

作ったツール

検証用の静的ファイルを作成する「dummy」というコマンドラインツールを作りました。前述した通り、指定したテキストを書き込んだJPEGファイル、PNGファイル、PDFファイルを生成でき、PNGファイルに関してはサイズ(バイト数)の指定も行えます。Pillowという画像処理ライブラリを使用したかったため、Pythonで実装しています。

使い方

インストール方法や各種パラメータの指定方法を紹介します。

インストール方法

pipコマンドでインストールできます。Pythonの実行環境を整えた上で、次のコマンドを実行してください。

$ pip install git+ssh://git@github.com/sterrasec/dummy.git

ファイルを生成する

生成したいファイルのパスはオプションなしで指定できます。また、生成するファイルの種類は拡張子によって自動で識別されます。-tオプションでファイルに書き込むテキスト、-bオプションでバイト数を指定できます。-bオプションはPNGファイルを生成するときのみ使用できます。

$ dummy -t abc -b 1MB test.png

指定したサイズの画像が生成される様子

-tオプション、-bオプションは指定しなくとも使用できます。-tオプションでテキストを指定しない場合は、デフォルトの「dummy file」というテキストが書き込まれます。
$ dummy test.jpeg

デフォルトで生成される画像

どのようにして任意のサイズのPNGファイルを生成しているのか

小さすぎないバイト数を指定しない限り、「dummy」では任意のサイズのPNGファイルを作成できます。これをどのように実現しているのか解説します。

PNGファイルはチャンクと呼ばれるデータブロックから構成されています。IHDRIDATIENDなどのチャンクが知られています。IHDRは、画像の幅や高さ、色深度、圧縮方式などの情報を持っています。IDATは、画像データを持っています。IENDは、PNGファイルの終端を表します。

独自のチャンクを作成することもできます。チャンクは、チャンクタイプ、チャンクデータ、CRCという3つの要素から構成されています。これらのデータを適切に挿入することで、PNGファイルの機能を損なわずにファイルを大きくすることができます。「dummy」では、eXtrという無意味なデータ列から構成される独自のチャンクをIENDチャンクの手前に挿入することで、指定されたバイト数になるよう、データ量をかさ増ししています。

おわりに

「dummy」が脆弱性診断、QAに従事するエンジニアに広く使われるよう育てていきたいと思っています。ぜひ、気づいたことがあればフィードバックしてもらえるとうれしいです。みなさまからのIssueやプルリクエストをお待ちしております。

※本記事は、株式会社ステラセキュリティが配信しているコンテンツ「Sterra Security Tech Blog」からの転載です。
元記事についてはこちらをご覧ください。

株式会社ステラセキュリティ 取締役副社長 CTO
大学卒業後、株式会社ディー・エヌ・エーに入社し、セキュリティエンジニアとして活躍。その後、株式会社アカツキに1人目のセキュリティエンジニアとして入社し、脆弱性診断内製化、セキュリティチーム組成に尽力。 著書に『ポートスキャナ自作ではじめるペネトレーションテスト』『マスタリングGhidra』(いずれもオライリー・ジャパン)、『リバースエンジニアリングツールGhidra実践ガイド』(マイナビ出版)

連載バックナンバー

働き方技術解説
第4回

アップロード機能の検証のためのファイルを作成するツール「dummy」を作った話

2024/10/18
第4回の今回は、脆弱性診断やQAに役立つ静的ファイルを作成するコマンドラインツール「dummy」の使い方を解説します。
セキュリティ技術解説
第3回

VRヘッドセットからの通信をプロキシツールで確認する方法

2024/10/4
第3回の今回は、ByteDances社製のPICO 4というVRヘッドセットでMITMを行う方法を解説します。
セキュリティ技術解説
第2回

Nmapの日本語ドキュメントを更新した話&その方法の解説

2024/8/23
第2回の今回は、Nmapの日本語ドキュメントの問題点と、そのコントリビュート方法について紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています