Skipfish扩展开发自定义签名与安全检查模块编写终极指南【免费下载链接】skipfishWeb application security scanner created by lcamtuf for google - Unofficial Mirror项目地址: https://gitcode.com/gh_mirrors/sk/skipfishSkipfish是一款由Google开发的快速、全面的Web应用安全扫描器专为安全专业人员设计。作为一款主动的Web应用安全侦察工具Skipfish通过执行递归爬取和基于字典的探测来为目标站点准备交互式站点地图然后使用一系列主动安全检查对结果地图进行注释。本文将深入探讨如何扩展Skipfish的核心功能特别是自定义签名和安全检查模块的开发。 为什么需要自定义Skipfish签名Skipfish的签名系统是其最强大的功能之一采用类似Snort的语法来检测Web应用漏洞、信息泄露和识别特定的Web应用。默认情况下Skipfish已经包含了许多预定义的签名但现实世界的安全测试往往需要针对特定应用或技术的自定义检测规则。自定义签名的核心价值针对性检测- 针对特定的Web框架、CMS或自定义应用漏洞快速识别- 检测新发现的漏洞或特定攻击向量企业环境适配- 针对内部应用的特定错误消息或信息泄露技术栈监控- 识别特定的技术版本或配置问题️ Skipfish签名系统架构解析在开始编写自定义签名之前让我们先了解Skipfish的签名系统架构。签名文件位于signatures/目录下主要包括signatures.conf- 主配置文件包含所有签名文件的引用apps.sigs- 检测有趣的应用程序/页面context.sigs- 与注入测试相关的上下文签名files.sigs- 基于内容识别有趣文件messages.sigs- 检测有趣的服务器错误消息mime.sigs- 检测有趣的MIME类型签名数据结构查看src/signatures.h文件我们可以看到签名的核心数据结构struct signature { u32 id; /* 唯一ID */ u8* memo; /* 匹配时显示的消息 */ u8 severity; /* 严重性等级 */ u32 prob; /* 问题ID */ u8* mime; /* 匹配的MIME类型 */ u8* header; /* 匹配的HTTP头 */ u32 rcode; /* 匹配的HTTP响应代码 */ u32 content_cnt; /* 内容结构数量 */ u32 check; /* 检查ID */ u8 report; /* 报告频率 */ u8 proto; /* 协议类型 */ struct signature *depend; /* 依赖的签名 */ struct content_struct* content[MAX_CONTENT]; /* 内容匹配结构 */ }; 自定义签名编写实战基础签名语法Skipfish签名使用分号分隔的键值对格式。让我们看一个简单的例子# 检测phpinfo()页面 id:11001; sev:3; content:titlephpinfo()/titlemeta name; depth:2048; \ memo:phpinfo() page;签名关键字详解id- 签名的唯一标识符必需content- 要匹配的内容字符串支持正则表达式memo- 匹配时显示的消息必需sev- 严重性等级1高2中3低4信息depth- 搜索内容的深度限制offset- 搜索起始偏移量nocase- 不区分大小写匹配type- 匹配类型regex或staticmime- 匹配特定的MIME类型header- 在HTTP头中匹配depend- 依赖其他签名report- 报告频率once或always实战示例1检测特定Web框架假设我们要检测Django框架的特定版本可以创建如下签名# 检测Django框架 id:30001; sev:4; content:Django; depth:512; \ content:version; depth:100; \ memo:Django framework detected; # 检测特定版本的Django依赖第一个签名 id:30002; sev:2; depend:30001; \ content:Django 1.11; depth:512; \ memo:Outdated Django 1.11 detected - contains security vulnerabilities;实战示例2检测敏感信息泄露# 检测API密钥泄露 id:30003; sev:2; content:api_key; depth:1024; \ content:[A-Za-z0-9]{32,64}; depth:100; type:regex; \ memo:Potential API key exposure; # 检测数据库连接字符串 id:30004; sev:3; content:mysql://; depth:2048; \ content:; depth:100; \ memo:Database connection string exposed;实战示例3检测特定漏洞# 检测Spring Framework RCE漏洞 id:30005; sev:1; content:class.module.classLoader; depth:1024; \ content:Spring Framework; depth:512; \ memo:Potential Spring Framework RCE vulnerability (CVE-2022-22965); # 检测Log4j漏洞相关特征 id:30006; sev:1; content:${jndi:; depth:2048; nocase; \ memo:Potential Log4Shell vulnerability (CVE-2021-44228); 创建自定义签名文件步骤1创建新的签名文件在signatures/目录下创建新的签名文件例如custom.sigs# 自定义Web应用安全签名 # 作者你的名字 # 创建日期2024年 # 检测暴露的管理面板 id:40001; sev:3; content:titleAdmin Panel/title; depth:1024; \ memo:Administrative panel exposed; # 检测调试信息 id:40002; sev:2; content:DEBUG True; depth:512; \ memo:Debug mode enabled in production; # 检测硬编码凭证 id:40003; sev:1; content:password\s*\s*[\]; depth:2048; type:regex; \ content:[A-Za-z0-9#$%^]{8,}; depth:100; type:regex; \ memo:Hardcoded password detected;步骤2更新主配置文件编辑signatures/signatures.conf文件添加对新签名文件的引用# 主签名文件 # MIME签名检测有趣的MIME类型 include signatures/mime.sigs # 文件签名基于内容识别有趣文件 include signatures/files.sigs # 消息签名检测有趣的服务器错误消息 include signatures/messages.sigs # 应用签名检测有风险的页面和应用程序 include signatures/apps.sigs # 上下文签名与注入测试相关 include signatures/context.sigs # 自定义签名 - 添加这一行 include signatures/custom.sigs步骤3测试签名编译并运行Skipfish来测试你的自定义签名# 编译Skipfish make # 运行扫描测试自定义签名 ./skipfish -o output -S dictionaries/minimal.wl -W- http://test.example.com 高级签名技巧使用正则表达式Skipfish支持PCRE正则表达式可以创建更复杂的匹配模式# 使用正则表达式检测版本号 id:40004; sev:3; content:Version\s*:\s*; depth:512; \ content:\d\.\d(\.\d)*; depth:100; type:regex; \ memo:Version information exposed; # 检测邮箱地址泄露 id:40005; sev:4; content:[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}; \ depth:4096; type:regex; nocase; \ memo:Email address exposed;条件匹配与签名链使用depend关键字创建依赖关系实现条件匹配# 首先检测WordPress id:40006; sev:4; content:wp-content; depth:1024; \ memo:WordPress detected; # 然后检测过时的WordPress版本 id:40007; sev:2; depend:40006; \ content:WordPress 4.[0-7]; depth:512; type:regex; \ memo:Outdated WordPress version detected;性能优化技巧使用depth限制- 限制搜索深度提高性能顺序匹配- 将最可能匹配的内容放在前面避免过度匹配- 使用精确的字符串而非宽泛的正则分组相关签名- 将相关的签名放在一起便于管理 安全检查模块开发理解安全检查架构Skipfish的安全检查系统位于src/checks.c和src/checks.h中。每个安全检查都是一个独立的函数负责检测特定的安全漏洞。创建自定义安全检查要创建自定义安全检查需要定义检查ID- 在src/checks.h中添加新的检查ID实现检查函数- 在src/checks.c中实现检查逻辑注册检查- 将检查函数添加到检查列表中创建关联签名- 为检查创建上下文签名示例自定义SQL注入检查首先在src/checks.h中添加检查定义/* 自定义安全检查ID */ #define CHECK_CUSTOM_SQL_INJECTION 100然后在src/checks.c中实现检查函数/* 自定义SQL注入检查 */ static void check_custom_sql_injection(struct http_request *req, struct http_response *res) { // 检查逻辑实现 // 1. 构造测试payload // 2. 发送测试请求 // 3. 分析响应 // 4. 报告漏洞 }最后在检查初始化函数中注册/* 初始化安全检查 */ void init_checks(void) { // ... 现有代码 ... // 注册自定义检查 register_check(CHECK_CUSTOM_SQL_INJECTION, check_custom_sql_injection, Custom SQL injection check); } 最佳实践与调试技巧签名编写最佳实践明确目标- 每个签名应该有一个明确的检测目标避免误报- 使用多个content条件减少误报合理分级- 根据风险程度设置适当的严重性等级详细说明- 在memo中提供清晰的描述版本控制- 为签名添加版本和作者信息调试自定义签名启用调试模式- 使用make clean debug编译调试版本查看日志- 运行扫描时重定向stderr到日志文件测试单个签名- 创建最小测试环境验证签名性能监控- 监控扫描性能确保签名不影响速度性能优化建议限制搜索范围- 合理使用depth和offset避免复杂正则- 复杂的正则表达式会影响性能使用静态字符串- 静态字符串匹配比正则表达式快批量处理- 将相关的检查组合在一起 实际应用场景场景1企业内部应用安全扫描为特定的企业应用创建自定义签名# 检测内部API端点 id:50001; sev:3; content:/api/v1/internal/; depth:512; \ memo:Internal API endpoint exposed; # 检测开发环境配置 id:50002; sev:2; content:ENVIRONMENTdevelopment; depth:1024; \ memo:Development environment configuration detected in production;场景2合规性检查创建符合特定合规性要求的签名# PCI DSS合规性检查 id:50003; sev:1; content:PAN; depth:2048; \ content:\d{16}; depth:100; type:regex; \ memo:Potential PAN (Primary Account Number) exposure - PCI DSS violation; # GDPR合规性检查 id:50004; sev:2; content:date_of_birth; depth:1024; nocase; \ content:\d{4}-\d{2}-\d{2}; depth:100; type:regex; \ memo:Personal data (date of birth) exposure - GDPR concern;场景3技术栈监控监控特定技术的版本和配置# 检测过时的JavaScript库 id:50005; sev:2; content:jquery-1.; depth:512; \ memo:Outdated jQuery version detected; # 检测不安全的SSL/TLS配置 id:50006; sev:1; header:Server; \ content:Apache/2.2; depth:100; \ memo:Outdated Apache server version with known vulnerabilities; 签名管理与维护版本控制策略签名版本化- 为签名集添加版本号变更日志- 维护签名的变更历史向后兼容- 避免破坏性更改定期更新- 根据新的威胁情报更新签名质量保证测试套件- 创建测试用例验证签名误报分析- 定期分析误报并优化漏报分析- 检查已知漏洞是否被检测到性能基准- 监控签名对扫描性能的影响协作与共享文档化- 为每个签名提供详细的文档示例数据- 提供测试数据示例社区贡献- 考虑将有用的签名贡献给社区反馈机制- 建立签名效果的反馈循环 总结Skipfish的自定义签名和安全检查模块开发为安全专业人员提供了强大的扩展能力。通过掌握签名语法、理解系统架构并遵循最佳实践你可以创建针对性的安全检测规则显著提升Skipfish在特定环境中的检测效果。关键要点回顾签名语法简单- 类似Snort的语法易于学习和使用灵活的组合- 支持多个条件、依赖关系和正则表达式性能可控- 通过depth、offset等参数优化性能易于集成- 简单的文件包含机制扩展性强- 支持自定义安全检查模块开发下一步行动建议从简单开始- 先创建几个简单的签名熟悉流程测试验证- 在测试环境中充分验证签名效果逐步优化- 根据实际使用情况持续优化签名分享经验- 将成功的经验分享给安全社区通过自定义Skipfish签名你可以将这款强大的安全扫描工具转变为完全适应你特定需求的专属安全审计平台。无论是检测特定的企业应用漏洞还是监控合规性要求自定义签名都能帮助你实现更精准、更高效的安全检测。记住强大的工具需要智慧的运用。始终在授权范围内进行安全测试并确保你的自定义签名既有效又不会产生过多的误报。祝你在Skipfish扩展开发的道路上取得成功️【免费下载链接】skipfishWeb application security scanner created by lcamtuf for google - Unofficial Mirror项目地址: https://gitcode.com/gh_mirrors/sk/skipfish创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
Skipfish扩展开发:自定义签名与安全检查模块编写终极指南
Skipfish扩展开发自定义签名与安全检查模块编写终极指南【免费下载链接】skipfishWeb application security scanner created by lcamtuf for google - Unofficial Mirror项目地址: https://gitcode.com/gh_mirrors/sk/skipfishSkipfish是一款由Google开发的快速、全面的Web应用安全扫描器专为安全专业人员设计。作为一款主动的Web应用安全侦察工具Skipfish通过执行递归爬取和基于字典的探测来为目标站点准备交互式站点地图然后使用一系列主动安全检查对结果地图进行注释。本文将深入探讨如何扩展Skipfish的核心功能特别是自定义签名和安全检查模块的开发。 为什么需要自定义Skipfish签名Skipfish的签名系统是其最强大的功能之一采用类似Snort的语法来检测Web应用漏洞、信息泄露和识别特定的Web应用。默认情况下Skipfish已经包含了许多预定义的签名但现实世界的安全测试往往需要针对特定应用或技术的自定义检测规则。自定义签名的核心价值针对性检测- 针对特定的Web框架、CMS或自定义应用漏洞快速识别- 检测新发现的漏洞或特定攻击向量企业环境适配- 针对内部应用的特定错误消息或信息泄露技术栈监控- 识别特定的技术版本或配置问题️ Skipfish签名系统架构解析在开始编写自定义签名之前让我们先了解Skipfish的签名系统架构。签名文件位于signatures/目录下主要包括signatures.conf- 主配置文件包含所有签名文件的引用apps.sigs- 检测有趣的应用程序/页面context.sigs- 与注入测试相关的上下文签名files.sigs- 基于内容识别有趣文件messages.sigs- 检测有趣的服务器错误消息mime.sigs- 检测有趣的MIME类型签名数据结构查看src/signatures.h文件我们可以看到签名的核心数据结构struct signature { u32 id; /* 唯一ID */ u8* memo; /* 匹配时显示的消息 */ u8 severity; /* 严重性等级 */ u32 prob; /* 问题ID */ u8* mime; /* 匹配的MIME类型 */ u8* header; /* 匹配的HTTP头 */ u32 rcode; /* 匹配的HTTP响应代码 */ u32 content_cnt; /* 内容结构数量 */ u32 check; /* 检查ID */ u8 report; /* 报告频率 */ u8 proto; /* 协议类型 */ struct signature *depend; /* 依赖的签名 */ struct content_struct* content[MAX_CONTENT]; /* 内容匹配结构 */ }; 自定义签名编写实战基础签名语法Skipfish签名使用分号分隔的键值对格式。让我们看一个简单的例子# 检测phpinfo()页面 id:11001; sev:3; content:titlephpinfo()/titlemeta name; depth:2048; \ memo:phpinfo() page;签名关键字详解id- 签名的唯一标识符必需content- 要匹配的内容字符串支持正则表达式memo- 匹配时显示的消息必需sev- 严重性等级1高2中3低4信息depth- 搜索内容的深度限制offset- 搜索起始偏移量nocase- 不区分大小写匹配type- 匹配类型regex或staticmime- 匹配特定的MIME类型header- 在HTTP头中匹配depend- 依赖其他签名report- 报告频率once或always实战示例1检测特定Web框架假设我们要检测Django框架的特定版本可以创建如下签名# 检测Django框架 id:30001; sev:4; content:Django; depth:512; \ content:version; depth:100; \ memo:Django framework detected; # 检测特定版本的Django依赖第一个签名 id:30002; sev:2; depend:30001; \ content:Django 1.11; depth:512; \ memo:Outdated Django 1.11 detected - contains security vulnerabilities;实战示例2检测敏感信息泄露# 检测API密钥泄露 id:30003; sev:2; content:api_key; depth:1024; \ content:[A-Za-z0-9]{32,64}; depth:100; type:regex; \ memo:Potential API key exposure; # 检测数据库连接字符串 id:30004; sev:3; content:mysql://; depth:2048; \ content:; depth:100; \ memo:Database connection string exposed;实战示例3检测特定漏洞# 检测Spring Framework RCE漏洞 id:30005; sev:1; content:class.module.classLoader; depth:1024; \ content:Spring Framework; depth:512; \ memo:Potential Spring Framework RCE vulnerability (CVE-2022-22965); # 检测Log4j漏洞相关特征 id:30006; sev:1; content:${jndi:; depth:2048; nocase; \ memo:Potential Log4Shell vulnerability (CVE-2021-44228); 创建自定义签名文件步骤1创建新的签名文件在signatures/目录下创建新的签名文件例如custom.sigs# 自定义Web应用安全签名 # 作者你的名字 # 创建日期2024年 # 检测暴露的管理面板 id:40001; sev:3; content:titleAdmin Panel/title; depth:1024; \ memo:Administrative panel exposed; # 检测调试信息 id:40002; sev:2; content:DEBUG True; depth:512; \ memo:Debug mode enabled in production; # 检测硬编码凭证 id:40003; sev:1; content:password\s*\s*[\]; depth:2048; type:regex; \ content:[A-Za-z0-9#$%^]{8,}; depth:100; type:regex; \ memo:Hardcoded password detected;步骤2更新主配置文件编辑signatures/signatures.conf文件添加对新签名文件的引用# 主签名文件 # MIME签名检测有趣的MIME类型 include signatures/mime.sigs # 文件签名基于内容识别有趣文件 include signatures/files.sigs # 消息签名检测有趣的服务器错误消息 include signatures/messages.sigs # 应用签名检测有风险的页面和应用程序 include signatures/apps.sigs # 上下文签名与注入测试相关 include signatures/context.sigs # 自定义签名 - 添加这一行 include signatures/custom.sigs步骤3测试签名编译并运行Skipfish来测试你的自定义签名# 编译Skipfish make # 运行扫描测试自定义签名 ./skipfish -o output -S dictionaries/minimal.wl -W- http://test.example.com 高级签名技巧使用正则表达式Skipfish支持PCRE正则表达式可以创建更复杂的匹配模式# 使用正则表达式检测版本号 id:40004; sev:3; content:Version\s*:\s*; depth:512; \ content:\d\.\d(\.\d)*; depth:100; type:regex; \ memo:Version information exposed; # 检测邮箱地址泄露 id:40005; sev:4; content:[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}; \ depth:4096; type:regex; nocase; \ memo:Email address exposed;条件匹配与签名链使用depend关键字创建依赖关系实现条件匹配# 首先检测WordPress id:40006; sev:4; content:wp-content; depth:1024; \ memo:WordPress detected; # 然后检测过时的WordPress版本 id:40007; sev:2; depend:40006; \ content:WordPress 4.[0-7]; depth:512; type:regex; \ memo:Outdated WordPress version detected;性能优化技巧使用depth限制- 限制搜索深度提高性能顺序匹配- 将最可能匹配的内容放在前面避免过度匹配- 使用精确的字符串而非宽泛的正则分组相关签名- 将相关的签名放在一起便于管理 安全检查模块开发理解安全检查架构Skipfish的安全检查系统位于src/checks.c和src/checks.h中。每个安全检查都是一个独立的函数负责检测特定的安全漏洞。创建自定义安全检查要创建自定义安全检查需要定义检查ID- 在src/checks.h中添加新的检查ID实现检查函数- 在src/checks.c中实现检查逻辑注册检查- 将检查函数添加到检查列表中创建关联签名- 为检查创建上下文签名示例自定义SQL注入检查首先在src/checks.h中添加检查定义/* 自定义安全检查ID */ #define CHECK_CUSTOM_SQL_INJECTION 100然后在src/checks.c中实现检查函数/* 自定义SQL注入检查 */ static void check_custom_sql_injection(struct http_request *req, struct http_response *res) { // 检查逻辑实现 // 1. 构造测试payload // 2. 发送测试请求 // 3. 分析响应 // 4. 报告漏洞 }最后在检查初始化函数中注册/* 初始化安全检查 */ void init_checks(void) { // ... 现有代码 ... // 注册自定义检查 register_check(CHECK_CUSTOM_SQL_INJECTION, check_custom_sql_injection, Custom SQL injection check); } 最佳实践与调试技巧签名编写最佳实践明确目标- 每个签名应该有一个明确的检测目标避免误报- 使用多个content条件减少误报合理分级- 根据风险程度设置适当的严重性等级详细说明- 在memo中提供清晰的描述版本控制- 为签名添加版本和作者信息调试自定义签名启用调试模式- 使用make clean debug编译调试版本查看日志- 运行扫描时重定向stderr到日志文件测试单个签名- 创建最小测试环境验证签名性能监控- 监控扫描性能确保签名不影响速度性能优化建议限制搜索范围- 合理使用depth和offset避免复杂正则- 复杂的正则表达式会影响性能使用静态字符串- 静态字符串匹配比正则表达式快批量处理- 将相关的检查组合在一起 实际应用场景场景1企业内部应用安全扫描为特定的企业应用创建自定义签名# 检测内部API端点 id:50001; sev:3; content:/api/v1/internal/; depth:512; \ memo:Internal API endpoint exposed; # 检测开发环境配置 id:50002; sev:2; content:ENVIRONMENTdevelopment; depth:1024; \ memo:Development environment configuration detected in production;场景2合规性检查创建符合特定合规性要求的签名# PCI DSS合规性检查 id:50003; sev:1; content:PAN; depth:2048; \ content:\d{16}; depth:100; type:regex; \ memo:Potential PAN (Primary Account Number) exposure - PCI DSS violation; # GDPR合规性检查 id:50004; sev:2; content:date_of_birth; depth:1024; nocase; \ content:\d{4}-\d{2}-\d{2}; depth:100; type:regex; \ memo:Personal data (date of birth) exposure - GDPR concern;场景3技术栈监控监控特定技术的版本和配置# 检测过时的JavaScript库 id:50005; sev:2; content:jquery-1.; depth:512; \ memo:Outdated jQuery version detected; # 检测不安全的SSL/TLS配置 id:50006; sev:1; header:Server; \ content:Apache/2.2; depth:100; \ memo:Outdated Apache server version with known vulnerabilities; 签名管理与维护版本控制策略签名版本化- 为签名集添加版本号变更日志- 维护签名的变更历史向后兼容- 避免破坏性更改定期更新- 根据新的威胁情报更新签名质量保证测试套件- 创建测试用例验证签名误报分析- 定期分析误报并优化漏报分析- 检查已知漏洞是否被检测到性能基准- 监控签名对扫描性能的影响协作与共享文档化- 为每个签名提供详细的文档示例数据- 提供测试数据示例社区贡献- 考虑将有用的签名贡献给社区反馈机制- 建立签名效果的反馈循环 总结Skipfish的自定义签名和安全检查模块开发为安全专业人员提供了强大的扩展能力。通过掌握签名语法、理解系统架构并遵循最佳实践你可以创建针对性的安全检测规则显著提升Skipfish在特定环境中的检测效果。关键要点回顾签名语法简单- 类似Snort的语法易于学习和使用灵活的组合- 支持多个条件、依赖关系和正则表达式性能可控- 通过depth、offset等参数优化性能易于集成- 简单的文件包含机制扩展性强- 支持自定义安全检查模块开发下一步行动建议从简单开始- 先创建几个简单的签名熟悉流程测试验证- 在测试环境中充分验证签名效果逐步优化- 根据实际使用情况持续优化签名分享经验- 将成功的经验分享给安全社区通过自定义Skipfish签名你可以将这款强大的安全扫描工具转变为完全适应你特定需求的专属安全审计平台。无论是检测特定的企业应用漏洞还是监控合规性要求自定义签名都能帮助你实现更精准、更高效的安全检测。记住强大的工具需要智慧的运用。始终在授权范围内进行安全测试并确保你的自定义签名既有效又不会产生过多的误报。祝你在Skipfish扩展开发的道路上取得成功️【免费下载链接】skipfishWeb application security scanner created by lcamtuf for google - Unofficial Mirror项目地址: https://gitcode.com/gh_mirrors/sk/skipfish创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考