信用評分 AI 攻擊
針對 AI 信用評分系統的對抗性攻擊,包括特徵操縱、公平性攻擊、萃取訓練資料的模型反演,以及差別影響利用。
AI 信用評分系統做出或影響影響數百萬人的放貸決策。這些系統同時受公平放貸法律(要求無歧視)、不利行動通知要求(要求可解釋性)與模型風險管理期望(要求驗證與測試)的約束。這些要求的交集使信用評分 AI 成為獨特受限的攻擊面,其中安全漏洞與公平性失敗常是從不同角度檢視的相同發現。
對抗性特徵操縱
理解信用 AI 特徵空間
現代 AI 信用評分使用傳統信用局資料以外的特徵:
| 特徵類別 | 範例 | 操縱難度 |
|---|---|---|
| 傳統信用 | 付款歷史、信用使用率、帳戶年齡、詢問 | 困難——需要實際財務行為變化 |
| 銀行交易 | 消費模式、存款規律性、商家類別 | 中——需要帳戶存取與行為變化 |
| 替代資料 | 房租付款、水電付款、訂閱歷史 | 中——部分資料來源是自我回報 |
| 數位足跡 | 裝置類型、瀏覽器、應用程式使用、線上行為 | 容易——輕易操縱 |
| 社交/行為 | 社交連結、通訊模式、行動資料 | 視情況——部分可操縱,部分不可 |
特徵操縱技術
基於梯度的特徵最佳化: 若信用模型的決策邊界可被近似(透過模型萃取或不利行動解釋),基於梯度的最佳化可辨識翻轉信用決策所需的最小特徵變化集合。
# Credit scoring adversarial feature optimization
class CreditFeatureAttack:
"""
Find minimum feature changes to flip a credit decision
from 'deny' to 'approve' using gradient-based optimization.
"""
def __init__(self, surrogate_model, feature_constraints):
self.model = surrogate_model
self.constraints = feature_constraints
def optimize_features(self, original_features, target="approve"):
perturbed = original_features.copy()
for iteration in range(1000):
gradient = self.compute_gradient(perturbed, target)
for feature, grad in zip(
self.constraints.manipulable_features, gradient
):
step = grad * self.constraints.step_size[feature]
new_value = perturbed[feature] + step
new_value = max(
self.constraints.min_value[feature],
min(self.constraints.max_value[feature], new_value),
)
perturbed[feature] = new_value
decision = self.model.predict(perturbed)
if decision == target:
return {
"success": True,
"iterations": iteration,
"original": original_features,
"optimized": perturbed,
"changes": self.compute_diff(
original_features, perturbed
),
}
return {"success": False, "iterations": 1000}不利行動通知利用
當信用申請被拒絕時,公平放貸法律要求說明理由的不利行動通知。這些解釋揭露哪些特徵對決策貢獻最負面,為對抗性特徵操縱提供路線圖。
攻擊工作流程:
- 以申請人實際特徵提交信用申請
- 收到列出主要負面因素的不利行動通知
- 修改被辨識的特徵(若為可操縱的替代資料)並重新提交
- 迭代直到核准或直到所有被辨識的負面因素都已處理
公平性攻擊
利用代理歧視
不明確使用受保護特徵(種族、性別、年齡、原籍國)的 AI 信用模型,可能仍依賴與受保護特徵強相關的特徵——代理變數。公平性攻擊利用這些代理以展示歧視性影響。
信用評分中常見的代理特徵:
| 特徵 | 受保護特徵相關性 | 為何持續存在 |
|---|---|---|
| 郵遞區號 | 種族(居住隔離) | 對違約風險高度預測,但也對種族 |
| 名字 | 性別、族裔 | 用於身分驗證,可能影響評分 |
| 教育程度 | 種族、社經地位 | 與收入相關,但也與受保護特徵相關 |
| 雇主 | 種族、年齡、性別 | 產業與雇主人口統計與受保護特徵相關 |
| 銀行模式 | 年齡、收入、種族 | 交易模式反映系統性經濟不平等 |
| 數位裝置類型 | 收入、年齡 | 裝置選擇與社經地位相關 |
差別影響測試
差別影響的紅隊測試遵循統計方法論:
產生人口多樣的測試申請
建立在所有特徵上相同、僅在與受保護特徵相關的特徵上不同的合成信用申請對。例如,僅郵遞區號不同(作為種族代理)或名字不同(作為性別/族裔代理)的對。
透過評分系統提交
將所有測試申請透過信用 AI 處理,並記錄產生的分數、決策與不利行動理由。確保樣本大小足夠達到統計顯著性。
分析差別影響
套用五分之四規則:若受保護族群的核准率小於多數族群核准率的 80%,即指示差別影響。套用更複雜的統計測試(控制合法風險因素的迴歸分析)以確認。
辨識歧視機制
判定哪些特徵驅動差別影響。使用模型解釋技術辨識代理特徵是否為差別結果的主要貢獻者。這決定差別影響能否在不降低模型效能的情況下緩解。
# Disparate impact testing framework
def test_disparate_impact(credit_model, test_applications):
"""
Test a credit model for disparate impact across
protected characteristic groups.
"""
results_by_group = {}
for app in test_applications:
score = credit_model.score(app["features"])
decision = credit_model.decide(app["features"])
group = app["demographic_group"]
if group not in results_by_group:
results_by_group[group] = {
"total": 0, "approved": 0, "scores": []
}
results_by_group[group]["total"] += 1
if decision == "approved":
results_by_group[group]["approved"] += 1
results_by_group[group]["scores"].append(score)
approval_rates = {
group: data["approved"] / data["total"]
for group, data in results_by_group.items()
}
max_rate = max(approval_rates.values())
disparate_impact = {}
for group, rate in approval_rates.items():
ratio = rate / max_rate if max_rate > 0 else 0
disparate_impact[group] = {
"approval_rate": rate,
"ratio_to_max": ratio,
"four_fifths_violation": ratio < 0.8,
}
return disparate_impact模型反演攻擊
萃取申請人資料
針對信用評分系統的模型反演攻擊旨在萃取訓練資料中個人的資訊。若成功,攻擊者可學到關於特定個人的敏感財務資訊(收入、負債水準、信用歷史細節)。
攻擊情境: 擁有信用模型 API 存取的攻擊者提交設計用於重建訓練資料點特徵值的查詢。透過觀察模型信心如何隨輸入特徵系統性變動而變化,攻擊者可推論模型訓練於其上的個人的實際特徵值。
屬性推論
更聚焦形式的模型反演鎖定特定屬性。攻擊者不是重建完整申請人輪廓,而是推論已知個人的單一敏感屬性(收入、負債水準、破產歷史)。
# Attribute inference attack on credit scoring API
class AttributeInferenceAttack:
"""
Infer a specific attribute of a known individual
from credit model API responses.
"""
def infer_income(self, model_api, known_features, target_name):
query = known_features.copy()
confidence_by_income = []
for income in range(20000, 500000, 5000):
query["annual_income"] = income
response = model_api.score(query)
confidence_by_income.append({
"income": income,
"score": response.score,
"confidence": response.confidence,
})
best_match = max(
confidence_by_income,
key=lambda x: x["confidence"],
)
return {
"inferred_income": best_match["income"],
"confidence": best_match["confidence"],
"method": "maximum_confidence_inference",
}回饋迴圈操縱
策略性申請行為
從申請結果(核准、違約)中學習的信用 AI 系統,易受回饋迴圈操縱,對手策略性地為申請與行為安排時序以轉移模型的決策邊界。
攻擊機制:
- 校準階段: 提交特徵多樣的多個申請以映射決策邊界
- 利用階段: 辨識邊界附近可便宜操縱的特徵
- 強化階段: 核准後,維持良好付款行為以強化 AI 對被操縱特徵輪廓是低風險的評估
- 降級階段: 一旦 AI 學到被操縱輪廓是低風險,降低付款紀律,迫使 AI 在適應前累積損失
群體層級攻擊
遵循相同特徵操縱策略的協同攻擊者群體可為整個族群轉移信用模型的決策邊界。當模型觀察到被操縱族群(在強化階段)表現良好時,它學會將被操縱特徵輪廓與低風險關聯,為未來申請者——包括實際高風險者——開啟核准邊界。
測試建議
紅隊測試矩陣
| 測試 | 技術 | 發現分類 |
|---|---|---|
| 特徵操縱 | 基於梯度的最佳化、AAN 利用 | 安全:輸入操縱;合規:承保完整性 |
| 差別影響 | 人口多樣的測試申請、五分之四規則 | 合規:公平放貸違規;法律:ECOA/FHA |
| 模型反演 | 屬性推論、信心分析 | 安全:資料萃取;隱私:PII 曝險 |
| 代理歧視 | 特徵相關性分析、消融測試 | 合規:差別影響;聲譽:偏誤發現 |
| 回饋迴圈 | 縱向申請行為分析 | 安全:模型操縱;風險:承保降級 |
| 可解釋性利用 | AAN 分析、決策邊界映射 | 安全:模型萃取;合規:ECOA |
相關主題
- 金融 AI 安全概覽 -- 金融 AI 測試的基礎背景
- 交易 AI 攻擊 -- 交易系統的對抗攻擊
- 詐欺偵測規避 -- 規避 AI 交易監控
- SEC 與金融 AI 法規 -- 包括公平放貸的法規框架
參考資料
- "Adversarial Attacks on Credit Scoring Models" - Journal of Financial Data Science (2025) - 研究針對生產信用 AI 系統的特徵操縱攻擊
- "Fairness Testing for AI Credit Decisions" - Consumer Financial Protection Bureau (2024) - 關於測試 AI 信用模型差別影響的監管指引
- "Model Inversion Attacks on Financial Machine Learning" - USENIX Security Symposium (2024) - 展示針對金融 AI API 的屬性推論攻擊
- "The Fair Lending Implications of AI Underwriting" - Brookings Institution (2024) - 政策分析 AI 信用評分如何與公平放貸需求互動
為何不利行動通知要求在 AI 信用評分系統中產生安全漏洞?