当前位置: 首页 > news >正文

SQL 注入与防御-第十章:确认并从 SQL 注入攻击中恢复

一、简介

SQL 注入是黑客常用攻击手段,会对组织机构声誉、经济等造成严重损害。许多机构存在 SQL 注入漏洞,可能是新应用忽视安全测试或开发生命周期缺乏安全整合所致。当黑客发现并利用漏洞时,需计算机取证专家调查、检验并响应,以遏制攻击或恢复,降低商业影响。

二、调查可疑的 SQL 注入攻击

(一)取证的合理实践

过去十余年,虽安全意识和计算机取证经验有进步,但仍有调查及证据无法被法律程序采用。若要在法庭用证据,收集和管理须有严格规则与指导原则:

  • 由接受过计算机取证培训且获机构授权的人处理调查。
  • 调查期间收集的所有文件都应镜像,创建副本用于分析,确保需要时原始镜像可用。
  • 对新建的每份文件镜像生成哈希,源文件及日志服务器日志文件也需如此。为刚创建的镜像文件(副本)也创建哈希,用如dcfldd的专业工具创建镜像,它能验证文件未受污染,还能为原始文件和新建镜像文件分别生成哈希并验证匹配。
  • 调查期间,用文档记录所有操作,包括连接数据库服务器完成的操作:保留连接时间和所用数据库语境记录;保留所有 RDBMS 执行命令记录;将标准输出(stdout)从数据库客户端控制台重定向到文本文件(主流 RDBMS 客户端重定向命令见表 10 - 1)。
  • 确保所有证据写入无毒存储介质,并存放在安全地方(如储物柜或保险箱)。
  • 维护监管链(Chain of Custody)文档,跟踪收集的所有证据,从被防护时间到在执行案某个调查期间的移动、存放位置和所有者。

(二)分析数字化证据

数字化证据(digital artifact)范围很广,包括操作系统中 Web 服务器的日志文件、内存中的信息及 RDBMS 内核中的信息等。调查 SQL 注入攻击时,Web 服务器日志、数据库执行计划、事务日志(transaction log)和数据库对象的时间戳(timestamp)是最有效的证据。

1. Web 服务器日志文件

Web 服务器作为交互层,接收用户输入并传递给后台应用程序,通常维护持久日志文件,记录页面请求历史和请求处理后的输出状态。系统管理员可定制日志记录信息,主流 Web 服务器产品默认启用基本信息日志记录。表 10 - 2 列出了对调查 SQL 注入攻击最有用的 Web 服务器日志属性,这些信息对分析日志文件中的数据至关重要。默认情况下,Web 服务器以文本文件方式存储日志数据,因大 Web 服务器日志文件(含大量兆字节数据),用日志分析工具(如 Microsoft 开发的 Log Parser,支持 IIS 和 Apache 日志文件格式)分析更高效,能快速精确用 SQL 分析庞大日志文件。可通过分析 Web 服务器日志,查找 Web 请求带宽利用率异常偏高的日志文件,还可分析页面每天命中次数、某天某个 IP 命中次数等,识别可疑访问(如含恶意 SQL 注入语法的查询参数)。

2. 数据库执行计划

数据库执行计划是 RDBMS 生成的执行步骤列表,说明 RDBMS 访问或修改信息时效率最高的方式。查询第一次到数据库服务器时,服务器会解析、分析查询,确定需访问的表、使用的索引(若存在)及连接(join)或合并(merge)结果集等,分析结果存在存储结构中即执行计划。执行期间,数据库内部组件可共享这些计划,相同计划可存储在内存区域(执行计划缓存),接收类似查询时,可用缓存的执行计划。数据库执行计划能提供接收到的实际查询语句(包括攻击中攻击者终止的代码),而 Web 服务器和防火墙日志可能忽略这些数据。不同 RDBMS 对执行计划的缓存机制不同,较高版本的 Microsoft SQL Server 和 Oracle RDBMS 用这种机制,MySQL 和 PostgreSQL 没有保护敏感信息缓存的机制,会将敏感信息记录在普通日志文件和二进制日志文件中,调查期间收集的所有信息都必须加密处理。可通过执行计划查询的副本分析,识别应用程序中被攻击的 Web 页面和可执行文件、攻击的时间和源 IP 地址等,确认攻击企图是否成功。

3. 事务日志

事务日志(transaction log)由子元素组成,包括子句、查询和语句,语句包含一个或多个数据库操作,分数据操作语言(DML,作用于表内数据)和数据定义语言(DDL,作用于数据库结构)。事务日志用于记录事务开始及恢复所需信息,若数据库将信息写入硬盘失败,可利用恢复信息将数据回到一致状态。事务日志中的信息会用于实际数据页写入磁盘,虽写入非实时,但速度快。几乎所有操作(无论归类为 DML 还是 DDL)都可归结为 INSERTUPDATEDELETE 操作,需要写入、更新或删除磁盘上的信息时,用这 3 种操作实现。攻击者执行修改表数据的 SQL 语句时,相应事务会在事务日志中留下痕迹,即使攻击者执行 SELECT 语句,若 RDBMS 在返回结果前对中间结果排序,也会在事务日志中创建与临时表创建和加载相关的条目。事务日志分析是深入且内容广泛的主题,重点介绍支持调查取证的关键事务:

  • 可疑攻击时间段内执行的 INSERTUPDATEDELETE 语句,该信息可用于标识调查时间段内执行的活动及相关事件的其他痕迹。
  • 数据库用户执行的非标准数据库操作(如普通从数据库读取信息的应用程序用户账号突然执行 INSERTUPDATEDELETE 语句)。

