本文へスキップ
BecomeCoder

ネットワークコース · 第5章 ネットワークを守る · レッスン22

strings ― バイナリに埋めた秘密は簡単に読まれる

ブラウザで完結

導入

セキュリティは、外からの防御(ファイアウォール)だけではありません。「うっかり秘密を埋め込んでしまう」内側の油断も、大きな穴になります。プログラム本体(バイナリ)から 人が読める文字列だけ を拾い出す strings を通して、「パスワードをコードに直書きする危険」を体感します。

説明

ホームには secret.bin という「バイナリ風」のファイルが置いてあります。まず cat してみると、制御文字が混ざって読みづらいのが分かります。

cat secret.bin

ここで strings を使うと、一定の長さ以上つながった読める文字(既定は4文字以上)だけを取り出してくれます。

strings secret.bin

パスやバージョン表記に混じって、password=hunter2 のような文字列まで見えてしまいました。「バイナリにしたから中身は見えないだろう」という思い込みが、いかに危ういか分かります。

strings secret.bin | grep password

grep につなぐと、埋め込まれた秘密が一発で見つかります(第4章のパイプが、調査でも武器になります)。だから、パスワードや API キーをプログラムに直書きしないのが鉄則です。代わりに環境変数(第10章)や専用の秘密管理の仕組みを使います。

拾う文字列の最小の長さは -n で変えられます。長い文字列だけに絞りたいときに便利です。

strings -n 8 secret.bin

strings は本来、調査・解析に使う便利な道具です。同時に、「攻撃者も同じ道具を持っている」ことを教えてくれます。守る側は、この視点——「自分の作ったものを、相手はどう覗くか」——を持つことが、セキュリティの第一歩です。

やってみよう

cat secret.bin で「そのままでは読めない」ことを体感し、strings secret.bin で読める文字列だけが並ぶことを確かめましょう。strings secret.bin | grep password で、埋め込まれた秘密が一発で見つかってしまう様子も見てください。

演習

secret.bin の中から、読める文字列だけを取り出してください。

ヒント1を見る

バイナリから文字列を抜くコマンドは strings です。

ヒント2を見る

strings secret.bin

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。