linux服務安全與監控二
資料加密的最大特點是不可逆性
確保資料的機密性:
–對稱加密:加密/解密用同一個金鑰
–非對稱加密:加密/解密用不同的金鑰(公鑰,私鑰)
保護資訊的完整性:
–資訊摘要:基於輸入的資訊生成長度較端,位數固定的雜湊值
常見的加密演算法:
對稱加密:
–DES ,Data Encryption Standard
–AES , Advanced Encryption Standard
非對稱加密:
–RSA,Rivest Shamish Adleman
–DSA,Digita Signature Algorithm
一 : 檢查檔案的MD5校驗和
1 將etc目錄下的配置檔案加密後寫入新的檔案 a.md5
for i in `ls /etc/*.conf`
do
md5sum $i >>/a.md5
done
2 任意改動/etc/my.conf的內容:修改追加重定向的檔案b.md5
for i in `ls /etc/*.conf`
do
md5sum $i >> /b.md5
done
3 利用diff檢視檔案的的md5校驗碼的區別
[[email protected] ~]# diff /a.md5 /b.md5
1,2d0
< b244e3b37f10a5e9275303908d27d712 my.cnf
二 使用GPG對稱加密方式保護檔案,自身加密,自身解密
1 檢視版本
[[email protected] ~]# gpg --version gpg (GnuPG) 2.0.22 libgcrypt 1.5.3 Copyright (C) 2013 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Home: ~/.gnupg 支援的演算法: 公鑰:RSA, ?, ?, ELG, DSA 對稱加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256 雜湊:MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224 壓縮:不壓縮, ZIP, ZLIB, BZIP2
2 定義一個文字檔案
[[email protected] ~]# echo 123456 > w.txt
3 使用gpg對稱加密
[[email protected] ~]# gpg -c w.txt //在當前目錄下生成w.txt.gpg檔案
4 對gpg檔案解密
[[email protected] ~]# gpg -d w.txt.gpg > w1.txt
gpg: 鑰匙環‘/root/.gnupg/secring.gpg’已建立
gpg: CAST5 加密過的資料
gpg: 以 1 個密碼加密
gpg: 警告:報文未受到完整的保護
[[email protected] ~]# cat w1.txt
123456
三 非對稱金鑰:私鑰解密 公鑰加密
步驟:
–UserA(生成一對金鑰)
–UerA把公鑰傳給UserB
–UserB使用公鑰加密資料,並把資料傳給UserA
–UserA使用公鑰解密
1 主機web33 192.168.4.33生成非對稱金鑰對
[[email protected] ~]# gpg --gen-key //建立金鑰對
… …
請選擇您要使用的金鑰種類:
(1) RSA and RSA (default) //預設演算法為RSA
(2) DSA and Elgamal
(3) DSA (僅用於簽名)
(4) RSA (僅用於簽名)
您的選擇? //直接回車預設(1)
RSA 金鑰長度應在 1024 位與 4096 位之間。
您想要用多大的金鑰尺寸?(2048) //接受預設2048位
您所要求的金鑰尺寸是 2048 位
請設定這把金鑰的有效期限。
0 = 金鑰永不過期
<n> = 金鑰在 n 天后過期
<n>w = 金鑰在 n 周後過期
<n>m = 金鑰在 n 月後過期
<n>y = 金鑰在 n 年後過期
金鑰的有效期限是?(0) //接受預設永不過期
金鑰永遠不會過期
以上正確嗎?(y/n)y //輸入y確
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <[email protected]>"
真實姓名:liuqi
電子郵件地址:[email protected]
註釋:this is key
您選定了這個使用者標識:
“liuqi (this is key) <[email protected]>”
更改姓名(N)、註釋(C)、電子郵件地址(E)或確定(O)/退出(Q)?O
您需要一個密碼來保護您的私鑰。
您不想要有密碼――這個想法實在是遭透了!
不過,我仍然會照您想的去做。您任何時候都可以變更您的密碼,僅需要
再次執行這個程式,並且使用“--edit-key”選項即可。
我們需要生成大量的隨機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。
我們需要生成大量的隨機位元組。這個時候您可以多做些瑣事(像是敲打鍵盤、移動
滑鼠、讀寫硬碟之類的),這會讓隨機數字發生器有更好的機會獲得足夠的熵數。
gpg: /root/.gnupg/trustdb.gpg:建立了信任度資料庫
gpg: 金鑰 FA75B8F6 被標記為絕對信任
公鑰和私鑰已經生成並經簽名。
gpg: 正在檢查信任度資料庫
gpg: 需要 3 份勉強信任和 1 份完全信任,PGP 信任模型
gpg: 深度:0 有效性: 1 已簽名: 0 信任度:0-,0q,0n,0m,0f,1u
pub 2048R/FA75B8F6 2018-12-08
金鑰指紋 = F3D3 39C9 0CF7 DD37 3CD0 78C6 B906 71C1 FA75 B8F6
uid liuqi (this is key) <[email protected]>
sub 2048R/336316F2 2018-12-08
檢視公鑰環
[[email protected] ~]# gpg --list-keys //檢視公鑰環
/root/.gnupg/pubring.gpg
pub 2048R/FA75B8F6 2018-12-08
uid liuqi (this is key) <[email protected]>
sub 2048R/336316F2 2018-12-08
//注意:這個公鑰的物件可以用這些來表示:FA75B8F6 liuqi [email protected] 336316F2
//需要用的時候隨意選擇一個即可,只要不與其他公鑰環的資訊衝突
2 web33匯出自己的公鑰檔案
[[email protected] ~]# gpg -a --export liuqi>liuqi.pub
–匯出到當前目錄下,檔名自定義
–可以用之前定義金鑰對的真實姓名或者郵箱作為匯出物件
–當不加選項a時看到的liuqi.pub內容為亂碼
3 傳遞金鑰檔案給web44 :192.168.4.44
[[email protected] ~]# scp liuqi.pub 192.168.4.44:/tmp/
4 web44匯入接收的公鑰資訊
[[email protected] ~]# gpg --import /tmp/liuqi.pub
gpg: 已建立目錄‘/root/.gnupg’
gpg: 新的配置檔案‘/root/.gnupg/gpg.conf’已建立
gpg: 警告:在‘/root/.gnupg/gpg.conf’裡的選項於此次執行期間未被使用
gpg: 鑰匙環‘/root/.gnupg/secring.gpg’已建立
gpg: 鑰匙環‘/root/.gnupg/pubring.gpg’已建立
gpg: /root/.gnupg/trustdb.gpg:建立了信任度資料庫
gpg: 金鑰 FA75B8F6:公鑰“liuqi (this is key) <[email protected]>”已匯入
gpg: 合計被處理的數量:1
gpg: 已匯入:1 (RSA: 1)
[[email protected] ~]# gpg --list-key //檢視公鑰資訊
/root/.gnupg/pubring.gpg
pub 2048R/FA75B8F6 2018-12-08
uid liuqi (this is key) <[email protected]>
sub 2048R/336316F2 2018-12-08
5 在web44上利用公鑰將檔案加密後傳給web33
[[email protected] ~]# gpg -e -r [email protected] hello.txt //-e選項是使用金鑰加密資料 , -r選項後面跟的是金鑰,說明使用哪個金鑰對檔案加密
gpg: 336316F2:沒有證據表明這把金鑰真的屬於它所聲稱的持有者
pub 2048R/336316F2 2018-12-08 liuqi (this is key) <[email protected]>
主鑰指紋: F3D3 39C9 0CF7 DD37 3CD0 78C6 B906 71C1 FA75 B8F6
子鑰指紋: 682E 2A70 BBD5 E982 4D5C 0FF1 B8E9 0CC2 3363 16F2
這把金鑰並不一定屬於使用者標識聲稱的那個人。如果您真的知道自
己在做什麼,您可以在下一個問題回答 yes。
無論如何還是使用這把金鑰嗎?(y/N)y
[[email protected] ~]# ls
anaconda-ks.cfg hello.txt.gpg
[[email protected] ~]# scp hello.txt.gpg 192.168.4.33:/root //加密的資料傳給web33
6 web33以自己的私鑰解密檔案
[[email protected] ~]# gpg -d hello.txt.gpg > web33.txt
gpg: 由 2048 位的 RSA 金鑰加密,鑰匙號為 336316F2、生成於 2018-12-08
“liuqi (this is key) <[email protected]>”
[[email protected] ~]# cat web33.txt
hello world
四 非對稱金鑰 : 私鑰(簽名) 公鑰(驗證簽名) //驗證資料的來源與私鑰簽名
–使用私鑰簽名的檔案,是可以使用對應的公鑰驗證簽名的,只要驗證成功,則說明這個檔案一定是出自對應的私鑰簽名,除非私鑰被盜,否則一定能證明這個檔案來自於某個人!
1 建立測試軟體包
[[email protected] ~]# tar -zcf log.tar /var/log
2 為軟體包建立分離式簽名
[[email protected] ~]# gpg -b log.tar
[[email protected] ~]# ls //注意建立簽名後生成的log.tar.sig為檔案簽名
anaconda-ks.cfg liuqi.pub log.tar 公共 圖片 音樂
hello.txt.gpg lnmp_soft log.tar.sig
3 將檔案和簽名傳送給web44 192.168.4.44
[[email protected] ~]# scp log.tar* 192.168.4.44:/root
[email protected]'s password:
log.tar 100% 568KB 11.4MB/s 00:00
log.tar.sig
4 web44驗證資料的來源
[[email protected] ~]# gpg --verify log.tar.sig log.tar
gpg: 於 2018年12月08日 星期六 11時40分47秒 CST 建立的簽名,使用 RSA,鑰匙號 FA75B8F6
gpg: 完好的簽名,來自於“liuqi (this is key) <[email protected]>”
gpg: 警告:這把金鑰未經受信任的簽名認證!
gpg: 沒有證據表明這個簽名屬於它所聲稱的持有者。
主鑰指紋: F3D3 39C9 0CF7 DD37 3CD0 78C6 B906 71C1 FA75 B8F
// 注意log.tar.sig log.tar兩個檔案的順序 如果寫反了會驗證失敗,如下
[[email protected] ~]# gpg --verify log.tar log.tar.sig
gpg: 找不到有效的 OpenPGP 資料。
gpg: 簽名無法被驗證。
請記住簽名檔案(.sig或.asc)
應該是在命令列中給定的第一個檔案
五 使用AIDE做入侵檢測
–Aide通過檢查資料檔案的許可權、時間、大小、雜湊值等,校驗資料的完整性。
–使用Aide需要在資料沒有被破壞前,對資料完成初始化校驗,生成校驗資料庫檔案,在被攻擊後,可以使用資料庫檔案,快速定位被人篡改的檔案。
1 安裝軟體包
[[email protected] ~]# yum -y install aide
2 修改配置檔案:
[[email protected] ~]# vim /etc/aide.conf
@@define DBDIR /var/lib/aide //資料庫目錄
@@define LOGDIR /var/log/aide //日誌目錄
database_out=file:@@{DBDIR}/aide.db.new.gz //資料庫檔名
//以下內容為可以檢查的專案(許可權,使用者,組,大小,雜湊值等)
#p: permissions
#i: inode:
#n: number of links
#u: user
#g: group
#s: size
#md5: md5 checksum
#sha1: sha1 checksum
#sha256: sha256 checksum
DATAONLY = p+n+u+g+s+acl+selinux+xattrs+sha256
//以下內容設定需要對哪些資料進行入侵校驗檢查
//注意:為了校驗的效率,這裡將所有預設的校驗目錄與檔案都註釋
//僅保留/root目錄,其他目錄都註釋掉
/root DATAONLY
#/boot NORMAL //對哪些目錄進行什麼校驗
#/bin NORMAL
#/sbin NORMAL
#/lib NORMAL
#/lib64 NORMAL
#/opt NORMAL
#/usr NORMAL
#!/usr/src //使用[!],設定不校驗的目錄
#!/usr/tmp
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
注意:一般在檔案內容不做修改的情況下對其進行檢測,校驗
3 侵前對資料進行校驗,生成初始化資料庫
[[email protected] ~]# aide --init
AIDE, version 0.15.1
AIDE database at /var/lib/aide/aide.db.new.gz initialized.
//生成校驗資料庫,資料儲存在/var/lib/aide/aide.db.new.g
4 備份資料庫,將資料庫檔案拷貝到U盤(非必須的操作)
[[email protected] ~]# cp /var/lib/aide/aide.db.new.gz /media/
5 對root目錄進行改動,再進行對比檢測
[[email protected] ~]# aide --check
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2018-12-08 14:28:46
Summary:
Total number of files: 932
Added files: 1
Removed files: 1
Changed files: 1
---------------------------------------------------
Added files:
---------------------------------------------------
added: /root/er.txt
---------------------------------------------------
Removed files:
---------------------------------------------------
removed: /root/hello.txt
---------------------------------------------------
Changed files:
---------------------------------------------------
changed: /root/a.txt
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /root/a.txt
Size : 0 , 4
SHA256 : 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NM , GBIQ+PnHecJtodmyB1veAScwLuDj/K
六 掃描與抓包分析
1 使用NMAP掃描來獲取指定主機/網段的相關資訊
[[email protected] ~]# yum -y install nmap
//基本用法:
nmap [掃描型別] [選項] <掃描目標 ...>
//常用的掃描型別
// -sS,TCP SYN掃描(半開)
// -sT,TCP 連線掃描(全開)
// -sU,UDP掃描
// -sP,ICMP掃描
// -A,目標系統全面分析
2 檢查192.168.4.100主機是否可以ping通
[[email protected] ~]# nmap -n -sP 192.168.4.100 //-n代表不進行DNS解析
[[email protected] ~]# nmap -n -sP 192.168.4.0/24
3 檢查目標主機所開啟的TCP服務
[[email protected] ~]# nmap -sT 192.168.4.30 //sT 和 sS 的區別 : sT 為tcp三次握手 sS為tcp前兩次握手(速度相對要塊,半開)
Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:12 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.4.30
Host is up (0.00050s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
22/tcp open ssh
111/tcp open rpcbind
2049/tcp open nfs
MAC Address: 52:54:00:73:86:D9 (QEMU Virtual NIC)
4 檢查目標主機所開啟的UDP服務(注意 ,檢測UDP的速度非常的慢,10分鐘以上)
[[email protected] ~]# nmap -sU 192.168.4.0/24
5 全面分析目標主機192.168.4.100和192.168.4.5的作業系統資訊
[[email protected] ~]# nmap -A 192.168.4.254 //
Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:24 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap done: 2 IP addresses (0 hosts up) scanned in 0.87 seconds
[[email protected] ~]# nmap -A 192.168.4.254
Starting Nmap 6.40 ( http://nmap.org ) at 2018-12-08 15:24 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.4.254
Host is up (0.00032s latency).
Not shown: 993 closed ports
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 3.0.2
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| drwxr-xr-x 2 0 0 4096 Oct 23 13:59 centos
| drwxr-xr-x 2 0 0 4096 Nov 13 02:17 ceph
| -rw-r--r-- 1 0 0 74692 Nov 21 08:57 libev-4.15-1.el6.rf.x86_64.rpm
| -rw-r--r-- 1 0 0 86564 Nov 21 08:57 libevent-devel-2.0.21-4.el7.x86_64.rpm
| -rw-r--r-- 1 0 0 7688608 Nov 21 00:59 percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm
| drwxr-xr-x 3 0 0 4096 Dec 06 00:28 pub
| dr-xr-xr-x 9 0 0 4096 Jul 11 2017 rhel7
|_drwxrwxrwx 2 0 0 4096 Apr 26 2018 share [NSE: writeable]
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey: 2048 37:af:35:48:2a:ed:f7:b9:c2:6b:d8:fe:fa:6c:7b:02 (RSA)
|_256 dc:95:db:de:7e:c3:7d:34:ff:41:d4:e5:bb:97:5f:e9 (ECDSA)
53/tcp open domain dnsmasq 2.76
| dns-nsid:
|_ bind.version: dnsmasq-2.76
80/tcp open http Apache httpd 2.4.6 ((CentOS))
| http-methods: Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
TRACEROUTE
HOP RTT ADDRESS
1 0.31 ms 192.168.4.254
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.41 seconds
6 檢查192.168.4.0/24網段內哪些主機開啟了FTP、SSH服務
[[email protected] ~]# nmap -p 21-22 192.168.4.0/24
PORT STATE SERVICE
21/tcp closed ftp
22/tcp open ssh
MAC Address: 52:54:00:29:CA:6E (QEMU Virtual NIC)
七 使用tcpdump分析FTP訪問中的明文交換資訊
nmap是掃描工具
tcpdump抓包工具+其他(IP地址欺騙/DHCP欺騙)
1 環境準備web44做ftp服務端
[[email protected] ~]# yum -y install vsftpd
[[email protected] ~]# useradd tom
[[email protected] ~]# echo 123456 | passwd --stdin tom
更改使用者 tom 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。
[[email protected] ~]# echo wwwwwwww > /home/tom/nb.txt
[[email protected] ~]# systemctl restart vsftpd
[[email protected] ~]# systemctl enable vsftpd
2 環境準備web33做ftp客戶端
[[email protected] ~]# yum -y install ftp
[[email protected] ~]# ftp 192.168.4.44
Connected to 192.168.4.44 (192.168.4.44).
220 (vsFTPd 3.0.2)
Name (192.168.4.44:root): tom //輸入使用者名稱
331 Please specify the password.
Password: //輸入密碼
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,4,44,193,174).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 9 Dec 08 08:15 nb.txt //服務端共享的檔案
226 Directory send OK.
ftp>
3 啟用tcpdump命令列抓包
執行tcpdump命令列,新增適當的過濾條件,只抓取訪問主機192.168.4.5的21埠的資料通訊 ,並轉換為ASCII碼格式的易讀文字。
這裡假設,192.168.4.5主機有vsftpd服務,如果沒有需要提前安裝並啟動服務!!!
[[email protected] ~]# tcpdump -A host 192.168.4.5 and tcp port 21
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
.. .. //進入等待捕獲資料包的狀態
//監控選項如下:
// -i,指定監控的網路介面(預設監聽第一個網絡卡)
// -A,轉換為 ACSII 碼,以方便閱讀
// -w,將資料包資訊儲存到指定檔案
// -r,從指定檔案讀取資料包資訊
//tcpdump的過濾條件:
// 型別:host、net、port、portrange 主機/ net/埠/埠範圍
// 方向:src、dst 源/目標
// 協議:tcp、udp、ip、wlan、arp、……
// 多個條件組合:and、or、not
4 web33執行ftp訪問,在21埠產生資料
[[email protected] ~]# ftp 192.168.4.44
Connected to 192.168.4.44 (192.168.4.44).
220 (vsFTPd 3.0.2)
Name (192.168.4.44:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
5 觀察抓包的結果(回到web44主機觀察tcpdump抓包的結果)
[[email protected] ~]# tcpdump -A tcp port 21 and host 192.168.4.33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:36:56.824253 IP 192.168.4.33.60104 > web44.ftp: Flags [P.], seq 1:11, ack 21, win 229, options [nop,nop,TS val 196470329 ecr 196460149], length 10: FTP: USER tom
E..>[email protected]@......!...,.........g.!...........
...9...uUSER tom
16:37:00.200125 IP 192.168.4.33.60104 > web44.ftp: Flags [P.], seq 11:24, ack 55, win 229, options [nop,nop,TS val 196473705 ecr 196462879], length 13: FTP: PASS 123456
E..A. @[email protected]!...,.........g.C...........
...i....PASS 123456
……………………
6 再次使用tcpdump抓包,使用-w選項可以將抓取的資料包另存為檔案,方便後期慢慢分析
[[email protected] ~]# tcpdump -A tcp port 21 and host 192.168.4.33 -w ftp.txt
7 tcpdump命令的-r選項,可以去讀之前抓取的歷史資料檔案
[[email protected] ~]# tcpdump -A -r ftp.txt | egrep '(USER|PASS)'
八 使用tcpdump分析Nginx的明文賬戶認證資訊資訊
1 在主機(192.168.4.33)準備一臺需要使用者認證的Nginx伺服器
[[email protected] ~]# cd /usr/local/nginx/conf/
[[email protected] ~]# cp nginx.conf.default nginx.conf //還原配置檔案
[[email protected] ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
auth_basic "xx";
auth_basic_user_file "/usr/local/nignx/pass";
… …
[[email protected] ~]# htpasswd -c /usr/local/nginx/pass jerry //建立賬戶檔案
New password:123456 //輸入密碼
Re-type new password:123456 //確認密碼
[[email protected] ~]# nginx -s reload
2 在33主機使用tcpdump命令抓包
[[email protected] ~]# tcpdump -A host 192.168.4.5 and tcp port 80
3 在客戶端192.168.4.254使用火狐瀏覽器訪問192.168.4.33
[[email protected] ~]# firefox http://192.168.4.33 //根據提示輸入使用者名稱與密碼
4 回到33主機檢視抓包的資料結果
[[email protected] ~]# tcpdump -A host 192.168.4.33 and tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
… …
Authorization: Basic dG9tOjEyMzQ1Ng==
… …
5 檢視base64編碼內容
[[email protected] ~]# echo "dG9tOjEyMzQ1Ng==" | base64 -d
tom:123456
[[email protected] ~]# printf "tom:123456" | base64 //注意,因為echo有回車功能,在這裡如果還是用echo就會出錯。
dG9tOjEyMzQ1Ng==