2026 年 AI Agent 面试到底考什么?这套题库覆盖了 90% 的高频考点
掘金
第一章:Agent 基础概念与架构 1.1 什么是 AI Agent:从概念定义到本质特征 AI Agent 是当前大模型应用领域最受关注的技术范式。要准确理解它,需要回到这个概念的本质。 斯坦福大学
Балл: 57.16Уверенность: 54%
ПодробнееЗагружаем каталог…
НАВИГАТОР ПО ВОЗМОЖНОСТЯМ ИИ
Найдите свой ИИ-инструмент. Бесплатный доступ, пробные периоды и кредиты — в одном месте.
掘金
第一章:Agent 基础概念与架构 1.1 什么是 AI Agent:从概念定义到本质特征 AI Agent 是当前大模型应用领域最受关注的技术范式。要准确理解它,需要回到这个概念的本质。 斯坦福大学
Балл: 57.16Уверенность: 54%
Подробнее掘金
一.redis 是什么? 1.概念 2.为什么radis很快? 他的数据放在内存里面--不需要读取磁盘 他是单线程模型--避免多线程上下文切换 他是基于多路复用(epoll)--单线程也能处理海量并发
Балл: 57.13Уверенность: 54%
Подробнее掘金
最近无意中刷到了一个《头文字D》的解说,突然就被拖回了那个年代,想起了好多东西! 一晃20多年过去了,当时这几个人真的是嫩啊。周董装逼王者巅峰!陈老师帅到没朋友... 摄影技术登峰造极! 下面考考大家
Балл: 57.09Уверенность: 54%
Подробнее掘金
OpenAI正洽谈至少300亿美元新一轮融资,投前估值约1.4万亿美元,较今年3月的8520亿美元上涨逾60%。这笔融资是IPO前的过桥轮,而非直接上市。与此同时,公司年化收入已达400亿美元,7月以
Балл: 57.07Уверенность: 54%
Подробнее掘金
周五下午,距离上线还有2小时,我盯着监控面板上某个API的异常错误率从0.1%飙升到15%。翻遍日志发现一堆——明明数据校验逻辑里写了严格的非空判断,为什么还会漏? 现象:隐式转换的“完美绕过”
Балл: 57.06Уверенность: 54%
Подробнее掘金
一次 HTTPS 请求从应用层到物理层的完整旅程,逐层追踪数据封装/解封装过程。 synthesis 页:跨 HTTP协议/TLS协议/TCP协议/DNS协议/ARP协议/ICMP协议 综合分析。 1
Балл: 57.06Уверенность: 54%
ПодробнееiThome 新聞
隨著業界開始為後量子密碼學(PQC)遷移做準備,如何降低相關憑證導入帶來的效能與遷移負擔,也成為憑證基礎架構面臨的課題。
Балл: 57.05Уверенность: 54%
ПодробнееiThome 新聞
9月30日思科針對Catalyst SD-WAN Manager用戶提出警告,他們發現及修補已遭利用的重大漏洞CVE-2026-76504,用戶需儘速採取行動。
Балл: 57.05Уверенность: 54%
Подробнее人人都是产品经理
AI 圈最近的更新速度,已经快到让人有点跟不上。 以前 OpenAI、Anthropic、Google 这种顶级玩家发布一次旗舰模型,市场通常会消化几个月。 现在的节奏完全变了。 你刚开始研究一个新模型,下一场发布会已经在路上。 就在 OpenAI 和 Anthropic 不断推进下一代模型的时候,谷歌 DeepMind 终于拿出了自己的年度旗舰: Gemini 4 Argon。 这次发布,谷歌给出的信号非常明确: 代码能力、企业任务、安全能力、长上下文能力,全部朝着“生产力工具”方向推进。 但有意思的是,发布会之外,围绕 Gemini 4 Argon 的讨论也出现了分歧。 一部分声音认为,这可能是谷歌重新回到 AI 第一梯队的重要产品。 另一部分声音则认为, 模型测试成绩很漂亮,但真正放进复杂业务环境,还有距离。 这其实也是整个 AI 行业正在面对的问题: 模型跑分越来越强,但它距离成为一个真正可靠的 AI 同事,还有多远? 01、Gemini 4 Argon 最大升级:一次处理百万 Token 01一、Gemini 4 Argon 最大升级:一次处理百万 Token 先看最核心的变化。 Gemini 4 Argon 最大的升级之一,就是上下文窗口。 相比上一代约 6.4 万 Token 的限制,新模型直接提升到了 100 万 Token 。 简单理解: 以前 AI 处理几十页资料已经不错。 现在,它可以一次性理解: 几百页代码、大型项目文档、长篇合同资料,甚至企业内部知识库。 对于开发者来说,这意味着 AI 开始从“代码助手”向“项目级助手”变化。 它不只是帮你修改一个函数,而是可以尝试理解整个项目的结构、依赖关系和业务逻辑。 价格方面,谷歌这次也明显提高了竞争力。 Gemini 4 Argon 输入价格为: 每百万 Token 2 美元。 输出价格: 每百万 Token 10 美元。 如果命中缓存,输入成本最高还能降低 95%。 对于企业用户来说,这意味着以前成本较高的大规模 AI 任务,现在开始具备长期使用可能。 02 、谷歌开始让 AI 进入真正的大工程 过去很多 AI 发布会,最容易展示的是 benchmark 成绩。 但真正能体现模型价值的,是它有没有参与真实项目。 这一次,谷歌拿出了几个内部案例。 其中一个案例,是数据中心优化。 谷歌表示,Argon 智能体团队分析大量服务器运行数据,自动寻找内存优化空间。 最终释放超过 300 TiB 内存 。 这个数字非常夸张。 简单换算,相当于几十万台普通电脑的存储规模。 另一个案例,是大型代码迁移。 很多企业一直希望把老旧 C/C++ 代码迁移到 Rust,因为 Rust 在安全性方面更有优势。 但问题在于: 大型系统代码量巨大,人工迁移成本极高。 谷歌表示,Argon 已经参与 Fuchsia 系统 Zircon 内核等大型代码迁移工作。 在 libgav1 视频解码库案例中,Argon 分析并优化超过 3.2 万行 SIMD 代码 ,进一步提升 Rust 版本性能。 这些案例释放出的信号很明显: 谷歌希望证明 Gemini 不只是聊天机器人,而是在进入企业真实工作流。 03 、Benchmark 第一,真实工作能力也要经过验证 从公开测试结果来看,Gemini 4 Argon 的成绩确实非常亮眼。 例如: DeepSWE v1.1 软件工程测试中,Argon 获得 77.9% 的成绩。 此外,在金融、法律、自动化、安全等测试中,也取得领先表现。 但问题也随之出现。 AI 行业内近几年出现了一个词: Benchmaxxing。 简单理解,就是模型为了提升测试成绩,不断针对 benchmark 进行优化。 但真实工作环境,往往比测试题复杂得多。 一道编程题,AI 可以快速完成。 但真实企业项目通常包含: 几十万行代码,复杂业务逻辑,历史遗留问题,团队协作要求。 这些因素,很难完全通过单一测试体现。 所以现在越来越多企业开始关注: AI 到底能不能稳定完成任务。 04 、谷歌最大的挑战,可能来自 AI 入口变化 Gemini 4 Argon 背后,其实还有更大的竞争。 过去几十年,Google 最强大的能力一直是搜索入口。 用户遇到问题,会打开搜索框寻找答案。 但随着 AI Agent 的发展,这种习惯正在发生变化。 未来用户可能直接告诉 AI: 帮我整理资料,帮我安排会议,帮我分析合同,帮我完成方案。 搜索正在从 “寻找答案”,变成“执行任务”。 这也是为什么 OpenAI、Anthropic、Meta 等公司都在布局个人智能体。 大家现在争夺是 谁能够成为用户每天工作和生活中的 AI 助手。 05 写在最后 Gemini 4 Argon 的发布,证明 Google 依然拥有顶级 AI 研发能力。 百万 Token 上下文、企业级任务处理、代码工程能力,这些都是非常强的信号。 但 AI 竞争已经进入新的阶段。 模型参数和 benchmark 成绩,只能证明模型拥有潜力。 真正决定未来的,是它能不能进入用户每天的工作流程。 过去互联网竞争抢的是网站入口。 移动互联网竞争抢的是 App 入口。 而 AI 时代争夺的,很可能是那个每天帮用户完成事情的智能助手。 Gemini 4 Argon 能不能帮助 Google 抢回主动权,还需要时间验证。 但可以确定: 这场 AI 大战,远没有结束。 本文由作者@运营派AI Lab,授权发布于平台,未经许可禁止转载。
Балл: 56.97Уверенность: 54%
ПодробнееInfoQ - 促进软件开发领域知识与创新的传播
点击查看原文>
Балл: 56.32Уверенность: 54%
Подробнееvelog
Buy Old Facebook Accounts – Complete Guide to Account Age, History, Privacy and Security ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Meta Description: Learn about old Facebook accounts, account age, profile history, digital reputation, privacy, security, ownership concerns, and responsible account management. URL Slug: buy-old-facebook-accounts Introduction Facebook remains one of the world's largest social platforms, with users creating profiles that can remain active for many years. As a result, people sometimes search for Buy Old Facebook Accounts when researching established profiles, account longevity, social history, and digital identity. An older Facebook account may have a longer history of legitimate activity, connections, posts, and interactions. However, account age alone does not guarantee authenticity, trust, security, reach, or usefulness. Established profiles can also contain highly personal information, including photographs, conversations, contacts, historical posts, and account-recovery information. This makes privacy, security, and legitimate ownership important considerations. This guide explains old Facebook accounts from an informational perspective, focusing on account maturity, digital history, privacy, security, reputation, common misconceptions, and responsible account management. Important Note: Buying, selling, sharing, or transferring Facebook accounts may create privacy, security, ownership, and platform-policy concerns. Review Meta's current policies before making decisions involving an account. What Is an Old Facebook Account? An old Facebook account is generally a profile that was created a long time ago. Depending on its history, an established profile may contain: Older posts Photographs Friends and connections Groups Pages or other platform activity Historical interactions Profile information Long-term security history However, not every old account has substantial activity. One profile may have years of genuine engagement, while another may have remained mostly inactive. Therefore, Buy Old Facebook Accounts should not be interpreted as meaning that account age automatically represents account quality. Why Do People Search for Buy Old Facebook Accounts? ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Search interest around old Facebook accounts can involve several topics. People may research: Account age Profile history Social connections Digital identity Privacy Security Historical activity Reputation Some people assume that older profiles automatically receive greater trust or visibility. That assumption should be treated carefully because platform systems and user trust involve many factors beyond registration date. Account Age vs. Account Quality Account age is only one attribute of a Facebook profile. A profile's broader characteristics may include: Factor Description Account age Length of time the profile has existed Activity history Previous legitimate use Connections Friends, groups, and communities Content history Posts, photos, and other activity Security Protection against unauthorized access Privacy Control over personal information Authenticity Whether the profile represents a legitimate identity Policy compliance Whether the profile follows platform rules An older account with weak security may be less secure than a newer account with strong security. Understanding Facebook Profile History An established Facebook profile can contain years of digital history. This may include: Posts Comments Reactions Photos Videos Friend connections Group participation Public profile information Historical activity can provide context, but it can also create privacy concerns. Older content may continue to reveal information about a person's interests, relationships, locations, or past activities. Facebook Digital Footprint A long-standing Facebook account can have a substantial digital footprint. The footprint may include: Profile information Public posts Photos Comments Friend connections Group activity Page interactions Historical usernames or profile information The larger the digital footprint, the more important privacy management becomes. Why Digital Footprint Matters ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com Online information can remain visible for long periods. Before managing an established profile, users should consider: What information is publicly visible? Which posts are still accessible? Are old photographs private? Which groups or communities are associated with the profile? Are there unnecessary personal details? Does the profile accurately represent its current user? Privacy Considerations Privacy is a major consideration when discussing Buy Old Facebook Accounts. A Facebook profile may contain information that is highly personal. Examples include: Photos Family information Friend lists Private messages Locations Personal interests Professional information This is why credentials and account information should always be protected. Users should avoid accessing another person's private information or treating someone else's digital identity as ordinary transferable property. Facebook Account Security Account age does not automatically provide better security. Security depends on current protections and account-management practices. Password Protection Use a strong and unique password and avoid reusing the same credentials elsewhere. Authentication Protection Use available authentication and login-security features provided by Facebook. Login Activity Monitor recognized devices and unexpected login activity where these controls are available. Recovery Information Protect account-recovery methods and keep them appropriately maintained. Suspicious Activity Unexpected login alerts, unfamiliar changes, or unusual account behavior should be investigated through official Facebook security tools. Social Connections and Established Profiles An older Facebook profile may contain years of social connections. These relationships may represent: Friends Family Colleagues Community members Group participants Social connections are personal and should not be treated as automatically transferable. Misrepresenting an identity or misleading existing contacts can create privacy and trust concerns. Posts, Photos, and Historical Content An established profile may contain a significant amount of historical content. Older content can sometimes reveal: Past interests Personal relationships Locations Events Opinions Professional history Users managing their own profiles should periodically review privacy settings and consider whether older content remains appropriate to share publicly. Username and Digital Identity ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤Email➜ getpvatop@gmail.com ═══════✮➤Discord➜❯ getpvatop ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤═══════✮➤═══════✮ For more information, visit @getpvatop.com A Facebook profile can become closely associated with a person's digital identity. A long-standing profile may be recognized by existing contacts because of its name, photographs, posts, and social connections. Responsible digital identity management means: Avoiding impersonation Providing accurate information Respecting other users Protecting private information Following platform requirements An established profile should never be used to mislead people about who is operating it. Common Misconceptions About Old Facebook Accounts Myth 1: Older Accounts Are Automatically Better Not necessarily. Account age is only one factor. Myth 2: Old Accounts Automatically Have More Reach Account age alone does not guarantee greater visibility or engagement. Myth 3: An Old Profile Is Automatically Trusted Trust depends on authenticity, activity, context, and relationships rather than age alone. Myth 4: Old Accounts Are Automatically Secure Security depends on current protections and account activity. Myth 5: Account Age Overrides Facebook Policies An established account remains subject to applicable platform rules and requirements. Risks Associated With Account Transfers People searching for Buy Old Facebook Accounts may encounter third-party offers involving account credentials or account transfers. Potential risks include: Loss of access Unknown historical activity Privacy exposure Security vulnerabilities Recovery conflicts Previous policy violations Ownership disputes Problems involving existing contacts or groups These risks are important to understand before sharing sensitive information with third parties. Responsible Facebook Account Management Responsible account management should focus on legitimate use, privacy, and security. Useful practices include: Keep passwords confidential. Use available authentication protections. Review login activity. Protect recovery information. Review public profile visibility. Check old posts and photos. Avoid impersonation. Follow Facebook's applicable policies. Researching Getpvatop.com People researching Buy Old Facebook Accounts may encounter Getpvatop.com while exploring online account-related information. Before relying on any website or service, independently review: Privacy practices Terms and conditions Security information Contact details Website transparency Independent reputation Handling of account credentials Never share passwords, authentication codes, or recovery information simply because a third party requests them. ═══════✮➤═══════✮➤═══════✮ ═══════✮➤Telegram➜❯ @getpvatop ═══════✮➤E
velog
안녕하세요, 이전에 잠깐 언급드렸던 아이디어 중 Shallow Copy UAF에 대해서 좀 더 자세히 다뤄보려 합니다. 아직 취약으로 정식 보고가 올라온 사례는 아닙니다. 단순 개인 아이디어로만 생각하고 편히 읽으심 될 것 같습니다. 리눅스 커널의 BPF 서브시스템은 사용자 공간에서 제출한 BPF 프로그램을 그냥 받아서 바로 실행하지 않습니다. BPF 서브시스템은, constant blinding 이라는 보안 기법을 통해 여러 단계의 검증을 거치게 됩니다. * Constant blinding이 필요한 이유는 JIT 스프레이 공격 때문입니다. * 공격자가 BPF 명령어 안에 특정 상수값을 심어두면 JIT 컴파일러가 그 상수를 기계어로 변환하는 과정에서 공격자가 원하는 바이트 패턴이 커널 메모리 안에 자연스럽게 배치됩니다. 이 패턴이 나중에 실행 흐름을 가로채는 데 쓰일 수 있습니다. 이를 막기 위해 커널은 BPF 프로그램 안의 상수값을 XOR로 랜덤화합니다. 예를 들어 상수 0x1234가 있으면, 랜덤 키 0xABCD로 XOR해서 0xB8F9로 바꾼 뒤 저장하고, 실제 사용할 때는 다시 XOR로 원래 값을 복원하는 방식입니다. 이렇게 하면 공격자가 예측 가능한 바이트 패턴을 심을 수 없게 됩니다. 그런데 이 상수 변환 작업을 원본 BPF 프로그램 위에 직접 수행하면 문제가 생깁니다. 나중에 원본이 필요한 경우를 대비해야 하기도 하고 중간에 실패했을 때 롤백이 어렵습니다. 그래서 커널은 원본을 건드리지 않고 복사본을 만들어서 거기에 변환 작업을 합니다. 그 복사본을 만드는 함수가 바로 bpf_prog_clone_create() 입니다. bpf_prog_clone_create() 들여다보기 static struct bpf_prog *bpf_prog_clone_create(struct bpf_prog *fp_other, gfp_t gfp_extra_flags) { gfp_t gfp_flags = GFP_KERNEL | __GFP_ZERO | gfp_extra_flags; struct bpf_prog *fp; fp = __vmalloc(fp_other->pages * PAGE_SIZE, gfp_flags); if (fp != NULL) { memcpy(fp, fp_other, fp_other->pages * PAGE_SIZE); } return fp; } 함수 자체는 짧습니다. 원본 프로그램이 차지하는 크기만큼 메모리를 새로 잡고 memcpy로 통째로 복사한 뒤 반환합니다. 코드 줄 수만 보면 문제가 없어 보입니다. bpf_prog 구조체 내부 struct bpf_prog { u16 pages; u16 jited:1; u16 locked:1; struct bpf_prog_aux *aux; // 문제의 필드 struct sock *sk; union { struct bpf_insn insnsi[0]; struct bpf_prog *fp; }; }; struct bpf_prog_aux { atomic64_t refcnt; u32 used_map_cnt; u32 func_cnt; const struct bpf_prog_ops *ops; struct bpf_prog *prog; struct bpf_map **used_maps; void *jit_data; struct bpf_ksym ksym; }; * bpf_prog_aux는 BPF 프로그램의 실질적인 두뇌입니다. * JIT 컴파일 관련 데이터, 이 프로그램이 참조하는 맵 목록, 함수 포인터 테이블, 심볼 정보까지 여기에 있습니다. bpf_prog 구조체 자체가 BPF 프로그램의 뼈대라면, bpf_prog_aux는 그 뼈대에 붙어있는 근육 같은 존재입니다. memcpy(fp, fp_other, size) 고찰 memcpy(fp, fp_other, size)가 실행되면 fp_other가 차지하는 메모리 블록의 바이트들을 처음부터 끝까지 순서대로 fp에 복사합니다. pages 필드, jited 플래그, 문제의 aux 필드까지 전부 그대로 복사됩니다. 여기서 핵심은, aux 필드에 실제로 저장되어 있는 값은 무엇인가 하는 겁니다. 그 값은 숫자입니다. 예를 들면 0xFFFF888012345678 같은 64비트 주소값입니다. 이 숫자가 의미하는 건 "이 주소의 메모리에 bpf_prog_aux 데이터가 들어있다"는 것입니다. aux 필드 자체가 데이터를 품고 있는 게 아니라, 데이터가 어디에 있는지 가르쳐주는 지도 역할을 하는 숫자일 뿐입니다. memcpy는 이 숫자를 그대로 복사합니다. 당연히 fp->aux에도 0xFFFF888012345678이라는 똑같은 숫자가 들어갑니다. 그런데 이 복사가 bpf_prog_aux 데이터 블록 자체를 새로 만들어주지는 않습니다. 새 메모리를 잡아서 내용을 옮기는 것이 아니라 그냥 "저 주소에 가면 데이터가 있어"라는 쪽지를 한 장 더 베껴 쓴 것뿐입니다. 결국 fp_other->aux와 fp->aux는 둘 다 0xFFFF888012345678이라는 동일한 주소를 가리키고 있습니다. 하나의 bpf_prog_aux 데이터 블록을 두 개의 bpf_prog가 동시에 소유하고 있는 상황입니다. 커널은 이 사실을 전혀 모릅니다. 참조 카운터는 여전히 1입니다. 원본의 카운터 값 1이 그대로 복사됐기 때문입니다. 실제 참조자는 두 명인데 카운터는 한 명이라고 알고 있습니다. UAF Timeline [P1] 클론 생성 직후 fp_other->aux와 fp->aux가 동일한 메모리 주소를 가리키고 있습니다. 커널은 이 상황을 인지하지 못하고 있으며, 두 bpf_prog 각자가 독립적인 aux를 가진 것으로 착각하고 있습니다. [P2] Constant blinding 완료 void bpf_prog_free(struct bpf_prog *fp) { struct bpf_prog_aux *aux = fp->aux; bpf_prog_free_deferred(aux); // aux 해제 vfree(fp); // fp 본체 해제 } Constant blinding 작업이 클론위에서 완료됩니다. 원본은 할 일을 다 했으므로 커널은 bpf_prog_free를 호출합니다. 이 함수는 먼저 fp_other->aux, 즉 0xFFFF888012345678 주소의 bpf_prog_aux 블록을 커널 메모리 할당자에게 반환합니다. "이 메모리 더 이상 쓰지 않으니 회수해가세요" 라는 신호입니다. 그 다음 fp_other 본체도 해제합니다. 이 순간부터 fp->aux가 가리키는 주소 0xFFFF888012345678은 이미 반납된 메모리가 됩니다. 하지만 fp->aux 필드 안에 저장된 숫자는 여전히 0xFFFF888012345678입니다.이제 이 포인터는 존재하지 않는 것을 가리키는 Dangling Pointer가 되었습니다. [P3] 커널이 해제된 메모리를 사용 * 리눅스 커널의 SLUB 할당자는 해제된 메모리를 즉시 재활용합니다. * 다른 커널 스레드가 소켓을 열거나, 파일을 열거나, 다른 BPF 프로그램을 로드하는 등 어떤 방식으로든 메모리 할당을 요청하면 방금 반납된 0xFFFF888012345678 자리를 그 새로운 객체에게 내어줄 수 있습니다. 이 타이밍은 예측이 불가능합니다. 이 시점 이후로는 그 주소에 완전히 다른 종류의 데이터가 들어있습니다. [P4] 클론 fp에 대한 접근 u32 func_cnt = fp->aux->func_cnt; fp->aux->ops->test_run(fp, attr, uattr); * 클론 fp는 아직 살아있습니다. 커널이 여전히 유효하다고 믿으며 fp->aux에 접근합니다. * func_cnt를 읽거나 ops->test_run() 같은 함수 포인터를 호출하는 순간, 커널은 bpf_prog_aux 구조체를 보고 있다고 믿지만 실제로는 그 자리에 들어온 전혀 다른 객체의 데이터를 읽거나, 심각한 경우에는 그 안에 있는 값을 함수 포인터로 착각해서 엉뚱한 주소로 점프합니다. 이것이 Use-After-Free입니다. Exploit 관점 공격자가 이 취약점을 무기화하려면 P2 와 P4 사이에 0xFFFF888012345678 위치를 공격자가 원하는 데이터로 채워야 합니다. 이를 힙 스프레이라 합니다. for (int i = 0; i < 1000; i++) { spray_object[i] = create_controlled_object( .ops = &fake_ops ); } 힙 스프레이는 확률 게임입니다. 공격자는 bpf_prog_aux와 같은 크기의 객체를 수백에서 수천 개씩 대량으로 생성합니다. SLUB 할당자는 같은 크기의 객체를 같은 슬랩 풀에서 관리하기 때문에 해제된 aux 자리를 그 중 하나가 차지할 가능성이 매우 높아집니다. 스프레이되는 각 객체 안에는 공격자가 제어하는 가짜 함수 포인터 테이블 주소가 심겨 있습니다. 스프레이가 성공하면 fp->aux->ops는 공격자가 만든 가짜 테이블을 가리킵니다. P4에서 커널이 fp->aux->ops->test_run()을 호출하는 순간 공격자가 지정한 주소로 점프합니다. 이건 커널 모드에서의 실행이기 때문에 SMEP이나 SMAP 같은 사용자 공간 격리 보호도 의미가 없습니다. 이미 커널 공간 안에서 일어나는 일입니다. 완전한 권한 탈취로 이어집니다. 패치 static struct bpf_prog *bpf_prog_clone_create(struct bpf_prog *fp_other, gfp_t gfp_extra_flags) { gfp_t gfp_flags = GFP_KERNEL | __GFP_ZERO | gfp_extra_flags; struct bpf_prog *fp; fp = __vmalloc(fp_other->pages * PAGE_SIZE, gfp_flags); if (fp != NULL) { memcpy(fp, fp_other, fp_other->pages * PAGE_SIZE); fp->aux = kmalloc(sizeof(*fp->aux), GFP_KERNEL); if (!fp->aux) { vfree(fp); return NULL; } memcpy(fp->aux, fp_other->aux, sizeof(*fp->aux)); fp->aux->prog = fp; atomic64_set(&fp->aux->refcnt, 1); } return fp; } * 수정의 핵심은 두 bpf_prog가 서로 다른 bpf_prog_aux를 소유하도록 만드는 것입니다. * kmalloc으로 새 메모리를 잡아서 fp->aux가 완전히 새로운 주소를 가리키게 하고, 그 새 공간에 원본의 내용을 복사합니다. 이제 원본이 해제되어 fp_other->aux의 메모리가 반납되더라도 fp->aux는 전혀 다른 주소를 가리키고 있으므로 아무런 영향을 받지 않습니다. 역참조 포인터인 aux->prog도 갱신해야 합니다. 원본의 aux->prog는 fp_other를 가리키고 있었는데, 내용을 그대로 복사하면 클론의 aux->prog도 원본을 가리키는 잘못된 상태가 됩니다. fp->aux->prog = fp로 명시적으로 바로잡아야 합니다. 참조 카운터도 원본에서 복사된 값을 그대로 쓰면 안 되고, 새 aux는 참조자가 클론 하나뿐이므로 1로 초기화해야 합니다.
Балл: 54.4Уверенность: 49%
Балл: 54.4Уверенность: 49%