客户端JavaScript代码的静态分析方法
字数 1804 2025-08-27 12:33:31

客户端JavaScript代码静态分析方法详解

1. 静态分析概述

静态分析是在不执行代码的情况下对客户端JavaScript代码进行分析的过程,目的是发现潜在的安全问题。随着现代Web应用将大量功能和逻辑转移至前端(使用AngularJS、ReactJS、Vue.js等框架),客户端攻击面显著增加,静态分析变得尤为重要。

2. JavaScript文件收集方法

2.1 使用Burp Suite收集

Burp Suite Community Edition方法:

  1. 通过代理浏览整个应用程序
  2. 切换到Proxy > HTTP history
  3. 使用显示过滤器仅显示JavaScript文件
  4. 复制所有JS文件的URL

Burp Suite Professional方法:

  1. 在Target > Site map中右键点击目标站点
  2. 选择Engagement tools > Find scripts
  3. 可导出所有脚本或复制URL

2.2 使用互联网档案

Wayback Machine方法:

  1. 访问https://archive.org/web/
  2. 搜索目标网站历史记录
  3. 查找旧版JS文件(可能包含已删除但未清理的文件)

自动化工具waybackurls:

go get waybackurls
waybackurls internet.org | grep "\.js" | uniq | sort

验证文件有效性:

cat js_files_url_list.txt | parallel -j50 -q curl -w 'Status:%{http_code}\t Size:%{size_download}\t %{url_effective}\n' -o /dev/null -sk

3. 代码可读性提升

3.1 代码精简与混淆

精简(Minification):

  • 删除注释和格式化字符
  • 删除未使用代码
  • 缩短变量和函数名
  • 工具示例:UglifyJS

混淆(Obfuscation):

  • 修改变量、函数和成员名
  • 使代码难以理解

3.2 反混淆工具

  1. JS Beautifier:美化代码,部分去混淆
  2. JStillery:高级反混淆
  3. JSDetox:专门用于恶意JS分析
  4. IlluminateJs:复杂混淆模式处理
  5. JSNice:智能变量名恢复

注意:没有万能的反混淆工具,通常需要结合多种工具和手动分析

4. 关键信息识别

4.1 端点信息提取

relative-url-extractor工具:

  • 提取JS文件中所有相对路径
  • 支持本地和远程文件
  • 可直接处理精简代码

LinkFinder工具:

python linkfinder.py -i https://example.com -d -o cli
  • 识别所有端点和参数
  • 内置jsbeautifier解析器
  • 可枚举域名下所有JS文件

4.2 云资源识别

CloudScraper工具:

  • 搜索云资源(如Amazon S3 Buckets)
  • 识别托管在云服务的JS文件
  • 检查JS内容中的云资源引用

4.3 敏感信息发现

搜索方法:

  1. 正则表达式:适合固定格式的凭据
  2. 基于熵:适合随机性强的API密钥和令牌

工具推荐:

  • truffleHog:支持熵和正则搜索,高度可定制
  • grep/sed/awk:基础但强大的命令行工具

4.4 危险代码区域

  1. XSS相关

    • innerHTML及其框架等价物
    • React中的dangerouslySetInnerHTML
    • Angular中的bypassSecurityTrustX方法
  2. eval函数

    • 客户端和服务器端都易出问题
  3. postMessage API

    • 查找window.postMessagewindow.addEventListener
    • 注意框架封装实现
  4. Web存储

    • window.localStorage
    • window.sessionStorage
    • 检查存储的敏感数据

4.5 安全扫描工具

  1. JSPrime:静态分析工具(已停止更新)

  2. ESLint

    • 最流行的JS linter
    • 可添加自定义安全规则
    • 支持Angular、React等框架的安全检查
  3. Retire.js

    • 识别过时JS框架/库
    • 可用作独立工具、浏览器插件或Burp/ZAP插件
    • 注意:可能存在误报

