NECサイバーセキュリティ戦略統括部 セキュリティ技術センターの中島です。
本記事では、シークレットの管理方法について学ぶことができるコンテンツである「OWASP Wrong Secrets」を紹介します。
OWASP Wrong Secrets とは
Wrong Secrets は、OWASPが作成したトレーニング用のコンテンツです。パブリックなGithubリポジトリにアクセスキーなどのシークレットをプッシュしてしまい、攻撃者に悪用されるといった事例を耳にすることがあります。本コンテンツでは、上記のような不適切な方法で管理されたシークレットをクイズ形式で見つける過程で、シークレットの管理方法について学ぶことができます。
環境構築手順
環境の構築は Github[1]を参考にしました。
Dockerイメージをダウンロードします。
docker pull jeroenwillemsen/wrongsecrets: <tag>
コンテナを起動します。
docker run -p 8080:8080 jeroenwillemsen/wrongsecrets:<tag>
ブラウザから以下にアクセスします。
http[://]localhost:8080/
Wrong Secrets にチャレンジ
Wrong Secrets には、35個のチャレンジが用意されています。しかし、本記事執筆時点(2023年6月)では、K8s、AWS、Azure、GCPなどを対象としたいくつかのチャレンジは無効となっています。
本記事では、以下の2つのチャレンジを取り上げてご紹介いたします。
1. Challenge12: Docker COPY and WORKDIR
問題文(抜粋)
In this challenge, we did some COPY’ing as well and hid a key there. Note that the key changes on every generation of the docker container, so you’d better extract and use it quickly :).
問題文からコンテナ内にローカルのファイルシステムの情報がコピーされていることが推測できるので、wrong secretsのDockerイメージに対する変更履歴を確認します。
<missing> 34 hours ago COPY src/test/resources/alibabacreds.kdbx /var/tmp/helpers # buildkit 1.49kB buildkit.dockerfile.v0
<missing> 34 hours ago COPY src/main/resources/executables/ /home/wrongsecrets/ # buildkit 68.8MB buildkit.dockerfile.v0
<missing> 34 hours ago COPY src/main/resources/.bash_history /home/wrongsecrets/ # buildkit 14.7kB buildkit.dockerfile.v0
<missing> 34 hours ago COPY .github/scripts/ /var/tmp/helpers # buildkit 22kB buildkit.dockerfile.v0
<missing> 34 hours ago COPY target/wrongsecrets-1.6.6-SNAPSHOT.jar /application.jar # buildkit 258MB buildkit.dockerfile.v0
「var/tmp/helpers」と「/home/wrongsecrets/」に複数のファイルがコピーされていることを確認しました。実行中のコンテナ内に入り、これらのディレクトリの中身を確認します。
$ cd /var/tmp/helpers
$ ls
alibabacreds.kdbx clean_terraform.sh docker-create.sh secondkey.txt thirdkey.txt yourkey.txt
$ cat yourkey.txt
<答え>
「var/tmp/helpers」の配下にシークレットの情報が入っていることを確認しました。yourkey.txt の中身が答えとなります。
コンテナ内に保存されているシークレットはコンテナに入って中身を確認することで、容易に参照することが可能です。また、ファイルだけではなく、環境変数や設定値にも有効なシークレットを入れないようにすることが重要です。
2. Challenge19: Hiding in binaries part 1: the C binary
問題文(抜粋)
Let’s debunk this myth for C: can you find the secret in wrongsecrets-c (or wrongsecrets-c-arm, wrongsecrets-c-linux)?
問題文から、wrongsecrets-c という実行ファイルにシークレットが隠されていることが分かります。Ghidra[2]を使用して、実行ファイルをデコンパイルし、Functions の中身を確認します。
Functionsの中にある「_secret」関数のデコンパイル結果を確認します。
画面右側のDecompile 画面内に関数の中で呼び出し元に答えとなるシークレットの値を返していることを確認しました。
Ghidraのようなツールでデコンパイルすることで、実行ファイルの処理を容易に確認することができます。実行ファイルの処理の中でシークレットを使用する必要がある場合、シークレットをソースコードに埋め込まずに、認証成功後にリモートから取得するといった方法をとることを推奨します。
まとめ
本記事では、シークレットの管理方法について学べる「OWASP Wrong Secrets」を紹介しました。今一度シークレットの管理方法を見直すきっかけとして、活用してみてください。
参考資料
[1] OWASP WrongSecrets:
https://github.com/OWASP/wrongsecrets
[2] Ghidra:
https://ghidra-sre.org/
執筆者プロフィール
中島 春香(なかしま はるか)
セキュリティ技術センター リスクハンティングチーム
ペネトレーションテスト、脆弱性診断を通じたセキュア開発支援、社内CTF運営に従事。
CISSP Associate、GCPN、認定Webアプリケーション脆弱性診断士を保持。
CTF for GIRLS副代表として主にWeb分野の問題作成やワークショップ企画設計を担当。「Hardening II SU」 MVV(Most Valuable vendor)賞受賞。