信息安全防护的目标
1. 保密性 Confidentiality
2. 完整性 Integrity
3. 可用性 Usability
4. 可控制性 Controlability
5. 不可否认性 Non-repudiation
安全防护环节
1. 物理安全:各种设备/主机、机房环境
2. 系统安全:主机或设备的操作系统
3. 应用安全:各种网络服务、应用程序
4. 网络安全:对网络访问的控制、防火墙规则
5. 数据安全:信息的备份与恢复、加密解密
6. 管理安全:各种保障性的规范、流程、方法
安全攻击: STRIDE
1. Spoofing 假冒
2. Tampering 篡改
3. Repudiation 否认
4. Information Disclosure 信息泄漏
5. Denial of Service 拒绝服务
6. Elevation of Privilege 提升权限
安全设计基本原则
1. 使用成熟的安全系统
2. 以小人之心度输入数据
3. 外部系统是不安全的
4. 最小授权
5. 减少外部接口
6. 缺省使用安全模式
7. 安全不是似是而非
8. 从STRIDE思考
9. 在入口处检查
10. 从管理上保护好你的系统
常用安全技术
1. 认证
2. 授权
3. 审计
4. 安全通信
加密算法和协议
1. 对称加密
2. 公钥加密
3. 单向加密
4. 认证协议
公钥加密:密钥是成对出现
公钥:公开给所有人;public key
私钥:自己留存,必须保证其私密性;secret key
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
(1)数字签名:主要在于让接收方确认发送方身份
(2)对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方
(3)数据加密:适合加密较小数据
缺点:密钥长,加密解密效率低下
算法:
RSA(加密,数字签名)
DSA(数字签名)
ELGamal
RSA
RSA:公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的,RSA取名来自开发他们三者的名字,后成立RSA数据安全有限公司。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥
DSA (Digital Signature Algorithm):1991年7月26日提交,并归属于David W. Kravitz前NSA员工,DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为SS(DigitalSignature Standard), DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多
将任意数据缩小成固定大小的“指纹”
(1)任意长度输入
(2)固定长度输出
(3)若修改数据,指纹也会改变(“不会产生冲突”)
(4)无法从指纹中重新生成数据(“单向”)
功能:数据完整性
常见算法
(1)md5: 128bits
(2)sha1: 160bits
(3)sha224 、sha256
(4)sha384、sha512
常用工具
(1)md5sum | sha1sum [ --check ] file
(2)openssl、gpg
(3)rpm -V
常用组合(对称+非对称+数字签名)
A–>B
A: key(data+Sa[hash(data)])+Pb(key)
应用程序RPM:文件完整性的两种实施方式
MD5单向散列:rpm --verify package_name (or -V)
发行的软件包文件:GPG公钥签名
1. rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*
2. rpm --checksig pakage_file_name (or -K)
IKE( Internet Key Exchange )
DH (Deffie-Hellman):生成会话密钥,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表
参看:https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange
gpg -c file
ls file.gpg
gpg -o file -d file.gpg
公钥和私钥是一对,公钥就好比是一把“锁”,私钥就是开锁的“钥匙”(也可以反过来,公钥是钥匙,私钥是锁)一锁对应一钥匙。钥匙是不能随便给别人的,只能自己保管。锁可以给需要加密数据给你的人。想要给你发数据,就得用你的锁所数据加密,然后用自己的钥匙解开。要给别人发数据,得用别人的锁加密,别人用他自己的钥匙解密。
实验:在hostB主机上用公钥加密,在hostA主机上解密。
hostA
yum install rng-tools
systemctl restart rngd
gpg --gen-key
gpg --list-keys
gpg -a --export -o wang.pubkey
scp wang.pubkey [email protected]:/root
hostB
yum install rng-tools
systemctl restart rngd
gpg --gen-key
gpg --import wang.pubkey
gpg --list-keys
查看是否导入成功gpg -e -r wangxiaochun file
(-r指定uid名)file file.gpg
scp fstab.gpg hostA:
hostA
gpg -d file.gpg
gpg -o file -d file.gpg
gpg --delete-keys wangxiaochun
gpg --delete-secret-keys wangxiaochun
这种加密方式存在风险:中间人攻击。
这篇文章前部分讲解的CA证书挺通俗易懂的:
https://www.cnblogs.com/handsomeBoys/p/6556336.html
(1)建立私有CA(OpenCA 或 openssl)
(2)申请证书
(3)颁发证书
证书申请及签署步骤:
1、生成申请请求
2、RA核验
3、CA签署
4、获取证书
创建私有CA配置文件:
1. openssl的配置文件:/etc/pki/tls/openssl.cnf
2. 三种策略:match匹配
、optional可选
、supplied提供
match:要求申请填写的信息跟CA设置信息必须一致
optional:可有可无,跟CA设置信息可不一致
supplied:必须填写这项申请信息,
host A
(umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 << EOF
CN
beijing
beijing
wang
devops
ca.wang.com
[email protected]
EOF
#选项说明:
-new:生成新证书签署请求
-x509:专用于CA生成自签证书
-key:生成请求时用到的私钥文件
-days n:证书的有效期限
-out /PATH/TO/SOMECERTFILE: 证书的保存路径
openssl x509 -in cacert.pem -noout -text
可查看生成的证书#生成证书索引数据库文件
touch /etc/pki/CA/index.txt
#当前证书序列号
echo 01 > /etc/pki/CA/serial
host B
(umask 066;openssl genrsa -out /data/cert/web.key 2048)
openssl req -new -key /data/cert/web.key -out /data/cert/web.csr <<EOF
CN
beijing
bj
wang
web
web.wang.com
[email protected]
EOF
scp /data/cert/web.csr [email protected]:/data/cert/
host A
openssl ca -in /data/cert/web.csr -out /etc/pki/CA/certs/web.crt -days 150
openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates
openssl ca -status 编号
[0]$ cat index.txt.attr
unique_subject = no
#yes表示不允许,更改为no
openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem
echo 01 > /etc/pki/CA/crlnumber
openssl ca -gencrl -out /etc/pki/CA/crl.pem
openssl crl -in /etc/pki/CA/crl.pem -noout -text
SSL:Secure Socket Layer
SSL包含记录层(Record Layer)和传输层,记录层协议确定传输层数据的封装格式。传输层安全协议使用X.509认证,之后利用非对称加密演算来对通信方做身份认证,之后交换对称密钥作为会谈密钥(Session key)。这个会谈密钥是用来将通信两方交换的数据做加密,保证两个应用间通信的保密性和可靠性,使客户与服务器应用之间的通信不被攻击者窃听。
TLS: Transport Layer Security
1995:SSL 2.0 Netscape
1996:SSL 3.0
1999:TLS 1.0
2006:TLS 1.1 IETF(Internet工程任务组) RFC 4346
2008:TLS 1.2 当前使用
2015:TLS 1.3
功能:机密性,认证,完整性,重放保护
两阶段协议:分为握手阶段和应用阶段
1. 握手阶段(协商阶段):客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成
2. 应用阶段:在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信
SSL/TLS
1. Handshake协议:包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
2. ChangeCipherSpec 协议:一条消息表明握手协议已经完成
3. Alert 协议:对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告
4. Record 协议:包括对消息的分段、压缩、消息认证和完整性保护、加密等
5. HTTPS 协议:就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输
生成的随机密钥是指对称加密密钥
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工具
AIDE(Advanced Intrusion Detection Environment高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了
yum install aide
/etc/aide.conf
aide --init
aide --check
aide --update
yum install aide
mkdir -p /data/dir1
echo hello > /data/f1
cd /data
/etc/aide.conf
最下⾯添加的配置信息,让其检测/data/⽬录下的内容,不检查dir1下的内容:vim /etc/aide.conf
#最后一行添加:
/data/ CONTENT
!/data/dir1
aide --init
mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz
echo "hello world" > /data/f1
aide --check
echo fff > /data/dir1/ss
aide --update
#生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
aide --update
—生成—> aide.db.new.gz
—生成检查数据库—> aide.db.gz
echo sss >/data/dir1/ss
aide --check
•来自sudo包,man 5 sudoers
•sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
•sudo可以提供日志,记录每个用户使用sudo操作
•sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
•sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
su –l username –c 'command'
sudo –i –u wang
sudo [-u user] COMMAND
[选项] | 意义 |
---|---|
-V | 显示版本信息等配置信息 |
-u user | 默认为root |
-l | 列出用户在主机上可用的和被禁止的命令 |
-v | 再延长密码有效期限5分钟,更新时间戳 |
-k | 清除时间戳(1970-01-01),下次需要重新输密码 |
-K | 与-k类似,还要删除时间戳文件 |
-b | 在后台执行指令 |
-p | 改变询问密码的提示符号 |
示例:sudo -p "password on %h for user %p:"
通过visudo命令编辑配置文件,具有语法检查功能
visudo -c
检查语法
visudo -f /etc/sudoers.d/test
指定编辑的sudoers配置文件
配置文件:/etc/sudoers
, /etc/sudoers.d/
时间戳文件:/var/db/sudo
日志文件:/var/log/secure
配置文件支持使用通配符glob
\x
转义
[[alpha]]
字母 示例: /bin/ls [[alpha]]*
配置文件规则有两类
1、别名定义:不是必须的
2、授权规则:必须的
示例:
root ALL=(ALL) ALL
wang 192.168.88.7=(root) /bin/mount /dev/sr0 /mnt
格式说明:
user host=(runas) command
Users
运行命令者的身份和runas
以哪个用户的身份:
username
、#uid
、%group_name
、%#gid
、user_alias|runas_alias
host
通过哪些主机:
ip或hostname
、network(/netmask)
、host_alias
command
运行哪些命令:
command name
、directory
、sudoedit
、Cmnd_Alias
别名定义:
AliasType NAME1 = item1, item2, item3 : NAME2 = item4, item5
AliasType别名有四种类型:User_Alias
, Runas_Alias
, Host_Alias
,Cmnd_Alias
[root]$ vim /etc/sudoers
wang ALL=(root) /usr/bin/cat /etc/shadow
[root]$ vim /etc/sudoers
%wang ALL= ALL
#以root身份运行可以省略“=”后的ALL或者是(root)
%wheel ALL=(ALL) NOPASSWD: ALL
#NOPASSWD表示可以不输入密码执行sudo
[root]$ vim /etc/sudoers.d/wangfile
wang ALL= ALL
#除了可以用vi编辑,也可以用visudo,-c可以进行内容检查
#visudo -c -f /etc/sudoers.d/wangfile
#1001 ALL= ALL
%#1000 ALL= ALL
#符号"#",后面跟uid,也可以用"%#"后面跟gid
#别名只能使⽤⼤写字⺟和数字构成
[root]$ vim /etc/sudoers.d/wang
#别名定义
User_Alias SYSUSER=chen
Host_Alias SYSHOST=192.168.88.0/24
Runas_Alias SYSRUNAS=root
Cmnd_Alias SYSCMD=/bin/cat /etc/shadow
#策略
SYSUSER SYSHOST=(SYSRUNAS) SYSCMD
Defaults:wang runas_default=tom
wang ALL=(tom,jerry) ALL
wang 192.168.1.6,192.168.1.8=(root) /usr/sbin/,!/usr/sbin/useradd
wang ALL=(ALL) /bin/cat /var/log/messages*
sudo cat /var/log/messages /etc/passwd
Wildcards in command line arguments should be used with care.
Command line arguments are matched as a single, concatenated string.
This mean a wildcard character such as ‘?’ or ‘*’ will match across word
boundaries, which may be unexpected. For example, while a sudoers entry
like:
%operator ALL = /bin/cat /var/log/messages*
will allow command like:
$ sudo cat /var/log/messages.1
It will also allow:
$ sudo cat /var/log/messages /etc/shadow
[root]$ vim /etc/sudoers.d/chen
chen ALL=(root) /bin/cat /var/log/messages*,!/bin/cat /var/log/message* *
链接跳转:Linux进阶_TCPWrappers介绍
链接跳转:Linux进阶_OpenSSL详解
链接跳转:Linux进阶_PAM认证机制