CodeZine(コードジン)

特集ページ一覧

ここまでできるようになった! セキュリティテストの自動化【デブサミ2022】

【18-C-5】めんどうなセキュリティはやめよう!

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2022/05/20 12:00

 DevOpsにセキュリティ確保の活動も組み込んだDevSecOpsを模索するデベロッパーは少なくないだろう。しかし、「アジャイル開発とセキュリティ確保は相いれない部分がある」と語るのは株式会社エーアイセキュリティラボで執行役員を務める関根鉄平氏だ。ただし、両立は決して不可能ではないともいう。両立を妨げる悪条件は何か、悪条件を乗り越えてアジャイル開発とセキュリティ確保を両立させる方法とはどのようなものか。開発現場の事情を想定しながら、DevSecOpsに向けて一歩歩み出すにはどうすれば良いか指針を示してくれた。

株式会社エーアイセキュリティラボ カスタマーサクセス部 執行役員 関根鉄平氏

株式会社エーアイセキュリティラボ カスタマーサクセス部 執行役員 関根鉄平氏

デベロッパーがセキュリティを面倒くさがるのには理由がある

 関根氏はデベロッパーがセキュリティを面倒くさがっていると指摘する。といってもデベロッパーが悪いといいたいわけではない。「体制の課題」「知識の課題」「ツールの課題」の3つの課題が障壁になっているという。

 体制の課題とは、なぜかセキュリティだけが分業化されているという課題だ。アジャイル開発、DevOpsの現場では、デベロッパーと運用担当者だけでなく、さまざまな立場の人たちがまとまって動くが、セキュリティに関することに限っては独立したチームが担当しているということだ。このような状態ではDevSecOpsの実現は難しいだろう。

 加えて、そもそも人員が不足していて、セキュリティに人員を割けないという現場もあるという。そのような現場ではセキュリティ担当がいたとしてもごくわずか、あるいは兼任になっている。現場が開発で手一杯になっており、セキュリティまで手が回らないという状態だ。そこで、セキュリティチェックを外注しようという場合もあるが、そのための調整や契約などが面倒でなかなか話が先に進まない。

 また、昨年末に発生したApache Log4jの問題のように、セキュリティというと予測しにくい突発的な対応が求められることが多いというイメージの問題もあるという。Apache Log4jの問題の際に、経営層からどう対応するのか問い詰められ、面倒な思いをしたという方もいるだろう。

 知識の課題としては、デベロッパーがセキュリティの専門知識を持っていないという課題がある。セキュアコーディングなど、開発の作業に直接関係することはよく分かっているが、セキュリティ全般にわたって、深い知識を持っているデベロッパーはそうそういるものではない。課題を感じて専門教育を受けようと考えたとしても、十分な時間が取れないという問題がある。

 そこに、ツールの課題も重なる。ツールを利用しようと考えても、操作の習得に時間がかかり、設定が面倒でツールを正しく使うところまでたどり着けず、やっと使えたと思ったら、ツールが出力するテスト結果が、何を意味するのかよく分からない。こういう経験をした読者もいるのではないだろうか。

体制の課題に、知識の課題とツールの課題も重なる
体制の課題に、知識の課題とツールの課題も重なる

 ここで関根氏は、DevSecOpsという言葉が意味する内容を確認し始める。アプリケーションの開発ライフサイクルの中で、開発、セキュリティ、運用が統合して動いていける開発スタイルというところだろう。そして関根氏はいきなりそんなことを目指すのではなく、開発プロセスの中にセキュリティテストを自動化できるツールを1つ追加してみるところから始めるくらいがちょうどいいという。

 自動化ツールを選ぶ際のポイントとして、関根氏はまず多様なセキュリティガイドラインに対応していることや、新しい脆弱性にもいち早く対応すること、理解しやすいレポートを出力することなどを挙げたが、ひときわ重要なポイントがCIツールとの連携に使えるWeb APIを持っていることだという。

 さらに、テストシナリオを自動化できるかどうかが大きなポイントになるともいう。ボタンが1つ増えるとか、テキスト入力フィールドが増えたり減ったりという具合に、アプリケーションに更新が加わっても、それに追従してテストシナリオも改訂してくれるようなツールがあれば理想だろう。テストは自動で実行できたとしても、テストシナリオはいちいち設定しなければならないということでは、「面倒くさい」ということに変わりはない。

 そして、以上のような課題を解消するツールとして関根氏が挙げたのが、エーアイセキュリティラボが提供している「AeyeScan(エーアイスキャン)」だ。SaaS型で提供しており、Webアプリケーションの脆弱性を診断してくれる。脆弱性診断の内製化を可能にするほど操作は簡単で、診断の精度は高いという。

