更新時間:2018-04-27 來源:黑馬程序員 瀏覽量:
1. 概述
最好的安全防護當然是“御敵于國門之外”, 通過安全防護技術,來保證當前主機不被非授權人員入侵,但是“道高一尺,魔高一丈”, 再好的防護手段、往往也會有疏漏的地方。在這種情況下,事后(入侵后)的追溯技術就很重要了。好比一個竊賊到我們家溜達一圈,我竟然無法知道是否竊賊來過,細思這是一件非常恐怖的事情。這就意味著,我們的家(主機)不在安全,鬼知道竊賊什么時候再來溜達一圈。
入侵分析技術一般通過是通過分析主機關鍵的文件記錄、進程信息等來達到分析主機是否被侵入的目的。從安全防護的角度來講,這是一項事后追蹤技術(可追溯性);從攻擊的角度來說, 當Hack成功實施攻擊(入侵)后,要進行掩蹤滅跡,也就是清除入侵痕跡,當知道入侵分析哪些地方后,那么作為入侵者也就明白需要重點關注哪些入侵痕跡了。
所謂“未知攻,焉知防”, 同樣也可以說“未知防,焉知攻”, 攻防之道,本就是在攻防博弈中相互提高。
2. 環境
本次介紹的入侵分析技術基于環境如下:
l 發行版:
Panda.Guo@2018-04-18 10:42:55 $ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.4 (stretch)
Release: 9.4
Codename: stretch
l 內核
Panda.Guo@2018-04-18 10:59:33 $ uname -a
Linux PandaGuo 4.9.0-6-amd64 #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02) x86_64 GNU/Linux
1. Debian 9 入侵分析
3.1 用戶帳號
從攻擊的角度來講,Hacker實施攻擊后,除了會“掩蹤滅跡”之外還會進行“創建后門”,以便將這種攻擊的機會持續下去,而創建后門用戶帳號,往往是比較可行的途徑。
1. 搜尋具備shell用戶的帳號, /etc/passwd
Panda.Guo@2018-04-18 11:34:31 $ cat /etc/passwd|awk -F: '{print $7}'| sort |uniq -c
3 /bin/bash
21 /bin/false
1 /bin/sync
17 /usr/sbin/nologin
Panda.Guo@2018-04-18 11:45:31 $ cat /etc/passwd | grep "bash"
root:x:0:0:root:/root:/bin/bash
panda:x:1000:1000:panda,,,:/home/panda:/bin/bash
itcast:x:2001:2001::/home/itcast:/bin/bash
Panda.Guo@2018-04-18 11:45:40 $
對其中有shell的用戶需要重點關注,本文假設itcast用戶為“需重點關照”用戶
1.進一步分析用戶itcast
2.查看用戶id和組信息:
Panda.Guo@2018-04-18 11:45:40 $ id itcast
uid=2001(itcast) gid=2001(itcast) group=2001(itcast)
l 查看用戶最近登錄信息
Panda.Guo@2018-04-18 11:51:33 $ lastlog -u itcast
Username Port From Latest
itcast pts/10 127.0.0.1 Thu Apr 12 19:03:20 +0800 2018
l 查看用戶歷史登錄信息: last hacker
Panda.Guo@2018-04-18 11:51:35 $ last itcast
itcast pts/10 127.0.0.1 Thu Apr 12 19:03 - 10:16 (15:12)
itcast pts/6 172.16.28.59 Thu Apr 12 16:03 - 16:03 (00:00)
itcast pts/6 172.16.28.59 Thu Apr 12 16:02 - 16:03 (00:00)
wtmp begins Sun Apr 1 23:41:17 2018
l 查看用戶登錄失敗信息:
Panda.Guo@2018-04-18 11:52:45 $ sudo lastb itcast
itcast ssh:notty 127.0.0.1 Thu Apr 12 19:03 - 19:03 (00:00)
itcast ssh:notty 172.16.28.59 Thu Apr 12 16:03 - 16:03 (00:00)
btmp begins Tue Apr 3 09:20:30 2018
Panda.Guo@2018-04-18 11:52:49 $
l 查看綜合信息: finger hacker
Panda.Guo@2018-04-18 11:53:20 $ finger itcast
Login: itcast Name:
Directory: /home/itcast Shell: /bin/bash
Last login Thu Apr 12 19:03 (CST) on pts/10 from 127.0.0.1
No mail.
No Plan.
果itcast用戶登錄有異常的IP登錄, 則需重點關注
3.2 可提權用戶(sudo)
Debian系統允許普通用戶通過sudo來獲取root用戶權限, 因此對于已經存在的普通用戶,如果其在/etc/sudoers或者/etc/sudoers.d/下的文件中, 則表示此普通用戶可以通過sudo來完成root操作, 需要特別關注。
另可以通過命令groups itcast(其中itcast指代需要關注的用戶username), 如果該用戶所屬的組是root或者 sudo組,或者該用戶在/etc/sudoers(包括/etc/sudoer.d/目錄), 那就需要重點關注了。
3.3 開機自啟服務
不同的Linux發行版,采用的服務管理器是不同的, Debian 8以上已經采用Systemd作為服務器管理器,其實目前較新的發行版系統上多在采用systemd。本次我們以Systemd為例來分析開機自起的一些程序。
對于systemd服務管理器來說,可以通過下述方式查看開機自啟的服務:
Panda.Guo@2018-04-18 15:25:23 $ systemctl list-unit-files --type=service | grep "enabled"
accounts-daemon.service enabled
anacron.service enabled
auditd.service enabled
autovt@.service enabled
。。。
入侵后,留下一些開機自起的服務,以便后續繼續入侵。也是入侵保持持久性的一種手段。
3.4 計劃(定時)任務
除了開機自啟動服務外, Debian還可以通過計劃任務來進行持久化運行。
檢查異常的計劃任務相對簡單:
只需要查看/etc/crontab以及子目錄下/etc/cron.*的計劃任務文件即可.
3.5 shell的初始化
不同的Linux發行版的默認shell是不一致的, 一般debian系統默認是dash, 而我自己偏愛bash, 一般系統安裝完成后,我會調整我的shell為bash, 本節以bash為例進行描述。
對于shell來說,可分為交互shell/非交互shell、 登錄shell和非登錄shell。本質上就是在shell啟動期間,默認執行的配置文件不同而已。 關于這塊的詳細區別,可參考man bash 中的INVOCATION章節。或者參考下圖:
簡單分析如下:
l 非交互/非登錄shell: $BASh_ENV(環境變量)
l 非交互/登錄shell:/etc/profile ($HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile按次序先存在的執行)
l 交互/非登錄shell: /etc/bash_bashrc、$HOME/.bashrc
l 交互/登錄shell:/etc/profile ($HOME/.bash_profile、$HOME/.bash_login、$HOME/.profile按次序先存在的執行)
上面描述的比較復雜。簡單說,就是bash在啟動時,要執行幾個腳本文件。 這些文件中如果有命令,在某種情況下(登錄非登錄、交互非交互)可能會被執行。 入侵分析的重點就是查看這些文件中是否存在可疑命令。
3.6 歷史命令
一般而言, 入侵者獲取shell之后會在上面執行某些命令, 我們可以通過history命令來查看曾經運行過的命令.或者直接查看~/.bash_history文件. 高明的入侵者完成入侵后,也會進行某些掩蹤滅跡。 因此, 如果發現曾經運行過的命令中有一些可疑命令(莫名奇妙的命令),或者發現history被惡意清除,或者被異常篡改, 這也是我們常用的入侵分析技術。
和history命令相關有幾個環境變量,需要我們特別關注,詳情可通過man bash 查看
l HISTFILE: 保存歷史命令的文件, 默認是 ~/.bash_history
l HISTFILESIZE: 歷史文件中包含的最大行數。
l HISTSIZE: 命令歷史中保存的命令數量行數。
l HISTTIMEFORMAT: 保存歷史命令的時間格式。
3.7 系統日志
在debian9上,系統日志統一由rsyslog進程產生, 和rsyslog相關的配置可參考/etc/rsyslog.conf文件以及/etc/rsyslog.d/目錄。
l 登錄相關信息
? 查看每個用戶最近的登錄時間和ip: lastlog
? 查看每個用戶的登錄記錄: last
? 查看每個用戶的登錄嘗試(包括失敗的)記錄: lastb
? 查看當前登錄的用戶,ip以及正在執行的命令: w
l 一些常見的系統日志介紹如下:
? /var/log/messages: 一般的系統日志
? /var/log/kern.log: 系統內核日志
? /var/log/boot.log: 系統啟動日志
? /var/log/auth.log: 登錄相關的日志, 比如ssh/sudo成功失敗的日志都在這里
? /var/log/cron.d: cron計劃任務的執行日志
l 審計, 審計日志由auditd產生,/etc/audit/auditd.conf為審計配置文件,/etc/audit/audit.rules 為審計規則文件。
? /var/log/audit/* : 為審計記錄,可以進一步分析,也許可以發現一些意想不到的痕跡(如果有的話).
3.8 可疑進程
一般可通過top命令查看正在運行的程序所占用的資源, 或者用ps aux列出當前系統所用的進程. 如果發現可疑進程(沒見過、耗資源), 可以用以下命令進一步:
l 查看該進程啟動的完整命令行: ps eho command -p $PID
l 查看該進程啟動時候所在的目錄: readlink /proc/$PID/cwd
l 查看該進程啟動時的完整環境變量: strings -f /proc/$PID/environ | cut -f2 -d ‘ ‘
l 列出該進程所打開的所有文件: lsof -p $PID
如果某個可疑進程正在活動,一般會與外界有網絡交互,可通過如下方法進一步分析:
l 查看當前主機的網絡連接情況, netstat -apn | grep $PID
l 抓包分析,tcpdump 或者 使用圖形化抓包工具wireshark
l 查看主機防火墻iptables, DNS(/etc/resolv.conf和/etc/resolvconf/)、http代理,或者/etc/hosts, 都可能會導致我們正常的網絡請求被攻擊者監聽并篡改. 這些小小的修改也許不是很明顯,可一旦發現自身網絡環境’不太對勁’, 就要提高警惕, 仔細排查了.
1. 小結
我們研究入侵分析,從“攻”的角度來說,是為了在“實施攻擊”后,在“掩蹤滅跡”中做的更加徹底,更便于我們攻擊的持久性, 從“防”的角度來說, 我了解主機系統被入侵后,知道在哪些地方會留下痕跡,通過收集這些入侵痕跡,結合大數據的分析技術來繪制入侵者的攻擊路線圖。以便更好的防護。
傳智播客黑馬程序員C/C++與網絡攻防學科培養專項白帽子安全人才,
課程包含 C語言開發實戰、C高級編程、C++核心編程與桌面應用開發、Linux高并發服務器開發、信息安全與企業應用開發、分布式云平臺開發、入侵檢測與網絡攻防等階段。
黑馬程序員C/C++與網絡攻防課程關鍵技術點
涉及到的熱門技術有:·
Nginx(高并發反向代理服務器)
·GIT(分布式版本控制系統)
·Redis(NoSQL緩存數據庫)
·Memcache(key-value分布式緩存數據庫)
·Libevent(高并發反應堆模式API)
·Epoll(Linux內核高級多路IO技術)
·GDB(逆向工具)
·SHM(共享內存映射機制)
·VIM(文本編輯器)
·QT(跨平臺應用界面框架)
涉及到的新興技術有:
·fastDFS(分布式文件系統)
·Golang(Google推出的開發編程語言)
·Docker(虛擬化容器技術)
·Go-micro(Go語言微服務框架)
·Beego(Go語言高性能web服務器框架)
·GEO(地理位置核心算法)
·ASN.1(跨平臺安全傳輸協議)
·RPC(遠程調用過程)
·Oracle(高級事務關系型數據庫)
涉及到的網絡攻防技術有:
·Kali Linux(Hacker操作系統)
·Wireshark(網絡抓包分析工具)
·Aircrack-ng(可破解WEP/WPA/WPA2加密)
·AppScan(漏洞掃描工具)
·DDos(分布式拒絕服務攻擊)
·Web滲透(Web頁面代碼的攻擊形式)
·iptables(Linux內核防火墻技術)
·NetCat(網絡攻擊瑞士軍刀)
·TCPDump(Linux內核網絡協議捕捉器)
·SQLMAP(SQL注入漏洞攻防技能)
本文版權歸黑馬程序員C/C++與網絡攻防學院所有,歡迎轉載,轉載請注明作者出處。謝謝!
作者:黑馬程序員C/C++與網絡攻防學院