かつては深い専門知識を必要とする作業とみなされていたソフトウェア開発とプログラミングは、今では自然言語を使用して誰でも行うことができます。かつては開発に数日または数か月かかっていた機能が、AI モデルのコードにより数分または数時間で開発できるようになりました。たとえば、OpenAI Codex と Google BERT は、プログラミング Web ブログや Stack Overflow の質問などでトレーニングされています。
これらのインテリジェント モデルは数学的確率に基づいてコードを作成しますが、幻覚を起こしたり、誤った情報を提示したりすることも知られています。学術機関が行った調査によると、AI コード生成は上位 10 の脆弱性の主な原因であり、コードの約 40% にセキュリティ バグがあると言われています。多くの主要プレーヤーと新しい SaaS プロバイダーは、AI を活用して、提供するサービスをよりスマートにしています。SaaS プログラマーも、AI ベースの SaaS ツールについてより詳しい知識を身に付ける必要があります。
プログラミング標準とコード品質に従うことで、ソフトウェアの安全性が決まります。しかし、AI モデルはインターネットで入手できるあらゆる情報に基づいてトレーニングされます。コードの品質、信頼性、セキュリティなどは、人間の開発者が生成したものとは異なる場合があります。たとえば、Web 開発の例に基づいてトレーニングされたモデルには、不適切なデータ検証方法が含まれている可能性があります。この検証の欠如により、モデルが同じ不適切な方法を採用したコードを生成すると、セキュリティの問題が発生する可能性があります。
サイズ (パラメータが数百万または数十億) に関係なく、モデルは幻覚を起こし、誤った予測を行うことが知られています。一般的な開発者が AI が生成したコードを見ると、微妙だが重大なセキュリティ上の脆弱性を見逃してしまいます。しかし、設計と開発のパターンを完全に理解している開発者にとっては、欠陥はレビューするだけで特定できます。開発者はこれらのパターンを活用して脆弱性を発見し、 SaaS セキュリティのベスト プラクティスに準拠することができます。
最新のフレームワークとライブラリは、推論と検証にインターフェース/列挙型に大きく依存しています。これにより、コードが正確に機能し、セキュリティが確保されることが保証されます。AI 生成コードは、指示しない限り推論しません。慎重にプロンプトを作成したとしても、型の不一致と検証の適用がユースケースと一致しない場合があります。コードの不一致を見つけて修正するには、開発者はドメインとビジネス要件を十分に理解している必要があります。
def reciprocal(user_input): # Insecure implementation with no type inference or validation result = 100 / user_input return result
プログラムは、パブリック/プライベート/保護された方法でオブジェクトを共有します。高階関数とクラスは、パブリック/保護された変数に直接アクセスして計算を実行することで、オブジェクトの状態を継承します。実装または実行で何かが間違って行われると、セキュリティまたはパフォーマンスのボトルネックが簡単に発生する可能性があります。SaaS 開発者は、状態とコンテキストの管理ロジックを適切に実装し、正しく安全に使用できるように確認する必要があります。
class InsecureClass: def __init__(self, owner, balance, password): self.owner = owner # Public attribute self._balance = balance # Protected attribute self.__password = password # Private attribute # Public def def get_balance(self): return self._balance # Protected def def _update_balance(self, amount): self._balance += amount # Private def def __validate_password(self, input_password): return self.__password == input_password # Insecure def exposing private data def insecure_password_exposure(self): return self.__password
サービスはネットワーク経由で情報を共有し、受信します。今日では、安全な接続とデータ処理は、クラウドベースのシステムの成功に不可欠です。分散データ ネットワークを介して組織の機密データを読み取り、処理し、共有する場合、データの傍受を防ぐために強力なプロトコルとセキュリティ技術を導入する必要があります。AI を使用して、SaaS 開発者は、本格的なアプリケーションでアーキテクチャのあらゆる側面を実装する必要があります。
#Insecure Data Sharing @app.route("/user/<int:user_id>", methods=["GET"]) def get_user(user_id): user = users.get(user_id) if user: return jsonify(user) # All user data exposed, including secrets # Insecure Data Handling @app.route("/update_email", methods=["POST"]) def update_email(): data = request.json() user_id = data.get("user_id") new_email = data.get("new_email") if user_id in users: users[user_id]["email"] = new_email # No validation of new_email return jsonify({"message": "Email updated successfully"})
今日のサイバーに敏感な世界では、
# Insecure authentication @app.route("/login", methods=["POST"]) def login(): data = request.json() email = data.get("email") password = data.get("password") for user_id, user in users.items(): if user["email"] == email and user["password"] == password: return jsonify({"message": "Login successful", "user_id": user_id})
AI プログラミングは、コミュニティやオープンソースによって作成されたライブラリやフレームワークによって行われています。人々は、これらの有望なツールを使用したり、新しいツールを作成したりすることで、新しいテクノロジーをサポートしています。これらのモデルをトレーニングしたデータは最新ではなく、モデルの機能は固定されており、その知識も同様です。テクノロジーの発展に伴い、多くの機能が時代遅れになり、一部のライブラリは現在のニーズに関連しなくなります。SaaS 開発者は、機能とセキュリティを確保するために、有効な依存関係の確認と使用を担当します。
import md5 # Outdated library def insecure_hash_password(password): # Insecure password hashing done using the deprecated MD5 algorithm. return md5.new(password).hexdigest()
大規模言語モデルの高度なコーディング機能は、広範な数学的計算によるものです。セキュリティやプログラミング標準に準拠するために特別な技術は必要ありません。次の簡単なチェックを使用して、AI で生成されたコードを安全かつ標準に準拠したものにすることができます。
コードをどれだけ注意深くレビューして監査しても、人為的エラーが発生する可能性は常に存在します。手動監査だけに頼るだけでは不十分です。バージョン管理システムにコードが入力されるとすぐに、コードをテストして検証できる事前定義されたチェックが必要です。PR が発行されると自動的にセキュリティと品質のチェックを実行する Github アクションを追加するよりも優れたチェックはありません。
name: Simple Security Checks for AI generated Code on: push: branches: - main pull_request: branches: - main jobs: security-and-quality-check: runs-on: ubuntu-latest Steps: - name: Repository checkout uses: actions/checkout@v3 - name: Python setup uses: actions/setup-python@v4 with: python-version: ">=3.9" - name: Dependency installation run: | python -m pip install --upgrade pip pip install bandit pytest - name: Identifying insecure libraries and patterns run: | echo "Checking for insecure patterns..." if grep -r "md5.new(" .; then echo "ERROR: Insecure MD5 hashing detected. Use hashlib.sha256 or bcrypt instead." exit 1 fi echo "No insecure patterns detected." - name: Scanning for security vulnerabilities run: | echo "Running Bandit security scanner..." bandit -r . - name: Running unit tests run: | echo "Running unit tests..." pytest test/unit --cmodopt=local - name: Notifying on failure if: failure() run: | send_slack_notification(“Unsafe code merge detected, fix immediately”)
大規模言語モデルは、SaaS 開発者が自然なプロンプトでコードと情報を生成するのに非常に便利なツールです。ただし、セキュリティ リスクがあり、企業のニーズに合わないパフォーマンスの低いコードを生成することもあります。SaaS 開発者は、これらのツールを使用し、実際のユース ケースに AI 生成コードを実装する際には、細心の注意を払う必要があります。この実用的なガイドでは、セキュリティ体制に発生して影響を与える要因に焦点を当て、これらの課題を克服する方法を示します。