Aikido

コード内の潜在的なインジェクション脆弱性を検出すべき理由

セキュリティ

はじめに

インジェクションの脆弱性は、最も危険で長年にわたるソフトウェアセキュリティの問題の一つです。これらは、信頼できない入力が適切な検証やエスケープなしにクエリ、コマンド、またはコードインタプリタに直接渡されたときに発生します。これにより、不正アクセス、データ破損、またはシステム全体の侵害につながる可能性があります。

従来のSASTツールがJavaScript、Python、Javaなどの一般的な言語に焦点を当てる一方で、AikidoのAIを活用したコード品質エンジンは、Perl、Haskell、Groovy、Erlang、Zig、Delphi、PowerShell、COBOL、ABAP、Visual Basic、Pascal、ColdFusionなど、SASTツールが通常見落とす言語のインジェクション脆弱性を検出できるようになりました。

このルールにより、チームがどの言語を使用しているかに関わらず、安全でないクエリやコマンドの構築が本番環境に到達する前に検出されます。

なぜ重要なのか

インジェクションの脆弱性は、OWASP Top 10のセキュリティリスクの一つであり続けています。

これらは導入は容易ですが、特にレガシー言語やあまり一般的でない言語では、手動レビューによる検出が困難な場合が多いです。

セーフガードがない場合:

  • 攻撃者は、動的に構築された文字列にSQLコマンドやOSコマンドを注入できます。
  • 機密データが外部に流出したり、破壊されたりする可能性があります。
  • コード実行が可能であれば、システム全体が乗っ取られる可能性があります。

このルールを強制することで、クエリやコマンドを構築するすべてのコードは、パラメータ化されたAPI安全なライブラリ、またはエスケープ関数を使用する必要があり、攻撃対象領域を劇的に削減します。

❌ 非準拠の例

以下にPowerShellでの例を示しますが、同じ問題は多くの言語で発生します。

# 安全でない:ユーザー入力がシステムコマンドに直接連結されています
$userInput = Read-Host "Enter username"
Invoke-Expression ("net user " + $userInput)

なぜこれが安全でないのか: Invoke-Expressionは動的に構築されたコマンドを実行します。

攻撃者は「john && del C:\* /Q」と入力し、破壊的な動作を引き起こす可能性があります。

✅ 準拠の例

# Safe: use parameterized or validated command execution
$userInput = Read-Host "Enter username"

if ($userInput -match '^[a-zA-Z0-9_-]+$') {
    Start-Process "net" -ArgumentList "user", $userInput
} else {
    Write-Host "Invalid input"
}

これが安全である理由:

  • コマンド引数は連結された文字列ではなく、リストとして渡されます。
  • 入力はホワイトリストの正規表現を使用して検証されます。
  • 信頼できないデータがエスケープされずにシェルに到達することはありません。

Aikido Securityでお試しください

このルールは、AikidoのCode Qualityツールで直接有効にできます。

有効化されると、ネイティブSASTカバレッジがない言語を含むすべての対応言語で、インジェクションパターンを自動的にスキャンします。

開発者がプルリクエストを開くたびに:

  • システムは新規および変更されたコードをレビューします。
  • コマンド、クエリ、またはインタープリター呼び出し内での文字列連結や補間の使用をすべてフラグ付けします。
  • レポートは正確な行を強調表示し、短い修正提案(例:「パラメータ化されたAPIまたは検証済みの入力を使用する」)を提供します。

このルールはすべてのPRで実行され、多言語リポジトリでも一貫した保護を保証します。

まとめ

動的な文字列構築は、重大なセキュリティ侵害につながる可能性のある最も単純なミスの1つです。

安全でない連結を検出し、安全なクエリ構築プラクティスを強制することで、このルールは本番環境に到達する前にあらゆる種類のインジェクション攻撃を防止します。

言語に関わらず、Aikidoのインテリジェントな分析は、静的保護とAI支援保護を組み合わせることで、従来のツールではカバーできなかった範囲を網羅します。

よくある質問

ご質問がありますか?

このルールはどのような種類のインジェクションを検出しますか?

SQL、コマンド、LDAP、およびコードインジェクションのパターンを、ユーザーが制御するデータが実行可能な文字列にマージされるあらゆる場所で検出します。

サポートされているSAST言語のみで動作しますか?

いいえ。このルールは、SASTが存在しない、または深度が不足している言語(例えばPowerShell、COBOL、Haskellなど)にもカバレッジを拡張します。

その検出はどのくらい厳格ですか?

データベース、シェル、またはインタープリター呼び出しにおける文字列連結や補間などの高リスクな構造をフラグ付けします。このルールは言語を認識しているため、誤検知は稀です。

Aikidoは、修正をどのように処理しますか?

違反が検出された場合、ツールはプリペアドステートメント、パラメータ化されたAPI、またはホワイトリストベースの検証の使用など、より安全な代替案を提案します。

なぜ入力検証だけに頼るべきではないのですか?

検証だけでは安全性を保証できません。適切なパラメータ化により、信頼できない入力がクエリやコマンドの構造を変更することがなくなります。

今すぐ、安全な環境へ。

コード、クラウド、ランタイムを1つの中央システムでセキュアに。
脆弱性を迅速に発見し、自動的に修正。

クレジットカードは不要です | スキャン結果は32秒で表示されます。