AI生成Bashスクリプトのセキュリティ確保

AIはBashを簡単に書けますが、同時に簡単に壊してしまいます。変数が空であるだけで、小さなスクリプトがホームディレクトリ全体を削除してしまうこともあります。単純なログスクリプトが、機密情報を公開サーバーに漏洩させてしまう可能性もあります。

私自身、質の悪いAIスクリプトを実行したことがあります。ほとんどのエンジニアも経験があるはずです。惨事を防ぐために、このチェックリストを活用してください。

すべてのスクリプトの冒頭に、以下の行を追加してください:

#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'

これらが必要な理由:

  • set -e: コマンドが失敗した場合にスクリプトを停止します。
  • set -u: 未定義の変数がある場合にスクリプトを停止します。これにより rm -rf / のようなエラーを防げます。
  • set -o pipefail: パイプライン内のエラーが実際にスクリプトを停止させるようにします。
  • IFS=$'\n\t': ファイル名に含まれるスペースによるバグを防ぎます。

AIがよく犯す以下のミスに注意してください:

  1. 引用符の欠如 AIはよく rm -rf $TARGET_DIR と書きます。 必ず rm -rf "$TARGET_DIR" と書く必要があります。 引用符がないと、フォルダ名にスペースが含まれている場合に誤ったファイルを削除してしまう可能性があります。変数は常にダブルクォーテーションで囲んでください。

  2. 機密情報の漏洩 AIはデバッグのために set -x を使うことがよくあります。これはすべてのコマンドをログに出力します。APIトークンを使用している場合、そのトークンがCIログに表示されてしまいます。必ず set -x を削除するか、set +x を使用して機密部分を隠してください。

  3. 過剰な権限 AIはすべてのコマンドに sudo を追加することがよくあります。これは避けてください。可能な限り、非ルートユーザーでスクリプトを実行してください。これにより、問題が発生した際の影響を最小限に抑えられます。

  4. 危険なダウンロード curl https://example.com/install.sh | bash は決して実行しないでください。 代わりに:

  • まずファイルをダウンロードする: curl https://example.com/install.sh > install.sh
  • ファイルの内容を確認する。
  • 手動で実行する: sudo bash install.sh

プロのヒント: shellcheck を使いましょう。 すべてのスクリプトに対して shellcheck を実行してください。引用符のない変数や、不足している安全設定を数秒で見つけ出します。目で見落としてしまうミスを検知してくれます。

黄金律: AIの出力は「下書き」として扱ってください。プロンプトに安全要件を含めるか、自分でコードを堅牢にしてください。確認せずにAIが生成したBashを実行してはいけません。

Source: https://dev.to/devopsaitoolkit/securing-ai-generated-bash-scripts-before-you-run-them-401m

Optional learning community: https://t.me/GyaanSetuAi