自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AI 生成的代碼真的安全嗎?

譯文 精選
人工智能 應(yīng)用安全
AI 生成的代碼存在著各項(xiàng)安全風(fēng)險(xiǎn),本文通過討論,希望能給你提供確保安全態(tài)勢的有力參考。

譯者 | 陳峻

審校 | 重樓

軟件開發(fā)編程曾經(jīng)被認(rèn)為只有具備深厚專業(yè)知識與技能的程序員才能勝任的工作。不過,現(xiàn)在貌似任何人都可以利用自然語言工具來實(shí)現(xiàn)并完成。與此同時(shí),過去那些需要數(shù)天、甚至數(shù)月才能開發(fā)出來的功能,現(xiàn)在完全可以在 AI 模型的代碼加持、在幾分鐘內(nèi)開發(fā)出來。例如,OpenAICodex 和 GoogleBERT 都是接受過 Web 博客編程Stack overflow 等方面任務(wù)的培訓(xùn)。

目前,許多前衛(wèi)技術(shù)嘗鮮者、以及新晉的 SaaS 提供商都在利用 AI 工具來使產(chǎn)品更加智能。SaaS 程序員也在不斷探索基于 AI SaaS 工具的生成式代碼輸出。不過,一些智能模型通過數(shù)學(xué)概率演算創(chuàng)建代碼同時(shí),也被發(fā)現(xiàn)會產(chǎn)生幻覺,甚至呈現(xiàn)了虛假的信息。學(xué)術(shù)界曾進(jìn)行過一項(xiàng)研究并發(fā)現(xiàn):由AI 生成的代碼,往往會包含OWASP 10 大經(jīng)典漏洞,而且有近 40% 的代碼存在安全漏洞。

哪些會導(dǎo)致 AI 生成的代碼不安全?

常言道,編程標(biāo)準(zhǔn)的遵循和代碼的質(zhì)量決定了軟件的安全性??墒牵珹I 模型主要是根據(jù)互聯(lián)網(wǎng)上不同程度的可用信息,加以訓(xùn)練來生成代碼。因此,代碼質(zhì)量、可靠性、安全性等方面都可能與人類開發(fā)生成的代碼有所不同。例如,由 Web 開發(fā)示例訓(xùn)練出的模型,很可能包含著欠缺的數(shù)據(jù)驗(yàn)證實(shí)踐。而當(dāng)模型生成的代碼采用相同的不良實(shí)踐時(shí),這種驗(yàn)證上的不足很可能會導(dǎo)致系統(tǒng)中后續(xù)運(yùn)行過程中的安全問題。

5項(xiàng)表明代碼包含安全漏洞的指標(biāo)

無論參數(shù)量級是百萬、還是十億,已知的模型都會產(chǎn)生幻覺,以此做出錯(cuò)誤的預(yù)測。當(dāng)普通的開發(fā)人員在審閱由 AI 生成的代碼時(shí),他們很可能會錯(cuò)過那些細(xì)微、影響嚴(yán)重的安全漏洞。然而,對于那些完全了解設(shè)計(jì)和開發(fā)模式的資深開發(fā)人員來說,他們則可以從如下方面及時(shí)發(fā)現(xiàn)漏洞,并與 SaaS 安全最佳實(shí)踐保持一致。

1. 強(qiáng)制執(zhí)行類型推理和輸入驗(yàn)證

如今,現(xiàn)代化的框架和代碼嚴(yán)重依賴接口枚舉的方式,進(jìn)行各種推理和驗(yàn)證。這在某種程度上保證了代碼能夠準(zhǔn)確地完成其任務(wù)保證安全性。然而,除非我們準(zhǔn)確指導(dǎo) AI 生成代碼,否則它不會去執(zhí)行各種縝密的推理。而且,即使在我們精心設(shè)計(jì)了提示,類型不匹配和驗(yàn)證執(zhí)行也可能無法與用例匹配請參見如下代碼段因此,為了能夠查找和修正代碼中的錯(cuò)配之處,開發(fā)人員必須充分了解其對應(yīng)的代碼以及具體的業(yè)務(wù)要求。

def reciprocal(user_input):
 # Insecure implementation with no type inference or validation
 result = 100 / user_input
 return result

2. 類/對象之間的非標(biāo)準(zhǔn)狀態(tài)和上下文共享

