一、小白劇場(chǎng)

小白:大東,我剛看完一部關(guān)于AI編程的紀(jì)錄片,真是太震撼了!

大東:哦?說(shuō)說(shuō)看,什么讓你這么激動(dòng)?

小白:他們展示了AI如何自動(dòng)生成代碼,甚至有人聲稱(chēng)AI可以完全取代程序員。

大東:這聽(tīng)起來(lái)確實(shí)令人興奮,但你知道嗎,最近有一篇文章揭示了AI編程中的一些安全隱患。

小白:真的嗎?AI不是應(yīng)該讓編程更安全嗎?

大東:理論上是這樣,但實(shí)際情況可能更復(fù)雜。

小白:那我們來(lái)聊聊這個(gè)話(huà)題吧,我很好奇。

二、話(huà)說(shuō)事件

小白:大東,你說(shuō)AI編程生成的代碼不安全,這話(huà)有點(diǎn)嚇人。

大東:別光聽(tīng)熱鬧,這事兒得追溯到一次代碼審查大行動(dòng)。

小白:是哪個(gè)行動(dòng)啊?有具體背景嗎?

大東:是一位名叫Alex Birsan的安全研究員做的實(shí)驗(yàn),他把57.6萬(wàn)行AI生成的代碼撕開(kāi)來(lái)分析。

小白:哇,這么多代碼?是哪個(gè)模型寫(xiě)的?

大東:主流的AI編程工具,像GitHub Copilot、CodeWhisperer,都有份參與。

小白:它們不是很智能嗎?還能幫我自動(dòng)補(bǔ)全代碼呢。

大東:對(duì),它們很方便,但也很“懶”,很多時(shí)候不加驗(yàn)證就引入包。

小白:不加驗(yàn)證?什么意思?

大東:就是說(shuō),只要看到某個(gè)功能缺失,它就直接引入一個(gè)看似相關(guān)的依賴(lài)包。

小白:可那不是好事嗎?能幫我省不少事。

大東:?jiǎn)栴}就在這,“幽靈包”也能被它們引進(jìn)來(lái)。

小白:你又提到“幽靈包”了,這到底是什么?

大東:是指那些名字正宗、功能模糊、但沒(méi)人維護(hù)的包,或者干脆就是惡意包。

小白:那這些包具體藏在哪兒?是npm那種庫(kù)嗎?

大東:對(duì),npm、PyPI、甚至RubyGems,都有。AI生成的代碼很多會(huì)調(diào)用這些。

小白:那如果包是假的,我一運(yùn)行代碼豈不是中招?

大東:是的。比如有個(gè)叫requests3的包,就模仿了Python里正經(jīng)的requests庫(kù)。

小白:哎呀,我還真用過(guò)那個(gè)假包一次,當(dāng)時(shí)就感覺(jué)不太對(duì)。

大東:你看你也差點(diǎn)中招。現(xiàn)在AI生成代碼默認(rèn)就引用這些,你敢用?

