本人首先進行了linux的應急響應,windows之后再進行
Linux與Windows應急響應初體驗
- 1 linux應急響應
- 1.1 賬戶:
- 1.1.1 使用`cat /etc/passwd`命令查看passwd文件
- 2.1.2 使用`cat /etc/shadow`命令查找shadow文件,該文件為密碼文件的存儲項
- 1.2 入侵排查
- 1.2.1 查詢特權用戶
- 1.2.2 查詢sudo
- 1.2.3 通過`.bash_history`查看歷史命令:
- 1.2.4 登陸情況
- 1.2.5 開機啟動項
- 1.2.6 任務計劃
- 1.3 日志分析:
- 1.3.1 查詢指令
- 1.3.2 登錄成功的IP有哪些:
- 1.3.3、增加一個用戶kali日志:
- 1.3.4 刪除用戶kali日志:
- 1.3.5 su切換用戶:
- 1.4 攻擊/應急響應初體驗
- 1.4.1 準備
- 1.4.2 收集信息
- 1.4.3 應急響應
- 查詢登陸成功
- 查詢日志中的登陸失敗
- 查詢爆破使用的字典
- 1.4.4 保護策略
- 2 Windows應急響應
1 linux應急響應
不知為何,本人的登錄日志內容在/var/log/auth.log文件中,因此任何牽扯到secure的內容都更換為auth.log
1.1 賬戶:
1.1.1 使用cat /etc/passwd
命令查看passwd文件
該文件存儲了系統中所有用戶的基本信息
七個字段每個字段用:
隔開,七個字段分別為:
用戶名:密碼:UID(用戶ID):GID(組ID):描述性信息:主目錄:默認Shell
重點查/bin/bash(是否用bin/bash,用了就是創建新用戶,已經被入侵了。如果用bin/login,就沒有被入侵)
2.1.2 使用cat /etc/shadow
命令查找shadow文件,該文件為密碼文件的存儲項
1.2 入侵排查
1.2.1 查詢特權用戶
awk -F: '$3==0{print $1}' /etc/passwd
若有其他未知的特權賬戶則證明被入侵過
1.2.2 查詢sudo
牽扯到提權
賬戶提權:內核漏洞提權(成功率最大,如果失敗,用其他方法提權的成功幾率無限趨于0),敏感文件提權(運氣)
suid提權:(suid是某個二進制文件在執行時自動提升到root權限,執行結束之后回歸到正常權限)
tomcat-syl ALL=(root) NOPASSWD:/usr/root/find
tomcat是一個普通用戶,不需要密碼以root權限去執行find
find exec可以執行命令
創建一個普通用戶qq
查看權限:
給find加權:
普通用戶qq
使用find命令執行文件
find /usr/bin/passwd -exec whoami \;
使用find命令全局查找,有哪些文件擁有suid權限,如果有能執行命令的情況下需要重點關注。
sudo提權:
sudo允許執行某個命令,但未對命令參數做限制
sudo允許執行某個帶參數的具體命令
若其他未知用戶有ALL=(ALL:ALL)ALL則被入侵過
任意用戶任意東西執行任意
1.2.3 通過.bash_history
查看歷史命令:
1、root 用戶的歷史命令
histroy
2、打開 /home 各帳號目錄下的 .bash_history,查看普通帳號執行的歷史命令。
為歷史的命令增加登錄的 IP 地址、執行命令時間等信息:
1)保存1萬條命令
sed -i 's/^HISTSIZE=1000/HISTSIZE=10000/g' /etc/profile
2)在/etc/profile的文件尾部添加如下行數配置信息:
######jiagu history xianshi#########
USER_IP=`who -u am i 2>/dev/null | awk '{print $NF}' | sed -e 's/[()]//g'`
if [ "$USER_IP" = "" ]
then
USER_IP=`hostname`
fi
export HISTTIMEFORMAT="%F %T $USER_IP `whoami` "
shopt -s histappend
export PROMPT_COMMAND="history -a"
######### jiagu history xianshi ##########
3)source /etc/profile 讓配置生效
生成效果: 1 2018-07-10 19:45:39 192.168.204.1 root source /etc/profile
3、歷史操作命令的清除:history -c
但此命令并不會清除保存在文件中的記錄,因此需要手動刪除 .bash_profile 文件中的記錄。
完成以上配置后使用history
命令查看:
顯示執行命令的日期、IP、用戶
1.2.4 登陸情況
查看登陸成功信息:
查看錯誤登錄信息:
1.2.5 開機啟動項
查看運行級別命令 runlevel
系統默認允許級別
vi /etc/inittabid=3:initdefault #系統開機后直接進入哪個運行級別
開機啟動配置文件
/etc/rc.local/etc/rc.d/rc[0~6].d
1.2.6 任務計劃
crontab -l 列出某個用戶cron服務的詳細內容Tips:默認編寫的crontab文件會保存在 (/var/spool/cron/用戶名 例如: /var/spool/cron/rootcrontab -r 刪除每個用戶cront任務(謹慎:刪除所有的計劃任務)crontab -e 使用編輯器編輯當前的crontab文件 如:*/1 * * * * echo "hello world" >> /tmp/test.txt 每分鐘寫入文件
重點關注以下目錄中是否存在惡意腳本
/var/spool/cron/* /etc/crontab/etc/cron.d/*/etc/cron.daily/* /etc/cron.hourly/* /etc/cron.monthly/*/etc/cron.weekly//etc/anacrontab/var/spool/anacron/*
小技巧:
more /etc/cron.daily/* 查看目錄下所有文件
1.3 日志分析:
日志文件 | 說明 |
---|---|
/var/log/cron | 記錄了系統定時任務相關的日志 |
/var/log/cups | 記錄打印信息的日志 |
/var/log/dmesg | 記錄了系統在開機時內核自檢的信息,也可以使用dmesg命令直接查看內核自檢信息 |
/var/log/mailog | 記錄郵件信息 |
/var/log/message | 記錄系統重要信息的日志。這個日志文件中會記錄Linux系統的絕大多數重要信息,如果系統出現問題時,首先要檢查的就應該是這個日志文件 |
/var/log/btmp | 記錄錯誤登錄日志,這個文件是二進制文件,不能直接vi查看,而要使用lastb命令查看 |
/var/log/lastlog | 記錄系統中所有用戶最后一次登錄時間的日志,這個文件是二進制文件,不能直接vi,而要使用lastlog命令查看 |
/var/log/wtmp | 永久記錄所有用戶的登錄、注銷信息,同時記錄系統的啟動、重啟、關機事件。同樣這個文件也是一個二進制文件,不能直接vi,而需要使用last命令來查看 |
/var/log/utmp | 記錄當前已經登錄的用戶信息,這個文件會隨著用戶的登錄和注銷不斷變化,只記錄當前登錄用戶的信息。同樣這個文件不能直接vi,而要使用w,who,users等命令來查詢 |
/var/log/secure | 記錄驗證和授權方面的信息,只要涉及賬號和密碼的程序都會記錄,比如SSH登錄,su切換用戶,sudo授權,甚至添加用戶和修改用戶密碼都會記錄在這個日志文件中 |
1.3.1 查詢指令
定位有多少IP在爆破主機的root帳號:
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
定位有哪些IP在爆破:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"|uniq -c
爆破用戶名字典是什么?
grep "Failed password" /var/log/secure|perl -e 'while($_=<>){ /for(.*?) from/; print "$1\n";}'|uniq -c|sort -nr
1.3.2 登錄成功的IP有哪些:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
登錄成功的日期、用戶名、IP:
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
1.3.3、增加一個用戶kali日志:
Jul 10 00:12:15 localhost useradd[2382]: new group: name=kali, GID=1001
Jul 10 00:12:15 localhost useradd[2382]: new user: name=kali, UID=1001, GID=1001, home=/home/kali
, shell=/bin/bash
Jul 10 00:12:58 localhost passwd: pam_unix(passwd:chauthtok): password changed for kali
#grep "useradd" /var/log/secure
1.3.4 刪除用戶kali日志:
Jul 10 00:14:17 localhost userdel[2393]: delete user 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed group 'kali' owned by 'kali'
Jul 10 00:14:17 localhost userdel[2393]: removed shadow group 'kali' owned by 'kali'
# grep "userdel" /var/log/secure
1.3.5 su切換用戶:
Jul 10 00:38:13 localhost su: pam_unix(su-l:session): session opened for user good by root(uid=0)sudo授權執行:
sudo -l
Jul 10 00:43:09 localhost sudo: good : TTY=pts/4 ; PWD=/home/good ; USER=root ; COMMAND=/sbin/shutdown -r now
改為自己的日志目錄
1.4 攻擊/應急響應初體驗
1.4.1 準備
攻擊機的ip地址:192.168.244.142
靶機端:192.168.244.141
1.4.2 收集信息
使用nmap命令查看靶機端ssh的端口為22
爆破會使用到密碼字典,因此創建兩個txt文件,
password.txt
users.txt
我們使用hydra進行暴力破解
[root@server ~]# hydra -L users.txt -P passwrd.txt ssh://192.168.244.141#-L users.txt: 從名為users.txt的文件中讀取用戶名列表
#-P password.txt: 從名為password.txt的文件中讀取密碼列表
#ssh://192.168.244.141: 指定攻擊的目標為IP地址為192.168.244.141的主機上運行的SSH服務
!!!
我們可以看到爆破出來一個用戶和密碼
使用爆破的用戶名和密碼登錄到上面
輸入yes并輸入密碼
登陸成功!
1.4.3 應急響應
快速進入靶機中,進入/var/log目錄下迅速進行日志查詢
查詢登陸成功
發現敵機登陸成功!真的很可惡
查詢日志中的登陸失敗
發現敵機登錄失敗340次,太可惡了
查詢爆破使用的字典
這個攻擊者怎么壞成這樣,心機如此之重!
1.4.4 保護策略
deny_ssh.sh
在使用deny_ssh.sh
文件生成的iptables
中
分析可得:
這個文件是由 iptables-save
命令生成的防火墻規則配置文件,包含了 Linux 防火墻 (iptables) 的完整規則集。讓我為您詳細分析其結構和含義:
文件結構概覽
文件分為兩個主要部分:
- filter 表:負責包過濾(接受/拒絕流量)
- nat 表:負責網絡地址轉換(NAT)
每部分都包含:
- 默認鏈策略
- 自定義鏈
- 具體的防火墻規則
- 結束標記 (
COMMIT
)
一、filter 表分析 (包過濾)
1. 默認鏈策略
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
INPUT
:接受所有入站流量FORWARD
:丟棄所有轉發流量OUTPUT
:接受所有出站流量
2. 自定義鏈(Docker 相關)
:DOCKER - [0:0]
:DOCKER-BRIDGE - [0:0]
:DOCKER-CT - [0:0]
:DOCKER-FORWARD - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
這些是 Docker 創建的自定義鏈,用于管理容器網絡流量。
3. 主要規則分析
(1) SSH 訪問控制
-A INPUT -s 192.168.244.129/32 -p tcp -m tcp --dport 22 -j DROP
- 功能:阻止來自 192.168.244.129 的 SSH 訪問
- 細節:
-s 192.168.244.129/32
:源IP地址-p tcp
:TCP協議--dport 22
:目標端口22 (SSH)-j DROP
:丟棄數據包
(2) Docker 網絡隔離規則
-A DOCKER ! -i br-00c71e29d5b2 -o br-00c71e29d5b2 -j DROP
-A DOCKER ! -i docker0 -o docker0 -j DROP
- 功能:防止非 Docker 網橋接口的流量進入容器網絡
- 細節:
br-00c71e29d5b2
:自定義 Docker 網橋docker0
:默認 Docker 網橋- 規則確保只有來自這些網橋的流量才能進入容器
(3) 連接跟蹤
-A DOCKER-CT -o br-00c71e29d5b2 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A DOCKER-CT -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
- 功能:允許已建立的連接和相關的連接通過
- 細節:
--ctstate RELATED,ESTABLISHED
:匹配已建立或相關的連接狀態
(4) Docker 網絡隔離策略
-A DOCKER-ISOLATION-STAGE-1 -i br-00c71e29d5b2 ! -o br-00c71e29d5b2 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -o br-00c71e29d5b2 -j DROP
- 功能:實現 Docker 容器間的網絡隔離
- 細節:
- 兩階段隔離策略防止不同網橋間的流量互通
- 確保容器只能與同一網絡中的容器通信
二、nat 表分析 (網絡地址轉換)
1. 默認鏈策略
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
2. 主要規則分析
(1) Docker 端口映射
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
- 功能:將目標地址是本機的流量重定向到 DOCKER 鏈
- 細節:
- 實現 Docker 容器的端口映射功能
(2) SNAT (源地址轉換)
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.18.0.0/16 ! -o br-00c71e29d5b2 -j MASQUERADE
- 功能:為容器提供出站互聯網訪問
- 細節:
172.17.0.0/16
:默認 Docker 網絡172.18.0.0/16
:自定義 Docker 網絡 (br-00c71e29d5b2)MASQUERADE
:將容器流量源IP替換為主機IP
(3) Docker 鏈規則
-A DOCKER -i docker0 -j RETURN
-A DOCKER -i br-00c71e29d5b2 -j RETURN
- 功能:直接返回來自 Docker 網橋的流量
- 細節:
- 不對容器間的流量進行 NAT 處理
關鍵發現與安全分析
-
容器網絡安全:
- Docker 創建了兩個網絡:
docker0
(172.17.0.0/16) 和br-00c71e29d5b2
(172.18.0.0/16) - 實現了嚴格的網絡隔離策略,防止容器間未經授權的通信
- Docker 創建了兩個網絡:
-
主機安全:
- 僅有一條明確的訪問控制規則:阻止 192.168.244.129 的 SSH 訪問
- INPUT 鏈默認策略為 ACCEPT,存在安全風險
-
Docker 網絡配置:
- 使用了標準的 Docker 網絡隔離模型
- 為容器提供了出站互聯網訪問 (MASQUERADE)
-
潛在風險:
- 除 SSH 規則外,沒有其他主機級防護
- 所有入站流量默認被接受
- 沒有針對常見攻擊(如端口掃描、暴力破解)的防護
再次嘗試進行ssh暴力破解發現無法訪問
2 Windows應急響應
使用windows 10系統,對其進行爆破,實現應急響應