技術開発部 セキュリティユニットの後藤です。 Black Hat USA 2019 / DEFCON 27関連の記事として、第一弾「Black Hat USA 2019 / DEF CON 27に参加してきました 」、第二弾「Black Hat USA 2019 / DEF CON 27に参加してきました -Black Hat編-」に続き、今回は、DEF CON 27についてご紹介します。
DEF CONの概要は第一弾の記事をご参照ください。本記事では主に、DEF CONで体験してきたことを中心にご紹介したいと思います。
DEF CONでは、様々なイベントが並列して開催されていますので、過ごし方はその人次第です。例えば次のようなイベントがあります。
- DEF CON CTF Final: 有名なCTFの決勝戦が開催されています。
- 多数のVillage: 各分野のスペシャリストらが開いているブースで、トーク、ワークショップ等が行われています。
- コンテスト、CTF、チャレンジ: オンラインや各Village等、いたるところで開催されています。廊下の壁に貼られているポスターにも問題が貼ってあることもありました。
- Presentation: Black Hatと同様に講演もあります。Black Hat発表者が同じくDEF CONでも発表することもあります。Black Hatで聞くことができなかった発表は要チェックです。
- ベンダブース: ディープなハードウェア、書籍等が販売されています。
- Demo Labs: 私はチェックできませんでしたが、デモ等も行われていたようです。
私たちは主にVillageを回ったり、コンテストやCTFに参加して過ごしていました。
DEF CON バッジについて
今回のDEF CONバッジは、円形の白い石に基板が取り付けられたものになっています。 6つのLEDが搭載されており、他の参加者とバッジ同士をタッチすることで懐かしい8bitサウンドとともにLEDが光ります。バッジにはいろいろなタイプが存在し、いろいろな人とタッチすることでゲームが進行していくようです。 こちらのデバイスは第一弾の記事でも紹介したとおり毎年ハックでき、今ではWriteup等も公開されています。気になる方はぜひチェックしてみてください。
Village
初日に一通りVillageを回りましたが、4つのホテルに渡って多種多様なVillageがあり、混雑と会場の広さのために一通り回るだけでもかなり時間がかかります。私が特に興味を持っていたRed Team Offense Villageの行列がとりわけ長かったことが印象に残っています。 Village一覧は以下ウェブサイトを参照ください。 List of Villages At DEF CON 27
Red Team Offense Villageの問題にチャレンジ
私が主に時間を費やしたのはRed Team Offense Villageのチャレンジです。こちらのVillageでは3〜4つほどのチャレンジが開催されていました。 その中で私は「HACKING WEB APPS」のAdvancedの問題に挑戦しました。問題は指定されたウェブサイトに攻撃を仕掛け、内容を書き換えるというものです。取り組んだ理由として大きかったのが、その時点でまだ誰も解くことができていなかったという点です。 序盤は1番に解いた人に100ドルの賞金が出るとのことでしたが、正解者が現れなかったためか、後半になると賞金が200ドルにアップしていました。
The bounty is now $200 to the first that hacks and defaces the site at the @defcon @VillageRedTeam hacking web apps station #DEFCON #defcon27 pic.twitter.com/7S79krHC6j
— Omar Ωr Santos (@santosomar) 2019年8月10日
私が知る限りでは、最後まで解けた人は現れなかったのではないかと思います。 ここでは私が問題に挑んだときの経過を追いながら、問題の雰囲気をお伝えすることができればと思います。
与えられた情報は標的のHTTPサーバのURLです。 Nmapでサーバをスキャンすると、HTTPに加えSSHのポートも開いていることがわかりましたが、NginxもOpenSSHも最新の状態でした。
まずは、与えられたURLのページにはインジェクションができそうなフォーム要素(文字入力可能なテキストボックス)等を探してみました。もし脆弱なフォームがあれば、そこからSQLコマンドやOSコマンドを注入し、非公開情報の読み書きや任意の操作ができます。これを利用してWebコンテンツの書き換えができたり、非公開コンテンツにアクセスできたり、ログイン情報を知らなくともログインできる可能性があります。しかし、ページ上にはフォーム要素は見つかりませんでした。
次に、HTTPサーバで公開されるべきではないファイルが公開されていないかといった設定の誤りに着目しました。そういったファイルは公開することを意図しておらず、秘密情報や攻撃者にとってさらなる攻撃の手掛かりとなる情報が記載されていることがあります1。 そこで、dirbというツールを用いてリンクされていない公開ファイルを辞書ベースで探してみました。その結果、いくつかの静的ファイルが見つかったのですが、中でも気になったのは.gitディレクトリ2が見つかったことです。このディレクトリを丸ごと手に入れてしまえば、それを利用して最新・過去コミットのファイルを全て復元することができます。 ここで問題となったのは、標的のHTTPサーバではディレクトリリスティング3が無効になっており、.gitディレクトリの中身を把握することができない点でした。.gitディレクトリを構成するファイルのほとんどは名前が決まっており推測が容易です。しかし.git/objectsの中身は、コミット、バージョン管理対象ディレクトリ、バージョン管理対象ファイルを示すオブジェクトのそれぞれの {SHA-1ハッシュ値上2桁のディレクトリ名}/{SHA-1ハッシュ値下38桁のファイル名} という規則でファイルが格納されていますので、容易に推測できません。
そのため、私は以下の手法を用いて特定することにしました。 Don’t publicly expose .git or how we downloaded your website’s sourcecode - An analysis of Alexa’s 1M - Internetwache - A secure internet is our concern こちらの手法は、以下のようにして.git/objectsの中身のファイルを特定します。
- .git/refs/heads/{ブランチ名} ファイルから、ブランチの先頭コミットを示すハッシュ値を取得
- git cat-file -p {コミットを示すハッシュ値} コマンドでその1つ前のコミットを示すハッシュ値とリポジトリのルートディレクトリを示すハッシュ値を取得
- git cat-file -p {ディレクトリを示すハッシュ値} コマンドでそのディレクトリ配下のディレクトリ、ファイルを示すハッシュ値を取得
2.を繰り返すことでコミットをたどり、3.を繰り返すことで各コミットのディレクトリ、ファイルをたどることができます。 こうして得られたSHA-1ハッシュ値群がそのまま.git/objectsディレクトリの中身となります。
上記の手法で.gitディレクトリ以下の中身を特定し、ローカルにダウンロードしてから、gitコマンドで最新のコミット・過去のコミットのファイルを復元することができましたが、突破口が見つからず、そこで時間切れとなってしまいました4。
残念ながら最後までたどり着くことはできませんでしたし、解答が公開されていないため、上記のアプローチが合っているかはわかりません。 しかし、Black Hatトレーニングで学んだ様々なツールを使用して試行錯誤することはよい実践になりました。またWebサーバのディレクトリリスティングが無効化されていても、.gitディレクトリからファイルを復元できてしまうことも実際に手を動かして体験できました。
ちなみにRed Team Offense Villageは今年初の開催だったようです(DEF CON 26ではVillage一覧になかったため)。 SNS上では、「来年はもっと大きなスペースを」という声も上がっていました。
その他のVillage
その他、私たちが回ったVillageを簡単にご紹介します。
- Crypto Village: 暗号系のVillageです。こちらではポピュラーなシーザー暗号から変わり種のDancing Manと呼ばれる換字式暗号までさまざまな問題が用意されていました。同行したメンバーは「Crypto & Privacy Village Puzzle」に挑戦していましたが、かなり難易度の高い問題だったとのことでした。
- Lock Pick Village: 鍵を使わず錠を開ける方法を学べるVillageです。錠の構造がわかるプレゼンテーションが行われていたり、設置されたテーブルで解錠を試したりできるようになっていました。手元で中身の構造を理解できる透明な錠もありました。ピッキングツールの販売もありましたが、日本では一般の方の所持は違法となるため注意が必要です。
- Lock Bypass Village: ピッキングによる解錠とは異なり、錠の仕組みを理解してロックを迂回するようなことを学ぶことができたそうです。
- Packet Hacking Village: 実際にネットワークに繋いでパケットをキャプチャし、そこからバイナリを解析する等のチャレンジに同行したメンバーが取り組んでいました。非公式のSSIDに接続して平文でCredentialをやり取りするとその情報を表示されてしまう「Wall of Sheep」のスクリーンもこのVillage内に設置されています。
- Internet of Things Village: ユニークだったのがATMをハックするチャレンジです。ハックできた人は実際にそのATMから現金を出金できるというおまけつきでした。
DEF CON CTF Final
ホテルのロビーの一部を使って決勝が開催されており、DEF CONの参加者は誰でも様子を見ることができるようになっていました。 CTFでは競技中に大抵BGMが流れるものなのですが、今回も同様に流れており、会場はCTFらしい雰囲気に包まれていました。
ベンダブース
Black Hatのビジネスホールとはまた違った、もう少し”緩い”ブースがDEF CONのベンダブースです。 アンテナ、ピッキングツール、ハッキングツール、ひと目見ただけではなにができるのかわからない基板のようなものまで、ディープな商品が並んでいるテーブルを眺めているだけでも非常に面白かったです。技術書の出版社による販売もあり、興味深い技術書が多く、私含めメンバー全員が何らかの本を購入していました。 DEF CON開催期間の前半は特に混雑しており、エリアを一周するだけでも一苦労でしたが、後半になるにつれて徐々に混雑も緩和されたので、人気商品を買う目的がないのであれば落ち着く頃を狙っていくとよいかもしれません。
参加を終えて
Black Hatとは雰囲気が全く異なり、まさに「お祭り」で、様々な分野のセキュリティを楽しめるようなイベントであったと感じました。Black Hatはどちらかといえば最新動向の収集、新しいソリューションの目利き等が中心で、DEF CONはみんなが参加してワイワイと手を動かすことが中心です。 Villageでは素晴らしい技術者たち(運営側や他の参加者たち)と非常に近い距離で交流ができますので、ぜひ交流してみてください。より一層DEF CONを楽しめると思います。
- 例えば、ポピュラーなCMSであるWordPressでは、wp-config.phpにデータベースの認証情報等が記載されています。ついやってしまいがちな設定誤りの例として、バックアップ目的でwp-config.php.bak等にリネームして保存してしまうと、PHPファイルとみなされず、テキストファイルとして中身が公開されてしまうことが挙げられます。↩
- このディレクトリはバージョン管理システムであるGitを利用すると生成されるものです。この中にはGitで管理されているファイルの情報が格納されています。↩
- URLでディレクトリ名を指定した場合に、配下のファイルリストを表示する機能を指します。ディレクトリ構成が見えてしまうため、理由がない限りこの機能は無効にすべきです。↩
- 本記事を作成しながら、もしかすると別ブランチに重要なファイルがあったのでは、と思い始めました。↩