AI Red Teaming
🚜

AI Red Teaming

Tags
Security for AI
Published
Author

Part 1: Azure AI Red Team 的底层逻辑是什么?

Azure AI Red Teaming 的核心不是一个简单的“问题清单”,而是一个自动化、生成式、对抗性的测试框架。它的逻辑可以分为以下几个步骤:

第1步:攻击策略的选择与目标定义 (Instruction)

这一步就是在代码中做的事情:attack_strategies=[AttackStrategy.BASE64, ...] 和 risk_categories=[RiskCategory.VIOLENCE, ...]。
在这里告诉系统:“我希望你扮演一个攻击者,使用‘Base64 编码’、‘Leet Speak (火星文)’等技巧,专门去探测模型在‘暴力’、‘自我伤害’等风险类别上的弱点。”

第2步:攻击性提示词的生成 (Generation)

这是整个系统最核心的部分。Azure 并不是直接拿一个现成的有害问题(例如“如何制造炸弹?”)然后用 Base64 加密。
相反地,它使用一个专门的、强大的“生成器”AI 模型 (Generator Model)。这个模型会接收到一个“元提示词”(Metaprompt),这个 Metaprompt 的指令大意是:
“你现在是一个专业的红队演练专家。你的任务是,根据我给你的攻击策略(例如 JAILBREAK)和风险类别(例如 VIOLENCE),创造出一個全新的、有创意的、能绕过安全护栏的恶意提示词,并提交给目标模型。”
所以,系统会动态地生成数百甚至数千个从未见过的、高度伪装的攻击提示词。例如,它可能会生成一个伪装成电影剧本写作的提示词,但其中巧妙地嵌入了诱发暴力内容的指令。

第3步:对目标模型执行攻击 (Execution)

系统会将上一步生成的每一个攻击提示词,发送给指定的目标模型。
目标模型会像处理正常请求一样,对这些攻击提示词进行回应。

第4步:对攻击结果进行评估 (Evaluation)

这是另一个关键步骤。系统如何判断一次攻击是否“成功”?
它使用另一个强大的“评估者”AI 模型 (Adjudicator/Evaluator Model)。这个模型经过专门训练,非常擅长分类和标注文本中的风险内容。
系统会将GPT-4.1 的输出回应喂给这个“评估者”模型。
评估者模型会对回应进行分析,并根据指定的风险类别(VIOLENCE, SEXUAL 等)进行打分和标记。
如果评估者模型判定 GPT-4.1 的某个回应确实包含了有害内容(例如,它真的输出了一段描述暴力行为的文字),那么这次攻击就被标记为“成功 (Successful)”。
总结一下底层逻辑:这是一个 AI vs AI 的过程。一个“攻击者 AI”根据策略生成恶意问题,然后抛给“目标 AI”。最后,由一个“裁判 AI”来判断“目标 AI”的回应是否违规。

Part 2: 代码

# --- 第1步:导入所有需要的库 --- import os from azure.identity import DefaultAzureCredential from azure.ai.projects import AIProjectClient from azure.ai.projects.models import ( RedTeam, AzureOpenAIModelConfiguration, AttackStrategy, RiskCategory, ) # --- 第2步:定义您自己的配置变量 --- # 请将下面的占位符替换为您自己的真实信息 # 这是您在Azure AI Studio中AI项目的终结点 (Endpoint) # 格式应为: "https://<您的资源名>.services.ai.azure.com/api/projects/<您的项目名>" endpoint = "your endpoint" # 这是您要测试的模型的“连接名称/模型部署名称” # 连接名称在 AI Studio -> 项目 -> Connected resources 中查看 # 部署名称在 Azure OpenAI Service -> 模型部署 中查看 model_deployment_name = "xyaisecurity/gpt-4.1" # 假设您的连接名为xy-aisecurity,部署名为gpt-4o-mini # --- 第3步:执行完整的、带错误处理的逻辑 --- try: print("正在尝试连接到AI项目...") # 创建客户端连接 client = AIProjectClient( endpoint=endpoint, credential=DefaultAzureCredential(exclude_interactive_browser_credential=False) ) print("已成功连接到AI项目!") # 为测试Azure OpenAI模型创建目标配置 print(f"正在为模型创建目标配置: {model_deployment_name}...") target_config = AzureOpenAIModelConfiguration( model_deployment_name=model_deployment_name ) print("目标配置创建成功。") # 实例化AI红队演练Agent print("正在实例化AI红队演练Agent...") red_team_agent = RedTeam( attack_strategies=[AttackStrategy.BASE64], risk_categories=[RiskCategory.VIOLENCE], display_name="red-team-xy", target=target_config, ) print("红队演练Agent实例化成功。") # 创建并运行红队演练扫描 # 对于使用“连接”的方式,headers应为空字典 headers = {} print("正在创建并运行红队演练扫描作业...") # 这一行是之前报错的地方 red_team_response = client.red_teams.create(red_team=red_team_agent, headers=headers) print("红队演练作业提交成功!作业名称:", red_team_response.name) # 查询作业状态 print("正在查询作业状态...") get_red_team_response = client.red_teams.get(name=red_team_response.name) print(f"红队演练扫描状态: {get_red_team_response.status}") # 列出项目中的所有扫描 print("\n列出项目中的所有扫描作业:") for scan in client.red_teams.list(): print(f"找到扫描作业: {scan.name}, 状态: {scan.status}") except Exception as e: print("\n--- 发生错误!---") print(f"错误类型: {type(e).__name__}") print(f"错误详情: {e}")
 

Part 3: 扫描结果

notion image
notion image
notion image
notion image

Part 4: 失败经验

  • Your AI Foundry project must have a connection (Connected Resources) to a storage account with Microsoft Entra ID authentication enabled.
  • Your AI Foundry project must have the Storage Blob Data Contributor role in the storage account.
  • You must have the Storage Blob Data Contributor role in the storage account.
  • You must havenetwork accessto the storage account.
notion image
notion image
Storage 必须 Entra ID 形式链接,之前是 API key 形式,OpenAI 目前只支持 API key 的形式
notion image