news 2026/9/16 18:24:29

Google Backstory 公共 Protos 深度解析:SecOps 的 UDM 统一数据模型、实体建模与数据访问规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Google Backstory 公共 Protos 深度解析:SecOps 的 UDM 统一数据模型、实体建模与数据访问规范

Google Backstory 公共 Protos 深度解析:SecOps 的 UDM 统一数据模型、实体建模与数据访问规范

【免费下载链接】googleapisPublic interface definitions of Google APIs.项目地址: https://gitcode.com/GitHub_Trending/go/googleapis

backstory/目录是 googleapis 仓库中面向安全运营(SecOps)场景的公共协议定义集,其 README 明确将其定位为"Common Data Access, Universal Data Model (UDM) and Entity protos used by Secops"(见 backstory/README.md)。本篇文章以该目录为核心,逐层拆解 UDM 统一事件模型、Entity 实体上下文、EntityRisk 风险评分、Collection 检测集合、Data Access 数据访问标签与 Id 命名空间的设计思路,并结合 backstory/udm.proto、backstory/entity.proto 等源码给出字段级说明,帮助读者掌握一套可用于安全日志标准化、威胁检测与调查工作流建模的完整 protobuf 协议体系。

Backstory 目录概览:一套服务于安全运营的公共协议族

backstory/目录下共包含 6 个 proto 文件、1 个服务配置 YAML 和 1 个 Bazel 构建文件,它们共同构成一个自洽的协议族:

文件职责
backstory/udm.proto定义 UDM(Unified Data Model,统一数据模型)事件、Metadata、Network、Extensions、Noun、File、User 等核心消息,是整套协议的地基(约 6600 行,字段覆盖极广)
backstory/entity.proto定义 Entity 实体上下文、EntityMetadata、Relation 关系、Metric 预计算指标、AtiPrioritization 威胁情报优先级
backstory/entity_risk.proto定义 EntityRisk 实体风险评分与 RiskDelta 风险变化量
backstory/collection.proto定义 Collection 集合(检测/告警/调查的容器)、Element、Reference、LatencyMetrics 等
backstory/data_access.proto定义 DataAccessLabels / DataAccessIngestionLabel 数据访问标签
backstory/id.proto定义 Id 与 Id.Namespace 标识命名空间
backstory/backstory.yaml服务配置(name: backstory.googleapis.com,标题 "Malachite Common Protos"),声明文档摘要为 "Common Universal Data Model (UDM) and Entity protos used by Chronicle"
backstory/BUILD.bazelBazel 构建规则,为 Java/Go/Python/PHP/Ruby/C#/C++ 生成多语言产物

一个值得注意的细节:README 中该协议服务于 "Secops",而 backstory/backstory.yaml 的文档摘要写作 "used by Chronicle",backstory/udm.proto 中也同时出现 "enriched by Chronicle" 与 backstory/entity_risk.proto 中的 "Google Security Operations UI" 等表述。从源码结构看,该协议族服务于 Google 安全运营产品线(Chronicle 为其前身命名),不同文档保留了各自的命名习惯。

UDM:统一数据模型的事件标准化

UDM 是整个协议族的核心。它的目标是:无论原始日志来自防火墙、EDR、DNS、邮件网关还是身份系统,都归一化为同一种结构化事件,使上层检测规则、调查界面和机器学习模型无需关心厂商差异。

UDM 顶层消息与六大"名词"角色

backstory/udm.proto 中的UDM消息(L36-L110)由以下部分组成:

字段类型语义
metadataMetadata事件元数据:时间戳、来源产品、事件类型等
additionalgoogle.protobuf.Struct无法放入正式字段的厂商特有数据
principalNoun发起活动的行为主体(发起者)
srcNoun被参与者作用的对象及其所在的设备/进程上下文(源)
targetNoun事件指向的目标实体或目标上的对象(目标)
intermediaryrepeated Noun处理活动流经的中间实体(如代理、SMTP 中继)
observerNoun观察并上报事件、但非直接中间方的实体(如抓包器、扫描器)
aboutrepeated Noun事件提及但不属于上述角色的实体(如邮件附件、正文内嵌域名/URL/IP、PROCESS_LAUNCH 中加载的 DLL)
security_resultrepeated SecurityResult安全检测结果列表
networkNetwork网络细节(含各协议子消息)
extensionsExtensions其他一等事件元数据扩展
extractedgoogle.protobuf.Struct从日志中提取的扁平化字段
groupedoptional GroupedFields分组关联的 UDM 字段

