仕事で直近半年ほど、 いわゆる重要インフラに分類されるシステムに対するペネトレーションテストを繰り返していた。
ペネトレーションテストとは、平たく言えば、対象のシステムを攻撃して目的の達成可能性を調査するテストである。
ペネトレーションテストの実施においては、クライアントからだけでなく、長年そのクライアントについてセキュリティ全般の強化(このテストもその一環)を推進してきたコンサルタント達からも、実り多き結果を求められる。
「実り多き結果」とはつまり、テストしてよかった、彼に頼んでよかった、と思えるような報告内容を指す。
(テストの実施を進言したコンサルタントチームからは特に、重大な脆弱性の発見が暗に期待される。)
先に結果を書いておくと、私はネットワーク上の複数の端末で脆弱性を発見し、システムの中核を成す最も重要な端末に辿り着き、特権を奪取し、日本列島の特定の地方へのエネルギー供給を停止させることができた。
あるいは監視システムに侵入して権限を昇格し、システムの設定を変更するかシステム自体を破綻させることで、監視部隊が重大なサイバーテロの影響を把握することを遅れさせることもできた。
複数の機器にインストールされているサードパーティ製ソフトウェアに潜んでいた未知の権限昇格の脆弱性を発見できたことも大きな成果だったと言える。
最終的に、クライアントとコンサルタントチームの両方の要望に充分応えることができたことは間違いない。
その要因は何だろうか?
もちろん、高い技術的スキルを持っていることは重要である。
私がエンジニアである以上、計画から報告までのすべての段階で最も期待される部分である。
コミュニケーション能力も欠かせない。
各段階における対面、電話、メール、チャットでの報告・連絡・相談は特に日本のクライアントとコンサルタントから重視される。
ちょっとした待機時間やランチタイムの雑談も、相手から情報を収集したり、信頼を勝ち取るために有用となる。
しかし、私が最も重要だと考えている要因は、諦めない精神力を発揮できたことである。
重要インフラや金融など、システム開発におけるセキュリティ要件のハードルが高い分野のクライアントが相手では特に、ペネトレーションテストで大きな成果を上げるのは容易ではない。
(そういったクライアントは既にペネトレーションテストを定期的に受けており、発見された問題点について対策を実装しているケースも多い。)
充分に計画を練り込み、ラップトップにツールを詰め込んだとしても、テストが上手くいく保証は無い。
CTFやOSCPラボ等で相対する"問題"とは根本的に異なり、そもそも目的達成に必要な脆弱性があるとは限らないし、当然Write-upなど存在しない。
しかも往々にして、テストに充てられる時間は少ない。
このような状況下で「実り多き結果」を残すには、どうすればいいだろうか?
答えは単純だが実践するのは簡単ではない。
頭をフル回転させ、ノートを取り、持てるスキルを十二分に発揮し、制限時間の最後の1秒まで諦めずに脆弱性を探すのである。
特に、誰の手助けも期待できない状況で"諦めずに"取り組むことができなければ、思考も発想も発展せず、結果としてスキルは活かせない。
本当にこの値は無意味か?あのファイルに重要な情報はないか?望みは薄いが、あれを試してみよう。運用業務上、こういう操作でこんな挙動を取るはずだ。etc..
諦めずに考え続け、ひたすらトライしていくのである。
(レッドチーム演習等、ブルーチームに感付かれてはならないシーンではより慎重さが求められることもある。)
本当に脆弱性が存在しなければ仕方ないが、 多くの場合、何かしら穴がある。
それを探し出し、追及し、場合によっては他の脆弱性と組み合わせ、目的を達成できないかを執拗なまでに分析するのである。
では、この精神力を養うにはどうすればいいのか?
それは実戦あるのみ。仕事やCTF大会、実技テストを伴う試験など、強いプレッシャーを伴う場面を繰り返し経験するしかない。
当然、最中は強いストレスを感じるに違いない。
しかし、それこそが重要であり、実績を積み重ねる第一歩となるのだ。
ヘッダに選んだ画像(Benjamin BalazsによるPixabayからの画像)について。
この投稿にぴったりの画像だが、一見するとまったく状況が掴めずひたすらシュールである。
コメント
コメントを投稿