跳转至

安全工具

基本概念

安全(本文指计算机安全)是这个信息时代的重要主题。作为开发者,有必要了解基本的安全知识,并学会使用一些相关工具。

计算机安全和网络安全的区别

计算机安全英文为 Computer Security,它和网络安全 Cyber Security 在概念上很相似,本文不区分它们。维基百科 上两者共用 Computer Security 这一词条。

有些人认为计算机安全只涉及单台机器,而网络安全涉及到互联。我不喜欢这种说法,显然计算机网络属于计算机技术,计算机安全应该包含网络安全。我喜欢使用计算机安全作为统称,因此将其作为本章的标题。

另外 Cyber 一词我认为翻译为 网络 是不好的。Cyber 在英文里并不等于 Network,它起源于控制论(Cybernetics),后来衍生出了很多含义。在 Cyber Security 里我认为将 Cyber 理解为 信息系统 更贴合原意。

计算机安全领域有一类很出名的竞赛,名为 CTF(Capture the Flags)。CTF 比赛的内容包含以下几个部分

  • Web 网络攻防。寻找服务器上的漏洞并尝试进行攻击。
  • Crypto 密码学。破解密码,或者伪造数字签名。
  • Reverse 逆向工程。对着黑盒研究内部结构和原理。
  • Pwn 二进制利用。和逆向工程很像,但目的不是搞清楚原理,而是发现漏洞并进行利用。
  • Misc 杂项。包括很多内容,比如隐写、取证等。

工具

Web

发现

用于发现可攻击的服务器

  • Amass 使用主动侦察技术进行攻击面网络映射和外部资产发现
  • subfinder 快速的被动子域名枚举工具
  • Wappalyzer 一个浏览器拓展,用于识别 Web 应用的技术栈
  • Shodan 搜索互联网连接设备的工具
  • nmap 网络端口扫描

探测

用于寻找服务器上的漏洞

  • ffuf 快速的 Web 模糊测试工具
  • ZAP 一个 Web 应用漏洞扫描器
  • mitmproxy 交互式的、支持 SSL/TLS 的拦截代理
  • SQLmap 自动化 SQL 注入和数据库接管工具

利用

利用漏洞进行攻击

  • Metasploit 渗透测试框架
  • Impacket 网络协议套件

后渗透

在攻入服务器后保持渗透状态

  • PEASS 用于本地权限提升的脚本合集

环境安全

用于保障应用部署环境的安全

  • ScoutSuite 云安全审计工具
  • trivy 用于查找容器、代码仓库、云等环境中的漏洞
  • trufflehog 查找、验证和分析泄露的凭证

应用安全

用于确保应用本身的安全

  • Sigma 日志分析,可识别出恶意事件
  • Semgrep 代码分析,可发现安全漏洞并进行修复

Crypto

密码学通常涉及复杂的数学算法,因此理论上所有数学库/算法库都属于这类工具。

加密

  • CyberChef 用于加密、编码、压缩和数据分析的 Web 应用
  • OpenSSL 现代加密工具包

解密

  • RsaCtfTool 一个 RSA 攻击工具
  • xortool 一个异或加密分析工具

哈希破解

  • hashcat 最快的哈希破解工具

Reverse

静态分析

在不实际运行程序的情况下进行分析。有些程序可能存在恶意代码,因此只能进行静态分析。

  • radare2 一个 C 写的逆向工程框架,集成了分析、调试、打补丁等功能
  • Ghidra 一个 Java 写的逆向工程框架,由 NAS(美国国家安全局)开源
  • YARA 用于识别程序中的恶意代码

此外还有 Disassembler(反汇编器)、Decompiler(反编译器)、Deobfuscator(反混淆工具)、Unpacker(脱壳工具),但由于不同的机器码/字节码/编程语言需要不同的工具,因此这里不详细列举了。

动态分析

在实际运行程序的情况下进行分析。常用的调试工具都可以用于动态分析。

  • gdb/lldb/windbg 分别是 Linux/macOS/Windows 最主要的调试器
  • strace/ltrace 系统调用跟踪和库函数调用跟踪
  • Frida 跨平台动态插桩工具

Pwn

大多数用于 Reverse 的工具也可以用于 Pwn。为了不重复,以下工具是在完成逆向后,准备检测并利用漏洞时使用的

  • checksec 检查二进制文件开启了哪些安全保护机制
  • AFL++ 用于二进制漏洞发现
  • pwndbg 一个 GDB 插件,集成了二进制漏洞利用的功能
  • pwntools 一个 Python 库,集成了多种二进制利用工具

Misc

隐写和取证

隐写是指将数据或文件隐藏起来,而取证则相反。

  • stegify 用于 LSB 隐写和取证
  • strings 显示文件中所有的可打印字符
  • binwalk 固件分析工具
  • SleuthKit 数字取证工具集
  • volatility 内存取证框架

流量分析

抓取网络流量并进行分析。

  • Wireshark 网络协议分析工具

字典

字典通常用于进行暴力测试和破解。

  • SecLists 一个包括用户名、密码、URL、敏感数据模式、模糊测试载荷、Web Shell 等的字典集合