这六个"名词"角色是 UDM 事件叙事的骨架。proto 注释给出了非常具体的建模规则:

  • principal必须至少包含一个机器细节(hostname、MAC、IP、端口、产品特定 ID 如 EDR asset ID)或用户细节(如 username),可附带进程细节;禁止包含 email、files、registry keys/values 字段;
  • src举例:用户 U 在机器 X 上将文件 A 复制到机器 Y 上的文件 B,则文件 A 与机器 X 都放进src
  • target举例:防火墙连接 A→B 中 A 是 principal、B 是 target;进程 C 向进程 D 注入时 C 是 principal、D 是 target;
  • intermediary的关键约束是:无论中间方如何动作,principal/target 与初始动作描述必须保持一致——A→B 的成功连接与被防火墙 C 阻断的连接,都应表现为 principal: A、target: B(intermediary: C)。

Metadata:时间戳、事件类型与富化状态

Metadata消息(backstory/udm.proto L113-L767)承载事件级元信息,包含三个重要的枚举:

EventTimestampAttribute(L116-L330)用 70 余个枚举值精确描述event_timestamp所代表的时间语义,覆盖文件类(FILE_CREATION、LAST_ACCESSED、METADATA_LAST_CHANGED…)、账号类(LAST_LOGGED_IN、LAST_LOGIN_ATTEMPT、LAST_PASSWORD_SET…)、进程类(STARTED、EXITED、LAST_EXECUTED…)以及网络类(REQUEST_RECEIVED、RESPONSE_SENT…)等场景。早期几个枚举值(FILE_LAST_ACCESS_TIME 等)已标记deprecated = true,分别建议改用 LAST_ACCESSED、LAST_MODIFIED 等新值。

EventType(L341-L679)是 UDM 最重要的事件分类,按类别组织且用数字段区分:

类别取值范围示例
进程类PROCESS_UNCATEGORIZED(10000)、PROCESS_LAUNCH(10001)、PROCESS_INJECTION(10002)、PROCESS_PRIVILEGE_ESCALATION(10003)、PROCESS_MODULE_LOAD(10006)
注册表类REGISTRY_CREATION(11001)、REGISTRY_MODIFICATION(11002)、REGISTRY_DELETION(11003)
文件类FILE_CREATION(14001)、FILE_DELETION(14002)、FILE_COPY(14005)、FILE_MOVE(14007)、FILE_SYNC(14008)
用户类USER_LOGIN(15001)、USER_LOGOUT(15002)、USER_CREATION(15003)、USER_BADGE_IN(15007)、USER_COMMUNICATION(15012)
网络类NETWORK_FLOW(16001)、NETWORK_CONNECTION(16002)、NETWORK_FTP(16003)、NETWORK_DHCP(16004)、NETWORK_DNS(16005)、NETWORK_HTTP(16006)、NETWORK_SMTP(16007)
状态类STATUS_HEARTBEAT(17001)、STATUS_STARTUP(17002)、STATUS_UPDATE(17004)
扫描类SCAN_FILE(18001)、SCAN_PROCESS(18003)、SCAN_HOST(18004)、SCAN_VULN_HOST(18005)、SCAN_VULN_NETWORK(18006)
邮件类EMAIL_TRANSACTION(19001)(EMAIL_URL_CLICK 已废弃,改用 NETWORK_HTTP)
计划任务类SCHEDULED_TASK_CREATION(20001)、SCHEDULED_TASK_ENABLE(20003)
服务类SERVICE_CREATION(22001)、SERVICE_START(22003)、SERVICE_STOP(22004)
群组类GROUP_CREATION(23001)
分析人员类ANALYST_UPDATE_VERDICT(24000)、ANALYST_ADD_COMMENT(24008)、ANALYST_UPDATE_PRIORITY(24009)、ANALYST_UPDATE_RISK_SCORE(24012)
资源类RESOURCE_CREATION(1)、RESOURCE_READ(4)、RESOURCE_WRITTEN(5)
其他ENTITY_RISK_CHANGE(26000)、TRIAGE_AGENT_UPDATE_INVESTIGATION(27000)、GENERIC_EVENT(100000)

proto 注释对 EventType 的使用给出了一条重要规则:不要依据产生日志的产品来选择事件类型,而要依据记录事件的组件来选择。例如,杀毒软件在客户端扫描邮件应生成 SMTP_PROXY 事件而非 AV 事件;DLP 设备扫描网页上传应生成 HTTP_PROXY 事件而非 DLP 事件。

