新书速览|linux信息安全和渗透测试-爱代码爱编程
Linux网络攻防和渗透测试技术结合,实例丰富。
内容短而精,立足于零基础,兼顾动手实践。
本书内容
《Linux信息安全和渗透测试》详细阐述Linux下的信息安全和网络渗透技术,内容涵盖各大主流加解密算法的原理,用Linux C/C++语言自主实现这些技术的方法,以及Linux内核开发技术和IPSec VPN的系统实现,这些都是以后打造自己信息安全工具所需的基本知识。最后介绍网络渗透技术Kail Linux,通过该环境可以了解常用的现成工具。本书共11章,内容包括Linux基础和网络优化、搭建Linux C和C++安全开发环境、对称密码算法、杂凑函数和HMAC、非对称算法RSA的加解密、身份认证和PKI、实战PKI、IPSec VPN基础知识、VPN实战、SSL-TLS编程、内核和文件系统、Kali Linux的渗透测试研究、DPDK开发环境的搭建等。
《Linux信息安全和渗透测试》适合Linux信息安全工程师或开发者阅读,也适合高等院校和培训机构相关专业的师生作为教学参考书。
本书作者
蔡冰,15年的编程教学、职业规划经历。已辅导近千位同学通过实习校招,顺利入职各大互联网公司的研发岗位,平时积累了大量当前流行的开发知识和技能。参与编写了《Java网络编程实战》的图书。
本书读者
Linux信息安全工程师或开发者阅读,也适合高等院校和培训机构相关专业的师生作为教学参考书。
本书目录
第 1 章 搭建Linux安全开发环境 1
1.1 准备虚拟机环境 1
1.1.1 在VMware下安装Linux 1
1.1.2 开启登录时的root账号 4
1.1.3 解决Ubuntu上的vi方向键问题 5
1.1.4 关闭防火墙 6
1.1.5 配置安装源 6
1.1.6 安装网络工具包 6
1.1.7 安装基本开发工具 7
1.1.8 启用SSH 7
1.1.9 创建一个快照 8
1.1.10 连接虚拟机Linux 9
1.1.11 通过终端工具连接Linux虚拟机 18
1.1.12 与虚拟机互传文件 20
1.1.13 支持图形软件的终端工具MobaXterm 21
1.2 搭建Samba网络文件共享服务 22
1.3 在VMware中添加一块硬盘 24
1.4 在Linux下搭建C/C++开发环境 27
1.5 在Windows下搭建Linux C/C++开发环境 28
1.5.1 Windows下非集成式的Linux C/C++开发环境 28
1.5.2 Windows下集成式的Linux C/C++开发环境 32
1.6 安全密码库OpenSSL 35
1.6.1 OpenSSL源代码模块结构 36
1.6.2 OpenSSL加密库调用方式 37
1.6.3 OpenSSL支持的对称加密算法 37
1.6.4 OpenSSL支持的非对称加密算法 38
1.6.5 OpenSSL支持的信息摘要算法 38
1.6.6 OpenSSL密钥和证书管理 38
1.6.7 面向对象与OpenSSL 38
1.6.8 BIO接口 40
1.6.9 EVP接口 41
1.6.10 在Linux下编译安装OpenSSL 1.0.2 42
1.6.11 使用OpenSSL命令并查看版本号 51
1.7 国产密码函数库GmSSL 51
1.7.1 GmSSL的特点 52
1.7.2 GmSSL的一些历史 52
1.7.3 什么是国密算法 52
1.7.4 GmSSL的下载 53
1.7.5 在Linux下编译安装GmSSL 53
1.7.6 默认编译安装GmSSL 57
1.7.7 在旧版本的Linux下编译和安装GmSSL 60
第 2 章 对称密码算法 64
2.1 基本概念 64
2.2 流加密算法 65
2.2.1 基本概念 65
2.2.2 流密码和分组密码的比较 66
2.2.3 RC4算法 66
2.3 分组加密算法 76
2.3.1 工作模式 76
2.3.2 短块加密 84
2.3.3 DES和3DES算法 84
2.3.4 SM4算法 102
2.4 利用OpenSSL进行对称加解密 119
2.4.1 基本概念 119
2.4.2 对称加解密相关函数 119
第 3 章 杂凑函数和HMAC 128
3.1 杂凑函数概述 128
3.1.1 什么是杂凑函数 128
3.1.2 密码学和杂凑函数 129
3.1.3 杂凑函数的发展 129
3.1.4 杂凑函数的设计 130
3.1.5 杂凑函数的分类 130
3.1.6 杂凑函数的碰撞 130
3.2 SM3杂凑算法 131
3.2.1 常量和函数 131
3.2.2 填充 131
3.2.3 迭代压缩 132
3.2.4 杂凑值 133
3.2.5 一段式SM3算法的实现 133
3.2.6 三段式SM3算法的实现 138
3.2.7 GmSSL实现SM3算法 145
3.3 HMAC 148
3.3.1 什么是HMAC 148
3.3.2 产生背景 148
3.3.3 设计目标 149
3.3.4 算法描述 149
3.3.5 独立自主实现HMAC-SM3 150
3.4 SHA系列杂凑算法 152
3.4.1 SHA算法概述 152
3.4.2 SHA的发展史 153
3.4.3 SHA系列算法的核心思想 153
3.4.4 单向性 153
3.4.5 主要用途 153
3.4.6 SHA256算法原理解析 153
3.4.7 SHA384和SHA512算法 168
3.5 更通用的基于OpenSSL的哈希运算 192
3.5.1 获取摘要算法的函数EVP_get_digestbyname 192
3.5.2 创建结构体并初始化的函数EVP_MD_CTX_create 192
3.5.3 销毁摘要上下文结构体的函数EVP_MD_CTX_destroy 193
3.5.4 摘要初始化的函数EVP_DigestInit_ex 193
3.5.5 摘要Update的函数EVP_DigestUpdate 194
3.5.6 摘要Final的函数EVP_Digest_Final_ex 194
3.5.7 单包摘要计算的函数EVP_Digest 194
第 4 章 非对称算法RSA的加解密 197
4.1 非对称密码体制概述 197
4.2 RSA概述 199
4.3 RSA的数学基础 199
4.3.1 素数 199
4.3.2 素性检测 199
4.3.3 倍数 200
4.3.4 约数 200
4.3.5 互质数 200
4.3.6 质因子 200
4.3.7 强素数 201
4.3.8 因子 201
4.3.9 模运算 201
4.3.10 模运算的操作与性质 202
4.3.11 单向函数 202
4.3.12 费马定理和欧拉定理 203
4.3.13 幂 203
4.3.14 模幂运算 204
4.3.15 同余符号≡ 204
4.3.16 欧拉函数 204
4.3.17 最大公约数 204
4.3.18 实现欧几里得算法 205
4.3.19 扩展欧几里得算法 207
4.4 RSA算法描述 214
4.5 RSA算法实例 215
4.5.1 查找法计算私钥d 216
4.5.2 简便法计算私钥d 218
4.5.3 扩展欧几里得算法计算私钥d 220
4.5.4 加密字母 221
4.5.5 分组加密字符串 221
4.6 实战前的几个重要问题 225
4.6.1 明文的值不能大于模值N 225
4.6.2 明文的长度 226
4.6.3 密钥长度 227
4.6.4 密文长度 227
4.7 熟悉PKCS#1 227
4.7.1 PKCS#1填充 228
4.7.2 OpenSSL中的RSA填充 230
4.7.3 PKCS#1中的RSA私钥语法 232
4.8 在OpenSSL命令中使用RSA 233
4.8.1 生成RSA公私钥 233
4.8.2 提取私钥的各个参数 234
4.8.3 使用RSA公钥加密一个文件 236
4.8.4 使用私钥解密一个文件 237
4.9 基于OpenSSL库的RSA编程 237
4.9.1 OpenSSL的RSA实现 238
4.9.2 主要数据结构 239
4.9.3 主要函数 240
4.10 随机大素数的生成 248
4.11 RSA算法的攻击及分析 248
4.11.1 因子分解攻击 248
4.11.2 选择密文攻击 249
4.11.3 公共模数攻击 249
4.11.4 小指数攻击 249
第 5 章 身份认证和PKI 250
5.1 身份认证概述 250
5.1.1 网络安全与身份认证 250
5.1.2 网络环境下身份认证所面临的威胁 251
5.1.3 网络身份认证体系的发展现状 252
5.2 身份认证技术基础 254
5.2.1 用户名/密码认证 254
5.2.2 智能卡认证 254
5.2.3 生物特征认证 255
5.2.4 动态口令 255
5.2.5 USB Key认证 255
5.2.6 基于冲击响应的认证模式 255
5.2.7 基于PKI体系的认证模式 256
5.3 PKI概述 256
5.3.1 PKI的国内外应用状态 257
5.3.2 PKI的应用前景 258
5.3.3 PKI存在的问题及发展趋势 258
5.4 基于X.509证书的PKI认证体系 260
5.4.1 数字证书 261
5.4.2 数字信封 264
5.4.3 PKI体系结构 264
5.4.4 基于X.509证书的身份认证 269
第 6 章 实战PKI 271
6.1 只有密码算法是不够的 271
6.2 利用OpenSSL实现CA的搭建 273
6.2.1 准备实验环境 273
6.2.2 熟悉CA环境 274
6.2.3 创建所需要的文件 276
6.2.4 CA自签名证书(构造根CA) 276
6.2.5 根CA为子CA颁发证书 278
6.2.6 普通用户向子CA申请证书 281
6.3 基于OpenSSL的证书编程 283
6.3.1 把DER编码转换为内部结构体的d2i_X509函数 284
6.3.2 获得证书版本的X509_get_version函数 285
6.3.3 获得证书序列号的X509_get_serialNumber函数 285
6.3.4 获得证书颁发者信息的X509_get_issuer_name函数 285
6.3.5 获得证书拥有者信息的X509_get_subject_name函数 286
6.3.6 获得证书有效期的起始日期的X509_get_notBefore函数 286
6.3.7 获得证书有效期的终止日期的X509_get_notAfter函数 286
6.3.8 获得证书公钥的X509_get_pubkey函数 286
6.3.9 创建证书存储区上下文环境的X509_STORE_CTX函数 286
6.3.10 释放证书存储区上下文环境的X509_STORE_CTX_free函数 287
6.3.11 初始化证书存储区上下文环境的X509_STORE_CTX_init函数 287
6.3.12 验证证书的X509_verify_cert函数 287
6.3.13 创建证书存储区的X509_STORE_new函数 287
6.3.14 释放证书存储区的X509_STORE_free函数 288
6.3.15 向证书存储区添加证书的X509_STORE_add_cert函数 288
6.3.16 向证书存储区添加证书吊销列表的X509_STORE_add_crl函数 288
6.3.17 释放X.509结构体的X509_free函数 288
6.4 证书编程实战 289
第 7 章 IPSec VPN基础知识 295
7.1 概述 295
7.1.1 IPSec VPN技术现状 296
7.1.2 国密VPN现状 296
7.2 IPSec协议研究 297
7.2.1 IPSec体系结构 297
7.2.2 传输模式和隧道模式 299
7.2.3 AH协议概述 299
7.2.4 AH数据包封装 300
7.2.5 ESP协议概述 301
7.2.6 ESP数据包封装 302
7.2.7 安全联盟 304
7.2.8 安全策略数据库和安全联盟数据库 305
7.3 IKE协议 306
7.3.1 IKE概述 306
7.3.2 IKE的安全机制 307
7.3.3 ISAKMP 308
7.4 IKEv1协议 309
7.4.1 第一阶段 310
7.4.2 第二阶段 312
7.4.3 主模式和快速模式的9个包分析 312
7.5 IKEv2协议 320
7.5.1 IKEv2概述 320
7.5.2 初始交换 321
7.5.3 创建子SA交换 326
7.5.4 通知交换 326
7.6 IKEv1与IKEv2的区别 326
7.7 IKEv2的优点 327
第 8 章 VPN实战 328
8.1 准备网络环境 328
8.2 strongSwan实战 333
8.2.1 编译安装strongSwan 333
8.2.2 常用程序概述 339
8.2.3 配置文件概述 342
8.2.4 使用ipsec.conf文件 343
8.2.5 使用swanctl.conf 353
8.2.6 strongSwan签发证书 357
8.3 OpenSwan实战 364
8.3.1 OpenSwan概述 364
8.3.2 OpenSwan的整体架构 364
8.3.3 OpenSwan的下载和编译 365
8.3.4 OpenSwan连接方式 367
8.3.5 OpenSwan的认证方式 367
8.3.6 配置文件ipsec.conf 367
第 9 章 SSL-TLS编程 378
9.1 SSL协议规范 378
9.1.1 SSL协议的优点 378
9.1.2 SSL协议的发展 378
9.1.3 SSLv3/TLS提供的服务 379
9.1.4 SSL协议层次结构模型 380
9.1.5 SSL记录协议层 380
9.1.6 SSL握手协议层 382
9.2 OpenSSL中的SSL编程 385
9.3 SSL函数 386
9.3.1 初始化SSL算法库的函数SSL_library_init 386
9.3.2 初始化SSL上下文环境变量的函数SSL_CTX_new 386
9.3.3 释放SSL上下文环境变量的函数SSL_CTX_free 387
9.3.4 以文件形式设置SSL证书的函数SSL_CTX_use_certificate_file 387
9.3.5 以结构体方式设置SSL证书的函数SSL_CTX_use_certificate 387
9.3.6 以文件形式设置SSL私钥的函数SSL_CTX_use_PrivateKey_file 387
9.3.7 以结构体方式设置SSL私钥的函数SSL_CTX_use_PrivateKey 387
9.3.8 检查SSL私钥和证书是否匹配的函数SSL_CTX_check_private_key 388
9.3.9 创建SSL结构的函数SSL_new 388
9.3.10 释放SSL套接字结构体的函数SSL_free 388
9.3.11 设置读写套接字的函数SSL_set_fd 388
9.3.12 设置只读套接字的函数SSL_set_rfd 388
9.3.13 设置只写套接字的函数SSL_set_wfd 389
9.3.14 启动TLS/SSL握手的函数SSL_connect 389
9.3.15 接受SSL连接的函数SSL_accept 389
9.3.16 获取对方的X.509证书的函数SSL_get_peer_certificate 389
9.3.17 向TLS/SSL连接写数据的函数SSL_write 390
9.3.18 从TLS/SSL连接上读取数据的函数SSL_Read 390
9.4 准备SSL通信所需的证书 390
9.4.1 准备实验环境 390
9.4.2 熟悉CA环境 391
9.4.3 创建根CA的证书 391
9.4.4 生成服务端的证书请求文件 393
9.4.5 签发服务端证书 393
9.4.6 生成客户端的证书请求文件 394
9.4.7 签发客户端证书 395
9.5 实战SSL网络编程 396
第 10 章 内核和文件系统 404
10.1 认识QEMU 405
10.1.1 QEMU的两种执行模式 405
10.1.2 QEMU的用途 406
10.1.3 使用QEMU虚拟机的几种选择 406
10.2 安装Linux版的QEMU 407
10.3 下载和编译内核 410
10.4 制作简易的文件系统 413
10.4.1 BusyBox简介 414
10.4.2 编译和安装BusyBox 415
10.4.3 制作根文件系统的映像文件 417
10.5 非嵌入式方式启动内核 419
10.5.1 BusyBox启动过程简要分析 423
10.5.2 在新内核系统中运行C程序 425
10.6 基本功能的完善 426
10.6.1 挂载proc支持ifconfig 426
10.6.2 挂载sysfs支持lspci 428
10.6.3 实现文件系统可写 433
10.7 QEMU的用户网络模式 433
10.7.1 不使用-net选项 434
10.7.2 使用-net选项 437
10.8 QEMU桥接网络模式 438
10.8.1 网桥的概念 439
10.8.2 TUN/TAP的工作原理 439
10.8.3 带TAP的QEMU系统架构 440
10.8.4 brctl命令的简单用法 442
10.8.5 3个网络配置选项 444
10.8.6 实战桥接模式网络 445
10.8.7 手工命令创建TAP网卡 450
10.8.8 使用qemu-ifup 452
10.9 QEMU运行国产操作系统 453
10.9.1 安装Windows版的QEMU 454
10.9.2 UEFI固件下载 454
10.9.3 安装麒麟操作系统 455
10.9.4 运行麒麟系统 457
10.10 开发一个内核模块 458
第 11 章 Kali Linux的渗透测试研究 461
11.1 渗透测试的概念 461
11.2 渗透测试的分类 464
11.2.1 基于信息量的测试 464
11.2.2 基于攻击强度的测试 465
11.2.3 基于范围的测试 465
11.2.4 基于方法的测试 466
11.2.5 基于技术的测试 466
11.2.6 基于初始攻击点的测试 467
11.3 渗透测试的局限性 467
11.4 渗透测试方法 468
11.4.1 开源安全测试方法手册 468
11.4.2 信息系统安全评估框架 469
11.4.3 信息安全测试与评估技术指南 469
11.4.4 开放式Web应用程序安全项目 469
11.4.5 渗透测试执行标准 469
11.5 渗透测试过程 470
11.5.1 计划与准备阶段 470
11.5.2 发现阶段 471
11.5.3 评估阶段 472
11.5.4 攻击阶段 472
11.5.5 报告阶段 473
11.6 渗透测试平台与工具 473
11.6.1 Kali Linux 473
11.6.2 Metasploit 474
11.6.3 Nmap 475
11.6.4 OpenVAS 476
11.6.5 VMware Workstation 477
11.6.6 VirtualBox 478
11.7 实验平台的设计 478
11.8 实验过程设计 480
本文摘自《Linux信息安全和渗透测试》,获出版社和作者授权发布。