小白:那我們?cè)趺粗滥男┦怯撵`包?

大東:這個(gè)問(wèn)題難在“偽裝”。Birsan發(fā)現(xiàn),20%的包是“幽靈”,但名字都看不出問(wèn)題。

小白:那是不是有人故意注冊(cè)這種名字?

大東:沒(méi)錯(cuò),這種行為叫做“包投毒”。攻擊者專(zhuān)門(mén)搶注那些大公司常用的依賴(lài)名。

小白:搶注包?就像搶注商標(biāo)一樣?

大東:一模一樣。比如蘋(píng)果在內(nèi)網(wǎng)里用internal-core,結(jié)果外網(wǎng)沒(méi)人注冊(cè),攻擊者搶先了。

小白:天哪,那代碼跑起來(lái)不就自動(dòng)連上了惡意地址?

大東:是的。Birsan用這個(gè)方法讓蘋(píng)果、微軟、PayPal等幾十家公司“自動(dòng)上線(xiàn)”。

小白:上線(xiàn)?你是說(shuō)他們的系統(tǒng)自己把惡意包拉下來(lái)了?

大東:是的,AI生成的代碼再加上一點(diǎn)CI/CD自動(dòng)部署。

小白:這也太離譜了,那AI不就成了攻擊者的“物流員”?

大東:哈哈,說(shuō)得好。AI自己都不知道它在搬運(yùn)炸彈。

小白:那這些AI工具的開(kāi)發(fā)者不擔(dān)心嗎?

大東:他們也焦慮,所以現(xiàn)在一些平臺(tái)開(kāi)始加黑名單機(jī)制,比如過(guò)濾已知惡意包。

小白:那有沒(méi)有白名單?

大東:白名單更難做,因?yàn)楹冒矔?huì)變壞。一個(gè)包五年前正常,現(xiàn)在可能被黑了。

小白:所以還是得靠人肉審核?

大東:對(duì),AI可以給建議,但關(guān)鍵地方不能讓它全權(quán)決定。

小白:那我們?cè)趺床拍堋案蓛舻亍庇肁I生成代碼?

大東:第一是手動(dòng)審查引入的包。第二是配置鎖定版本。第三是用內(nèi)部倉(cāng)庫(kù)鏡像。

小白:聽(tīng)起來(lái)像DevSecOps的活兒。

大東:說(shuō)得對(duì),安全早就不是事后處理了,而是寫(xiě)代碼那一刻就該開(kāi)始。

小白:那AI生成的代碼,開(kāi)發(fā)完是不是還要跑掃描?

大東:必須的。靜態(tài)掃描、依賴(lài)漏洞檢查、SAST、DAST,一個(gè)都不能少。

小白:真是“生成容易、清洗艱難”啊。

大東:你說(shuō)得太對(duì)了,AI讓開(kāi)發(fā)變快了,也讓出問(wèn)題變快了。

小白:那用戶(hù)能不能一鍵識(shí)別這些幽靈包?

大東:現(xiàn)在有些開(kāi)源工具能部分識(shí)別,比如OSV-Scanner和npm audit。

小白:那我能不能寫(xiě)個(gè)工具,結(jié)合AI做實(shí)時(shí)過(guò)濾?

大東:這是個(gè)好主意,但前提是你得比AI更懂AI,別讓它反客為主。

小白:明白了,得把AI當(dāng)助手,不是當(dāng)保姆。

大東:更不能當(dāng)上帝,別讓它“神化”。這就是57.6萬(wàn)行代碼告訴我們的真相。

三、大話(huà)始末

小白:大東,這種“AI拉幽靈包”的事是不是第一次發(fā)生?
大東:當(dāng)然不是,AI只是放大了問(wèn)題,根源早就有了。
小白:那以前有啥類(lèi)似事件?我得長(zhǎng)點(diǎn)記性。
大東:第一個(gè)得提2017年left-pad事件。
小白:就是那個(gè)被刪了的小函數(shù)?還引發(fā)了大癱瘓?
大東:對(duì)。作者一怒刪庫(kù),成千上萬(wàn)項(xiàng)目編譯失敗。
小白:這不就是依賴(lài)太重、審核太少的鍋?
大東:說(shuō)白了,大家都懶得管小依賴(lài),AI現(xiàn)在更懶。
小白:那后面還有啥事比這更嚴(yán)重嗎?
大東:2021年,有人上傳惡意PyPI包模擬urllib。
小白:那不就是釣魚(yú)包?名字一模一樣。
大東:對(duì),叫做“typosquatting”,就是利用拼寫(xiě)錯(cuò)誤。
小白:我還真寫(xiě)錯(cuò)過(guò)requesrs,要不是IDE提醒就中招了。
大東:現(xiàn)在AI幫你寫(xiě)代碼,錯(cuò)得更自然。
小白:這聽(tīng)起來(lái)像是“自動(dòng)化入坑”。
大東:你說(shuō)得對(duì)。還有個(gè)更嚇人的是2022年的ctx事件。
小白:我沒(méi)聽(tīng)過(guò),是啥?
大東:一個(gè)開(kāi)發(fā)者發(fā)現(xiàn)沒(méi)人維護(hù),就偷偷把包接管了。
小白:結(jié)果呢?
大東:更新版本后在里面加了竊密代碼,好多項(xiàng)目都中招。
小白:這跟GitHub Copilot不設(shè)限很像。
大東:AI只看代碼功能,不看開(kāi)發(fā)者信用,風(fēng)險(xiǎn)翻倍。
小白:那開(kāi)源項(xiàng)目現(xiàn)在豈不是得步步驚心?
大東:還有2023年爆的Xz Utils事件,更驚心。
小白:不是那個(gè)壓縮工具嗎?我Linux里天天用。
大東:對(duì)啊,居然被潛伏兩年,加入后門(mén)。
小白:是AI干的嗎?
大東:不是,但AI可以學(xué)它的代碼,繼續(xù)傳染。
小白:太陰了!這也太像“木馬教師”了。
大東:你形容得不錯(cuò),AI一旦吃進(jìn)惡意樣本,就有了“錯(cuò)覺(jué)經(jīng)驗(yàn)”。
小白:那我們是不是要給AI喂點(diǎn)“清潔食譜”?
大東:說(shuō)得好!安全訓(xùn)練數(shù)據(jù),是AI時(shí)代的防毒面包。
小白:那像這種“依賴(lài)地雷”,AI平臺(tái)能預(yù)防嗎?
大東:目前還很弱,它們大多以功能優(yōu)先,不查信譽(yù)。
小白:那企業(yè)該咋做?天天盯源碼審計(jì)?
大東:首先,建立“依賴(lài)包準(zhǔn)入機(jī)制”。
小白:啥意思?
大東:就是說(shuō),每個(gè)包都得過(guò)一遍認(rèn)證、標(biāo)簽、簽名檢查。
小白:那不是像機(jī)場(chǎng)安檢一樣?
大東:對(duì)!別讓AI變成沒(méi)刷身份證的黑車(chē)司機(jī)。
小白:那是不是還得加“代碼防火墻”?
大東:你真是學(xué)快了。SCA、SBOM、Runtime Guard,一個(gè)不能少。
小白:我看現(xiàn)在流行“最小依賴(lài)”原則,跟這事有關(guān)?
大東:當(dāng)然。引入越少,風(fēng)險(xiǎn)越低。AI的“貪心”正好相反。
小白:那AI平臺(tái)會(huì)不會(huì)以后被強(qiáng)制加安全插件?
大東:這趨勢(shì)已經(jīng)開(kāi)始了,像Copilot加了安全過(guò)濾層。
小白:那像國(guó)內(nèi)平臺(tái)呢?
大東:華為、百度也在做“可信生成”,不過(guò)標(biāo)準(zhǔn)還沒(méi)統(tǒng)一。
小白:那這場(chǎng)AI編程風(fēng)暴最后會(huì)往哪兒走?
大東:要么變成安全沙箱,要么變成黑客天堂。
小白:聽(tīng)你這么說(shuō),我都不敢用AI寫(xiě)代碼了。
大東:別怕,關(guān)鍵是要帶著懷疑看結(jié)果,別盲信。
小白:那我們是不是得重新定義“安全AI編程”?
大東:應(yīng)該叫“零信任AI開(kāi)發(fā)”,讓每一行代碼都可追溯。
小白:聽(tīng)起來(lái)像AI時(shí)代的“數(shù)字指紋”?
大東:沒(méi)錯(cuò),代碼來(lái)源、生成模型、依賴(lài)包都得打標(biāo)識(shí)。
小白:那我們以后開(kāi)發(fā),是不是得像“做賬”一樣留痕?
大東:你終于明白了,AI時(shí)代,代碼也是資產(chǎn)。

四、小白內(nèi)心說(shuō)

小白:今天和大東的對(duì)話(huà)讓我深刻意識(shí)到,AI編程雖然帶來(lái)了便利,但也隱藏著不少安全隱患。特別是那些看似無(wú)害的依賴(lài)包,可能成為攻擊者的突破口。作為開(kāi)發(fā)者,我們不能盲目依賴(lài)AI生成的代碼,而應(yīng)保持警惕,定期審查項(xiàng)目中的依賴(lài)項(xiàng),確保每一行代碼的安全性。只有這樣,我們才能在享受技術(shù)進(jìn)步的同時(shí),保障系統(tǒng)的安全。

來(lái)源: CCF科普