EnrichmentState(L682-L691)标记事件是否已被 Chronicle 富化(ENRICHED / UNENRICHED)。

Metadata 其余关键字段包括:id(bytes,UDM 事件 ID,可用于原始/归一化事件检索)、product_log_id(厂商事件 GUID)、event_timestamp/collected_timestamp/ingested_timestamp(事件生成/采集/入站三个时间点)、vendor_name/product_name/product_versionlog_typeparser_versioningestion_labels(用户配置的摄取标签)以及tags(Chronicle 解析后添加的标签,注释明确要求解析器不得填充该字段)。

Network:网络事件的结构化细节

Network消息(backstory/udm.proto L799-L1246)统一存放所有网络细节,其中包含 4 个枚举与多类协议子消息:

  • Direction:UNKNOWN_DIRECTION / INBOUND / OUTBOUND / BROADCAST;
  • IpProtocol:覆盖 ICMP(1)、TCP(6)、UDP(17)、GRE(47)、ESP(50)、ICMP6(58)、SCTP(132) 等常用 IP 协议(取值沿用 IANA 协议号);
  • ApplicationProtocol:约 78 种应用层协议,涵盖 HTTP(2000)/HTTPS(2001)、DNS(3000)、DHCP(4000)、QUIC(1000)、SMTP(50)、SSH(52)、RDP(36)、SMB(49)、LDAP(23)、KERBEROS(KRB5=65)、TOR(57) 以及 OT/工控协议如 MODBUS(26)、DNP3(70)、IEC104(72)、GOOSE(71) 等,取值有独立编号体系;
  • ConnectionState:LISTENING / ESTABLISHED / TIME_WAIT / CLOSE_WAIT / CLOSED / SYN_SENT 等 TCP 状态;
  • 协议子消息:ftpemaildnsdhcphttptlssmtp;其中Smtp(L1749-L1771)记录 HELO、MAIL FROM、RCPT TO、server_response、message_path、is_webmail、is_tls 等 SMTP 专有字段;
  • 通用字段:sent_bytes/received_bytes/total_bytessent_packets/received_packetssession_durationsession_id/parent_session_idcommunity_idasndns_domaincarrier_nameorganization_nameip_subnet_rangeis_proxyproxy_info

ProxyInfo(L1248-L1282)进一步细分代理类型:anonymous、anonymous_vpn、public_proxy、tor_exit_node、smart_dns_proxy、hosting_provider、vpn_datacenter、residential_proxy、proxy_over_vpn、relay_proxy,并记录vpn_service_name,为检测代理隧道与 Tor 流量提供精确语义。

Extensions:承载一等事件的扩展区

Extensions消息(backstory/udm.proto L1284-L1324)明确"协议元数据不要放进 Extensions,应放入 Network";Extensions 只存放事件特定的一等元数据,共 10 个子扩展:

扩展用途
auth认证扩展:AuthType(MACHINE/SSO/VPN/PHYSICAL/TACACS)、Mechanism(USERNAME_PASSWORD、HARDWARE_KEY、BIOMETRIC、WEARABLE、BADGE_READER、CACHED_INTERACTIVE 等 20 种)、Outcome(SUCCESS/FAILURE)
vulns漏洞扩展:Vulnerability 含 Severity(LOW/MEDIUM/HIGH/CRITICAL)、cvss_base_score、cvss_vector、cve_id、cve_description、vendor_vulnerability_id 等
entity_risk实体风险变化扩展(复用 entity_risk.proto 的 EntityRisk)
linux_utmpLinux Utmp 登录/登出会话记录(RUN_LVL、BOOT_TIME、USER_PROCESS、DEAD_PROCESS 等)
windows_event_logWindows 事件日志(SECURITY/SYSTEM/APPLICATION/SETUP 等 channel、event_id、activity_id)
resource_usage记录进程/用户对资源的占用(used_entity、used_entity_id)
system_event_details系统级事件细节(message_type、sender_image_id、subsystem)
outlook_metadataOutlook 项元数据(comment、template、title、security_flags_count)
srumWindows SRUM 应用资源消耗(背景读/写字节数、上下文切换、CPU cycle 等)
user_assistWindows User Assist 应用使用追踪(聚焦次数/时长、执行次数)

认证扩展的 proto 注释还给出了 auth 事件的三角色建模指引:认证来源(客户端 IP/hostname)放principal,被登录/登出的机器放target,若经第三方(如公司 SSO 记录登录 Chronicle 云服务)则 SSO 方案放intermediary

