今日、サイバーの脆弱性や脅威が懸念される中、テストはアプリやソフト作成に欠かせない要素です。継続的なコード検査により、開発者はSDLCの早い段階で問題箇所を発見できます。
アプリテスターはニーズに応じ、多様なテスト手法から最適なものを選択できます。その一つがSASTです。本ガイドでは、このテスト手法と、採用または回避すべき理由について説明します。
まず、SASTの基本的な意味、つまり静的アプリセキュリティテストについて説明します。これはソフトウェア検証の手法に着想を得たAppSecテストの一種で、ソフト実行せずにコードをチェックします。
この手法は、静的および動的にソースコードを詳しく解析し、潜む脅威やエラーを発見することを目的としています。解析対象となるコードは、アセンブリコード、ソースコード、バイトコードです。また、コード検査用のスキャナーを使用し、CIパイプラインの初期段階で行います。
他の名称としては、ソースコード解析やホワイトボックステストと呼ばれます。
この手法はプログラムされたモジュールの検査に重点を置いているため、コードレビューとも呼ばれます。
継続的なコード検査により、攻撃対象領域を減らし、ソリューションのセキュリティ向上を目指します。
主に、SASTテストはクロスサイトスクリプティング、CSRF、SQL/SQLiインジェクションなどの脅威の影響を低減する上で重要な役割を果たすことが実証されています。
続いて、SASTの運用方法について説明します。特にコード解析に基づき、コードの不具合をすぐに発見できるよう設計されています。解析の過程では、SQLインジェクション、エラー、未適切な入力の検出が狙いです。
基本的な処理手順は次の通りです。
ここまででSASTによる広範なコード解析について理解いただけたかと思います。次に、プロセス中に使用される5種類の解析タイプを説明します。
DevOpsでSASTを採用することで、多くのメリットが得られます。本節では、SASTの有望な利点を紹介します。
SASTテストの主な目的はソースコードのエラー検出です。開発者は開発初期からこの手法を導入可能で、コード記述と並行して利用されます。IDEのプラグインを用いたSASTの展開はこれまで以上に容易で、大きな手間はかかりません。
この手法は、問題が存在する正確な箇所を示すため、エラー検出が容易です。ソースコードは長大になることが多く、エラーはどこにでも潜みますが、SASTは問題箇所を強調表示します。これにより、不具合の検索や修正がこれまで以上に簡単になります。
DASTとは異なり、SASTはテストケースの定義に依存しません。解析ルールが全コードに自動的に適用され、例外はありません。これにより、存在する脆弱性を確実に検出できます。
SASTはコード実行を待つ必要がなく、コードが書かれた段階から使用可能です。実行を待たずにテストを開始できます。
テキストファイルのスキャン中にGUI操作が不要なため、SASTの自動化は非常に容易です。DASTと比較しても、セットアップが必要なく高速です。
SASTはSDLCの一部となり、その効率性を向上させることができます。その仕組みを以下で説明します。
ご存知の通り、SASTはコード実行を待たずに即座にコードレビューを開始します。脅威の検出は、コードが開発されると同時に始まります。
SDLCのテストフェーズに入る頃には、コードはほぼ完成しており、このフェーズは短時間で終了します。しかし、これにより市場投入までの時間が延びることがあります。早期にSASTを導入することで、全体の開発時間が短縮され、SDLCが圧縮されます。
ミッションクリティカルなアプリの場合、SASTの採用によりSDLCが迅速化され、記録的な短期間での納品が可能となります。納品時間が短縮される一方で、ソース、バイト、アセンブリ各コードの初期段階からのチェックにより、セキュリティも向上します。
SASTが広く支持される理由は、その高い脅威検出能力にあります。AppSec専門家が数多くの有名な脆弱性を発見するのに役立ちます。以下、その例を示します。
一般的なサイバー脆弱性であるクロスサイトスクリプティングは、正規のアプリに不正なアクセスを試みるために利用されます。攻撃者は、ブラウザ側のスクリプトとして悪意あるコードを埋め込み、利用者にクリックさせる手法です。
SASTは全コードを点検し、悪意あるコードの実行を防ぐことで、この脆弱性の発生を抑制します。
次に、SQLインジェクションがあります。攻撃者が実行可能なリクエストに含まれるSQLクエリへ、悪意あるコードを仕込む脆弱性であり、成功するとデータベースに深刻な被害を及ぼす可能性があります。SASTテストにより、コードレビューが完全自動で行われ、開発からデプロイまで綿密に検査され、悪意ある要素が直ちに発見されます。
このエラーは、アプリが通常より多くのデータを書き込み、バッファとして保持する際に発生します。当初は不足を防ぐ目的ですが、やがてデータ破損の原因となります。攻撃者がバッファ内のコードを改ざんする恐れがあり、開発者がセキュリティ点検なしにそのコードを利用してしまう可能性があります。
SASTは、コードがエラーなく作成され、使用前にレビューされることを保証することで、このエラーの発生を抑制します。
この脅威は、アプリに不正な入力を仕込み、その影響を狙うものです。コードの改ざんにより大きな被害を引き起こす可能性があるため、SASTツールは問題箇所を迅速に特定し、対処することで、その影響を低減または完全に排除します。
どの技術も完璧ではなく、SASTも例外ではありません。メリットとデメリットが存在するため、両面を理解することが重要です。
まずはメリットについて説明します。
メリットを理解した後は、デメリットについて見ていきます。
SASTには多くの利点がありますが、導入時は十分に注意し、できる限り完璧を目指す必要があります。これは標準的なフォーマットに基づいた戦略的な取り組みです。承認されたSAST導入の手順は以下の通りです。
SAST導入の第一歩は、初期段階からコードレビューを実施できる適切なツールを選ぶことです。ツールがコードの言語に対応し、使用しているフレームワークと互換性があるか確認してください。
ツールを選定したら、ライセンス管理、アクセス制御の設定、適切なツールの導入、そしてロールベースのアクセスのセットアップなど、スキャン環境の構築に着手してください。
事前構築されたツールでは、スキャン要件を十分に満たせない場合があるため、基本的なカスタマイズが必要です。一般的な調整方法として、誤検知を減らすための設定変更や、ツールをスキャン環境に直接統合する方法があります。
ツールがスキャン準備完了したら、対象のアプリをアップロードしてください。複数ある場合は、優先順位をつけ、リスクの高いアプリから順にスキャンします。
また、アプリは定期的に同期してください。コード更新や新機能追加時には最新版をアップロードし、最適なスキャン結果を得られるようにしましょう。
スキャン結果を入手したら、詳細に分析し、もし誤検知があれば確認してください。
コードレビューが期待通りに進むよう、チームの教育とツールの使用管理を徹底してください。使用上の問題があれば、チームトレーニングを実施して対処しましょう。
AppSecの分野にはSAST以外にも多くのテスト手法があります。SASTは他の手法と併用可能で、基本的にはコードスキャンに特化しています。DASTを利用する場合、SASTと組み合わせることで、コードセキュリティの強化が図れます。
DASTは入力と出力の検査に特化しており、コードレビューは行いません。しかし、SASTと併用すると、DASTもコード点検や入力・出力の検証を実施します。両者は非常に相性が良く、一つのコインの裏表と呼んでも過言ではありません。
しかし、これら二つを組み合わせるとテスト速度がやや低下することがあります。特に複雑なアプリではDAST自体が遅いため、SASTの導入でさらに速度が落ちる可能性があります。その対策として、SASTは早期に導入することが重要です。一般的にCI/CDパイプラインやIDEが最適です。DASTは後段階で実施してください。
IASTとSASTは互いに相性が良いとは言えません。全く異なるワークフローとテストプロセスを採用しているためです。IASTは即時にコードをテストする動的な手法です。
アプリは機能しながらコードレビューが継続されますが、SASTは実行前にコードをチェックします。したがって、IAST使用中にSASTを導入する意義は薄いと言えます。
SASTツールは、テスト戦略の自動化と精度向上を実現する優れた手段です。SASTテストの成功は、主にツールの品質と有用性に依存すると考えられます。
幸い、選択肢は豊富にあります。有料・オープンソースを問わず多くのオプションが提供されています。最適なツールを選ぶためには、多少の手間を惜しまないことが大切です。
次のポイントを念頭に、SASTツール選定を進めてください。
ツールがどの言語に対応しているか確認してください。多くのスキャナーは、対応する言語で書かれたコードのみ解析します。例えば、PythonベースのスキャナーはPythonコードにしか対応しません。アプリが他の言語で書かれている場合の対応も検討する必要があります。
アプリで使用しているプログラミングコードと、スキャナーがサポートする言語を十分に分析することが、SASTテスト戦略の成功を左右します。
ツールが使いやすいと謳っていても、実際の操作性は重要です。チームが使用する際に快適かどうかを確認し、技術仕様がチームの能力に合致しているかチェックしてください。
これを確かめるにはデモ実施が理想的です。デモ提供のあるツールを選ぶと、選定が容易になります。
SASTセキュリティツールの主目的は脆弱性の検出です。多くの脆弱性を検出できるツールは有力な選択肢となります。中途半端なツールでは、追加投資が必要になる場合がありますので、ツールが検出できる脆弱性をしっかり確認してください。
誤検知が多すぎるツールは問題です。誤検知が頻発するとテストの効果が薄れるため、使用するツールが誤検知を最小限に抑えているか確認してください。
ツールのライセンス面を軽視せず、使用するツールが適法なライセンスを取得しており、規定に沿っているか確認してください。レンタルモデル、ライセンスの柔軟性、機能のカスタマイズ性などに注目しましょう。
これらの点に留意すれば、質の高いSASTツールを最小限の手間で導入できます。
SASTは、さまざまな脅威を検出するためにAppSec専門家が利用する、最も支持されるソースコードレビューおよびテスト手法の一つです。この記事では、この手法に関するほぼ全ての情報を網羅しました。
これでSASTに関する重要なポイントが理解いただけたかと思います。今日からSASTによるテストを始め、アプリのセキュリティ向上にお役立てください。
最新情報を購読