天天看點

加密和安全初解

安全機制

資訊安全防護的目标

保密性 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#用戶端執行           

繼續閱讀