helloworlds

not a noun, it's a verb

【outguess】画像ファイルに秘密ファイルを埋め込む!?

今回はステガノグラフィ・ツールで遊んでみます!

ステガノグラフィ・ツールとは、音声や画像などのデータに秘密のメッセージを埋め込む技術のことです。

ちょっとワクワクしますね!w

一見普通の画像ファイルに見えるのですが、秘密の情報を埋め込んであり、誰かに渡すといったことも可能です!

受け取った方は、秘密のワードで、その秘密ファイルを取り出すといったことを想定します。

私の環境はmac(OS X)です。

この記事では、outguessというツールを使用します。

macではoutguessがGUIになっているので、仮想環境を作成します。

仮想環境には、VirtualBoxを使用してUbuntuvagrantを使用します。 この記事では、細かいインストール手順は説明しませんが、大体は書いてあるので良かったら参考にしてください。

(vagrant upあたりからエラーやらWARNINGが出る方もいるかと思いますが、随時ググってください。たくさん有益な対処法が見つかると思います。)

では、さっそくやっていきます。

VirtualBox

以下からOSにあったVirtualBoxをダウンロードします。

www.virtualbox.org

Vagrant

Vagrantも以下からダウンロードします。 特にこだわりがなければ最新のヴァージョンでいいと思います。

www.vagrantup.com

準備

仮想環境を作成するので、作業ディレクトリをつくります。 あとからヴァージョンの違ったboxを追加したりすることを想定して、以下ののようなディレクトリを任意の場所で作成します。 (ここでは以下の名前で作成してますが、ディレクトリの名前はなんでも構いません。)

~/VirtualEnv/ubuntu/1604/

VagrantBox

VagrantBoxをインストールします。

A list of base boxes for Vagrant - Vagrantbox.es

上記のサイトからインストールできる一覧が記載されています。

今回は、ubuntuを選択できれば良いので適当なboxを見つけて以下のコマンドを作成します。

$ vagrant box add ubuntu16.04 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box

このコマンドは、vagrant box add < 任意のBox名前> <Boxがあるパス> という構成です。任意のBox名前は、後から自分でわかりやすいような名前がいいかと思います。今回はヴァージョンを名前にいれていますが、プロジェクト名とかでもいいですね。

そしたら上記のコマンドを実行します。(このコマンドの実行はどこのディレクトリでも構いません。)

少し時間がかかるかもしれません。できるだけネットワーク環境の良いところでインストールするのがオススメです。

Vagrantfile

インストールの完了が確認できたら、さきほど作成した作業ディレクトリに移動します。

移動したら、まずworkというディレクトリを作成しましょう。($ mkdir work)

そして、以下のコマンドを実行します。

このコマンドは、さきほどインストールしたBoxファイルを展開するイメージです。

initすると、Vagrantfileというファイルが作成されます。

$ vagrant init ubuntu16.04

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

initが完了したらVagrantfileを編集します。

vimでファイルを開いて、config.vm.network "private_network", ip: と書いてある行を探し、コメントを外します。

次に、config.vm.synced_folderを書いてある行を探し、コメントを外して、共有フォルダを設定します。

config.vm.synced_folder "ホスト側のパス", "ゲスト側のパス"

今回は、config.vm.synced_folder "./work", "/home/vagrant/work" このように設定しました。

./workは、Vagrantfileと同じ階層にあることになります。 ホストOSで秘密のパスワードを展開する際に、共有していると便利です。

これでようやく仮想環境を立ち上げることができます。

以下のコマンドをVagrantfileがあるディレクトで実行します。

実行したら稼働しているか、確認します。

# 仮想環境を立ち上げる
$ vagrant up

# 仮想環境が稼働しているか確認
$ vagrant status

# (仮想環境内)仮想環境をぬける
$ exit

確認ができたら、仮想環境に入ります。

$ vagrant ssh

入れましたか? おそらくvagrantユーザーになって、ubuntuを操作することが可能なはずです!

apt-get

さあ、ここからが本番です。

ubuntuでは、apt-getでパッケージをインストールするのが常だと思います。

なので、まずはアップデートしてから、outguessをインストールしてみましょう。

$ sudo apt-get update
$ sudo apt-get install outguess

もしユーザーを変更したかったり、outguess専用のユーザー作成したかったら以下を参考にしてみてください。

Ubuntuでユーザーの確認・追加・削除・sudoに追加 - Qiita

outguessのインストールが終わったら、確認してみましょう。 以下のような出力があれば大丈夫です。

$ outguess

OutGuess 0.2 Universal Stego (c) 1999-2001 Niels Provos

outguess [options] [<input file> [<output file>]]
    -[sS] <n>    iteration start, capital letter for 2nd dataset
    -[iI] <n>    iteration limit
    -[kK] <key>  key
    -[dD] <name> filename of dataset
    -[eE]        use error correcting encoding
    -p <param>   parameter passed to destination data handler
    -r           retrieve message from data
    -x <n>       number of key derivations to be tried
    -m           mark pixels that have been modified
    -t           collect statistic information
    -F[+-]       turns statistical steganalysis foiling on/off.
                 The default is on.

ubuntuで準備

ubuntuでも作業ディレクトリを作成しましょう。

/home/vagrant/work/outguess/

作業ディレクトリに移動したら、次に画像が必要です。

画像

著作権フリーのサイトからcurlでダウンロードします。

$ curl -o woods.jpg https://cdn.pixabay.com/photo/2018/11/23/14/19/forest-3833973_1280.jpg

今回はwoods.jpgという名前でダウンロードしました。

テキストファイル

パスワードが書いてあるtxtファイルを作成し、1行目にパスワードを記述して保存します。 (今回はテストなので、適当に単語を記述しました!)

$ vim pwd.txt
〜 編集 & 保存〜

作成

さあ、ここでようやく情報を隠した画像ファイルを生成します。

-kオプションは、提供されたデータ内のメッセージを暗号化して隠すために使用されます。

その他コマンドのオプションはこちらにあります。

コマンドは以下の通りです。

# コマンド
$ outguess -k <secret_key_word> -d <text_file> <pics_file_name> <new_pics_file_name>

# コマンド例 (今回)
$ outguess -k oolongtea -d pwd.txt woods.jpg beautiful-woods.jpg

実行してみると、beautiful-woods.jpgが作成されたかと思います。

取り出し

さあ、ホスト側のFInderかなんかでubuntuとマウントされているディレクトリを見てみましょう。

f:id:o21o21:20190124144918p:plain

うん、普通の画像ファイルが存在していますね!

ここからubuntuで指定した秘密の文章(pwd.txt)を取り出します。

macでは、outguessはGUIとして存在します。

なので、ダウンロードします。

$ brew install outguess

インストールしたら、アプリケーションフォルダにあるoutguessを起動させます。

そうするとこんなのが立ち上がるかと思います。

f:id:o21o21:20190124145152p:plain

上のメニューで、Extractという項目があるので押下。

そうすると、FromKeyが入力できます。

Fromの方で、ubuntuのoutguessで生成した画像ファイルbeautiful-woods.jpgを指定。

Keyでは、oolongteaを入力して、*Extractボタンを押します。

取り出されたファイルを格納するパスを聞かれるので、適当にしてします。

そのファイルを見てみると.........

ubuntuで作成した秘密の文章ファイルがちゃんと記載されています!!!

これで、終了です。

まとめ

今回はoutguessについてでした。

ホスト側とゲスト側での、一人でできるハンズオンでしたが、 友人や同僚とやってみるのも面白いかもしれません。

これで何気ない画像に秘密の情報を埋め込み、取り出す方法を実感できたと思います!

以上.