信息收集简介
- 定义
- 信息收集是渗透测试和网络安全评估等活动的初始关键阶段。它是指通过各种合法手段(如网络扫描、查询公开数据库、社会工程学等),收集与目标系统(包括网络、主机、应用程序、组织等)相关的信息,这些信息有助于后续对目标系统的安全性进行分析、发现潜在漏洞以及制定攻击或测试策略。
- 重要性
- 提供基础数据:信息收集就像是搭建房子的基石。例如,在渗透测试中,只有先了解目标系统的网络架构、开放端口、运行的服务等信息,才能有针对性地寻找可能存在的漏洞。如果没有准确的信息收集,后续的漏洞扫描和利用就会像无头苍蝇一样盲目。
- 帮助理解目标环境:可以使安全人员或渗透测试人员更好地理解目标系统的全貌。比如,通过收集组织架构和人员信息,能够推测出信息系统的管理模式和可能存在的薄弱环节。对于一个企业来说,了解其内部有哪些部门使用特定的业务系统,有助于评估该业务系统被误用或攻击的风险程度。
- 发现潜在入口点:在收集信息的过程中,可能会发现一些意外的入口点。例如,通过搜索引擎发现企业某个测试服务器的未授权访问页面,这可能成为后续测试的重点突破点,因为这些容易被忽视的入口往往是安全防护的薄弱环节。
- 信息收集的范围
- 网络信息:包括目标系统的网络拓扑结构、IP 地址范围、子网掩码、网关地址等。通过网络扫描工具可以获取目标网络中有哪些主机处于活动状态,以及这些主机开放了哪些端口,如常见的 HTTP 服务的 80 端口、SSH 服务的 22 端口等,还能确定端口上运行的服务及其版本信息。
- 域名信息:主要是对目标域名进行调查。如通过 Whois 查询获取域名所有者、注册日期、过期日期、注册商等信息;通过 DNS 查询挖掘目标域名下的子域名,以及主机记录(A 记录)、别名记录(CNAME 记录)等。这些信息对于了解目标网络的层次结构和关联关系非常重要。
- 应用程序信息:对于 Web 应用等软件系统,需要收集应用的名称、版本、所使用的技术框架(如是否使用了 Spring 框架、Django 框架等)、功能模块(如用户登录注册模块、文件上传模块等)等。了解这些信息可以帮助判断应用程序可能存在的漏洞类型,例如,使用较老版本的 Web 框架可能存在已知的安全漏洞。
- 组织和人员信息:包括目标组织的架构、部门设置、主要联系人信息、员工的社交媒体信息等。这部分信息在社会工程学攻击或者评估内部人员违规操作风险时非常有用。例如,通过了解员工在社交媒体上发布的工作相关内容,可能获取到系统账号、密码等敏感线索。
为什么要进行信息收集
- 为后续攻击或测试提供基础蓝图
- 就像建筑施工前需要建筑蓝图一样,在进行网络攻击或者安全测试时,信息收集可以描绘出目标系统的架构和运行情况。通过收集网络拓扑结构、IP 地址范围、开放端口和运行服务等信息,渗透测试人员或者攻击者能够了解目标系统的 “骨架”。例如,知道目标网络中有哪些服务器、它们之间是如何连接的,就可以确定从何处入手进行进一步的探测。如果发现某个服务器开放了远程管理端口,且没有足够的安全防护措施,那么这个端口就可能成为后续攻击的一个潜在入口。
- 发现潜在的安全薄弱环节
- 信息收集能够帮助发现目标系统中可能存在的安全漏洞。通过收集应用程序的版本信息,就可以与已知的安全漏洞数据库进行对比。例如,若发现目标 Web 应用使用的是一个存在 SQL 注入漏洞的旧版本框架,那么这就是一个明显的安全隐患。同时,收集域名信息可能会发现一些被遗忘或者配置错误的子域名,这些子域名往往因为没有得到足够的重视而更容易被攻击。例如,企业可能会在升级主网站的安全防护措施时,忽略了对测试环境子域名的防护,而信息收集过程中发现这个子域名后,就可以针对其进行漏洞扫描和攻击尝试。
- 理解目标系统的运行环境和业务逻辑
- 对于复杂的系统和业务流程,了解其运行环境和业务逻辑是至关重要的。通过收集组织架构、人员信息以及业务流程相关的内容,可以推测出系统中哪些部分是关键业务区域,哪些是容易被内部人员误用或者外部攻击的环节。例如,在一个电商企业中,通过收集信息了解到订单处理系统是整个业务的核心,且涉及大量的用户数据和资金交易。同时,还发现订单处理系统的部分功能(如订单修改模块)可能因为业务需求而开放了较多的权限给客服人员。那么,这部分功能就可能成为安全防护的重点区域,因为内部人员的误操作或者外部攻击者通过社会工程学手段伪装成客服人员进行攻击的风险较高。
- 评估风险等级
- 基于收集到的信息,可以对目标系统的安全风险进行初步评估。例如,通过分析网络配置信息,发现目标系统所在的网络环境没有部署防火墙或者入侵检测系统,这就意味着系统面临的外部攻击风险较高。另外,如果收集到的数据显示系统存储了大量的敏感信息(如用户的个人身份信息、财务信息等),并且安全防护措施相对薄弱,那么一旦发生安全事件,其造成的损失将是巨大的,这种情况下风险等级就会很高。通过信息收集对风险等级的评估,可以帮助确定后续安全工作的重点方向和资源分配。
信息收集的分类
- 主动信息收集
- 定义:主动信息收集是指渗透测试人员通过主动向目标系统发送探测请求,以获取相关信息的方式。这种方式会与目标系统产生直接的交互,容易被目标系统检测到。
- 示例及技术手段
- 网络扫描:
- 使用工具如 Nmap 对目标网络进行扫描,通过发送 TCP、UDP 等协议的探测包来确定目标网络中的主机存活情况、开放端口以及端口上运行的服务和版本。例如,Nmap 的 “-sS -sV” 参数组合可以进行 TCP SYN 扫描并识别服务版本。这种扫描方式会在网络中产生大量的数据包流量,目标网络中的入侵检测系统(IDS)或防火墙可能会检测到异常的扫描行为。
- 应用程序探测:
- 对于 Web 应用,可以通过发送特定的 HTTP 请求来探测应用的架构和功能。例如,向目标 Web 服务器发送不同的 URL 请求,观察服务器的响应,从而确定是否存在某些特定的页面或功能模块。还可以通过工具如 Burp Suite 进行主动的 Web 应用扫描,向应用程序发送各种可能导致漏洞的输入(如 SQL 注入尝试、跨站脚本攻击(XSS)尝试等),以发现应用程序的安全漏洞。
- 网络扫描:
- 被动信息收集
- 定义:被动信息收集是指在不直接与目标系统进行交互的情况下,通过各种公开的信息源收集目标系统相关信息的方式。这种方式相对隐蔽,不容易被目标系统察觉。
- 示例及技术手段
- 公开信息查询:
- Whois 查询:通过查询域名注册商的数据库来获取域名的注册信息,包括域名所有者、注册日期、过期日期、注册商等。例如,访问专门的 Whois 查询网站或者使用命令行工具(如 Linux 系统中的 “whois” 命令),输入目标域名,就可以获取这些信息。这些信息可以帮助了解目标组织的基本情况,为后续的渗透测试或安全评估提供线索。
- DNS 查询:通过查询 DNS 服务器来获取域名相关的记录,如 A 记录(主机记录,将域名映射到 IP 地址)、CNAME 记录(别名记录)、MX 记录(邮件交换记录)等。可以使用工具如 nslookup 或 dig 进行 DNS 查询。挖掘目标域名下的子域名也是 DNS 查询的一个重要应用,例如,通过查询发现企业的某个测试子域名,这个子域名可能因为安全措施不完善而成为潜在的攻击入口。
- 搜索引擎利用:
- 使用搜索引擎(如 Google、Bing 等)通过高级搜索语法来查找与目标相关的信息。例如,使用 “site:[目标域名]” 语法可以搜索该域名下的所有页面,可能会发现一些未授权公开的文档、内部网络结构线索、旧版本的应用程序界面等敏感信息。另外,还可以搜索与目标组织相关的新闻、论坛帖子、社交媒体信息等,从侧面了解目标组织的业务情况、人员信息等。
- 公开信息查询:
收集那些信息
- 网络信息
- 网络拓扑结构:了解目标网络是如何布局的,包括有多少个子网、不同网段之间是如何连接的,以及关键网络设备(如路由器、交换机)的位置和连接关系。例如,通过 Traceroute 工具可以追踪数据包在网络中的路径,从而推测网络的层次结构。
- IP 地址信息:确定目标网络中的 IP 地址范围,包括内部使用的私有 IP 地址段(如 192.168.x.x、10.x.x.x 等)和对外提供服务的公有 IP 地址。同时,要收集特定服务器、网络设备的 IP 地址,这些信息对于后续的扫描和攻击定位非常重要。
- 开放端口与服务:通过网络扫描工具(如 Nmap)发现目标主机上开放的端口,例如常见的 HTTP 服务的 80 端口、HTTPS 服务的 443 端口、SSH 服务的 22 端口、FTP 服务的 21 端口等。并且要识别每个开放端口上运行的服务及其版本,因为许多安全漏洞是与特定服务版本相关的。
- 域名信息
- 注册信息:通过 Whois 查询获取域名所有者的详细信息,包括姓名、组织名称、联系电话、电子邮件地址等。还能了解域名的注册日期、过期日期和注册商。这些信息可以用于社会工程学攻击或进一步了解目标组织的背景。
- DNS 记录:包括 A 记录(将域名映射到 IP 地址)、CNAME 记录(别名记录)、MX 记录(邮件交换记录)等。挖掘子域名也很关键,例如,企业可能会有主网站域名和多个用于不同业务或测试目的的子域名,这些子域名可能存在安全漏洞而未被发现。
- 应用程序信息
- 应用名称和版本:对于 Web 应用、桌面应用或移动应用等,要确定其名称和版本号。例如,对于一个 Web 应用,通过查看页面源代码中的元数据、HTTP 响应头或者特定的版本标识页面,可以获取应用的版本。旧版本的应用程序可能存在已知的安全漏洞,需要重点关注。
- 应用架构和技术栈:了解应用程序是基于何种技术框架构建的,如 Web 应用是使用了 Spring Boot、Django 还是其他框架;数据库是采用 MySQL、Oracle 还是其他类型;前端是否使用了特定的 JavaScript 库等。这些信息有助于推测可能存在的漏洞类型。例如,使用某些特定的 JavaScript 库可能存在跨站脚本攻击(XSS)漏洞。
- 功能模块和业务逻辑:掌握应用程序有哪些功能模块,如用户登录注册、文件上传下载、订单处理等。并且要理解各个功能模块之间的业务逻辑关系,例如,在用户登录后,哪些权限被授予,这些权限如何与其他功能模块交互等。这对于发现业务逻辑漏洞很重要。
- 组织和人员信息
- 组织架构:了解目标组织的部门设置、各部门的职责范围和相互关系。例如,知道企业的 IT 部门负责哪些系统的维护,市场部门如何与客户数据交互等,有助于评估内部人员操作风险和安全管理漏洞。
- 人员联系方式和角色:收集员工的姓名、职位、电话号码、电子邮件地址等信息。这些信息可以用于社会工程学攻击,如伪装成内部员工或合作伙伴进行信息获取。同时,了解不同人员在系统中的角色(如系统管理员、普通用户、数据录入员等)有助于确定攻击的重点目标。
- 员工社交媒体信息:通过社交媒体平台收集员工发布的工作相关内容,如工作环境照片、对工作项目的抱怨等。这些信息可能会泄露一些关于系统安全的线索,如办公地点的网络设备品牌和型号、未加密的内部文件名称等。
域名介绍
- 定义与基本概念
- 域名是互联网上用于识别和定位计算机或网络服务的名称。它就像是互联网中的地址,人们通过域名来访问网站、邮件服务器等各种网络资源。例如,“baidu.com” 是百度公司网站的域名,用户在浏览器中输入这个域名,就能访问百度的网页服务。
- 域名是由一串用点分隔的字符组成,从右到左依次为顶级域名(TLD)、二级域名、三级域名等。以 “mail.example.com” 为例,“com” 是顶级域名,表示商业机构;“example” 是二级域名;“mail” 是三级域名,它可以用于特定的服务,如邮件服务。
- 域名系统(DNS)的关联
- 域名系统(DNS)是将域名和 IP 地址相互映射的分布式数据库系统。当用户在浏览器中输入域名时,计算机需要通过 DNS 来查找对应的 IP 地址,才能建立与目标服务器的连接。例如,浏览器会向本地 DNS 服务器发送请求,本地 DNS 服务器如果没有缓存该域名对应的 IP 地址,就会向上一级 DNS 服务器查询,直到找到能够解析该域名的权威 DNS 服务器,获取 IP 地址后,浏览器才能与目标服务器通信。