AIとRPAを活用したセキュリティテストツール

 ここで関根氏は画面を切り替え、AeyeScanを実際に動かし始めた。WebアプリケーションのトップページのURLだけを指定して、テスト開始のボタンを押しただけでAeyeScanは動き始めた。関根氏はAeyeScanについて、「クラウド上に立ち上げたブラウザをAIとRPAの技術を使ってセキュリティテストを自動で実行していく」と説明する。

 AeyeScanは動き始めるとまず、Webサイトのページ遷移図を作り始める。テストするページはAeyeScanが自分で探してくれる。テストするページのURLをいちいち列挙する必要はないのだ。さらに、郵便番号、住所、氏名、電話番号などの入力フィールドが現れても、AeyeScanは自動で適切な文字列を入力して先に進めてくれる。従来であれば、人間が一つひとつ入力フィールドに入力していかなければならないところだ。

 フィールドへの自動入力の部分ではAIの技術を使っているという。日本のさまざまなWebサイトを機械学習させて、どういう入力フィールドには何を入力するべきかを自動で判断させて、自動入力させているのだ。Webサイトを対象としたセキュリティテストには時間がかかるものだが、AeyeScanはテストの進行状況をSlackやMicrosoft Teamsなどのチャットアプリに流すことができるので、チーム全体でテストの進行状況を共有できる。

AIが入力フィールドを埋めて、テストを先に進めてくれる
AIが入力フィールドを埋めて、テストを先に進めてくれる

 テスト結果は、分かりやすいGUI画面で表示してくれる。問題が起こった場所では、その証拠となるスクリーンショットを記録するなど、一目見て分かるということに重点を置いているが、一方で脆弱性があった部分のパラメーター情報や、HTTPのリクエストレスポンスなど通信のログ、詳細で技術的な情報も提示してくれるので、開発者は脆弱性修正に向けた作業に取りかかりやすい。

 また、テスト結果はドキュメント形式でも出力できる。顧客や経営層への説明に使うには、文書になっている方が都合が良いことも多い。その文書を自動で作成してくれればデベロッパーとしては時間を節約できる。

 さらに、AeyeScanはWeb APIも備えている。これを利用すれば定期的にテストを自動実行させることも可能になる。すでにAeyeScanを使っている企業では、毎週決まった曜日にテストを実行することが多いという。また、GitHub ActionsやCircleCIなどを利用して定期的にテストを実行させて、見つかった脆弱性をGiHubなどのソースコード管理システムに課題として登録させるということも可能だという。

 すべて自動で実行するだけでなく、手動テストにもAeyeScanは対応している。ピンポイントで「この画面だけテストしたい」といった要望に応える機能だ。これにはWebブラウザのプラグインを利用しており、ユーザーが操作したところをたどってテストを進めていく。

 これだけ便利に使えそうなツールとなると、利用価格が気になるところだが、関根氏は「外部業者にテストを委託するよりもずっと安く上がる」と答えた。また外部にテストを委託すると、テストを実施する回数はおのずと少なくなっていく。DevOpsの速い流れに比べると、セキュリティだけが置いていかれてしまうわけだ。

 そこでAeyeScanのような自動化ツールを導入すれば、手間をかけずに頻繁にテストができ、DevSecOpsの理想に近づくことができる。関根氏は「開発チームが小さいうちは、兼任担当者が片手間でセキュリティテストをしていても何とかなるかもしれないが、チームが大きくなってきたら自分たちの手でテストをすることが現実的でなくなっていく」と指摘し、早めにセキュリティテストの自動化に投資するよう呼びかけた。

関連資料ダウンロード

関連リンク

  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 笹田 仁(ササダ ヒトシ)

     フリーランスのライター、編集者。IT、特にソフトウェア開発の話が好きです。  趣味はドラムを叩くこと。コロナ騒ぎでリハーサルスタジオに入りにくくなり、ちょこちょこと楽器を買うことでストレスを解消していたら、いつの間にか置き場所に困るほどになってしまいました。

All contents copyright © 2005-2022 Shoeisha Co., Ltd. All rights reserved. ver.1.5