题名:安全编程修炼之道
作者:(美) James C. Foster, Mike Price著
出版年:2006
ISBN: 7-302-13216-X
分类号: TP311.1
中图分类: 程序设计
译者: 邓劲生
定价: 78.00元
页数: 629 页
出版社: 清华大学出版社
装订: 简裝本

目 录 <br /> <br />第1章 安全编码基础 1 <br />1.1 引言 2 <br />1.2 C/C++ 3 <br />1.2.1 语言特性 3 <br />1.2.2 Hello,World!实例 4 <br />1.2.3 数据类型 5 <br />1.2.4 流程控制 7 <br />1.2.5 函数 8 <br />1.2.6 类 9 <br />1.2.7 案例研究:傅立叶系数 <br />估算 10 <br />1.3 Java 13 <br />1.3.1 语言特性 14 <br />1.3.2 Hello,World!实例 15 <br />1.3.3 数据类型 15 <br />1.3.4 流程控制 16 <br />1.3.5 方法 18 <br />1.3.6 类 18 <br />1.3.7 获取HTTP报头 20 <br />1.4 C# 21 <br />1.4.1 移植到C#平台的商业 <br />案例 21 <br />1.4.2 语言特性 22 <br />1.4.3 Hello,World!实例 23 <br />1.4.4 数据类型 23 <br />1.4.5 流程控制 25 <br />1.4.6 方法 26 <br />1.4.7 类 26 <br />1.4.8 C#线程 28 <br />1.4.9 案例研究:命令行IP地址 <br />解析 29 <br />1.5 Perl 38 <br />1.5.1 数据类型 39 <br />1.5.2 运算符 40 <br />1.5.3 Perl脚本实例 42 <br />1.5.4 专用变量 44 <br />1.5.5 模式匹配和替换 44 <br />1.5.6 正则表达式修饰符 45 <br />1.5.7 常用的Perl工具 45 <br />1.5.8 I Am a Perl Coder! 46 <br />1.5.9 日志修改工具 47 <br />1.6 Python 52 <br />1.7 本章小结 56 <br />1.8 要点回顾 56 <br />1.9 相关网站链接 57 <br />1.10 常见问题 58 <br /> <br />第2章 NASL脚本 61 <br />2.1 引言 62 <br />2.1.1 NASL的发展史 62 <br />2.1.2 NASL的目标 62 <br />2.2 NASL脚本的语法 63 <br />2.2.1 注释 64 <br />2.2.2 变量 64 <br />2.2.3 运算符 66 <br />2.2.4 控制结构 69 <br />2.3 编写NASL脚本 72 <br />2.3.1 编写NASL个人专用工具 73 <br />2.3.2 Nessus框架下的编程 75 <br />2.4 案例研究:经典的 <br />NASL脚本 77 <br />2.5 NASL代码移植 81 <br />2.6 本章小结 90 <br />2.7 要点回顾 91 <br />2.8 相关网站链接 92 <br />2.9 常见问题 92 <br />第3章 BSD套接字 95 <br />3.1 引言 96 <br />3.2 BSD套接字编程简介 96 <br />3.3 TCP客户端与服务器 97 <br />3.4 UDP客户端与服务器 103 <br />3.5 套接字选项 111 <br />3.6 基于UDP套接字的 <br />网络扫描 113 <br />3.7 基于TCP套接字的 <br />网络扫描 122 <br />3.8 线程与并行 134 <br />3.9 本章小结 136 <br />3.10 要点回顾 136 <br />3.11 相关网站链接 137 <br />3.12 常见问题 137 <br /> <br />第4章 Windows套接字 139 <br />4.1 引言 140 <br />4.2 Winsock概述 140 <br />4.3 Winsock 2.0 141 <br />4.3.1 通过Visual Studio 6.0 <br />链接 142 <br />4.3.2 通过源代码链接 143 <br />4.4 案例研究:使用WinSock <br />抓取网页 146 <br />4.5 编写客户端程序 147 <br />4.6 编写服务器程序 151 <br />4.7 编写exploit及漏洞 <br />检测程序 155 <br />4.8 本章小结 163 <br />4.9 要点回顾 164 <br />4.10 常见问题 165 <br />4.11 案例研究:使用Winsock <br />执行Web攻击 166 <br />4.12 案例研究:使用Winsock <br />执行远程缓冲区溢出 168 <br /> <br /> <br />第5章 Java套接字 173 <br />5.1 引言 174 <br />5.2 TCP/IP概述 174 <br />5.2.1 TCP客户端 175 <br />5.2.2 IP地址及域名解析 178 <br />5.2.3 基于文本的输入/输出: <br />LineNumberReader类 181 <br />5.2.4 TCP服务器 185 <br />5.2.5 使用浏览器连接 <br />TCPServer1 189 <br />5.2.6 处理多重连接 189 <br />5.2.7 WormCatcher 198 <br />5.3 UDP客户端与服务器 204 <br />5.4 本章小结 211 <br />5.5 要点回顾 211 <br />5.5.1 TCP客户端 211 <br />5.5.2 TCP服务器 211 <br />5.5.3 UDP客户端与服务器 211 <br />5.6 常见问题 212 <br /> <br />第6章 编写可移植的代码 215 <br />6.1 引言 216 <br />6.2 UNIX和Windows移植 <br />指南 216 <br />6.2.1 预编译指令 216 <br />6.2.2 确定操作系统 218 <br />6.2.3 进程的创建和终止 222 <br />6.2.4 多线程 227 <br />6.2.5 信号 234 <br />6.2.6 文件操作 236 <br />6.2.7 目录操作 239 <br />6.2.8 库 242 <br />6.2.9 Daemon/Win32服务编程 247 <br />6.2.10 内存管理 254 <br />6.2.11 命令行参数处理 255 <br />6.2.12 整型数据类型 259 <br />6.3 本章小结 260 <br />6.4 要点回顾 260 <br />6.5 常见问题 261 <br />第7章 可移植的网络编程 263 <br />7.1 引言 264 <br />7.2 BSD套接字和Winsock 264 <br />7.3 可移植的构件 266 <br />7.3.1 返回值 266 <br />7.3.2 扩展错误信息 268 <br />7.3.3 API 270 <br />7.3.4 原始套接字 302 <br />7.3.5 Pcap和WinPcap 313 <br />7.4 本章小结 319 <br />7.5 要点回顾 319 <br />7.6 常见问题 319 <br /> <br />第8章 编写shellcode I 323 <br />8.1 引言 324 <br />8.2 shellcode概述 324 <br />8.2.1 工具 324 <br />8.2.2 汇编程序设计语言 325 <br />8.2.3 Windows和UNIX的 <br />汇编比较 328 <br />8.3 寻址问题 329 <br />8.3.1 方案一:使用call和 <br />jmp指令 329 <br />8.3.2 方案二:将参数值入栈 330 <br />8.4 NULL字节问题 331 <br />8.5 系统调用的实现 332 <br />8.5.1 系统调用编号 332 <br />8.5.2 系统调用参数 332 <br />8.5.3 系统调用返回值 334 <br />8.6 远程shellcode 334 <br />8.6.1 端口绑定shellcode 334 <br />8.6.2 套接字描述符重用 <br />shellcode 336 <br />8.7 本地shellcode 337 <br />8.7.1 execve shellcode 338 <br />8.7.2 setuid shellcode 339 <br />8.7.3 chroot shellcode 340 <br />8.7.4 Windows shellcode 344 <br />8.8 本章小结 350 <br />8.9 要点回顾 350 <br />8.10 相关网站链接 352 <br />8.11 邮件列表 352 <br />8.12 常见问题 352 <br /> <br />第9章 编写shellcode II 355 <br />9.1 引言 356 <br />9.2 shellcode实例 356 <br />9.2.1 write系统调用 359 <br />9.2.2 execve shellcode 362 <br />9.2.3 端口绑定shellcode 370 <br />9.2.4 socket系统调用 373 <br />9.2.5 bind系统调用 374 <br />9.2.6 listen系统调用 374 <br />9.2.7 accept系统调用 375 <br />9.2.8 dup2系统调用 375 <br />9.2.9 execve系统调用 376 <br />9.2.10 反向连接shellcode 381 <br />9.2.11 重用套接字的shellcode 384 <br />9.2.12 重用文件描述符 386 <br />9.2.13 shellcode编码 392 <br />9.3 重用程序变量 397 <br />9.4 跨操作系统的shellcode 401 <br />9.5 了解现有的shellcode 402 <br />9.6 本章小结 406 <br />9.7 要点回顾 406 <br />9.8 相关网站链接 407 <br />9.9 邮件列表 407 <br />9.10 常见问题 407 <br /> <br />第10章 开发exploit程序I 409 <br />10.1 引言 410 <br />10.2 定位漏洞 410 <br />10.3 远程与本地exploit程序 <br />的编写 411 <br />10.4 格式化字符串攻击 412 <br />10.4.1 格式化字符串 412 <br />10.4.2 格式化字符串漏洞 <br />的修复 414 <br />10.5 案例研究:xlockmore用户 <br />提供的格式化字符串漏洞 <br />CVE-2000-0763 414 <br />10.6 TCP/IP漏洞 417 <br />10.7 竞争条件 418 <br />10.7.1 文件竞争条件 418 <br />10.7.2 信号竞争条件 419 <br />10.8 案例研究:man输入验证 <br />错误 419 <br />10.9 本章小结 421 <br />10.10 要点回顾 422 <br />10.11 相关网站链接 423 <br />10.12 常见问题 423 <br /> <br />第11章 开发exploit程序II 425 <br />11.1 引言 426 <br />11.2 为exploit编写套接字和 <br />绑定 426 <br />11.2.1 客户端套接字编程 426 <br />11.2.2 服务器端套接字编程 428 <br />11.3 栈溢出exploits 429 <br />11.3.1 内存的组织 430 <br />11.3.2 栈溢出 431 <br />11.3.3 寻找开源软件中可 <br />利用的栈溢出 435 <br />11.4 案例研究:X11R6 4.2 <br />XLOCALEDIR溢出 435 <br />11.5 堆破坏exploits 440 <br />11.6 案例研究: OpenSSL SSLv2 <br />畸形客户端密钥远程缓冲区 <br />溢出漏洞CAN-2002-0656 444 <br />11.7 整型bug exploits 457 <br />11.7.1 整数环绕 458 <br />11.7.2 忽略大小检查 460 <br />11.7.3 其他整型bug 462 <br /> <br />11.8 案例研究: OpenSSH质询 <br />响应整型溢出漏洞 <br />CVE-2002-0639 462 <br />11.9 案例研究:UW POP2 缓冲 <br />区溢出漏洞CVE-1999 <br />-0920 466 <br />11.10 本章小结 474 <br />11.11 要点回顾 475 <br />11.12 相关网站链接 476 <br />11.13 常见问题 476 <br /> <br />第12章 开发exploit程序III 479 <br />12.1 引言 480 <br />12.2 MSF的使用 480 <br />12.3 用Metasploit进行 <br />exploit开发 485 <br />12.3.1 确定攻击向量 485 <br />12.3.2 计算偏移量 486 <br />12.3.3 选择控制向量 491 <br />12.3.4 发现返回地址 495 <br />12.3.5 使用返回地址 498 <br />12.3.6 确定坏字符 500 <br />12.3.7 确定空间限制 500 <br />12.3.8 空操作指令拖动器 502 <br />12.3.9 选取有效载荷和 <br />编码器 503 <br />12.4 将exploit集成到MSF中 511 <br />12.4.1 框架 511 <br />12.4.2 分析一个现有的exploit <br />模块 512 <br />12.4.3 覆盖方法 516 <br />12.5 本章小结 517 <br />12.6 要点回顾 517 <br />12.7 相关网站链接 518 <br />12.8 常见问题 518 <br /> <br /> <br /> <br />第13章 编写安全组件 521 <br />13.1 引言 522 <br />13.2 COM 522 <br />13.2.1 COM对象 522 <br />13.2.2 COM接口 522 <br />13.2.3 COM运行时 523 <br />13.2.4 COM对象的实现 524 <br />13.2.5 COM进程内服务器 <br />的实现 526 <br />13.3 ATL 527 <br />13.3.1 C++模板 528 <br />13.3.2 ATL客户端技术 528 <br />13.3.3 ATL服务器技术 531 <br />13.3.4 ATL属性 543 <br />13.4 将COM扩展添加到 <br />RPCDump工具中 547 <br />13.4.1 COM EXE服务器 <br />实现 548 <br />13.4.2 控制流 551 <br />13.4.3 应用程序集成例程 552 <br />13.4.4 工具接口定义 555 <br />13.4.5 组件类 557 <br />13.4.6 应用程序集成: <br />COMSupport.h 563 <br />13.4.7 应用程序集成: <br />RPCDump.C 564 <br />13.5 本章小结 566 <br />13.6 要点回顾 566 <br />13.7 相关网站链接 567 <br />13.8 常见问题 567 <br /> <br />第14章 创建Web安全工具 571 <br />14.1 引言 572 <br />14.2 设计 572 <br />14.2.1 攻击签名格式 572 <br />14.2.2 签名 573 <br />14.3 深入分析 573 <br />14.3.1 套接字和执行 573 <br />14.3.2 解析器 583 <br />14.3.3 头文件 595 <br />14.3.4 编译 599 <br />14.3.5 执行 599 <br />14.4 工具输出 600 <br />14.5 本章小结 600 <br />14.6 要点回顾 601 <br />14.7 相关网站链接 601 <br />14.8 常见问题 601 <br /> <br />附录A 词汇 605 <br /> <br />附录B 安全工具汇编 613 <br /> <br />附录C exploit文档 619 <br /> <br />附录D 系统调用参考 621 <br /> <br />附录E 数据转换参考 625

