码迷,mamicode.com
首页 > 其他好文 > 详细

安全和加密

时间:2017-09-29 00:26:23      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:linux

                                   安全

加密需要

不加密流量的易受攻击性

   密码/数据嗅探

   数据操作

   验证操作

   相当于邮寄明信片

不安全的传统协议

   telnet、FTP、POP3等等;不安全密码

   http、smtp、NFS等等;不安全信息

   Ldap、NIS、rsh等等;不安全验证

和加密


墨菲定律

墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A.

Murphy)提出的,原话:如果有两种或两种以上的方式去做

某件事情,而其中一种选择方式将导致灾难,则必定有人会

做出这种选择

主要内容:

任何事都没有表面看起来那么简单

所有的事都会比你预计的时间长

会出错的事总会出错

如果你担心某种情况发生,那么它就更有可能发生


安全机制

NIST(美国国家标准与技术研究院)定义的安全属性:

保密性:

数据保密性

隐私性

完整性:不可篡改

数据完整性

系统完整性

可用性

安全攻击: STRIDE

Spoofing(假冒)、Tampering(篡改)、Repudiation(否

认)、Information Disclosure(信息泄漏)、Denial of

Service(拒绝服务)和 Elevation of Privilege(提升权限)


安全

安全机制:

加密、数字签名、访问控制、数据完整性、认证交换、流量填

充、路由控制、公证

安全服务:

认证

访问控制

数据保密性

连接保密性

无连接保密性

选择域保密性

流量保密性

数据完整性

不可否认性



设计基本原则

使用成熟的安全系统

以小人之心度输入数据

外部系统是不安全的

最小授权

减少外部接口

缺省使用安全模式

安全不是似是而非

从STRIDE思考

在入口处检查

从管理上保护好你的系统


安全算法

常用安全技术

认证

授权

安全通信

审计

密码算法和协议:

对称加密

公钥加密

单向加密

认证协议

Linux系统:OpenSSL, gpg(pgp协议的实现)


对称加密算法

对称加密:加密和解密使用同一个密钥

DES:Data Encryption Standard,56bits

3DES:

AES:Advanced (128, 192, 256bits)

Blowfish,Twofish

IDEA,RC6,CAST5

特性:

1、加密、解密使用同一个密钥,效率高

2、将原始数据分割成固定大小的块,逐个进行加密

缺陷:

1、密钥过多

2、密钥分发

3、数据来源无法确认


非对称加密算法

公钥加密:密钥是成对出现

公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

数字签名:主要在于让接收方确认发送方身份

对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给

对方

数据加密:适合加密较小数据

缺点:密钥长,加密解密效率低下

算法:

RSA(加密,数字签名),DSA(数字签名),ELGamal


非对称加密

基于一对公钥/密钥对

 用密钥对中的一个加密,另一个解密

实现加密:

 接收者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

 发送者

使用接收者的公钥来加密消息M

将P(M)发送给接收者

 接收者

使用密钥S来解密:M=S(P(M))


非对称加密

实现数字签名:

 发送者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

使用密钥S来加密消息M

发送给接收者S(M)

 接收者

使用发送者的公钥来解密M=P(S(M))

结合签名和加密

分离签名

单向散列

将任意数据缩小成固定大小的“指纹”

任意长度输入

固定长度输出

若修改数据,指纹也会改变(“不会产生冲突”)

无法从指纹中重新生成数据(“单向”)

功能:数据完整性

常见算式

md5: 128bits、sha1: 160bits、sha224

sha256、sha384、sha512

常用工具

 md5sum | sha1sum  [ --check  ]  file

 openssl、gpg

 rpm  -V


密钥交换

密钥交换:IKE( Internet Key Exchange )

公钥加密:

DH (Deffie-Hellman):生成会话密钥,参看:

https://en.wikipedia.org/wiki/Diffie%E2%80%93Hel

lman_key_exchange

DH:

1、A: a,p 协商生成公开的整数a, 大素数p

B: a,p

2、A:生成隐私数据 :x (x<p ),计算得出 a^x%p,发送给B

B:生成隐私数据 :y,计算得出 a^y%p,发送给A

3、A:计算得出 [(a^y%p)^x] %p = a^xy%p,生成为密钥

