安全機制
資訊安全防護的目标
保密性 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是下載下傳到本地後的名稱
#批量下載下傳目标伺服器的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。
跳闆原理
ssh協定的另一實作: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#用戶端執行