加密与解密应用
本案例要求采用gpg工具实现加/解密及软件签名等功能,分别完成以下任务:
1. 检查文件的MD5校验和
2. 使用GPG实现文件机密性保护,加密和解密操作
3. 使用GPG的签名机制,验证数据的来源正确性
加密算法主要有以下几种分类:
1.为确保数据机密性算法:
a) 对称加密算法(AES,DES) gpg - d file2.txt.gpg > file2.txt
b) 非对称加密算法(RSA,DSA)
2.为确保数据完整性算法:
a) 信息摘要(MD5,SHA256,SHA512)
步骤一:检查文件的MD5校验和
1) 查看文件改动前的校验和,复制为新文件其校验和不变
[ root@proxy ~] # vim file1.txt
abcdef
123456779
[ root@proxy ~] # cp file1.txt file2.txt
[ root@proxy ~] # cat file1.txt > file3.txt
[ root@proxy ~] # md5sum f ile?.txt //文件内容一致,则校验和也不变
2) 对文件内容稍作改动,再次检查校验和,会发现校验和已大不相同
[ root@proxy ~] # echo "x" >> file1.txt
[ root@proxy ~] # md5sum file?.txt
步骤二:使用GPG对称加密方式保护文件
gnupg是非常流行的加密软件,支持所有常见加密算法,并且开源免费使用
1)确保已经安装了相关软件(默认已经安装好了)
[ root@proxy ~] # yum - y install gnupg2 //安装软件
[ root@proxy ~] # gpg - - version //查看版本
2) gpg使用对称加密算法加密数据的操作
[ root@proxy ~] # gpg - c file2.txt
根据提示依次输入两次密码即可。如果是在GNOME桌面环境,设置密码的交互界面会是弹出的窗口程序
如果是在tty终端执行的上述加密操作,则提示界面也是文本方式的
根据提示输入两次口令,加密后的文件(自动添加后缀 .gpg)就生成了,传递过程中只要发送加密的文件(比如 file2.txt.gpg)就可以了。
[ root@proxy ~] # cat file2.txt.gpg //查看加密数据为乱码
3)使用gpg对加密文件进行解密操作
收到加密的文件后,必须进行解密才能查看其内容。
[ root@proxy ~] # gpg - d file2.txt.gpg > file2.txt //解密后保存
gpg: 3DES 加密过的数据
... ... //根据提示输入正确密码
[ root@proxy ~] # cat file2.txt //查看解密后的文件
步骤三:使用GPG非对称加密方式保护文件
非对称加密/解密文件时,UserA(192.168.4.100)生成私钥与公钥,并把公钥发送给UserB(192.168.4.5),UserB使用公钥加密数据,并把加密后的数据传给UserA,UserA最后使用自己的私钥解密数据。
1)接收方UserA创建自己的公钥、私钥对(在192.168.4.100操作)
[ root@client ~] # gpg --list-keys //查看密钥
[ root@client ~] # gpg --gen-key //创建密钥对
请选择您要使用的密钥种类:
( 1) RSA and RSA ( def ault) //默认算法为RSA
您的选择? //直接回车默认( 1)
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?( 2048) //接受默认2048位
密钥的有效期限是?( 0) //接受默认永不过期
以上正确吗?( y /n) y //输入y 确认
... ...
真实姓名:UserA
电子邮件地址:UserA@tarena.com
注释:UserA
更改姓名( N) 、注释( C) 、电子邮件地址( E) 或确定( O) /退出( Q) ?O //输入大写O确认
... ...
注意:生产密钥后当前终端可能会变的无法使用,执行reset命令即可,或者关闭后再开一个终端
2)UserA导出自己的公钥文件(在192.168.4.100操作)
用户的公钥、私钥信息分别保存在pubring.gpg和secring.gpg文件内:
[ root@client ~] # gpg - - list- keys //查看公钥环
使用gpg命令结合--export选项将其中的公钥文本导出
[ root@client ~] # gpg - a - - export UserA > UserA.pub
//- - export的作用是导出密钥,- a的作用是导出的密钥存储为ASCII格式
[ root@client ~] # scp UserA.pub 192.168.4.5: /tmp/
//将公钥密钥传给Proxy
3)UserB导入接收的公钥信息(在192.168.4.5操作)
使用gpg命令结合--import选项导入发送方的公钥信息,以便在加密文件时指定对应的公钥。
[ root@proxy ~] # gpg - - import /tmp/UserA.pub
4) UserB使用公钥加密数据,并把加密后的数据传给UserA(在192.168.4.5操作)
[ root@proxy ~] # echo "I love you ." > love.txt
[ root@proxy ~] # gpg - e - r UserA love.txt
无论如何还是使用这把密钥吗?( y /N) y //确认使用此密钥加密文件
//- e选项是使用密钥加密数据
//- r选项后面跟的是密钥,说明使用哪个密钥对文件加密
# scp love.txt.gpg 192.168.4.100: /root /加密的数据传给UserA
4)UserA以自己的私钥解密文件(在192.168.4.100操作)
[ root@client ~] # gpg - d love.txt.gpg > love.txt
[ root@client ~] # cat love.txt //获得解密后的文件内容
I love you.
步骤四:使用GPG的签名机制,检查数据来源的正确性
使用私钥签名的文件,是可以使用对应的公钥验证签名的,只要验证成功,则说明这个文件一定是出自对应的私钥签名,除非私钥被盗,否则一定能证明这个文件来自于某个人
1)在client(192.168.4.100)上,UserA为软件包创建分离式签名将软件包、签名文件、公钥文件一起发布给其他用户下载。
[ root@client ~] # tar zcf log.tar /var/log //建立测试软件包
[ root@client ~] # gpg - b log.tar //创建分离式数字签名
[ root@client ~] # ls - lh log.tar*
-rw-rw-r--. 1 root root 170 8月 17 21:18 log.tar
-rw-rw-r--. 1 root root 287 8月 17 21:22 log.tar.sig
# scp log.tar* 192.168.4.5: /root //将签名文件与签名传给UserB
2)在192.168.4.5上验证签名
[ root@proxy ~] # gpg - - verify log.tar.sig log.tar
###############################
使用AIDE做入侵检测
本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作:
- 安装aide软件
- 执行初始化校验操作,生成校验数据库文件
- 备份数据库文件到安全的地方
- 使用数据库执行入侵检测操作
Aide通过检查数据文件的权限、时间、大小、哈希值等,校验数据的完整性。
使用Aide需要在数据没有被破坏前,对数据完成初始化校验,生成校验数据库文件,在被攻击后,可以使用数据库文件,快速定位被人篡改的文件。
步骤一:部署AIDE入侵检测系统
1)安装软件包
[ root@proxy ~] # yum - y install aide
2) 修改配置文件
确定对哪些数据进行校验,如何校验数据
[ root@proxy ~] # vim /etc/aide.conf
@@def ine DBDIR /var/lib/aide //数据库目录
@@def ine LOGDIR /var/log/aide //日志目录
database_out=f ile: @@{ DBDIR} /aide.db.new.gz //数据库文件名
//一下内容为可以检查的项目(权限,用户,组,大小,哈希值等)
#p: permissions
#i: inode:
#n: number of links
#u: user
#g: group
#s: size
#md5: md5 checksum
#sha1: sha1 checksum
#sha256: sha256 checksum
DATAONLY = p+n+u+g+s+acl+selinux+xattrs+sha256
//以下内容设置需要对哪些数据进行入侵校验检查
//注意:为了校验的效率,这里将所有默认的校验目录与文件都注释
//仅保留/root目录,其他目录都注释掉
按键ctrl+v,往下全选,按键shift+i,shift+#,然后按esc,全部就注释了
/root DATAONLY
#/boot NORMAL //对哪些目录进行什么校验
#/bin NORMAL
#/sbin NORMAL
#/lib NORMAL
#/lib64 NORMAL
#/opt NORMAL
#/usr NORMAL
#! /usr/src //使用[ ! ] ,设置不校验的目录
#!/usr/tmp
步骤二:初始化数据库,入侵后检测
1)入侵前对数据进行校验,生成初始化数据库
[ root@proxy ~] # aide - - init
AIDE, version 0.15.
AIDE database at /var/lib/aide/aide.db.new.gz initialized.
//生成校验数据库,数据保存在/var/lib/aide/aide.db.new.gz
2)备份数据库,将数据库文件拷贝到U盘(非必须的操作)
[ root@proxy ~] # cp /var/lib/aide/aide.db.new.gz /media/
3)入侵后检测
[ root@proxy ~] # cd /var/lib/aide/
[ root@proxy ~] # mv aide.db.new.gz aide.db.gz
[ root@proxy ~] # aide - - check //检查哪些数据发生了变化
############################
扫描与抓包分析
本案例要求熟悉Linux主机环境下的常用安全工具,完成以下任务操作:
1. 使用NMAP扫描来获取指定主机/网段的相关信息
2. 使用tcpdump分析FTP访问中的明文交换信息
步骤一:使用NMAP扫描来获取指定主机/网段的相关信息
1)安装软件
[ root@proxy ~] # yum - y install nmap
//基本用法:
# nmap [ 扫描类型] [ 选项] <扫描目标 ...>
//常用的扫描类型
// - sS,TCP SYN扫描(半开)
// - sT,TCP 连接扫描(全开)
// - sU,UDP扫描
// - sP,ICMP扫描
// - A,目标系统全面分析
2)检查192.168.4.100主机是否可以ping通
[ root@proxy ~] # nmap - sP 192.168.4.100
... ...
Nmap done: 1 IP address ( 1 host up) scanned in 0.02 seconds
使用-n选项可以不执行DNS解析
[ root@proxy ~] # nmap - n - sP 192.168.4.100
Nmap done: 1 IP address ( 1 host up) scanned in 0.03 seconds
3)检查192.168.4.0/24网段内哪些主机可以ping通
[ root@proxy ~] # nmap - n - sP 192.168.4.0/24
4)检查目标主机所开启的TCP服务
[ root@proxy ~] # nmap - sT 192.168.4.100
5)检查192.168.4.0/24网段内哪些主机开启了FTP、SSH服务
[ root@proxy ~] # nmap - p 21- 22 192.168.4.0/24
6)检查目标主机所开启的UDP服务
[ root@proxy ~] # nmap - sU 192.168.4.100 //指定- sU扫描UDP
53/udp open domain
111/udp open rpcbind
7)全面分析目标主机192.168.4.100和192.168.4.5的操作系统信息
[ root@proxy ~] # nmap - A 192.168.4.100,5
Starting Nmap 5.51 ( http: //nmap.org ) at 2017- 05- 17 18: 03 CST
Nmap scan report f or 192.168.4.100 //主机mail的扫描报告
步骤二:使用tcpdump分析FTP访问中的明文交换信息
1)准备Vsftpd服务器(192.168.4.5操作)
[ root@proxy ~] # yum - y install vsftpd
[ root@proxy ~] # systemctl restart vsftpd
2)启用tcpdump命令行抓包
执行tcpdump命令行,添加适当的过滤条件,只抓取访问主机192.168.4.5的21端口的数据通信 ,并转换为ASCII码格式的易读文本。
这里假设,192.168.4.5主机有vsftpd服务,如果没有需要提前安装并启动服务!!!
[ root@proxy ~] # tcpdump - A host 192.168.4.5 and tcp port 21
..... .. //进入等待捕获数据包的状态
//监控选项如下
// - i, 指定监控的网络接口(默认监听第一个网卡)
// - A, 转换为 ACSII 码,以方便阅读
// - w, 将数据包信息保存到指定文件
// - r, 从指定文件读取数据包信息
//tcpdump的过滤条件
// 类型:host、net、port、portrange
// 方向:src、dst
// 协议:tcp、udp、ip、wlan、arp、......
// 多个条件组合:and、or、not
3)执行FTP访问,并观察tcpdump抓包结果
从192.168.4.100访问主机192.168.4.5的vsftpd服务。
[ root@client ~] # yum - y install ftp
[ root@client ~] # ftp 192.168.4.5
... ...
Name ( 192.168.4.200: root) : tom //输入用户名
331 Please specif y the password.
Password: //输入密码
... ...
ftp>quit //退出
观察抓包的结果(回到porxy主机观察tcpdump抓包的结果):
[ root@proxy ~] #
... ...
4)再次使用tcpdump抓包,使用-w选项可以将抓取的数据包另存为文件,方便后期慢慢分析。
[ root@proxy ~]
# tcpdump - A - w ftp.cap host 192.168.4.5 and tcp port 21 //抓包并保存
tcpdump命令的-r选项,可以去读之前抓取的历史数据文件
# tcpdump - A - r ftp.cap | egrep '(USER| PASS) ' //分析数据包
步骤三:扩展知识,使用tcpdump分析Nginx的明文账户认证信息信息
1)在proxy主机(192.168.4.5)准备一台需要用户认证的Nginx服务器
[ root@proxy ~] # cd /usr/local/nginx/conf/
# cp nginx.conf .default nginx.conf //还原配置文件
# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
auth_basic "xx";
auth_basic_user_file "/usr/local/nginx/pass";
... ...
# htpasswd - c /usr/local/nginx/pass jerry //创建账户文件
New password: 123 //输入密码
Re- ty pe new password: 123 //确认密码
# nginx - s reload
2)在proxy主机使用tcpdump命令抓包
[ root@proxy ~] # tcpdump - A host 192.168.4.5 and tcp port 80
3)在真实机使用浏览器访问192.168.4.5
[ root@pc001 ~] # firefox http: //192.168.4.5 //根据提示输入用户名与密码
4)回到proxy查看抓包的数据结果
[ root@proxy ~] # tcpdump - A host 192.168.4.5 and tcp port 80
5) 查看base64编码内容
[ root@proxy ~] # echo "dG9tOjEy MzQ1Ng==" | base64 - d
tom: 123456
[ root@proxy ~] # echo "tom: 123456" | base64
dG9tOjEy MzQ1Ngo=
###############################