1. 程式人生 > >Linux伺服器入侵預防與問題排查

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 程序名命令結束程序,或使用防火牆限制程序外聯。