利用AI对抗天网:自动化Git仓库构建与对抗工程实践

本文探讨了如何利用AI技术自动化创建Git仓库并生成逼真的提交历史,详细介绍了工具架构、代码实现及对抗工程应用,揭示了Git提交历史与日期可被轻易伪造的安全风险。

导航AI 🤝 对抗天网

使用AI可以成为对抗工程的强大工具。这原本只是为了探索可能性并学习更多自动化知识的趣味项目,但它同时证明了Git提交历史和提交日期都不可信!

AI技术演进

人工智能(AI)、生成式AI(GenAI)和代理AI(Agentic AI)是过去几年主导技术领域的重要趋势。基于生成式AI的AI聊天机器人已变得普遍,通过自然语言处理响应用户查询,提供即时、情境感知的回复。

然而,下一个探索领域是代理AI——这是一种融合深度推理和迭代规划的进化。与传统AI仅响应单一交互不同,代理AI能自主处理复杂的多步骤问题。这一进步有潜力在各行业指数级提升生产力和运营效率,提供前所未有的自动化水平和决策能力。

随着Claude、OpenAI和Apple Intelligence等平台使AI工具更易获取,这些技术不再局限于学者、研究人员或开发者。普通用户现在可以免费或以低成本利用AI来组织文本、格式化代码、编写文档等,使先进能力广泛普及。

对抗工程视角

像对抗者一样思考是我的工作,也是我长期从事并热爱的职业——追逐新兴趋势,理解最新技术,并利用它们来提升我的工作质量。“对抗架构师”这个术语是我的好友John Carroll在某天下午我们互相碰撞想法时创造的,我认为它比“红队成员”、“渗透测试员”或安全研究员等头衔更能准确描述我当前的工作内容——我研究对抗者的行为架构,并构建处理问题的方法来运用这种思维模式改进应对策略。

工具创建

我喜欢编写工具,这个周六下午也不例外。我一直在修改最初为AutoPoC和HoneyPoC编写的逻辑,因为我对模板自动化很感兴趣,这像往常一样让我陷入了探索的深渊。我编写了许多工具并发布到GitHub上,最初这只是帮助我学习不同语言的随机脚本输出口,在过去十年中已发展成一个不错的作品集。

最近我发现使用AI帮助改进脚本和工具创建越来越有用。虽然许多人对AI产生的幻觉输出表示抱怨和批评,AI确实偶尔会出现这种情况,但我在家庭实验室中越多地使用AI,就越能学习提示工程,基本上可以说是“强迫”模型给我想要的内容。

GitHub仓库创建及其工作原理

GitHub仓库作为代码的集中存储位置,允许开发者使用Git跟踪变更、协作和管理版本。创建仓库时,Git会在项目内初始化一个.git目录,其中包含版本控制所需的所有元数据,包括提交历史、分支和配置文件。对仓库的每个更改都记录为提交,作为项目在特定时间点状态的快照。每个提交都附带描述变更的消息,为未来参考提供上下文。

我编写了一个AI驱动的仓库自动化工具,能动态创建、修改和管理具有逼真提交历史、仓库描述和AI增强文件修改的仓库。该工具集成Ollama用于AI生成内容,并通过API调用直接与GitHub交互。

通过利用随机化提交日期,脚本将提交回溯日期,使变更看起来是随时间逐渐发生的,而不是单次执行完成的。它还使用AI优化提交消息,确保它们结构良好且有意义,避免通用或重复的措辞。这种方法不仅简化了仓库设置,还创建了更真实的提交历史,使仓库看起来像是经过较长时间积极开发的结果。

对抗工程实践

我将RepoMan编写为概念验证,用于实现完全自动化的Git仓库创建和历史提交,以建立合法性。使用ollama作为AI修改的接收方,但您可以轻松修改它以使用其他模型。

示例提交消息

脚本首先从vars.toml获取变量,您可以在此配置要使用的ollama模型,我已使用llama2和mistrel使其正常工作:

1
2
3
4
5
GITHUB_USERNAME = "USERNAME" # 用于写入的账户用户名
GITHUB_TOKEN = "CLASSIC GIT TOKEN" # 从github开发者设置获取git token
OLLAMA_MODEL = "llama2"  # 更改为"llama2"、"gemma"等
GIT_USER_NAME = "GIT NAME" # git配置的用户名变量
GIT_USER_EMAIL = "EMAIL" # git配置的邮箱变量

然后它构建仓库内容:

  • 创建并初始化仓库(本地和GitHub)
  • 使用AI生成名称、描述和提交消息
  • 智能修改文件,同时避免.git目录
  • 清理AI生成的输出,确保只有有效内容保留
  • 推送具有逼真提交历史的仓库
  • 必要时可以回滚提交

代码实现细节

代码本身相当温和,但它很好地构建在我一直在进行的另一个项目上,用于通过AI实现代码的持续修改以进行CI/CD构建,首先是探索可能性,其次是研究提示工程以获得模型响应我想要内容的合适提示。

对于那些已经是AI驯服大师的读者来说,这可能看起来非常简单,但以下是我必须充分优化提示并在之后执行清理的代码片段,以防止模型向文件中注入垃圾:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def ask_ollama(file_content, verbose=False):
    """将文件内容发送给Ollama并强制只输出修改后的内容。"""
    if verbose:
        print("🤖 正在将文件内容发送给Ollama进行修改...")

    response = ollama.chat(model=OLLAMA_MODEL, messages=[
        {"role": "system", "content": (
            "您是一个高度熟练的修改和重构代码的AI。"
            "您的任务是更新提供的代码以添加缺失的功能"
            "或改进其结构。"
            "只返回修改后的文件内容,不要解释,不要markdown,"
            "不要介绍性或结论性评论。"
            "您的响应必须是包含所有必要内容的有效文件。"
        )},
        {"role": "user", "content": file_content}
    ])

    # 提取响应并确保其干净
    modified_content = response["message"]["content"].strip()

    unwanted_phrases = [
        "这是文件的修改版本:", 
        "这是您更新的代码:", 
        "我进行了一些改进:", 
        "这是一个优化版本:",
        "更新版本:",
        "这是完整文件:"
    ]
    for phrase in unwanted_phrases:
        if modified_content.startswith(phrase):
            modified_content = modified_content[len(phrase):].strip()

    if verbose:
        print("✅ 文件已由Ollama成功修改。")

虽然作为概念验证还不够完美,但它运行良好,而且为了增加趣味性,可以看看RepoMan的提交历史😏。我写了第二个脚本来使提交历史变得疯狂有趣:

1
2
{"role": "system", "content": "生成一个简短的、疯狂的、让你听起来像疯狂科学家的、与软件开发和安全相关的随机混沌提交消息。做一个真正的威胁。不要解释,不要前缀,只要提交消息。"},
{"role": "user", "content": "生成一个简短的提交消息。"}

在创建脚本的过程中,我发现了一些值得探索的实际用例:在混乱的提交消息中隐藏数据,向仓库膨胀代码提交,以及在repoman中减去疯狂内容,它允许潜在的合法内容。Git的任意膨胀可能很好地反映在虚假身份和CV吹嘘上,用作者/参与度误导人们。

这原本只是为了探索可能性并学习更多自动化知识的趣味项目,但它同时证明了Git提交历史和提交日期都不可信!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计