安全机制
信息安全防护的目标 保密性 Confidentiality 完整性 Integrity 可用性 Usability 可控制性Controlability 不可否认性 Non-repudiation 安全防护环节 物理安全:各种设备/主机、机房环境 系统安全:主机或设备的操作系统 应用安全:各种网络服务、应用程序 网络安全:对网络访问的控制、防火墙规则 数据安全:信息的备份与恢复、加密解密 管理安全:各种保障性的规范、流程、方法
#不安全的登录示例
select * from user where username="xxx" and password="xxx"
password="x' or "1=1
安全算法(DES)
常用安全技术 认证 授权 审计 安全通信 密码算法和协议: 对称加密 公钥加密 单向加密 认证协议 Linux系统:OpenSSL, gpg(pgp协议的实现) 非对称加密 公钥加密:密钥是成对出现 公钥:公开给所有人;public key 私钥:自己留存,必须保证其私密性;secret key 特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然 功能: 数字签名:主要在于让接收方确认发送方身份 对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方 数据加密:适合加密较小数据 缺点:密钥长,加密解密效率低下 算法:RSA(加密,数字签名),DSA(数字签名),ELGamal
算法 加密前 加密后 加密时间 解密时间
DES 1G 2G 4m 8m
RSA 1G 1G 1m 64h
哈希算法----单向散列算法 hash(data)=digest 摘要 digest不可反推data. digest长度固定 MD5:128 sha1:160 sha512:512
gpg 实现对称加密
gpg -c file #加密
gpg -d file #解密
.gnupg
gpg --gen-key
gpg -a --export -o magedu.pubkey
gpg --import magedu.pukey #导入mage的公钥
gpg --list-keys
gpg -e -r magedu fstab #加密
gpg -o f1 -d fstab.gpg #解密
gpg --delete-keys magedu
gpg --delete-secret-keys magedu
A发送前的动作:Pb{data+Sa{hash(data)}} B接受后的动作: Sb---data+sa{hash(data)} a1为B解封装用统一的hash运算a1=hash(data) a2=Pa-----hash(data)---digest a1=a2,原文未被修改。
openssl
OpenSSL:开源项目 三个组件: openssl: 多用途的命令行工具,包openssl libcrypto: 加密算法库,包openssl-libs libssl:加密模块应用库,实现了ssl及tls,包nss openssl命令: 两种运行模式:交互模式和批处理模式 openssl version:程序版本号 标准命令、消息摘要命令、加密命令 标准命令: enc, ca, req, ...
$1$O00iE0kF$XldXxBeSm6s50Pijm9yQB
1为MD5 salt为O00iE0kF
生成私钥
(umask 077; openssl genrsa –out test.key –des 2048)
从私钥中提取公钥
openssl rsa -in private.key2 -pubout -out public.key2
实验:向CA申请证书
1.建立root CA ;root CA
服务器上生成私钥
/etc/pki/tls/openssl.cnf
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
2.自签名rootCA
(umask 077;openssl genrsa -out private/cakey.pem 4096 )
tree
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
cat cacert.pem
openssl x509 -in cacert.pem -noout -text
openssl x509 -in cacert.pem -noout -dates
openssl x509 -in cacert.pem -noout -issuer
-new: 生成新证书签署请求 -x509: 专用于CA生成自签证书 -key: 生成请求时用到的私钥文件 -days n:证书的有效期限 -out / PATH/TO/SOMECERTFILE : 证书的保存路径
3.生成私钥及证书申请文件
服务器或用户申请证书
(umask 077;openssl genrsa -out app.key 1024)
openssl req -new -key app.key -out app.scr
scp app.scr 192.168.1.8:/etc/pki/CA
4.申请文件发给CA,CA颁发证书
touch index.txt
echo 00 > serial
openssl ca -in app.scr -out certs/app.crt -days 100
ll certs/app.crt
证书发送给客户端
基于key认证
基于密钥的登录方式 1 首先在客户端生成一对密钥(ssh-keygen) 2 并将客户端的公钥ssh-copy-id 拷贝到服务端 3 当客户端再次发送一个连接请求,包括ip、用户名 4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:acdf 5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端 6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端 7 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录 基于密钥的认证: (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
(5)重设私钥口令: ssh-keygen –p (6)验证代理(authentication agent)保密解密后的密钥 • 这样口令就只需要输入一次 • 在GNOME中,代理被自动提供给root用户 • 否则运行ssh-agent bash (7)钥匙通过命令添加给代理 ssh-add
实验:实现100台主机基于key的验证,实现远程管理.
批量解决多台服务器基于key的验证登录:
cat >> ip.txt <<EOF
192.168.1.6:passwd
192.168.1.7:passwd
192.168.1.8:passwd
192.168.1.9:passwd
192.168.1.10:passwd
EOF
#!/bin/bash
rpm -q expect &> /dev/null || yum install -y -q
[ -d /root/.ssh ] && rm -rf /root/.ssh
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
while read line;do
ip={line[%%:*]}
password={line[##*:]}
expect << EOF
set timeout 10
spawn ssh-copy-id $ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect eof
EOF
done < ip.txt
tcp_wapper 实现安全控制
1.实现主机的访问控制。
客户端Client_list格式 以逗号或空格分隔的客户端列表 基于IP地址:192.168.10.1 192.168.1. 基于主机名:www.qq.com .qq.com 较少用 基于网络/掩码:192.168.0.0/255.255.255.0 基于net/prefixlen: 192.168.1.0/24(CentOS7) 基于网络组(NIS 域):@mynetwork 内置ACL:ALL,LOCAL,KNOWN,UNKNOWN,PARANOID
#只允许192.168.1.0/24的主机访问sshd
/etc/hosts.allow
sshd: 192.168.1.
/etc/hosts.deny
sshd :ALL
2.日志功能
sshd: ALL :spawn echo "$(date +%%F) login attempt from %c to %s,%d" >>/var/log/sshd.log
说明: 在/etc/hosts.allow中添加,允许登录,并记录日志 在/etc/hosts.deny中添加,拒绝登录,并记录日志 %c 客户端信息 %s 服务器端信息 %d 服务名 %p 守护进程的PID %% 表示% vsftpd: 172.16. :twist /bin/echo “connection prohibited”
AIDE
当一个入侵者进入了你的系统并且种植了木马,通常会想办法来隐蔽这个木马
(除了木马自身的一些隐蔽特性外,他会尽量给你检查系统的过程设置障碍),
通常入侵者会修改一些文件,比如管理员通常用ps -aux来查看系统进程,那么
入侵者很可能用自己经过修改的ps程序来替换掉你系统上的ps程序,以使用ps
命令查不到正在运行的木马程序。如果入侵者发现管理员正在运行crontab作
业,也有可能替换掉crontab程序等等。所以由此可以看出对于系统文件或是关
键文件的检查是很必要的。目前就系统完整性检查的工具用的比较多的有两款:
Tripwire和AIDE,前者是一款商业软件,后者是一款免费的但功能也很强大的工
具
AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。AIDE
数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号
(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时
间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。
AIDE还能够使用下列算法:sha1、md5、rmd160、tiger,以密文形式建立每个
文件的校验码或散列号.
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的库:
/usr/local/bin/aide --init
生成检查数据库(建议初始数据库存放到安全的地方)
cd /var/lib/aide
mv aide.db.new.gz aide.db.gz
检测:
/usr/local/bin/aide --check
更新数据库
aide --update
pssh
pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件copy
--version:查看版本
-h:主机文件列表,内容格式'[user@]host[:port]'
-H:主机字符串,内容格式'[user@]host[:port]'
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输入文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-v:详细模式
-A:手动输入密码模式
-x:额外的命令行参数使用空白符号,引号,反斜线处理
-X:额外的命令行参数,单个参数模式,同-x
-i:每个服务器内部处理信息输出
-P:打印出服务器返回信息
pscp.pssh pscp.pssh功能是将本地文件批量复制到远程主机
pscp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par] [-o outdir] [-e errdir]
[-t timeout] [-O options] [-x args] [-X arg] local remote
Pscp-pssh选项 -v 显示复制过程 -a 复制过程中保留常规属性 -r 递归复制目录
#将本地curl.sh 复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/test/curl.sh /app/
pscp.pssh -h host.txt /root/test/curl.sh /app/
#将本地多个文件批量复制到/app/目录
pscp.pssh -H 192.168.1.10 /root/f1.sh /root/f2.sh /app/
#将本地目录批量复制到/app/目录
pscp.pssh -H 192.168.1.10 -r /root/test/ /app/
pslurp
pslurp.pssh功能是将远程主机的文件批量复制到本地
pslurp [-vAr] [-h hosts_file] [-H [user@]host[:port]] [-l user] [-p par][-o outdir] [-e errdir] [-t timeout] [-O options] [-x args] [-X arg] [-L localdir]
remote local(本地名) Pslurp-pssh选项 -L 指定从远程主机下载到本机的存储的目录,local是下载到本地后的名称 -r 递归复制目录
#批量下载目标服务器的messages文件至/data下,并更名为m
pslurp -H 192.168.1.10 -L /data/ /var/log/messages m
SSH端口转发
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的 加密及解密服务。这一过程也被叫做“隧道”(tunneling),这是因为 SSH 为 其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP, LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文 传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是 允许 SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯 SSH 端口转发能够提供两大功能: 加密 SSH Client 端至 SSH Server 端之间的通讯数据 突破防火墙的限制完成一些之前无法建立的 TCP 连接
场景1:在外地的client想访问公司的telnet服务器(不能直连),我在外地。
localclient:192.168.30.7 sshsrv:6 telnetsrv:17 ssh -L 9527:192.168..30.17:23 -Nf 192.168.30.6 (搭桥梁) telnet 127.0.0.1:9527 直连telnet服务器 保证telnet-server包在服务器上有安装 centos上telnet不让root登录,只允许普通用户登录
场景2 :在外地的client想访问公司的telnet服务器(不能直连),我在lanserver。
lanserver:ssh client; telnet client:192.168.30.6 internet client:192.168.30.7 telnetsrv:192.168.30.17 在lanserver上操作: ssh -R 9527:192.168.30.17:23 -Nf 192.168.30.7
跳板原理
当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问 请求被转发到sshserver上,由sshserver替之访问internet ssh -D 1080 root@sshserver curl -socks5 127.0.0.1:1080 http://www.qq.com
ssh协议的另一实现:dropbear
dropbear编译
yum groupinstall “Development tools”
#下载dropbear-2018.76.tar.bz2
tar -xvf dropbear-2018.76.tar.bz2
less INSTALL RAEDME
./configure --prefix=/data/dropbear --sysconfdir=/etc/dropbear/
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
mkdir /etc/dropbear #confdir没有生成成功,自建这个文件夹
cat >>/etc/profile.d/dropbear.sh<< EOF
PATH=/data/dropbear/bin/:/data/dropbear/sbin/:$PATH
EOF #添加环境变量
. /etc/profile.d/dropbear.sh
dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
dropbear -p :9528 -F –E #前台运行
dropbear -p :9528 #后台运行
ssh 192.168.1.8 -p 9528#客户端执行