目前现货有太岁符(2025太岁:蛇、虎、猴、猪)、平安符(通用)、增财符,均有师傅开光加持能量发货
买手作产品,送精品安全学习资源,有需要联系教父微信,购买后拉群,国外资源部分目录
各类SRC报告
各类资源
汽车部件安全测试
比特币密码破解研究
最新CISSP题库
国外经典攻防案例场景方案
安全审计资料(甲方必备)
AI结合网络安全进行流量监测
APT免杀
应急响应资料
欧盟数据安全认证(甲方必备)
高级免杀资料
智能设备攻击新型手法
NIST2.0框架落地(甲方必备)
工业安全渗透测试
Devops
数字取证
EDR绕过
仅列举部分资料,完整版可购买手作资源获取
手动寻找漏洞的局限性
多年来,手动漏洞搜寻一直是道德黑客攻击的一个基本方面。熟练的网络安全专业人员会仔细检查应用程序,以发现自动化工具可能遗漏的漏洞。然而,随着技术变得越来越复杂,网络威胁越来越复杂,手动漏洞搜寻的局限性也变得越来越明显。
由于深入分析需要付出大量努力,因此手动查找漏洞非常耗时。您必须一丝不苟地测试不同的系统配置和系统行为,这可能非常耗费人力。现代应用程序通常涉及复杂的架构,包括微服务、API 和第三方集成,因此个人手动检查每个组件是不切实际的。这种大量的时间投入可能会导致漏洞发现延迟,从而导致威胁响应缓慢。漫长的手动分析过程可能会推迟关键安全问题的识别,增加风险窗口并为攻击者提供更多利用漏洞的机会。
人为错误是手动漏洞搜寻中不可避免的因素。由于认知限制,例如做出假设或专注于熟悉的攻击媒介而忽略其他媒介,您可能会忽略漏洞。在长时间的手动测试中,可能会出现疲劳和注意力不集中,导致注意力下降和漏掉缺陷。知识差距也会导致疏忽,因为没有人能够全面了解各种技术中的所有潜在漏洞。
目前,许多人将许多漏洞赏金活动自动化,以了解 HackerOne、Bugcrowd、Intigriti 等平台上的新漏洞赏金。例如,您可以使用 Nuclei 扫描任何 HackerOne 程序(漏洞赏金)。
Nuclei 是由 ProjectDiscovery 开发的开源漏洞扫描程序,以其速度、效率和可定制性而闻名。它使用基于模板的方法,YAML 文件定义了检测各种目标(包括 Web 应用程序、云基础设施和网络)漏洞的方法。
https://github.com/vavkamil/h1_2_nuclei
为了克服手动漏洞搜寻的局限性,您应该使用超越漏洞扫描器和传统黑客工具的自动化技术。利用人工智能和机器学习可以大大提供帮助。您可以采用将手动测试与自动化工具相结合的混合测试方法,以提供更全面的安全评估。在以下部分中,我们将探讨在漏洞搜寻中使用人工智能的优点和局限性。
人工智能驱动的漏洞搜寻自动化
您可能听过“天空才是极限”这句话。当谈到使用人工智能进行漏洞赏金搜寻时,这句话再准确不过了。人工智能的可能性令人惊叹,而且人工智能有可能彻底改变漏洞的检测和利用方式。
图 11-1说明了漏洞赏金工作流实体之间的关联简化层次结构。
层次结构的顶部是 Bug 赏金平台,例如 Bugcrowd、HackerOne、Intigriti 等。接下来,计划是公司或组织在平台上提供的特定漏洞赏金计划。例如,一家公司可以与 Bugcrowd 一起建立一个计划,让研究人员测试他们的 Web 应用程序是否存在漏洞。
根域代表程序的主要域或范围。例如,如果公司的主网站是websploit.org,则这将是错误测试范围内的根域。程序通常会列出哪些根域属于测试范围。
根域名下是子域名,它们是网站更具体的区域(例如api.websploit.org或admin.websploit.org)。漏洞赏金计划可能会指定哪些子域名属于范围的一部分,因为某些子域名可能会公开不同的服务或应用程序。
IP 地址代表网络层,子域名在此层解析为一个或多个 IP 地址。这允许道德黑客探测可能存在漏洞的网络级配置、服务和开放端口。
URL 代表子域内的特定网页或 API 端点。这些 URL 可能包含参数、身份验证机制或其他输入,黑客可以利用这些输入来测试 XSS 或 SQL 注入等漏洞。
端口表示 IP 地址上可能开放并可能暴露服务的特定网络端口。例如,通常会测试端口 80 (HTTP) 和端口 443 (HTTPS)。
假设您现在想要使用 AI 代理自动执行这些任务的发现、扫描、枚举和处理。您可以使用 LangGraph 和 LangGraph Studio 等平台创建代理,以低代码要求帮助加速这些任务。让我们看一下图 11-2中的图表。
图 11-2表示漏洞赏金计划中用于自动侦察和漏洞检测的自动化系统的构建模块的架构。
平台表代表各种漏洞赏金平台,例如 Bugcrowd、HackerOne 和类似平台。以下是平台字段:
• id:每个平台的唯一标识符(主键)
• name:平台名称(例如 Bugcrowd、HackerOne)
程序表表示不同组织在平台上运行的单个漏洞赏金计划。每个程序都指定了识别和报告漏洞的范围和规则。这些是平台下列出的特定漏洞赏金。以下是程序字段:
• id:每个程序的唯一标识符(主键)
•名称:漏洞赏金计划的名称
• platformId:将程序链接到特定平台的外键
根域是漏洞赏金计划范围内的主要域。每个计划可能涵盖一个或多个允许您测试的根域。以下是根域字段:
• id:每个根域的唯一标识符(主键)
• name:根域名(例如websploit.org)
• programId:将根域链接到特定漏洞赏金计划的外键
这些是根域下的子域,它们也属于漏洞赏金的范围。像websploit.org这样的根域可能具有子域(例如api.websploit.org),它们属于同一漏洞测试范围。以下是子域字段:
• id:每个子域的唯一标识符(主键)
•名称:子域名的名称
• rootDomainId:将子域链接到特定根域的外键
IPs表存储与子域关联的 IP 地址。这些 IP 地址是可能被探测漏洞(例如开放端口、服务和错误配置)的目标。以下是IPs表中的字段:
• id:对应子域名的每个 IP 地址的唯一标识符
•地址:子域名的 IP 地址
• subdomainId:将 IP 地址链接到特定子域的外键
端口表包含有关特定 IP 地址上的开放端口的信息。识别开放端口对于了解目标上运行的服务至关重要,这可能会揭示漏洞,例如配置错误或敏感服务暴露。以下是端口的字段:
• id:每个端口的唯一标识符
• number:端口号(例如 80、443、22)
• ipId:将端口链接到特定 IP 的外键
URL表跟踪子域内可能需要进一步检查是否存在 XSS、CSRF 或 SQL 注入等漏洞的特定网址。以下是 URL 字段:
• id:每个 URL 的唯一标识符
• address:具体的 URL 地址(例如https://api.websploit.org/login)
• ipId:将 URL 链接到特定 IP 地址的外键
漏洞表存储了在漏洞搜寻过程中发现的特定漏洞的信息。这是此自动化系统的核心元素之一,因为它代表了道德黑客和漏洞搜寻工作的成果。以下是 URL 字段:
• id:每个漏洞的唯一标识符(主键)
•描述:漏洞的文本描述(例如“登录页面中的 SQL 注入”)。
• ipId:将漏洞与特定 IP 关联的外键
人工智能如何帮助寻找此架构中的漏洞?人工智能可以将不同组件(例如 IP、URL、标记的漏洞和开放端口)之间的信息关联起来,从而绘制出潜在攻击面的完整图景。它甚至可以分析其他扫描对类似应用程序的历史数据。人工智能可以根据系统类型、配置或过去的利用数据预测哪些服务或端口更有可能存在安全漏洞。
通过扫描和分析 URL、参数和请求-响应模式,可以训练 AI 模型来识别常见的 Web 漏洞,例如 XSS 或 SQL 注入。AI 可以自动识别恶意输入或输出行为,从而提高检测准确性并减少误报。
人工智能可以使用预测模型来识别域名命名约定中的模式,从而加速子域名枚举,自动建议潜在的子域名或以前未被发现的目标。人工智能驱动的 DNS 侦察工具可以通过交叉引用 DNS 历史记录和证书中的大型数据集来快速发现链接到根域的新子域名。
如果我们将图 11-2的解释交给Cursor、GitHub Copilot 或 OpenAI 的模型(如 o1)等工具,结果会怎样?我使用了 OpenAI 的 o1,它创建了使用对象关系映射 (ORM) 库 SQLAlchemy 的 Python 代码。示例 11-2显示了 Python 代码。此外,该代码还包括处理和与数据交互的函数,例如添加记录和查询漏洞。
例 11-2 AI 生成的代码实现数据库以支持图 11-2的用例
from sqlalchemy import (
create_engine, Column, Integer, String, ForeignKey, Text, UniqueConstraint
)
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base
# Define the database
engine = create_engine('sqlite:///bug_bounty.db')
Base = declarative_base()
# Define the platforms
class Platform(Base):
__tablename__ = 'platforms'
id = Column(Integer, primary_key=True)
name = Column(String, unique=True)
programs = relationship('Program', back_populates='platform')
class Program(Base):
__tablename__ = 'programs'
id = Column(Integer, primary_key=True)
name = Column(String)
platform_id = Column(Integer, ForeignKey('platforms.id'))
platform = relationship('Platform', back_populates='programs')
root_domains = relationship('RootDomain', back_populates='program')
class RootDomain(Base):
__tablename__ = 'root_domains'
id = Column(Integer, primary_key=True)
name = Column(String)
program_id = Column(Integer, ForeignKey('programs.id'))
program = relationship('Program', back_populates='root_domains')
subdomains = relationship('Subdomain', back_populates='root_domain')
class Subdomain(Base):
__tablename__ = 'subdomains'
id = Column(Integer, primary_key=True)
name = Column(String)
root_domain_id = Column(Integer, ForeignKey('root_domains.id'))
root_domain = relationship('RootDomain', back_populates='subdomains')
ips = relationship('IP', back_populates='subdomain')
class IP(Base):
__tablename__ = 'ips'
id = Column(Integer, primary_key=True)
address = Column(String)
subdomain_id = Column(Integer, ForeignKey('subdomains.id'))
subdomain = relationship('Subdomain', back_populates='ips')
ports = relationship('Port', back_populates='ip')
urls = relationship('URL', back_populates='ip')
vulnerabilities = relationship('Vulnerability', back_populates='ip')
class Port(Base):
__tablename__ = 'ports'
id = Column(Integer, primary_key=True)
number = Column(Integer)
ip_id = Column(Integer, ForeignKey('ips.id'))
ip = relationship('IP', back_populates='ports')
class URL(Base):
__tablename__ = 'urls'
id = Column(Integer, primary_key=True)
address = Column(String)
ip_id = Column(Integer, ForeignKey('ips.id'))
ip = relationship('IP', back_populates='urls')
class Vulnerability(Base):
__tablename__ = 'vulnerabilities'
id = Column(Integer, primary_key=True)
description = Column(Text)
ip_id = Column(Integer, ForeignKey('ips.id'))
ip = relationship('IP', back_populates='vulnerabilities')
# Create all tables
Base.metadata.create_all(engine)
# Create a session
Session = sessionmaker(bind=engine)
session = Session()
# Functions to process data
def add_platform(name):
platform = Platform(name=name)
session.add(platform)
session.commit()
print(f"Added platform: {name}")
def add_program(name, platform_name):
platform = session.query(Platform).filter_by(name=platform_name).first()
if not platform:
print(f"Platform {platform_name} not found.")
return
program = Program(name=name, platform=platform)
session.add(program)
session.commit()
print(f"Added program: {name} under platform {platform_name}")
def add_root_domain(name, program_name):
program = session.query(Program).filter_by(name=program_name).first()
if not program:
print(f"Program {program_name} not found.")
return
root_domain = RootDomain(name=name, program=program)
session.add(root_domain)
session.commit()
print(f"Added root domain: {name} under program {program_name}")
def add_subdomain(name, root_domain_name):
root_domain =
session.query(RootDomain).filter_by(name=root_domain_name).first()
if not root_domain:
print(f"Root domain {root_domain_name} not found.")
return
subdomain = Subdomain(name=name, root_domain=root_domain)
session.add(subdomain)
session.commit()
print(f"Added subdomain: {name} under root domain {root_domain_name}")
def add_ip(address, subdomain_name):
subdomain =
session.query(Subdomain).filter_by(name=subdomain_name).first()
if not subdomain:
print(f"Subdomain {subdomain_name} not found.")
return
ip = IP(address=address, subdomain=subdomain)
session.add(ip)
session.commit()
print(f"Added IP: {address} under subdomain {subdomain_name}")
def add_port(number, ip_address):
ip = session.query(IP).filter_by(address=ip_address).first()
if not ip:
print(f"IP {ip_address} not found.")
return
port = Port(number=number, ip=ip)
session.add(port)
session.commit()
print(f"Added port: {number} to IP {ip_address}")
def add_url(address, ip_address):
ip = session.query(IP).filter_by(address=ip_address).first()
if not ip:
print(f"IP {ip_address} not found.")
return
url = URL(address=address, ip=ip)
session.add(url)
session.commit()
print(f"Added URL: {address} to IP {ip_address}")
def add_vulnerability(description, ip_address):
ip = session.query(IP).filter_by(address=ip_address).first()
if not ip:
print(f"IP {ip_address} not found.")
return
vulnerability = Vulnerability(description=description, ip=ip)
session.add(vulnerability)
session.commit()
print(f"Added vulnerability to IP {ip_address}: {description}")
def get_vulnerabilities_by_program(program_name):
program = session.query(Program).filter_by(name=program_name).first()
if not program:
print(f"Program {program_name} not found.")
return []
vulnerabilities =
session.query(Vulnerability).join(IP).join(Subdomain).join(RootDomain).filter
(
RootDomain.program == program
).all()
return vulnerabilities
# Example usage
if __name__ == '__main__':
# Add data
add_platform('HackerOne')
add_program('Acme Corp Bug Bounty', 'HackerOne')
add_root_domain('acme.com', 'Acme Corp Bug Bounty')
add_subdomain('api.acme.com', 'acme.com')
add_ip('192.168.1.1', 'api.acme.com')
add_port(80, '192.168.1.1')
add_port(443, '192.168.1.1')
add_url('https://api.acme.com/login', '192.168.1.1')
add_vulnerability('SQL Injection in login page', '192.168.1.1')
# Retrieve vulnerabilities for a program
vulns = get_vulnerabilities_by_program('Acme Corp Bug Bounty')
for vuln in vulns:
print(f"Vulnerability ID: {vuln.id}, Description: {vuln.description}")
示例 11-2中的代码为您的自动化系统提供了基础结构。您可以通过添加更多处理功能、集成实际侦察工具和实施漏洞扫描方法来扩展它。
漏洞赏金平台的 AI 功能
Bugcrowd 等漏洞赏金平台都在利用 AI 来增强服务、简化运营并为客户提供更多安全解决方案。AI 与这些平台的集成实现了持续监控、自动漏洞检测和智能威胁分析等功能。Bugcrowd 有一项由 AI 驱动的服务,称为持续攻击面渗透测试 (CASPT)。
CASPT 使用 AI 模型持续扫描和识别组织数字足迹中的新资产或修改资产。这项工作包括检测自上次评估以来可能已添加或更改的新应用程序、服务或基础设施组件。
通过分析历史数据,AI 可帮助确定组织攻击面的基线。然后,它会监控偏差或变化,确保及时发现修改引入的任何新漏洞。基于对资产的持续监控,AI 可确定启动渗透测试的最佳时间。通过这样做,它可以确保测试既及时又相关,重点关注风险最高或最近发生变化的领域。
Bugcrowd 收购了一家名为 Informer 的公司,这使其具备了先进的外部攻击面管理 (EASM) 功能。AI 算法将来自 Informer 的详细资产信息与 Bugcrowd 现有的漏洞数据库合并。您可以直接从 EASM 仪表板启动新的渗透测试,AI 负责管理集成并确保测试与攻击面的当前状态保持一致。
全面了解组织的外部风险敞口
组织的攻击面远远超出了显而易见的范围。现代典型的生态系统包括 Web 域、子域、IP 地址、云服务、数百个应用程序(包括 AI 应用程序)的 API 等,每个都可能成为攻击者的切入点。自动化外部攻击面管理的第一步是了解对手可能利用的已知和未知资产。人工智能工具可以扫描、映射和清点这些资产,为您提供“攻击者的视角”。
图 11-3说明了外部攻击面发现和利用的流程或框架。该图由同心圆构成,可以表示流程中的不同层或步骤。每一层都与四个核心概念之一相关:发现资产、监控变化、获取可操作的见解和扩大安全测试。
第一个目标是找到并识别可能成为组织足迹一部分的所有外部资产(已知和未知)。然后,您要持续关注外部基础设施或应用程序中的任何更改或更新,确保不会忽视任何新的暴露。随后,您将通过监控收集的数据转化为有意义的见解,您可以使用这些见解制定攻击计划。您可以将此过程与红队、渗透测试和众包漏洞赏金计划相结合。
使用人工智能进行漏洞优先级排序
AI 可以根据潜在的可利用性和风险帮助确定漏洞的优先级。通过分析通用漏洞评分系统 (CVSS) 评分、受影响的服务、历史漏洞数据和业务影响等因素,AI 可以帮助安全团队首先关注最关键的漏洞。
让我们首先定义 CVSS、漏洞预测评分系统 (EPSS) 和 CISA 的已知利用漏洞 (KEV) 目录,然后研究 AI 如何使用这些系统协助进行漏洞优先级排序。
快速回顾 CVSS、EPSS 和 CISA 的 KEV
CVSS 是一个开放框架,用于传达软件漏洞的特征和严重程度。它提供了一种方法来捕获漏洞的主要技术特征并生成反映其严重程度的数字分数(0-10)。然后可以将 CVSS 分数转换为定性表示(例如低、中、高和严重),以帮助组织正确评估和确定其漏洞管理流程的优先级。您可以在https://www.first.org/cvss上访问最新的 CVSS 规范。
CVSS 由四个指标组组成:基本指标、威胁指标、环境指标和补充指标。基本指标表示漏洞的内在性质。威胁指标组表示与潜在威胁相关的漏洞特征,这些特征可能会随着时间的推移而演变,但在不同的用户环境中可能保持一致。
环境指标组捕获漏洞的特定特征,这些特征与单个消费者的环境相关。这包括诸如是否存在可以减少或消除成功攻击影响的安全控制措施,以及受影响系统在整个技术基础设施中的重要性等因素。补充指标组由提供额外背景信息并衡量漏洞外部属性的指标组成。这些指标的答案由 CVSS 消费者定义,使他们能够使用针对其环境量身定制的风险分析系统,为指标和值分配本地相关的严重性。
EPSS 是一项数据驱动的工作,用于估计软件漏洞在野外被利用的概率。与侧重于漏洞技术严重性的 CVSS 不同,EPSS 旨在根据真实数据和机器学习技术预测漏洞被利用的可能性。您可以在https://www.first.org/epss上访问最新的 EPSS 规范。
以下是 EPSS 的一些主要特点:
• 提供 0 到 1(0% 到 100%)之间的概率分数
• 使用当前威胁信息和真实世界漏洞数据
• 根据新信息每日更新分数
• 帮助根据漏洞利用可能性(而非技术严重性)确定漏洞的优先级
KEV 目录由网络安全和基础设施安全局 (CISA) 维护,是已在野利用的漏洞的权威来源。它旨在帮助组织优先考虑造成重大风险的漏洞的修复工作。您可以通过 https://www.cisa.gov/kev 访问 CISA 的KEV。
KEV 重点关注已知漏洞代码或主动利用的漏洞,并为每个漏洞提供补救截止日期。随着新漏洞的发现,此列表会定期更新。
AI 如何帮助漏洞猎人和组织使用 CVSS、EPSS 和 KEV 对漏洞进行优先排序
AI 可以帮助整合来自 CVSS、EPSS 和 KEV 以及其他相关来源的数据,从而全面了解漏洞风险。机器学习算法可以分析这些数据,以识别人类可能忽略的模式和相关性,从而更细致地了解漏洞优先级。图 11-4显示了如何构建 AI 系统,使用来自 CVSS、EPSS 和 KEV 的数据大规模分析和确定漏洞优先级。
通过利用 CVSS、EPSS 和 KEV 的历史数据,AI 可以开发预测模型来估计未来漏洞利用的可能性。在确定漏洞优先级时,AI 可以考虑组织或漏洞猎人环境的具体背景。通过分析组织的网络架构、部署的资产和安全控制等因素,您可以使用 AI 为您的客户提供量身定制的优先级建议,这些建议超越了通用的 CVSS 或 EPSS 分数。
支持 AI 的系统可以持续监控威胁情报源,包括 KEV 目录的更新,并根据新信息自动调整漏洞发现优先级。您可以利用具有 NLP 功能的 GenAI 来分析漏洞描述、安全公告和论坛中的漏洞讨论,以提取其他上下文和严重性指标。这些信息可用于优化优先级,超越 CVSS、EPSS 和 KEV 在数字上提供的内容。
通过分析从 CVSS 评分发展到 EPSS 高概率再到 KEV 列表的漏洞的特征,您可以预测哪些新发现的漏洞最有可能遵循类似的路径。此分析可以帮助确定可能尚未获得高 EPSS 评分或 KEV 条目但具有表明它们可能很快变得至关重要的特征的漏洞的优先级。
根据漏洞类型和目标系统,AI 可以生成基本的漏洞利用模板或代码框架,然后道德黑客可以对其进行改进和定制。AI 可以解析和分析大量技术文档、API 和代码注释,以识别可能被利用的潜在弱点或意外功能。
使用 CISA 的 KEV 目录和其他信息进行 AI 辅助漏洞开发
人工智能系统可以将已知的漏洞利用技术应用到新环境或略有不同的软件版本中,帮助测试漏洞的严重程度。人工智能助手可以与人类研究人员一起工作,在漏洞利用开发过程中提供建议、检查错误并提供相关信息。
人工智能创建的扫描仪模板
ProjectDiscovery Nuclei Scanner 是一款快速且可扩展的开源漏洞扫描器,旨在识别和缓解现代应用程序、基础设施、云平台和网络中的安全漏洞。
Nuclei 采用模板驱动方法,其中每个模板都是一个 YAML 文件,定义检测特定漏洞所需的步骤。这种方法允许高度可定制和有针对性的扫描。它还支持庞大的社区精选模板库,这些模板会不断更新以包含许多系统中的最新漏洞。
ProjectDiscovery 云平台 (PDCP) 是一种基于云的安全解决方案,旨在通过识别可利用的漏洞和错误配置,提供对外部攻击面的持续可见性。它旨在解决多种用例,并可以扩展以支持漏洞赏金猎人和安全团队查找漏洞所需的基本工作流程。您可以通过https://cloud.projectdiscovery.io访问 PDCP 。
图 11-5显示了 PDCP 仪表板。
图 11-5 PDCP 仪表板
如前所述,Nuclei 支持庞大的社区精选模板库。图 11-6显示了社区模板的示例。
图 11-6 未使用私有端点的 Azure OpenAI 服务实例的社区模板
图 11-6中的 Nuclei 模板旨在识别未配置为使用私有端点的 Azure OpenAI 服务实例。它强调未能使用私有端点可能会使 OpenAI 服务实例暴露于外部攻击。
图 11-7是 ProjectDiscovery 云平台的界面,可以使用 AI 创建 Nuclei 模板。在此示例中,界面显示了与不安全的直接对象引用 (IDOR) 漏洞相关的漏洞扫描模板。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...