Skip to main content

開発者のためのペネトレーションテスト入門

著者

Kyle Suero

feature pentesting green

2022年3月2日

0 分で読めます

開発者は自分の仕事に大きな誇りを持っています。常に最高のコードを提供し、危険なエッジケースを避けることを目指しています。そのため、テストやコードレビューを通じて、リリース前にバグを検出して修正するよう努めています。

しかし、セキュリティとなると、うまくいかないこともあります。適切なセキュリティツールを備えていないチームでは、開発が滞り、余計な作業が発生し、危険なセキュリティ上の欠陥を顧客やエンドユーザーに届けてしまうおそれがあります。

幸い、ペネトレーションテスター(ペンテスター)は、私たちの負担を軽減し、アプリケーションの安全性を高めるツールやプロセスを備えています。この記事では、ペネトレーションテストとは何か、どのようなツールが使われるのか、そして開発者が身につける価値のあるスキルである理由を見ていきます。

ペネトレーションテストとは?

ペネトレーションテストとは、外部境界からシステムへの侵入を倫理的に試み、セキュリティ上の弱点や脆弱性を特定する手法です。つまり、攻撃者がシステムや組織を侵害しようとする試みを模擬します。私はよく、「脆弱性は機能の境界に存在する」と言います。プログラムが実行できることの限界を押し広げた結果、脆弱性が生じる場合があるという意味です。

設計、想定されるユースケース、プログラムの実装を調べることで、ペネトレーションテスターは徹底的な評価に必要な情報を得られます。こうしたテストでは、脆弱性を見つけ、悪用できることを実証し、その結果をクライアントに報告します。ペネトレーションテストは通常、SDLCの終盤に実施されるため、脆弱性がリリースされる前に発見できる最後の機会となることがよくあります。堅牢なDevSecOpsプログラムと組み合わせれば、既存の取り組みを補完する検出レイヤーをさらに追加できます。

ペネトレーションテスターは何をするのか?

ペンテスターは機能の境界を探ることで、悪用につながる経路を特定し、修正方法を提案します。これは、アプリケーションの中核にある複雑な欠陥を検出する優れた方法であることが実証されています。

コードスキャナーは多くの脆弱性を検出しますが、より複雑なものを見逃すことも少なくありません。コーディング原則の不備ではなく、ソフトウェアの機能そのものに起因する脆弱性や、ビジネスロジックに由来する脆弱性の検出には、ペネトレーションテストのより高度な検出能力が必要です。また、こうしたテストでは、不正利用や悪用のケースも明らかになり、テスト対象を守る予防策をさらに強化できます。

ペンテスターのツールキットには何がある?

ペンテスターが使用できる手法、ツールキット、フレームワーク、スクリプトは多岐にわたります。たとえば、ファザー、エクスプロイトキット、スキャナー、シンプルなドキュメントテンプレートなどです。次回の記事では、開発者が自らペネトレーションテストを実施する際に活用できる具体的なツールを紹介します。

開発者がペネトレーションテストに取り組むべき理由

ペネトレーションテストの実施方法を学ぶことは、非常に価値のあるスキルです。セキュリティインシデントが発生した際に、セキュリティ研究者や悪意ある攻撃者が何を実行できるのかを、開発者自身が目の当たりにできます。これは、安全なコーディング手法を優先するための大きな動機になります。

身近な比較対象として、ミューテーションテストを考えてみましょう。ミューテーションテストでは、小さな変更を加えてもコードがテストに合格することを期待します。これにより、テストやコードの弱点、そしてプログラムがエラーにどう対処するかを特定できます。これは、ペンテスターが行う探索的テストに似ています。ペンテスターは、対象に合わせて攻撃パターンを変更し、より良い結果を得たり、プログラムが何を受け入れるのかを確かめたりします。このように機能をテストすることで、製品に内在するリスクを理解できます。

ペネトレーションテストのスキルを身につけよう

ペネトレーションテストは、ソフトウェアに伴うリスクを明らかにする優れた方法です。需要の高いこのスキルを身につけることで、開発者はより良いコードを書き、セキュリティインシデントから自社を守り、セキュアな開発への理解を深められます。今後の記事では、具体的なペネトレーションテストのツールや手法に加え、手元にあるリソースを活用して、差し迫った脅威を発見し修正する方法を紹介します。ぜひご期待ください。