5. 分析流程总结

  1. 收集:使用Burp或互联网档案获取所有JS文件
  2. 预处理:对精简/混淆代码进行反混淆处理
  3. 端点提取:识别所有URL和API端点
  4. 敏感信息:搜索凭据、API密钥等
  5. 危险代码:检查已知安全风险模式
  6. 组件审计:识别易受攻击的框架版本
  7. 工具验证:使用安全扫描工具交叉验证

6. 参考资料

  1. Static JavaScript analysis with Burp
  2. JavaScript dangerous functions
  3. Deobfuscation techniques
  4. PostMessage pitfalls
客户端JavaScript代码静态分析方法详解 1. 静态分析概述 静态分析是在不执行代码的情况下对客户端JavaScript代码进行分析的过程,目的是发现潜在的安全问题。随着现代Web应用将大量功能和逻辑转移至前端(使用AngularJS、ReactJS、Vue.js等框架),客户端攻击面显著增加,静态分析变得尤为重要。 2. JavaScript文件收集方法 2.1 使用Burp Suite收集 Burp Suite Community Edition方法: 通过代理浏览整个应用程序 切换到Proxy > HTTP history 使用显示过滤器仅显示JavaScript文件 复制所有JS文件的URL Burp Suite Professional方法: 在Target > Site map中右键点击目标站点 选择Engagement tools > Find scripts 可导出所有脚本或复制URL 2.2 使用互联网档案 Wayback Machine方法: 访问https://archive.org/web/ 搜索目标网站历史记录 查找旧版JS文件(可能包含已删除但未清理的文件) 自动化工具waybackurls: 验证文件有效性: 3. 代码可读性提升 3.1 代码精简与混淆 精简(Minification): 删除注释和格式化字符 删除未使用代码 缩短变量和函数名 工具示例:UglifyJS 混淆(Obfuscation): 修改变量、函数和成员名 使代码难以理解 3.2 反混淆工具 JS Beautifier :美化代码,部分去混淆 JStillery :高级反混淆 JSDetox :专门用于恶意JS分析 IlluminateJs :复杂混淆模式处理 JSNice :智能变量名恢复 注意:没有万能的反混淆工具,通常需要结合多种工具和手动分析 4. 关键信息识别 4.1 端点信息提取 relative-url-extractor工具: 提取JS文件中所有相对路径 支持本地和远程文件 可直接处理精简代码 LinkFinder工具: 识别所有端点和参数 内置jsbeautifier解析器 可枚举域名下所有JS文件 4.2 云资源识别 CloudScraper工具: 搜索云资源(如Amazon S3 Buckets) 识别托管在云服务的JS文件 检查JS内容中的云资源引用 4.3 敏感信息发现 搜索方法: 正则表达式 :适合固定格式的凭据 基于熵 :适合随机性强的API密钥和令牌 工具推荐: truffleHog :支持熵和正则搜索,高度可定制 grep/sed/awk :基础但强大的命令行工具 4.4 危险代码区域 XSS相关 : innerHTML 及其框架等价物 React中的 dangerouslySetInnerHTML Angular中的 bypassSecurityTrustX 方法 eval函数 : 客户端和服务器端都易出问题 postMessage API : 查找 window.postMessage 和 window.addEventListener 注意框架封装实现 Web存储 : window.localStorage window.sessionStorage 检查存储的敏感数据 4.5 安全扫描工具 JSPrime :静态分析工具(已停止更新) ESLint : 最流行的JS linter 可添加自定义安全规则 支持Angular、React等框架的安全检查 Retire.js : 识别过时JS框架/库 可用作独立工具、浏览器插件或Burp/ZAP插件 注意:可能存在误报 5. 分析流程总结 收集 :使用Burp或互联网档案获取所有JS文件 预处理 :对精简/混淆代码进行反混淆处理 端点提取 :识别所有URL和API端点 敏感信息 :搜索凭据、API密钥等 危险代码 :检查已知安全风险模式 组件审计 :识别易受攻击的框架版本 工具验证 :使用安全扫描工具交叉验证 6. 参考资料 Static JavaScript analysis with Burp JavaScript dangerous functions Deobfuscation techniques PostMessage pitfalls