James C. Foster是Computer Sciences公司Global Security Solution Development的负责人,主要负责物理、人事和数据安全解决方案的研究和开发。在进入Computer Sciences公司之前,Foster是Foundstone公司(后被McAfee收购)的研发部主任,负责产品、咨询和相应R&D建议等各方面的工作。在就职于Foundstone之前,Foster是Guardent 公司(后被Verisign收购)的执行总监和研究工程师,是Information Security杂志(后被TechTarget收购)的撰稿人之一,此前还作为安全研究专家就职于国防部。凭着在高级远程管理、国际化发展、应用程序安全、协议分析和搜索算法技术等领域的丰富经验,Foster为商业化操作系统组件进行代码检查,评估Win32应用程序,并研究商业级加密实现。
Foster是一位极富经验的演说者,在各种学术会议、技术论坛、安全峰会和研究探讨会中走遍北美,研究报告被收录在Microsoft Security Summit、Black Hat USA、Black Hat Windows、MIT Wireless Research Forum、SANS、MilCon、TechGov、InfoSec World 2001和Thomson Security Conference等论文集中。他还经常回答各种相关的安全问题,发布在USAToday、Information Security magazine、Baseline、Computerworld、Secure Computing和MIT Technologist。Foster持有A.S.、B.S.、MBA以及数个技术和管理证书,并从事或者指导the Yale School of Business、Harvard University、the University of Maryland的一些研究,同时他也是University of Pennsylvania’s Wharton School of Business的一名员工。
Foster还是一个畅销书作者,著有多本商业和教育论文。他为主要出版社编著、合著或编辑过很多图书,包括Snort 2.1 Intrusion Detection (Syngress出版,ISBN: 1-931836-04-3)、Hacking Exposed, Fourth Edition、Anti-Hacker Toolkit, Second Edition、Advanced Intrusion Detection、Hacking the Code:ASP.NET Web Application Security (Syngress出版, ISBN: 1-932266-65-8)、Anti-Spam Toolkit和Google Hacking for Penetration Techniques (Syngress出版, ISBN: 1-931836-36-1)等。
Michael Price是McAfee(以前是Foundstone, Inc.)的主要研究和开发工程师之一,也是信息安全领域中经验丰富的开发人员。在服务方面,Mike还为政府和私人机构从事大量的安全评估、代码检查、培训、软件开发和研究工作。在Foundstone时,Mike的职责主要是漏洞研究、网络和协议分析、软件开发以及代码优化。他的主要擅长在BSD和Windows平台上进行基于网络和基于主机的安全软件开发。在就职于Foundstone之前,Mike在SecureSoft Systems工作,当时是一名安全软件开发工程师。Mike写过很多安全程序,包括多种加密算法实现、网络监听器和基于主机的漏洞扫描器。