三、不同数据库的恢复与调查要点

(一)Microsoft SQL Server

默认情况下,事务日志功能启用且无法禁用,可使用原生的 fn_dblog 函数访问事务日志。可通过查询事务日志,获取如 Spid(分配给执行事务日志记录连接的唯一标识符)、Transaction ID(用于分组相关事务的唯一标识)、Login_or_User(执行事务的数据库服务器登录账号或数据库用户账号)、Transaction Type(执行事务的类型描述)、Begin Time(执行事务的时间)等信息,识别可疑操作(如用 EXEC 命令将数据 INSERT 到表中)。

(二)Oracle

事务(归档)日志默认启用,测试系统也无法禁用。可通过查询返回已执行的 INSERTUPDATEDELETE 操作列表,例如:

SELECT OPERATION, SQL_REDO, SQL_UNDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'WEBRPT' AND SEG_NAME = 'SYNGRSS' AND (

文章转载自:

http://kJaeET3i.ypjjh.cn
http://IDN6lnd7.ypjjh.cn
http://KKJNGbyZ.ypjjh.cn
http://NCK98hf7.ypjjh.cn
http://1FGnNh6q.ypjjh.cn
http://Mg3wEMQm.ypjjh.cn
http://KU2dJR0p.ypjjh.cn
http://ErwL35ip.ypjjh.cn
http://G5hV15H5.ypjjh.cn
http://5kjwDfsO.ypjjh.cn
http://RVDEP5FI.ypjjh.cn
http://0FFataVl.ypjjh.cn
http://h3TGChmA.ypjjh.cn
http://94zNtPD1.ypjjh.cn
http://PnIVoHqS.ypjjh.cn
http://TtpWmYIS.ypjjh.cn
http://jF7W3nK1.ypjjh.cn
http://zrnmvef0.ypjjh.cn
http://b2tHKPRp.ypjjh.cn
http://yNv8DARF.ypjjh.cn
http://37NbAgsk.ypjjh.cn
http://2aXyUota.ypjjh.cn
http://8AMqRgFR.ypjjh.cn
http://51KskAyP.ypjjh.cn
http://ad9VMftV.ypjjh.cn
http://5XHgFz98.ypjjh.cn
http://9ZodUY7a.ypjjh.cn
http://TialiqEl.ypjjh.cn
http://xdJp9A7g.ypjjh.cn
http://w2LISrRS.ypjjh.cn
http://www.dtcms.com/a/374209.html

相关文章:

  • MCP(模型上下文协议)入门教程1
  • 已知两个平面点的坐标、切线方向、曲率,构造三阶Bezier曲线的方法
  • STM32添加库函数
  • Python 示例(Tkinter)
  • 学习如何基于ACP-SDK构建多智能体系统
  • Dify 从入门到精通(第 83/100 篇):Dify 的多模态模型性能调优(高级篇)
  • 【docker】镜像制作
  • 前端安全攻防:XSS, CSRF 等防范与检测
  • Unity鱼眼特效
  • MySQL表结构优化:安全删除字段(DROP COLUMN)的完整指南与避坑手册
  • Java全栈技术选型指南
  • Leptos框架深度解析:用Rust构建高性能Web应用的未来
  • 嵌入式学习day45-硬件—汇编
  • Gazebo1: gz命令工具理解与掌握
  • 电路运行的核心-RTC
  • 高并发下的锁选择:乐观锁 vs 悲观锁全面对比
  • 本地部署大模型和知识库实现问答AI
  • python编程:一文掌握pypiserver的详细使用
  • 【人工智能99问】开源项目RAGflow_by_infiniflow介绍(37/99)
  • Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题​之一
  • 一种高效绘制余晖波形的方法Qt/C++
  • 本地部署的Qwen3,测试不同数量并发请求的吞吐量
  • 【从零开始java学习|第十三篇】字符串究极知识总结
  • Linux内核进程管理子系统有什么第四十六回 —— 进程主结构详解(42)
  • Kafka 与 RocketMQ 核心概念与架构对比
  • 【检索通知】2025年IEEE第二届深度学习与计算机视觉国际会议检索
  • 2025年AC-DC电源模块选购指南与应用方案解析
  • LeetCode 面试经典 150 题:删除有序数组中的重复项 II(最多保留 2 次 + 通用 k 次解法详解)
  • 在OpenHarmony上适配图形显示【2】——调试display hdi的技巧
  • 在 JavaScript 中轻松实现 AES 加密与解密:从原理到实战