B:计算得出 [(a^x%p)^y] %p = a^xy%p,生成为密钥

应用程序:RPM

文件完整性的两种实施方式

被安装的文件

 MD5单向散列

rpm  --verify  package_name  (or  -V)

发行的软件包文件

 GPG公钥签名

 rpm  --import  /etc/pki/rpm-gpg/RPM-GPG-KEY-

redhat*

 rpm  --checksig  pakage_file_name  (or  -K)


使用gpg实现对称加密

对称加密file文件

gpg -c file

ls file.gpg

在另一台主机上解密file

gpg -o file -d file.gpg

使用gpg工具实现公钥加密

在hostB主机上用公钥加密,在hostA主机上解密

在hostA主机上生成公钥/私钥对

gpg --gen-key

在hostA主机上查看公钥

gpg --list-keys

在hostA主机上导出公钥到wang.pubkey

gpg -a  --export -o wang.pubkey

从hostA主机上复制公钥文件到需加密的B主机上

scp wang.pubkey hostB:


使用gpg工具实现公钥加密

在需加密数据的hostB主机上生成公钥/私钥对

gpg --list-keys

gpg --gen-key

在hostB主机上导入公钥

gpg --import wang.pubkey

gpg --list-keys

用从hostA主机导入的公钥,加密hostB主机的文件file,生成

file.gpg

gpg -e -r wangxiaochun file

file file.gpg

使用gpg工具实现公钥加密

复制加密文件到hostA主机

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和证书

PKI: Public Key Infrastructure

签证机构:CA(Certificate Authority)

注册机构:RA

证书吊销列表:CRL

证书存取库:

X.509:定义了证书的结构以及认证协议标准

证书获取

证书类型:

证书授权机构的证书

服务器

用户证书

获取证书两种方法:

 使用证书授权机构

生成签名请求(csr)

将csr发送给CA

从CA处接收签名

 自签名的证书

自已签发自己的公钥

OpenSSL

OpenSSL:开源项目

三个组件:

openssl: 多用途的命令行工具,包openssl

libcrypto: 加密算法库,包openssl-libs

libssl:加密模块应用库,实现了ssl及tls,包nss

openssl命令:

两种运行模式:交互模式和批处理模式

openssl version:程序版本号

标准命令、消息摘要命令、加密命令

标准命令:

enc, ca, req, ...


openssl命令

对称加密:

工具:openssl enc, gpg

算法:3des, aes, blowfish, twofish

enc命令:

帮助:man enc

加密:

openssl enc -e -des3 -a -salt -in testfile

-out testfile.cipher

解密:

openssl enc -d -des3 -a -salt –in testfile.cipher

-out testfile

openssl ?

openssl命令

生成用户密码:

passwd命令:

帮助:man sslpasswd

openssl passwd -1 -salt SALT(最多8位)

openssl passwd -1 –salt  centos

生成随机数:

帮助:man sslrand

openssl rand -base64|-hex NUM

NUM: 表示字节数;-hex时,每个字符为十六进制,相

当于4位二进制,出现的字符数为NUM*2


openssl命令

生成密钥对儿:man genrsa

生成私钥

openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS

(umask 077; openssl genrsa –out test.key –des 2048)

从私钥中提取出公钥

openssl rsa -in PRIVATEKEYFILE –pubout –out PUBLICKEYFILE

Openssl rsa –in test.key –pubout –out test.key.pub

随机数生成器:伪随机数字

键盘和鼠标

块设备中断

/dev/random:仅从熵池返回随机数;随机数用尽,阻塞

/dev/urandom:从熵池返回随机数;随机数用尽,会利

软件生成伪随机数,非阻塞


OpenSSL

PKI:Public Key Infrastructure

CA

RA

CRL

证书存取库

建立私有CA:

OpenCA

openssl

证书申请及签署步骤:

1、生成申请请求

2、RA核验

3、CA签署

4、获取证书


创建CA和申请证书

创建私有CA:

openssl的配置文件:/etc/pki/tls/openssl.cnf

三种策略:匹配、支持和可选

匹配指要求申请填写的信息跟CA设置信息必须一致,支持指必

须填写这项申请信息,可选指可有可无

1、创建所需要的文件

