コンテンツにスキップ

複数ファイル・ファイル横断の脆弱性トレース

テイント解析(Taint analysis) は、プログラム内をデータがどのように移動するかを追跡することで、コード内のセキュリティリスクを見つける手法です。Webリクエストやユーザーフォームなど、システム外部から来る「汚染された(tainted)」入力から解析が始まります。その後、そのデータがチェックや無害化を経ないままデータベースクエリやシステムコマンドといったセンシティブな箇所に到達するかどうかを追跡します。途中でデータが悪用され得る場合、Aikidoはそれを潜在的な脆弱性としてフラグします。テイント解析は、信頼できない入力がソフトウェア内をどのように伝わり、適切に処理されなければ実際のセキュリティ問題を引き起こし得るかを開発者が把握する助けとなります。

Aikidoは信頼できないコードの流れを追跡し、それが危険なシンク(SQL実行やコマンド実行など)に到達した際にフラグを立てます。ある場所で受け付けた入力が別の場所のリスクある操作に結び付くことがあるため、ファイル内・ファイル間の両方でテイント解析をサポートしています。

Aikidoはデータフローに加えて到達可能性もチェックするため、実際にはアプリ内で実行されえない問題(呼び出していない脆弱な関数や、テストでしか実行されないコードなど)について通知されることはありません。これもノイズを抑える仕組みの一部です。

Aikidoにおけるテイントのトレース

Section titled “Aikidoにおけるテイントのトレース”

脆弱性が発見されると、Aikidoは関連する関数呼び出しを通じてそれを追跡します。セキュリティissueを開き、View code analysisを選択すると、脆弱性の発生源についての詳細と、実行フローを示すコールグラフを確認できます。

マルチファイルのテイント解析が利用可能な言語

Section titled “マルチファイルのテイント解析が利用可能な言語”

Aikidoは現在、以下の言語でファイルをまたいだテイントトラッキングをサポートしています。

  • JavaScript
  • TypeScript
  • PHP
  • .NET/C#
  • Java
  • Rust
  • Go
  • Ruby
  • Python

その他の言語は現在、ファイル内のテイント解析のみをサポートしています。

  • C/C++
  • Swift
  • Android
  • Scala
  • Kotlin
  • Dart
  • Elixir