導入
セキュリティは、外からの防御(ファイアウォール)だけではありません。「うっかり秘密を埋め込んでしまう」内側の油断も、大きな穴になります。プログラム本体(バイナリ)から 人が読める文字列だけ を拾い出す 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