touch /etc/pki/CA/index.txt 生成证书索引数据库文件

echo 01 > /etc/pki/CA/serial 指定第一个颁发证书的序列号

2、 CA自签证书

生成私钥

cd /etc/pki/CA/

(umask 066; openssl genrsa -out

/etc/pki/CA/private/cakey.pem 2048)



创建CA和申请证书

生成自签名证书

openssl req -new -x509 –key

/etc/pki/CA/private/cakey.pem -days  7300  -out

/etc/pki/CA/cacert.pem

-new: 生成新证书签署请求

-x509: 专用于CA生成自签证书

-key: 生成请求时用到的私钥文件

-days n:证书的有效期限

-out /PATH/TO/SOMECERTFILE: 证书的保存路径


创建CA和证书管理

 D 查看证书中的信息:

openssl x509 -in /PATH/FROM/CERT_FILE -noout

-text|issuer|subject|serial|dates

openssl ca -status SERIAL 查看指定编号的证书状态

4、吊销证书

 A 在客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE -noout

-serial -subject

 B 在CA上,根据客户提交的serial与subject信息,对比检验是

否与index.txt文件中的信息一致,吊销证书:

openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem


创建CA和证书管理

 C 指定第一个吊销证书的编号

注意:第一次更新证书吊销列表前,才需要执行

echo 01 > /etc/pki/CA/crlnumber

D 更新证书吊销列表

openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem

查看crl文件:

openssl crl -in /etc/pki/CA/crl/crl.pem -noout -text



SSH

ssh: secure shell, protocol, 22/tcp, 安全的远程登录

具体的软件实现:

OpenSSH: ssh协议的开源实现,CentOS默认安装

dropbear:另一个开源实现

SSH协议版本

v1: 基于CRC-32做MAC,不安全;man-in-middle

v2:双方主机协议选择安全的MAC方式

基于DH算法做密钥交换,基于RSA或DSA实现身份认证

两种方式的用户登录认证:

基于password

基于key


Openssh软件组成

OpenSSH介绍

相关包:

openssh

openssh-clients

openssh-server

工具:

基于C/S结构

Client: ssh, scp, sftp

Windows客户端:

xshell, putty, securecrt, sshsecureshellclient

Server: sshd


ssh客户端

客户端组件:

ssh, 配置文件:/etc/ssh/ssh_config

Host PATTERN

StrictHostKeyChecking no 首次登录不显示检查提示

格式:ssh [user@]host [COMMAND]

ssh [-l user] host [COMMAND]

-p port:远程服务器监听的端口

-b:指定连接的源IP

-v:调试模式

-C:压缩方式

-X: 支持x11转发

-Y:支持信任x11转发

ForwardX11Trusted yes

-t:  强制伪tty分配

ssh -t remoteserver1 ssh remoteserver2

允许实现对远程系统经验证地加密安全访问

当用户远程连接ssh服务器时,会复制ssh服务器

/etc/ssh/ssh_host*key.pub(CentOS7默认是

ssh_host_ecdsa_key.pub)文件中的公钥到客户机的

~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥

 ,不能匹配,将拒绝连接


基于key认证

基于密钥的认证:

(1) 在客户端生成密钥对

ssh-keygen -t rsa [-P ‘‘] [-f “~/.ssh/id_rsa"]

(2) 把公钥文件传输至远程服务器对应用户的家目录

ssh-copy-id [-i [identity_file]] [user@]host

(3) 测试

(4) 在SecureCRT或Xshell实现基于key验证

在SecureCRT工具—>创建公钥—>生成Identity.pub文件

转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化

格式),并复制到需登录主机上相应文件authorized_keys中,

注意权限必须为600,在需登录的ssh主机上执行:

ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys

基于key认证

(5)重设私钥口令:

ssh-keygen –p

(6)验证代理(authentication agent)保密解密后的密钥

   这样口令就只需要输入一次

   在GNOME中,代理被自动提供给root用户

   否则运行ssh-agent bash

(7)钥匙通过命令添加给代理

ssh-add

