Linux伺服器入侵預防與問題排查
非授權賬戶登入檢查
通常攻擊者或者惡意軟體往往會往系統中注入隱藏的系統賬戶實施提權或其他破壞性的攻擊。有一些方法可以攔截使用者通過提權實施的攻擊,具體的方法可以參考論文,<一種攔截Linux核心惡意程序提權的方法及系統技術方案> http://www.jigao616.com/zhuanlijieshao_15159844.aspx, 方案思路主要是通過跟蹤核心程序並分析其資料資訊,然後判斷是否包含敏感資訊來決定是否放行程序來實現對惡意程序實施攔截。通過檢視/etc/passwd檔案可以找出隱藏系統賬戶中的非法賬戶。
[email protected]:/# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
lxd:x:106:65534::/var/lib/lxd/:/bin/false
messagebus:x:107:111::/var/run/dbus:/bin/false
uuidd:x:108:112::/run/uuidd:/bin/false
dnsmasq:x:109:65534:dnsmasq,,,:/var/lib/misc:/bin/false
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
ubuntu:x:500:500:ubuntu,,,:/home/ubuntu:/bin/bash
ntp:x:111:117::/home/ntp:/bin/false
ftp:x:112:119:ftp daemon,,,:/srv/ftp:/bin/false
ftpuser:x:1000:1000::/var/myftp:
mongodb:x:113:65534::/var/lib/mongodb:/bin/false
colord:x:114:122:colord colour management daemon,,,:/var/lib/colord:/bin/false
pulse:x:115:123:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:116:125:RealtimeKit,,,:/proc:/bin/false
usbmux:x:117:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
xrdp:x:118:126::/var/run/xrdp:/bin/false
要知道什麼賬戶是非法的入侵賬戶首先需要獨棟passwd檔案:
(1)使用者名稱:用於區分不同的使用者。在同一系統中註冊名是惟一的。在欄位被限制在8個字元Linux系統中對字母大小寫是敏感的。
(2)密碼(已經加密):系統用口令來驗證使用者的合法性。passwd檔案中的口令欄位使用一個"x"來代替,將/etc /shadow作為真正的口令檔案,用於儲存包括個人口令在內的資料。當然shadow檔案是不能被普通使用者讀取的,只有超級使用者才有權讀取。
此外,需要注意的是,如果passwd欄位中的第一個字元是"*"的話,那麼,就表示該賬號被查封了,系統不允許持有該賬號的使用者登入。
(3)UID(使用者標識):UID是一個數值,是Linux系統中惟一的使用者標識,用於區別不同的使用者。UID相同的使用者,不同註冊名的使用者是同一個使用者。
(4)GID組標識:這是當前使用者的預設工作組標識。具有相似屬性的多個使用者可以被分配到同一個組內,每個組都有自己的組名,且以自己的組標 識號相區分。像UID一樣,使用者的組標識號也存放在passwd檔案中。在現代的Unix/Linux中,每個使用者可以同時屬於多個組。除了在 passwd檔案中指定其歸屬的基本組之外,還在/etc/group檔案中指明一個組所包含使用者。
(5)使用者全名或本地帳號:包含有關使用者的一些資訊,如使用者的真實姓名、辦公室地址、聯絡電話等。在Linux系統中,mail和finger等程式利用這些資訊來標識系統的使用者。
(6)使用者主目錄(home_directory):該欄位定義了個人使用者的主目錄,當用戶登入後,他的Shell將把該目錄作為使用者的工作目錄。 在Unix/Linux系統中,超級使用者root的工作目錄為/root;而其它個人使用者在/home目錄下均有自己獨立的工作環境,系統在該目錄下為每 個使用者配置了自己的主目錄。個人使用者的檔案都放置在各自的主目錄下。
(7)登入使用的Shell:就是對登入命令進行解析的工具,Shell是當用戶登入系統時執行的程式名稱,通常是一個Shell程式的全路徑名, 如/bin/bash(若為空格則預設為/bin/sh)。
檢查惡意程序及非法埠
執行netstat –antlp檢視下伺服器是否有未被授權的埠被監聽,檢視下對應的 pid。
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 172.21.0.7:ssh 119.28.22.215:54105 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ] DGRAM 32235 /run/user/500/systemd/notify
unix 3 [ ] DGRAM 9687 /run/systemd/notify
unix 12 [ ] DGRAM 9693 /run/systemd/journal/dev-log
unix 2 [ ] DGRAM 9695 /run/systemd/journal/syslog
unix 6 [ ] DGRAM 9700 /run/systemd/journal/socket
unix 2 [ ] DGRAM 16558 /tmp/.xrdp/xrdp-sesman-VnxLcq/xrdp_sesman_000004da_main_term_cf009900
unix 2 [ ] DGRAM 16559 /tmp/.xrdp/xrdp-sesman-VnxLcq/xrdp_sesman_000004da_main_sync_bd4cc1a4
unix 2 [ ] DGRAM 16686 /tmp/.xrdp/xrdp-bvU4Jq/xrdp_000004d6_listen_pro_done_event_e729bb4e
unix 2 [ ] DGRAM 16687 /tmp/.xrdp/xrdp-bvU4Jq/xrdp_000004d6_main_term_a10ed07e
unix 2 [ ] DGRAM 16688 /tmp/.xrdp/xrdp-bvU4Jq/xrdp_000004d6_main_sync_04545a34
unix 3 [ ] STREAM CONNECTED 14084 /var/run/dbus/system_bus_socket
unix 3 [ ] STREAM CONNECTED 32262
unix 2 [ ] DGRAM 13113
unix 2 [ ] DGRAM 10372
unix 3 [ ] STREAM CONNECTED 13998 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 13456 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 32263
unix 3 [ ] STREAM CONNECTED 13455
unix 2 [ ] DGRAM 14069
unix 3 [ ] STREAM CONNECTED 13790
unix 3 [ ] STREAM CONNECTED 14040
unix 3 [ ] STREAM CONNECTED 13791 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 14082
unix 3 [ ] STREAM CONNECTED 14081
unix 2 [ ] DGRAM 22488
unix 3 [ ] STREAM CONNECTED 13863 /run/systemd/journal/stdout
unix 3 [ ] STREAM CONNECTED 13997
unix 3 [ ] STREAM CONNECTED 14142
unix 3 [ ] STREAM CONNECTED 10427
unix 3 [ ] STREAM CONNECTED 14146 /run/systemd/journal/stdout
檢查伺服器是否存在惡意程序,惡意程序往往會開啟監聽埠,與外部控制機器進行連線。若發現有非授權程序,執行ls -l /proc/$PID/exe或file /proc/$PID/exe($PID 為對應的pid 號),檢視下 pid 所對應的程序檔案路徑。如果為惡意程序,刪除下對應的檔案即可。
使用ps -ef和top命令檢視是否有異常程序
root 991 1 0 11:54 ? 00:00:00 /usr/sbin/sshd -D
root 992 1 0 11:54 ? 00:00:00 /usr/lib/accountsservice/accounts-daemon
daemon 1005 1 0 11:54 ? 00:00:00 /usr/sbin/atd -f
root 1008 1 0 11:54 ? 00:00:00 /usr/bin/lxcfs /var/lib/lxcfs/
mongodb 1014 1 0 11:54 ? 00:00:50 /usr/bin/mongod --config /etc/mongodb.conf
message+ 1020 1 0 11:54 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root 1038 1 0 11:54 ? 00:00:00 /usr/lib/snapd/snapd
syslog 1040 1 0 11:54 ? 00:00:00 /usr/sbin/rsyslogd -n
root 1046 1 0 11:54 ? 00:00:00 /lib/systemd/systemd-logind
root 1057 1 0 11:54 ? 00:00:00 /usr/sbin/cron -f
root 1060 1 0 11:54 ? 00:00:00 /usr/sbin/acpid
root 1075 1 0 11:54 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd.conf
root 1183 1 0 11:54 ? 00:00:00 /usr/lib/policykit-1/polkitd --no-debug
root 1184 1 0 11:54 ? 00:00:00 /sbin/mdadm --monitor --pid-file /run/mdadm/monitor.pid --daemonise --scan --syslog
root 1228 1 0 11:54 ttyS0 00:00:00 /sbin/agetty --keep-baud 115200 38400 9600 ttyS0 vt220
ntp 1229 1 0 11:54 ? 00:00:00 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 111:117
xrdp 1238 1 0 11:54 ? 00:00:00 /usr/sbin/xrdp
root 1242 1 0 11:54 ? 00:00:00 /usr/sbin/xrdp-sesman
root 1953 1 0 12:49 tty1 00:00:00 /sbin/agetty --noclear tty1 linux
root 2339 2 0 14:12 ? 00:00:00 [kworker/0:4]
root 2340 2 0 14:12 ? 00:00:00 [kworker/0:5]
root 2774 991 0 15:43 ? 00:00:00 sshd: ubuntu [priv]
ubuntu 2776 1 0 15:43 ? 00:00:00 /lib/systemd/systemd --user
ubuntu 2777 2776 0 15:43 ? 00:00:00 (sd-pam)
ubuntu 2809 2774 0 15:43 ? 00:00:00 sshd: [email protected]/0
ubuntu 2810 2809 0 15:43 pts/0 00:00:00 -bash
ubuntu 2877 2810 0 16:16 pts/0 00:00:00 ps –ef
執行以上命令,當發現有名稱不斷變化的非授權程序佔用大量系統 CPU 或記憶體資源時,則可能為惡意程式。確認該程序為惡意程序後,可以使用kill -9 程序名命令結束程序,或使用防火牆限制程序外聯。