Aikido

潜在的なインジェクションの脆弱性を検出する

セキュリティ

はじめに

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

従来のSASTツールがJavaScript、Python、Javaのような一般的な言語に焦点を当てているのに対し、AikidoAIを搭載したコード品質エンジンは、Perl、Haskell、Groovy、Erlang、Zig、Delphi、PowerShell、COBOL、ABAP、Visual Basic、Pascal、ColdFusionのような、SASTツールが通常見逃す言語のインジェクション脆弱性を検出します。

このルールにより、チームがどの言語を使用していても、安全でないクエリやコマンドの作成が本番環境に到達する前に検出されるようになる。

なぜそれが重要なのか

インジェクションの欠陥は、依然として OWASPトップ10セキュリティ・リスクの一つである。

特にレガシーな言語や一般的でない言語では、導入は簡単だが、手作業によるレビューで検出するのは難しいことが多い。

セーフガードなしで:

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

このルールを実施することで、クエリーやコマンドをビルドするコードのすべての部分が、パラメータ化されたAPI安全なライブラリ、またはエスケープ関数を使用しなければならなくなり、攻撃対象が劇的に減少する。

非準拠の例

以下はPowerShellでの例だが、同じ問題は多くの言語で現れる。

# 安全でない: ユーザー入力が直接システムコマンドに連結される
ユーザー入力= リードホスト "ユーザ名を入力"
呼び出し式("ネットユーザー"+ ユーザー入力)

これが安全でない理由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 セキュリティで試す

このルールはAikidoCode Qualityツールで直接有効にできる。

いったんアクティブになると、ネイティブのSASTカバレッジがない言語も含め、サポートされているすべての言語でインジェクション・パターンを自動的にスキャンします。

開発者がプルリクエストをオープンするたびに:

  • このシステムは、新しいコードや変更されたコードをレビューする。
  • これは、コマンド、クエリー、インタープリター呼び出しの内部で文字列の連結や補間が使用されている場合にフラグを立てる。
  • レポートでは、その行がハイライトされ、短い修正案が提供される(例えば、「パラメータ化されたAPIや検証された入力を使用する」)。

このルールはすべてのPRで実行されるため、言語が混在するリポジトリでも一貫した保護が保証される。

結論

動的な文字列の構築は、重大なセキュリティ侵害につながる最も単純な間違いの一つである。

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

言語を問わず、Aikidoインテリジェントな解析は、静的保護とAI支援による保護を一体化させ、従来のツールではカバーできなかった領域をカバーする。

よくある質問

ご質問は?

このルールはどのような種類の注射を検出するのか?

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

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

いいえ。このルールは、SASTが存在しない、あるいは深さに欠ける言語(PowerShell、COBOL、Haskellなど)にも適用されます。

検出の厳しさは?

このルールは、データベース、シェル、インタプリタの呼び出しにおいて、文字列の連結や補間のような危険性の高い構成要素にフラグを立てる。このルールは言語を意識しているため、誤検出はまれである。

Aikido 補習をどのように行っているのですか?

違反が見つかると、このツールは、プリペアド・ステートメント、パラメータ化されたAPI、ホワイトリスト・ベースの検証の使用など、より安全な代替手段を提案する。

なぜ入力検証だけに頼らないのか?

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

まずは無料で体験

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

クレジットカードは不要。