eg: ssh 的配置文件为 /etc/ssh/sshd_config

     ssh 192.168.37.107 `cat /etc/shadow`(即可进行连接也可进行查看)

     ssh-keygen -t rsa -p‘ ‘ -f ssh/id_rsa (生成秘钥对)

     ssh-copy-id -i id_rsa xxx.xxx.xx.xx(ip地址)

     scp f1.awk xxx.xxx.xxx.xxx:/app/(复制文件f1.awk到当前目录app下)

     ssh-keygen -p 对私钥进行加密

     ssh-agent 启用代理

     ssh-add 托管代理

scp命令

scp命令:

scp [options] SRC... DEST/

两种方式:

scp [options] [user@]host:/sourcefile /destpath

scp [options] /sourcefile [user@]host:/destpath

常用选项:

  -C: 压缩数据流

  -r: 递归复制

  -p: 保持原文件的属性信息

  -q: 静默模式

  -P PORT: 指明remote host的监听的端口


rsync复制命令


基于ssh和rsh服务实现高效率的远程系统之间复制文件

使用安全的shell连接做为传输方式

  rsync –av /etc server1:/tmp 复制目录和目录下文件

  rsync –av /etc/  server1:/tmp 只复制目录下文件

比scp更快,只复制不同的文件

选项:

 -n 模拟复制过程

 -v 显示详细过程

 -r 递归复制目录树

 -p 保留权限

 -t 保留时间戳

 -g 保留组信息

 -o 保留所有者信息

 -l  将软链接文件本身进行复制(默认)

 -L 将软链接文件指向的文件复制

 -a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)


sftp命令

交互式文件传输工具

用法和传统的ftp工具相似

利用ssh服务实现安全的文件上传和下载

使用ls cd mkdir rmdir pwd get put等指令,可用?或help

获取帮助信息

  sftp [user@]host

  sftp> help


SSH端口转发

SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。

但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发

,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”

(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通

道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均

能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此

同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许

SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

SSH 端口转发能够提供两大功能:

 加密 SSH Client 端至 SSH Server 端之间的通讯数据

 突破防火墙的限制完成一些之前无法建立的 TCP 连接


SSH端口转发

本地转发:

-L localport:remotehost:remotehostport sshserver

选项:

-f 后台启用

-N 不打开远程shell,处于等待状态

-g 启用网关功能

示例

ssh –L  9527:telnetsrv:23 -N  sshsrv

telnet 127.0.0.1 9527

当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,

再解密被转发到telnetsrv:23

data localhost:9527 localhost:XXXXX

sshsrv:22 sshsrv:YYYYY telnetsrv:23

 

telnet yum insatll telnet-server

       systemctl start telnet.socket 开启telnet服务

   eg: ssh -L 9527:xxx.xxx.xxx.xxx(本地IP):23(端口号) -FN xxx.xxx.xxx.xxx(远程服务IP)


远程转发:

-R sshserverport:remotehost:remotehostport sshserver

示例:

              目标机IP

ssh –R 9527:telnetsrv:23 –N  sshsrv

让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh

服务转发请求到本机ssh客户端,再由本机解密后转发到

telnetsrv:23

Data sshsrv:9527 sshsrv:22

localhost:XXXXX localhost:YYYYY telnetsrv:23


动态端口转发:(要用到翻墙技术,需要调板)目标不确定,端口地址不确定

当用firefox访问internet时,本机的1080端口做为代理服务

器,firefox的访问请求被转发到sshserver上,由sshserver

替之访问internet

在本机firefox设置代理socket proxy:127.0.0.1:1080

ssh -D 1080 root@sshserver 


X协议转发:


所有图形化应用程序都是X客户程序

 能够通过tcp/ip连接远程X服务器

 数据没有加密机,但是它通过ssh连接隧道安全进行

ssh -X user@remotehost gedit

remotehost主机上的gedit工具,将会显示在本机的X

服务器上

传输的数据将通过ssh连接加密


ssh服务器

服务器端:sshd, 配置文件: /etc/ssh/sshd_config

常用参数:

Port

ListenAddress ip

LoginGraceTime 2m

PermitRootLogin yes

StrictModes yes

MaxAuthTries 6

MaxSessions 10 同一个连接最大会话

PubkeyAuthentication yes

PermitEmptyPasswords no

PasswordAuthentication yes


ssh 服务的配置:/etc/ssh/sshd_config配置文件

            如果要对配置进行修改,一定要进行备份

         cp /etc/ssh/sshd_config{, .bak}

cat /var/run/ssh.pid查看正在运行的进程的pid号(进程编号)

 一但 systemctl stop sshd 停止服务后,sshd.pid文件就不存在

 tail -f /var/log/secure 查看登录失败的日志(进程远程连接,如果登录失败就会显示在日志中)

 

ssh常用参数

GatewayPorts no

ClientAliveInterval(单位:秒)

ClientAliveCountMax(默认3)

UseDNS yes

MaxStartups 未认证连接最大值,默认值10

Banner /path/file

限制可登录用户的办法:

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups


ssh服务的最佳实践

要使用默认端口

禁止使用protocol version 1

限制可登录用户

设定空闲会话超时时长

利用防火墙设置ssh访问策略

仅监听特定的IP地址

基于口令认证时,使用强密码策略

tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs

使用基于密钥的认证

禁止使用空密码

禁止root用户直接登录

限制ssh的访问频度和并发在线数

做好日志,经常分析


dropbear

编译安装dropbear示例

ssh协议的另一个实现:dropbear

安装准备:

 1、安装开发包组:

 2、下载dropbear-2017.75.tar.bz2

 3、tar xf dropbear-2017.75.tar.bz2

 4、less INSTALL README

 5、./configure

 6、make PROGRAMS="dropbear dbclient dropbearkey

dropbearconvert scp"

 7、make PROGRAMS="dropbear dbclient dropbearkey

dropbearconvert scp" install

dropbear

启动ssh服务:

 8、ls /usr/local/sbin/  /usr/local/bin/

 9、/usr/local/sbin/dropbear -h

 10、mkdir /etc/dropbear

 11、dropbearkey -t rsa -f

/etc/dropbear/dropbear_rsa_host_key -s 2048

 12、dropbearkey -t dss -f

/etc/dropbear/dropbear_dsa_host_key

 13、dropbear -p :2222 -F –E   #前台运行

dropbear -p :2222 #后台运行

客户端访问:

 14、ssh -p 2222 root@127.0.0.1

 15、dbclient -p 2222 root@127.0.0.1


AIDE

当一个入侵者进入了你的系统并且种植了木马,通常会想

办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,

他会尽量给你检查系统的过程设置障碍),通常入侵者会

