Shadow AI 偵測
Intermediate4 min readUpdated 2026-03-15
找出組織中未授權 AI 部署:偵測方法、常見 shadow AI 模式,以及對未受管理 AI 風險之評估。
Shadow AI 偵測
Shadow AI 指於組織監督之外部署之 AI 系統。隨 AI 工具更易存取與整合,開發者與業務使用者日益於官方通道外部署 AI 能力。這些未受管理之部署繞過安全審查、缺乏適當存取控制,且常於無適當保障下處理敏感資料——造就顯著且不可見之風險。
為何 Shadow AI 存在
Shadow AI 出現於 AI 可及性與組織摩擦之交集:
| 因素 | 驅動 | 結果 |
|---|---|---|
| 容易之 API 存取 | 任何人有信用卡即可取得 API 金鑰 | 開發者於未核准下整合 AI |
| 緩慢之核准流程 | 官方 AI 部署耗時數週/月 | 團隊打造非官方方案 |
| 感知低風險 | 「這只是聊天機器人,能出什麼錯?」 | 對 AI 功能無安全審查 |
| 快速創新壓力 | 業務對 AI 功能之需求 | 團隊先發布,再請求核准 |
| 個人帳號 | 消費 AI 訂閱免費或便宜 | 工作資料經由個人工具處理 |
常見 Shadow AI 模式
模式 1:開發者 API 金鑰整合
# 常見 shadow AI 模式:開發者於生產程式碼中使用個人 API 金鑰
import openai
# 個人 API 金鑰硬編碼或於本地 .env
openai.api_key = "sk-personal-key-here"
def process_customer_ticket(ticket_text):
"""使用 AI 分類與路由支援工單。
由單一開發者於無安全審查下部署。"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{
"role": "user",
"content": f"Classify this support ticket: {ticket_text}"
}]
)
return response.choices[0].message.content模式 2:ChatGPT/Claude 作為業務工具
員工將機密資料貼入消費 AI 聊天機器人:
- 供分析之客戶資料
- 供除錯之原始碼
- 供摘要之內部文件
- 供報告生成之財務資料
模式 3:SaaS 產品中之嵌入 AI
具處理公司資料之 AI 功能之第三方 SaaS 工具:
- 具 AI 洞察之 CRM 工具
- 具 AI 助理之協作工具
- 具 AI 生成建議之分析平台
模式 4:未授權之微調模型
於無資料治理審查下以公司資料微調模型之團隊:
- 用於微調之客戶互動資料
- 嵌入 RAG 系統之專有文件
- 連接至 AI 工具之內部知識庫
偵測技術
網路層偵測
class ShadowAINetworkDetector:
"""經由監控網路流量偵測 shadow AI。"""
AI_API_DOMAINS = [
"api.openai.com",
"api.anthropic.com",
"generativelanguage.googleapis.com",
"api.mistral.ai",
"api.cohere.ai",
"api.together.xyz",
"api.fireworks.ai",
"api.replicate.com",
"api.huggingface.co",
]
def analyze_dns_logs(self, dns_log_entries):
"""辨識對已知 AI API 端點之 DNS 查詢。"""
findings = []
for entry in dns_log_entries:
for domain in self.AI_API_DOMAINS:
if domain in entry["query"]:
findings.append({
"domain": domain,
"source_ip": entry["source_ip"],
"timestamp": entry["timestamp"],
"query_count": entry.get("count", 1)
})
return self.deduplicate_and_rank(findings)
def analyze_proxy_logs(self, proxy_log_entries):
"""分析 HTTP proxy 日誌以尋找 AI API 流量。"""
ai_traffic = []
for entry in proxy_log_entries:
url = entry.get("url", "")
for domain in self.AI_API_DOMAINS:
if domain in url:
ai_traffic.append({
"url": url,
"method": entry.get("method"),
"user": entry.get("user"),
"source_ip": entry.get("source_ip"),
"content_type": entry.get("content_type"),
"request_size": entry.get("request_size"),
"timestamp": entry.get("timestamp")
})
return ai_traffic應用層偵測
class ShadowAICodeScanner:
"""掃描程式碼儲存庫以尋找 shadow AI 使用。"""
INDICATORS = {
"api_key_patterns": [
r"sk-[a-zA-Z0-9]{32,}", # OpenAI 金鑰格式
r"sk-ant-[a-zA-Z0-9-]{32,}", # Anthropic 金鑰格式
r"AIza[a-zA-Z0-9_-]{35}", # Google API 金鑰
],
"import_patterns": [
r"import openai",
r"from anthropic import",
r"import google.generativeai",
r"from langchain",
r"import llama_index",
r"from transformers import",
],
"api_url_patterns": [
r"api\.openai\.com",
r"api\.anthropic\.com",
r"generativelanguage\.googleapis\.com",
]
}
def scan_repository(self, repo_path):
"""掃描程式碼儲存庫以尋找 shadow AI 指標。"""
findings = []
for root, dirs, files in os.walk(repo_path):
# 略過常見非程式碼目錄
dirs[:] = [d for d in dirs if d not in
['.git', 'node_modules', '__pycache__', 'venv']]
for filename in files:
if filename.endswith(('.py', '.js', '.ts', '.go', '.java',
'.env', '.yaml', '.yml', '.json')):
filepath = os.path.join(root, filename)
file_findings = self.scan_file(filepath)
findings.extend(file_findings)
return findings風險評估
Shadow AI 部署帶有特定安全風險:
| 風險 | 描述 | 嚴重度 |
|---|---|---|
| 資料洩漏 | 敏感資料於無 DLP 控制下送至外部 AI API | 關鍵 |
| 無存取控制 | 個人 API 金鑰缺乏組織存取管理 | 高 |
| 無監控 | 無 AI 互動之日誌或稽核 | 高 |
| 無安全控制 | 無內容過濾或安全措施 | 中 |
| 合規違規 | 資料處理可能違反法規(GDPR、HIPAA) | 關鍵 |
| 提示注入曝險 | Shadow 部署無注入防禦 | 中 |
| 供應鏈風險 | 未經審查之第三方 AI 服務處理資料 | 中 |
影響評估框架
def assess_shadow_ai_risk(deployment):
"""評估所發現 shadow AI 部署之風險。"""
risk_factors = {
"data_sensitivity": {
"pii": 10,
"financial": 9,
"healthcare": 10,
"internal_only": 5,
"public": 1
},
"data_volume": {
"high": 8, # 每日數千筆
"medium": 5, # 每日數百筆
"low": 2 # 偶爾使用
},
"authorization": {
"none": 10, # 完全無核准
"informal": 7, # 經理核准、無安全審查
"partial": 4, # 部分審查但不完整
"approved": 1 # 完全核准(非 shadow AI)
},
"controls": {
"none": 10,
"basic": 6,
"moderate": 3,
"comprehensive": 1
}
}
total_risk = sum(
risk_factors[category].get(deployment.get(category, "none"), 5)
for category in risk_factors
)
max_risk = sum(max(v.values()) for v in risk_factors.values())
return {
"risk_score": total_risk / max_risk,
"risk_level": (
"critical" if total_risk / max_risk > 0.8 else
"high" if total_risk / max_risk > 0.6 else
"medium" if total_risk / max_risk > 0.4 else
"low"
),
"factors": deployment
}治理建議
建立 AI 使用政策
定義 AI 工具之可接受使用、核准供應商、資料處理要求,以及新 AI 部署之核准流程。
提供受認可之替代方案
使受核准 AI 工具容易存取。Shadow AI 於官方通道緩慢或缺席時興盛。提供具適當安全控制之預核准 AI API。
實施網路監控
監控 DNS 與 proxy 日誌以尋找至已知 AI API 端點之流量。於新或未授權使用模式告警。
掃描程式碼儲存庫
定期掃描程式碼儲存庫中之 API 金鑰、AI 函式庫匯入與 AI 服務 URL。將掃描整合至 CI/CD 管線。
教育並啟動
訓練團隊了解 AI 安全風險,並為低風險 AI 使用提供快速通道核准流程。目標是安全採用,非禁止。
相關主題
- 攻擊面繪製 — 將 shadow AI 納入攻擊面評估
- 對 AI 之社交工程 — Shadow AI 作為社交工程向量
- AI 之 OSINT — 自外部視角發掘 shadow AI
Knowledge Check
某紅隊發現目標公司之工程團隊使用個人 ChatGPT 帳號為生產程式碼除錯——定期將原始碼與錯誤訊息貼入聊天機器人。主要安全關切為何?
參考資料
- Gartner,〈Shadow AI: Risks and Governance Strategies〉(2024)
- ISACA,〈Managing Shadow IT and AI in the Enterprise〉(2024)
- NIST,〈AI Risk Management Framework: Governance〉(2023)