はじめに
インジェクションの欠陥は、最も危険で長年のソフトウェア・セキュリティ問題の一つです。信頼できない入力が、適切な検証やエスケープなしに、クエリ、コマンド、コード・インタプリタに直接渡される場合に発生します。これは、不正アクセス、データ破損、完全なシステム侵害につながる可能性があります。
従来の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支援による保護を一体化させ、従来のツールではカバーできなかった領域をカバーする。
.avif)
