Policy大和SEC×神戸脆弱性診断の会でペネトレーションテストを学ぶ大和SEC×神戸脆弱性診断の会でペネトレーションテストを学ぶ2018年4月7日に神戸デジタル・ラボで開催された「大和SEC×神戸脆弱性診断の会:みんなでペンテストCTF」というペネトレーションテストに関する勉強会に参加した。私は今まで脆弱性調査を主に取り組んでいたため、脆弱性の発見までが目標となっていた。見つけた脆弱性を悪用し、組み合わせながらシステムに侵入していく手法に興味が湧き、ペネトレーションテストを学ぼうと考えた。勉強会の概要この勉強会は関西を中心に活動する大和セキュリティ勉強会と神戸脆弱性診断の会が合同で開催したもので、事前に用意された脆弱なサーバに対して参加者自ら侵入を試みながらテスト手法を学ぶ形式で行われた。始めに講師の方が演習のルールとツールの使い方を説明し、約4時間の演習となった。参加者は6人ごとのチームに分かれて協力しながらサーバの攻略に取り組み、演習終了後にリーダーがテスト結果を全体へ報告した。最後に講師の方が攻略方法を解説した。演習での取り組みテスト対象のネットワークでは脆弱なサーバ(仮想マシン)が複数起動しており、各チームはそれらのサーバに侵入してroot権限の奪取を目指した。ネットワークを対象にテストを実施した。以下の行為は禁止された。私が演習時にとったアプローチを以下に示していく。対象ネットワークへのスキャンまずは対象のネットワークに存在する端末を把握するため、ネットワーク調査ツールであるNmapを使用してネットワーク全体をスキャンする。オプションを付けて実行すると、5台の端末が見つかる。私たちのチームでは5台の端末ごとに担当を決めて1人1台の端末をテストし、リーダーがその進捗を取りまとめた。端末へのアプローチである。対象端末へのポートスキャン検出した端末に対してNmapによるポートスキャンを実施する。SYNスキャンを実行すると、3つのオープンポートが検出される。23番ポートにTelnet接続するとSSHサーバが動作していることがわかる。総当たりをTHC-Hydraで試みるが失敗に終わる。Webサーバへの脆弱性スキャン80番ポートではWebサーバが動作しているので、Webサーバ向けのセキュリティ診断ツールであるNiktoでスキャンする。いう問題が検出される。いう開発用と推測されるディレクトリが公開されているとの報告である。ブラウザからアクセスすると開発者向けのページが表示される。ページ内には開発者のメールアドレスが記載されている。存在が明らかになるが、現状ではWebShell機能を利用できない。何らかの権限が必要なようだ。ページソースを見ると、ハッシュ値のような文字列がHTMLコメントとして記載されている。英字で構成されていることから、開発者ごとのパスワードをSHA-1でハッシュした値だと推測される。Ripperの一部のエディションで発生するようで、Kali上では問題なく解析に成功する1。SSHログインを試みるが失敗する。Webサーバへのコンテンツ探索サイト内にはログインページが見当たらないため、特定したパスワードの用途が不明である。そこでNiktoよりもコンテンツ探索に特化したDIRBでWebサーバをスキャンする。ディレクトリにブラウザからアクセスすると、管理者のログインページにリダイレクトする。先ほど特定した開発者アカウントの認証情報を入力するとログインに成功する。開発者としてログインした状態であればWebShell機能を利用できる。許可されていないコマンドを入力するとハッカーと疑われてしまう。コマンドで内部を探るとWebサーバ上でDjangoが動作していることがわかる。コマンドを用いて以下のようにファイルを作成する2。8888番ポートとコネクションが確立するはずである。実行を試みるが、これも許可されていない。WebShell機能から実行するのではなく、Webサーバのドキュメントルート配下にファイルを作成し、Webアプリケーションとしての実行を試みる。いうディレクトリにPythonスクリプトを置き、ブラウザからアクセスするが実行されない。Djangoのデザインパターンに従ってテンプレートの追加も試みたが、演習のルールでは設定ファイルの書き換えは禁止のためルーティングを追加できない。FrameworkからDjangoやWSGIのエクスプロイトもあさってみたが利用できず、ここで演習は終了となった。任意コマンドの実行にはコマンド置換や連続実行の手法を応用する。括られた部分はコマンドとして実行される。コマンドを実行できた。Mac上のNetcatで待ち受けているとPythonスクリプトからの接続があり、リバースシェルが可能となる。いう隠しディレクトリ配下のファイル内の文字列を利用する。削除した文字列がrootのパスワードであった。所感Linuxコマンドの連続実行やコマンド置換を応用する方法は、今までの診断やCTFで何度も利用していた。それにも関わらず演習時に気づけなかったのが悔やまれる。ここまで露骨なWebShell機能は私の診断経験の中では見かけなかったが、講師の方曰くルーターのWebコンソールなどで見かけるとのこと。そこでのコマンド縛りを今回と同様の方法で回避できるケースがあるようだ。ペネトレーションテストでは内部ネットワークに侵入するため、ネットワーク機器のWebコンソールや社内システム特有の機能に触れる機会は多い。それらを悪用できる能力もテスターには求められると感じた。私が演習で担当した端末ではWebサーバが動作していたため、Webアプリケーションの脆弱性調査で培った能力を活かせた。コンテンツ探索やHTMLコメントの確認は自然に手が動いた。テスト対象で必ずしもWebサーバが動作しているとは限らない。HTTP以外のプロトコルでのテスト手法も身につけ、攻撃の幅を広げる必要がある。演習で使用された仮想マシンは全てVulnHubで配布されているので3、担当しなかった端末も攻略しながら今後もペネトレーションテストの能力を高めていきたい。大和セキュリティ勉強会も神戸脆弱性診断の会も初めての参加だったが、明るい雰囲気で講師の方にも気軽に質問できた。懇親会ではチーム以外の参加者の方とも交流でき、関西方面のセキュリティに関する動向やイベントなども知れた。普段触れる機会のないことを学べたので、神戸まで行ったかいがあった。私がこのエラーにてこずるなか、隣のメンバーは早々にハッシュ値をGoogle検索して元の値を特定した。リバースシェルのコードはpentestmonkeyにあるPythonスクリプトを参考にした。