Entity:为 UDM 事件补充实体上下文

UDM 事件回答"发生了什么",而Entity(backstory/entity.proto L206-L227)回答"这个实体是谁、什么背景"。proto 注释给出了典型场景:PROCESS_LAUNCH 事件只描述用户abc@example.corp启动了进程shady.exe,却不知道该用户是近期被解雇、管理着存放财务数据的服务器的离职员工——这些上下文由一条或多条 Entity 补充。

Entity 消息结构

message Entity { EntityMetadata metadata = 1; // 实体元数据:时间戳、产品、类型 Noun entity = 2; // 该实体在 UDM 事件中对应的 Noun repeated Relation relations = 4; // 实体与其他实体的关系 google.protobuf.Struct additional = 3; // 无法形式化表达的额外数据 optional EntityRisk risk_score = 5; // 实体风险评分 Metric metric = 6; // 预计算统计指标(entity_type 为 METRIC 时使用) }

EntityMetadata:实体类型与来源

EntityMetadata(L34-L148)定义了两组关键枚举:

  • EntityType:ASSET(1)、USER(10000)、GROUP(10001)、RESOURCE(2)、IP_ADDRESS(3)、CIDR_BLOCK(9)、FILE(4)、DOMAIN_NAME(5)、URL(6)、MUTEX(7)、METRIC(8);
  • SourceType:ENTITY_CONTEXT(从客户摄取,如 AD_CONTEXT、DLP_CONTEXT)、DERIVED_CONTEXT(从客户数据推导,如 prevalence、first/last seen 统计)、GLOBAL_CONTEXT(全局上下文,如 WHOIS、Safe Browsing)。

其余字段包括product_entity_id(厂商实体 ID,如 GUID/LDAP/OID)、collected_timestamp/creation_timestampinterval(实体版本有效时间区间)、vendor_name/product_name/product_versionfeed(威胁情报源名称)、descriptionthreat(识别实体为恶意的威胁情报 SecurityResult 列表)、source_labelsevent_metadataextractedati_prioritization

AtiPrioritization:威胁情报优先级因子

AtiPrioritization(L152-L198)承载 ATI 策划规则用于计算实体优先级分数的各类因子:来自 GTI 的gti_verdict/gti_severity/gti_threat_scoremandiant_analyst_confidencegti_update_timeactive_ir(是否有 Mandiant 应急响应客户环境出现过该指标)、global_customer_count/global_hit_count(近 30 天)、exclusive(是否至多被一个威胁行为者使用)、osintscannerreviewed,以及attributed_malware/attributed_threat_actors(关联的恶意软件家族与威胁行为者,类型为SecurityResult.Association)。

Relation:实体关系建模

Relation(L230-L316)描述实体 a 与实体 b 之间的关系:

  • Relationship:OWNS、ADMINISTERS、MEMBER、EXECUTES、DOWNLOADED_FROM、CONTACTS;
  • Directionality:BIDIRECTIONAL(双向建模 a→b 与 b→a)、UNIDIRECTIONAL(单向 a→b);
  • EntityLabel:PRINCIPAL、TARGET、OBSERVER、SRC、NETWORK、SECURITY_RESULT、INTERMEDIARY——把关系中的 b 端对应回 UDM 的"名词"角色,实现事件角色与实体图谱的打通;
  • 其余字段:entity(b 端 Noun)、entity_typeuid(关系 UID)。

Metric:预计算聚合指标

Metric(L319-L629)存放实体的预计算分析数据,用于支撑"实体画像"类查询,包含:

  • AggregateFunction:MIN、MAX、COUNT、SUM、AVG、STDDEV;
  • MetricName:40 种预定义指标,如 NETWORK_BYTES_INBOUND/OUTBOUND/TOTAL、AUTH_ATTEMPTS_SUCCESS/FAIL/TOTAL、DNS_QUERIES_SUCCESS/FAIL、FILE_EXECUTIONS_SUCCESS/FAIL、HTTP_QUERIES_SUCCESS/FAIL、WORKSPACE_EMAILS_SENT_TOTAL、RESOURCE_CREATION_SUCCESS/FAIL/TOTAL 等;
  • Dimension:39 种分组维度,如 PRINCIPAL_DEVICE、TARGET_USER、PRINCIPAL_IP、TARGET_IP、PRINCIPAL_FILE_HASH、PRINCIPAL_COUNTRY、SECURITY_CATEGORY、NETWORK_ASN、DNS_DOMAIN、HTTP_USER_AGENT、LOG_TYPE 等;
  • 字段:first_seen/last_seensum_measuretotal_eventsmetric_namedimensionsexport_window,以及自定义指标的display_nameoutcome_variables/match_variables(FindingVariable 类型)与time_range

EntityRisk:实体风险评分模型

backstory/entity_risk.proto 从 entity.proto 中拆出,注释说明是为了避免 udm.proto 与 entity.proto 之间的循环依赖。EntityRisk(L37-L89)的核心字段:

字段语义
risk_version风险评分算法版本
risk_window/risk_window_size计算风险的时间窗口(如 24 小时、7 天)
risk_score原始风险分数(float)
normalized_risk_score归一化风险分数,取值 0-1000
risk_delta/raw_risk_delta归一化/原始分数较上一时间窗口的变化
detections_count窗口内构成风险分数的检测数量
first_detection_time/last_detection_time窗口内首个/最近检测时间(无检测时为空)
last_reset_timeUEBA 风险分重置去重时间戳(用于基于风险的元规则)
detail_uri指向 Google Security Operations UI 中实体风险详情页的链接(多前端路径时为相对路径)
risk_window_has_new_detections窗口内是否有新检测

RiskDelta(L92-L104)描述两个时间点之间的分数差异:previous_range_end_timerisk_score_delta(归一化分数差)、previous_risk_scorerisk_score_numeric_delta(数值差)。

Collection:检测与调查工作流的容器

Collection(backstory/collection.proto L45-L199)把事件、实体上下文元数据、检测发现元数据与调查状态装进一个容器,覆盖从"检测发现 → 调查"的完整链路,可扩展建模包含多个子发现/子事件的 incident 以及修复动作。

关键字段与枚举:

  • CollectionType(使用allow_alias):TELEMETRY_ALERT(1)、GCTI_FINDING(2)(别名 UPPERCASE_ALERT)、RULE_DETECTION(3)、MACHINE_INTELLIGENCE_ALERT(4)、SOAR_ALERT(5);
  • DetectionTimingDetails:DETECTION_TIMING_DETAILS_REPROCESSING(重处理运行)、DETECTION_TIMING_DETAILS_RETROHUNT(回溯狩猎);
  • RunFrequency:REALTIME / HOURLY / DAILY;
  • id(类型相关,规则检测时为 detection ID)、id_namespace(复用 Id.Namespace)、created_time/last_updated_timetime_window
  • collection_elements(repeated Element):构成集合的元素,每个元素内的引用共享同一关联(correlation association);
  • detection(repeated SecurityResult):检测元数据,可含规则细节、ML 模型元数据与涉及指标(用 .about 字段);
  • detection_time:多事件规则取时间窗结束时刻,单事件规则取事件时刻,迟达事件触发新告警时取事件时间;
  • investigation:调查详情(分类、状态等);
  • tagscase_name(关联的 Case 资源名,格式projects/{project id}/locations/{region}/chronicle/cases/{internal_case_id})、data_access_scope
  • SOAR 相关:soar_alertsoar_alert_metadata(源 SIEM 的 alert_id、source_rule、vendor、source_system、product、source_system_ticket_id、source_system_uri)、response_platform_info(SOAR 平台类型与告警 ID,目前支持 Siemplify);
  • 延迟度量:detection_timing_detailslatency_metrics(LatencyMetrics:oldest/newest_ingestion_time、oldest/newest_event_time、ingestion_latency,由全部贡献事件计算而非仅采样);
  • 模拟事件:simulated_event_countsimulated_event_names(通过 ingestion_labels 中 key 为 SIMULATED 的标签标记,用于验证完整检测生命周期)。

Element(L299-L329)含association(SecurityResult 关联)、references(共享关联的 UDM/Entity 引用,单个元素内只含一种类型)、labelreferences_sampled(来自 detection 的 too_many_event_samples,为真时引用数被截断到采样上限)与latency_metricsReference(L268-L297)通过 one-of 引用event(UDM)或entity,并附带idjoined_data_table_rows(关联的数据表行)、graph_enrichment(实体图谱富化:APPEND 追加或 OVERRIDE 覆盖)与log_batch_token

Data Access:数据访问标签

backstory/data_access.proto 定义安全运营场景下的数据访问控制标签:

  • DataAccessIngestionLabel:摄取标签的 key/value 对;
  • DataAccessLabelslog_types(LogType 标签列表)、namespacescustom_labels(基于 UDM 搜索语法的复杂标签)、ingestion_kv_labels(key/value 摄取标签,取代已废弃的ingestion_labels)、allow_scoped_access(标签是否已就绪以支持作用域访问)。

这些标签被 Metadata 中的base_labels(基础事件的访问标签)与enrichment_labels(富化该事件的所有上下文事件的访问标签)所引用,实现"原始事件 + 富化来源"双轨的数据访问审计。

Id:统一标识与命名空间

backstory/id.proto 提供 UDM 对象(事件、实体、集合)的统一标识。Id.Namespace用高 32 位划分标识空间:NORMALIZED_TELEMETRY(0)、RAW_TELEMETRY(1)、RULE_DETECTIONS(2)、UPPERCASE(3)、MACHINE_INTELLIGENCE(4)、SECURITY_COMMAND_CENTER(5)、UNSPECIFIED(6)、SOAR_ALERT(7)、VIRUS_TOTAL(8)。Id消息本身是便于 RPC 使用的封装(namespace+idbytes +string_id,后者用于无法转成 bytes 的字符串 ID,如de_aaaaaaaa-aaaa...形式的检测 ID),注释说明持久化场景大多应使用反规范化的完整标识。

构建与发布:多语言覆盖

backstory/BUILD.bazel 展示了这套协议族的工程化程度:

  • proto_library(name = "backstory_proto")聚合 6 个 proto,依赖//google/type:interval_proto//google/type:latlng_proto以及 protobuf 的 duration/struct/timestamp;
  • Go 产物:go_grpc_library(name = "backstory_go_proto"),importpath 为cloud.google.com/go/backstory/backstorypb(与各 proto 文件顶部的option go_package一致),并通过go_gapic_assembly_pkg生成backstory-go发布包;
  • Python 产物:py_gapic_library指定warehouse-package-name=google-backstory、transport 为grpc+rest,生成backstory-py发布包;
  • 其余语言:Java(java_gapic_assembly_gradle_pkg生成backstory-java)、PHP、Ruby、C#(package_name "Backstory")、C++ 均有对应 target;
  • backstory/backstory.yaml 声明服务名为backstory.googleapis.com、launch_stage 为 GA,并为 8 种语言统一配置了 PACKAGE_MANAGER 发布目标,说明该协议族已具备正式对外发布与消费的成熟度。

结语

从 backstory/README.md 的一句话定位出发,backstory/实际承载了一整套面向 SecOps 的公共协议:UDM 解决"多源日志如何归一化为统一事件叙事",Entity 解决"事件背后的实体背景与关系图谱",EntityRisk 解决"实体风险如何量化与追踪",Collection 解决"检测发现到调查修复的全流程建模",Data Access 与 Id 则分别解决"访问控制"与"跨命名空间标识"。这套协议族以 6 个 proto 文件相互引用(如 entity.proto 复用 udm.proto 的 Noun 与 Metadata,collection.proto 同时依赖 entity、id 与 udm),并通过 Bazel 规则面向 7 种语言产出可用代码,是理解 Google Security Operations 事件模型与检测数据结构的直接入口。

【免费下载链接】googleapisPublic interface definitions of Google APIs.项目地址: https://gitcode.com/GitHub_Trending/go/googleapis

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 18:23:21

Pentagi:渗透测试AI代理架构原理与实战搭建

1. “Pentagi”不是产品名,而是渗透测试AI代理架构的代号级命名实践 你搜“pentagi”,页面上几乎全是Docker、Neo4j、安装教程、报错日志——没有官网、没有GitHub仓库、没有文档首页。这不是一个已发布的SaaS工具,也不是某家初创公司的商业…

作者头像 李华
网站建设 2026/9/16 18:22:23

STM32 VS Code工具链四层闭环构建指南

1. 为什么STM32开发者正在集体“逃离”Keil,转向VS Code?最近三个月,我帮三个不同行业的嵌入式团队重构开发环境——一家做工业PLC的、一家做医疗手持设备的、还有一家是做智能农业传感器的。他们有个共同点:全部主动要求把原有Ke…

作者头像 李华
网站建设 2026/9/16 18:21:51

Pico+MicroPython零基础入门:从驱动安装到12行温湿度监测

1. 项目概述:为什么从 Pico MicroPython 开始硬件开发,比你想象中更值得如果你最近翻过电子爱好者论坛、刷过B站硬件区,或者只是在淘宝搜索“入门单片机”,大概率会撞见一个蓝白相间的微型电路板——Raspberry Pi Pico。它没有Wi…

作者头像 李华