Japan
サイト内の現在位置
「OWASP Wrong Secrets」でシークレットの管理を学ぶ
NECセキュリティブログ2023年7月7日
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
問題文(抜粋)
Sometimes large parts of the local filesystem are copied over to the container so that they are available in the container for the convenience of the author.
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イメージに対する変更履歴を確認します。
$ docker history --no-trunc jeroenwillemsen/wrongsecrets:latest-local- vault | grep COPY
<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/」に複数のファイルがコピーされていることを確認しました。実行中のコンテナ内に入り、これらのディレクトリの中身を確認します。
$ docker exec -it 088b3fe6e441 "/bin/sh"
$ 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
問題文(抜粋)
We need to put a secret in a mobile app! Nobody will notice the secret in our compiled code! This is a misbelief we have often encountered when presenting on mobile security topics.
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)賞受賞。

執筆者の他の記事を読む
アクセスランキング
2025年3月30日~4月5日に読まれた記事のランキング