修改一些文件,比如管理员通常用ps -aux来查看系统进

程,那么入侵者很可能用自己经过修改的ps程序来替换掉

你系统上的ps程序,以使用ps命令查不到正在运行的木马

程序。如果入侵者发现管理员正在运行crontab作业,也

有可能替换掉crontab程序等等。所以由此可以看出对于

系统文件或是关键文件的检查是很必要的。目前就系统完

整性检查的工具用的比较多的有两款:Tripwire和AIDE

,前者是一款商业软件,后者是一款免费的但功能也很强

大的工具


 AIDE(Adevanced Intrusion Detection Environment)

 高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的

完整性,审计计算机上的那些文件被更改过了。

 AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配

置文件。AIDE数据库能够保存文件的各种属性,包括:权限

(permission)、索引节点序号(inode number)、所属用户(user)、

所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间

(ctime)、最后访问时间(atime)、增加的大小以及连接数。AIDE

还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式

建立每个文件的校验码或散列号.

 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件

、邮件、/proc文件系统、用户起始目录以及临时目录


AIDE

安装

yum install aide

修改配置文件

vim /etc/aide.conf (指定对哪些文件进行检测)

/test/chameleon R

/bin/ps R+a

/usr/bin/crontab R+a

/etc    PERMS

!/etc/mtab   #“!”表示忽略这个文件的检查

R=p+i+n+u+g+s+m+c+md5 权限+索引节点+链接数+用

户+组+大小+最后一次修改时间+创建时间+md5校验值

NORMAL = R+rmd60+sha256


AIDE

初始化默认的AIDE的库:

/usr/local/bin/aide --init

生成检查数据库(建议初始数据库存放到安全的地方)

cd /var/lib/aide

mv aide.db.new.gz aide.db.gz

检测:

/usr/local/bin/aide --check

更新数据库

aide --update


安全和加密

标签:linux

原文地址:http://13287431.blog.51cto.com/13277431/1969333

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!