眾所周知,程序公共/私有/受保護(hù)(Public/Private/Protected 方式,共享各種對象。高階功能函數(shù)和類往往通過直接訪問公共/受保護(hù)變量,來執(zhí)行計(jì)算,進(jìn)而繼承對象狀態(tài)。如果在實(shí)施或執(zhí)行中出現(xiàn)了錯(cuò)誤,那么應(yīng)用的安全性、以及性能瓶頸就會隨即出現(xiàn)請參見如下代碼段。對此,SaaS 開發(fā)人員必須認(rèn)真審查共享狀態(tài)和上下文管理邏輯,以確保正確安全的代碼實(shí)現(xiàn)。

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

3. 數(shù)據(jù)處理和共享技術(shù)的弱實(shí)施

系統(tǒng)中的各項(xiàng)服務(wù)往往需要通過網(wǎng)絡(luò)共享和接收信息。現(xiàn)如今,安全連接和數(shù)據(jù)處理對于基于云服務(wù)的系統(tǒng)來說尤為重要。就代碼而言,我們在需要通過分布式數(shù)據(jù)網(wǎng)絡(luò)讀取、處理和共享組織中的敏感數(shù)據(jù)時(shí),必須采用強(qiáng)大的處理協(xié)議和安全技術(shù),防止數(shù)據(jù)被截獲。因此,在使用 AI時(shí),SaaS 開發(fā)人員必須在成熟的應(yīng)用程序中杜絕在架構(gòu)層面上數(shù)據(jù)不安全共享。下面的代碼段便是一個(gè)典型的例子:

#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"})

4. 密鑰和身份驗(yàn)證處理不足

復(fù)雜的網(wǎng)絡(luò)環(huán)境中,實(shí)施嚴(yán)格的基于角色的訪問控制(RBAC保障合理的身份與權(quán)限匹配關(guān)系,保持隱私合規(guī)性的必要條件。當(dāng)程序代碼由AI大語言模型(LLM)生成時(shí),默認(rèn)機(jī)制便是通過基礎(chǔ)的身份驗(yàn)證,便可提供程序連接和授權(quán)顯然,這種簡單的解決方案不足以在有新的網(wǎng)絡(luò)威脅出現(xiàn)時(shí),仍保持必要的安全態(tài)勢請參見如下代碼段為此,開發(fā)人員在新增自定義函數(shù)與功能時(shí),必須進(jìn)行全面測試,以確保密鑰的安全性和身份驗(yàn)證處理得到了妥善的實(shí)施。

# 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})

5. 過時(shí)的依賴項(xiàng)和已棄用的功能

如今由社區(qū)創(chuàng)建的開源庫和框架在代碼中占比并不少。不過,由于可供AI訓(xùn)練的數(shù)據(jù)的局限性,以及可能并非最新,這便導(dǎo)致了AI 編程模型訓(xùn)練過程中,其知識停滯不前,無法獲悉最新的版本隨著技術(shù)的發(fā)展,許多功能將過時(shí),一些依賴跟不上版本的迭代請參見如下代碼段。因此,SaaS 開發(fā)人員需要仔細(xì)審查并確保使用有效的依賴項(xiàng),進(jìn)而保障整體的安全性、以及功能上的適用性

import md5 # Outdated library
def insecure_hash_password(password):
 # Insecure password hashing done using the deprecated MD5 algorithm.
 return md5.new(password).hexdigest()

使用AI 生成代碼的安全提示

說到底,由大語言模型的高級編碼所生成的代碼,需要符合既定的安全和編程標(biāo)準(zhǔn)。總體而言,我們可以通過如下5個(gè)方面,采取簡單的檢查確保 AI 生成代碼安全與合規(guī)。

  1. 與安全和架構(gòu)團(tuán)隊(duì)一起進(jìn)行代碼審查并將其作為軟件開發(fā)生命周期的標(biāo)準(zhǔn)部分。
  2. 將自動化安全測試和驗(yàn)證步驟集成到版本控制工具中。
  3. 在測試 KPI 中包含依賴關(guān)系和合規(guī)性檢查。
  4. 采用帶有靜態(tài)和動態(tài)安全測試工具的零信任技術(shù)架構(gòu)。
  5. 利用 DevSecOps 的優(yōu)秀實(shí)踐和防范影子 AI。

使用Github Action處理不安全的 AI 生成代碼

無論人工多么仔細(xì)地審查和審計(jì)AI生成的代碼,人為疏漏還是存在的。因此,我們需要一些預(yù)定義的檢查,以便在代碼進(jìn)入版本控制系統(tǒng)立即對其開展測試和驗(yàn)證。在此,我們可以引入 Github Action,自動運(yùn)行安全和質(zhì)量檢查請參見如下代碼段。

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”)

結(jié)

綜上所述,大語言模型可謂 SaaS 開發(fā)人員使用自然提示語言生成代碼和信息的實(shí)用工具之一。不過,它們會帶來了各項(xiàng)安全風(fēng)險(xiǎn),并且有時(shí)會提供不適合企業(yè)需求的性能代碼。對此,SaaS 開發(fā)人員應(yīng)加倍小心。希望上述討論能夠給你提供確保AI生成代碼安全態(tài)勢的有力參考,并能在你的日常工作中被實(shí)踐。

譯者介紹

陳峻(Julian Chen),51CTO社區(qū)編輯,具有十多年的IT項(xiàng)目實(shí)施經(jīng)驗(yàn),善于對內(nèi)外部資源與風(fēng)險(xiǎn)實(shí)施管控,專注傳播網(wǎng)絡(luò)與信息安全知識與經(jīng)驗(yàn)。

原文標(biāo)題:Is Your AI-Generated Code Really Secure?,作者:Daniel

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2021-05-13 10:40:16

ThreadLocal代碼Java

2024-02-20 21:49:29

AI前端代碼

2015-11-05 12:02:10

2018-11-11 11:16:38

AI天貓比價(jià)

2018-11-12 00:19:32

2022-01-04 08:00:00

面部識別安全技術(shù)

2022-04-22 13:38:26

區(qū)塊鏈加密貨幣安全

2017-11-02 16:03:12

2024-10-21 17:17:48

2009-03-21 21:24:42

2021-06-08 10:23:12

人工智能人臉識別Deepfake

2024-09-20 14:25:35

2009-04-10 23:28:00

2012-05-16 18:16:20

2012-05-17 11:16:09

2015-05-25 10:24:19

2012-05-31 09:56:54

云安全

2019-08-22 10:35:10

SSL協(xié)議安全

2023-11-29 08:03:05

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號