ハッキング・ラボのつくりかた 完全版
今年最後のブックレビューは、なんと1200ページの大作です。この本に手を出すきっかけとなったのは2点。まずは9月の記事でも紹介した以下の記事。
こういう記事を読むと、自分もセキュリティスペシャリスト、情報処理安全確保支援士を名乗っていながら、実戦経験がぜんぜん足らないなぁと思います。言い訳はいくらでも思いつくのですが、やっぱり脆弱性診断、ペネトレーションテストを手を動かす経験を自分のスキルとして身に着けたいです。
もう一つは会社の業務で「あなたの会社が提供しているサービスはペネトレーションテストを受けていますか」というセキュリティチェックシートが送られてくる機会が増えてきたこと。受けていません、と回答したから契約が打ち切られるということはないのですが、「やっていますがなにか?」と胸張って応えられるようになりたいです。
とはいえペネトレーションテストを委託するのはたいへん高くつきます。だいたい数百万円単位といわれ、まあ払えないですよね。自前でAWS上にOSSのペネトレーションテスト用のツールを組み合わせて環境を構築すると費用自体は安くなるものの、専門の知識が必要ですし、保守運用の工数を考えるとアウトソーシングするほうが安い、と考えるのは自然です。つまりこの本を読むことで脆弱性診断やペネトレーションテストがどういう手段で行われているかを学ぶことはできるものの、それを業務で自分が手を動かして実践する、とはならないと思います。大きな会社ではこれらの作業を自前でやっている会社もあります(知っています)羨ましいです。
この本では手元のPC上に仮想環境を構築して攻撃用のVM PC(ペネトレーションテスト、脆弱性の評価、コンピュータ・フォレンジック用にカスタマイズされたParrotOS Security Edition)と、ターゲット用のVM PC(インターネット上には有志がペネトレーションテスト用の練習のために、わざと脆弱性があるOSのイメージを公開しています。こちらを利用します)を用意し、CISSPの試験でも名前が挙がるお約束のペネトレーションテスト用のLinuxコマンドやツールを利用して、実際にハッキング(ペネトレーションテスト)を行います。
解説は非常に丁寧で、インストールに詰まることはありませんでした。しかし私のPCが2台のVP PCを動かすほどのスペックが足りない…メモリ4GBはもうきついか。 インストール後もLinuxを操作する基本的なコマンドやプロセスについての概念が説明されていて、Linuxの基礎について学ぶこともできます。一般的なハッカーのイメージにあるように、侵入する際や侵入した後にはシェルを作り、コマンドを叩いてOS内の設定を調べる必要があるのでLinuxの知識は当然必要です。ネットワークプロトコルの知識も細かく解説しているので、技術の基礎から学ぶことができます。
基礎を学んだら、いよいよ用意されているEXPERIMENTへ移ります。各EXPERIMENTではまず座学でツールや考え方を学び、実習で実際にターゲットを攻撃します。用意されているターゲットと、それを攻撃する手段は多種多様。様々なツール、OSの仕様とコマンド、人間のミスを利用してターゲットの穴を探し、侵入したら各種コマンドやシェルを駆使してシステム及び人間の脆弱性を探し権限を奪い取る、推理小説を読んでいるようです。
~/.bash_historyを開いて過去の操作履歴から特定のディレクトリやコマンドを探し出す行為は自分の頭の中にはなく、目を見開きました。加えてそこで呼び出されるコマンド(プログラム)を改ざんして、正規ユーザに悪意あるコマンドを実行させる。”ハッキングは芸術”という言葉がありますが、これは確かにハマってしまう人もいるかもしれないw
先ほど”インターネット上には有志がペネトレーションテスト用の練習のために、わざと脆弱性があるOSのイメージを公開しています”と書きましたが、公開されているのはOSイメージだけではありません。パスワード解析のために作られたツールや、実際に漏洩したパスワードが大量に保存されている辞書ファイルなど「なんでこんな悪用されるものをインターネットに公開しているんだ」と思うモノも存在します。しかしこれらはクラッカーがとっくに利用している既知のモノなのでしょうね、隠しても仕方がなくて、防御側に存在を知らせることで、攻防が同じ土俵に立たせる効果もありそうです。
読んでいて特に感じたのが、上記のような便利ツールのおかげで、ピンポイントでパスワードやディレクトリパスが分からなくても、ブルートフォースで調べることができてしまうのだ、という点でした。ID+パスワードの認証がもはや半分ないようなものなのを実感しました。あらためてtパスキーや、それが難しくても最低限はSMSやメール認証など、多要素認証の対策が必要と実感しました。 “ブルートフォースを同じIPから大量にアクセスが来たと判断してブロックする”、というのはWAFで可能ですが、水をちょろちょろ出すように少しずつ精査されてしまうとこの方法は使えません(幸い最近はアノマリ検知がありますが)。 この本はParrotOSと攻撃対象のVMを同じネットワークに配置することを前提といるため、侵入の難易度は実際の現場より低いです。最初の入り口をちゃんと守る。AWSで言うならセキュリティグループ、Linuxで言うならiptableによる不要なポートの閉塞は基本でありながら効果絶大であることを再認識です。EC2インスタンスも今の時代22番ポートは開けないようにしたいですね。セッションマネージャのような代替方法がありますし。 加えて面倒でもファイルやユーザのパーミッションを無駄に広くしないこと。sudoを使ってユーザの権限を絞っていても、ユーザがpipコマンドをsudoで実行可能ならば、pipで悪意あるスクリプトをダウンロード&実行してrootユーザでシェルを起動できてしまうことを知りました。これは盲点でした。本当に攻撃者はあれやこれやを考えますね・・・。
また、本書では攻撃対象のサーバとしてWordPressが稼働しているサーバが多く紹介されています。WordPressは人気の無料ブログ作成ツールで、便利なプラグインが豊富ですが、一方で昔のphpがサイバー攻撃に弱い言語だったことと、WordPressのプラグインにバグが多く、加えてメンテナンスされていないこともあり、攻撃のターゲットにも選ばれやすく、ニュースを騒がす情報漏洩の被害者がWordPressで作られたサイトであることも多かったです。WordPressは攻撃者にも垂涎の的であり、WordPress攻撃用の脆弱性スキャナーやパスワードクラッカーが存在するほど。対策されていない債への攻撃は容易です。この本ではwordpressの管理画面に不正ログインし、プラグインとしてLinuxマシンを遠隔操作できるスクリプトをアップロード、外部からブラウザでそのプラグインのパスを直接叩くことでマシンをroot権限で乗っ取ってしまう(これはwordpress自体をrootで起動させるという非推奨な方法を採用しているからです)攻撃手法が案内されており、私もWordPressが稼働しているサーバを仕事で管理していることもあり、これはぞっとしました。ぜんぜん他人ごとではありません。
最後はWindows上で稼働するWordPressへの侵入も解説していました。「エンタープライズ向けコンピュータ」としてではなく、「パーソナルコンピュータ」としての役割を持つWindowsは一般ユーザにとって使いやすい機能が充実している一方、悪用できるサービスも存在します。そもそもサービスを無効化してしまうのがいちばんセキュリティを高められますが、ユーザにとってメリットのある機能が強みなのに、ユーザにとってデメリットのセキュリティリスクがあるから使えない、では本末転倒です。便利かつ安全なサービス・ソフトウェアの開発運用は私たちエンジニアの責務であることを改めて感じました。