intrusion analysis--linux

Intrusion analysis:

1.檢查history,last,uname,netstat -tnl,init.d,profile,~/.bashrc,w,lsof,iftop分析流量(啟動項,登陸日志wtmp,歷史命令,關鍵目錄等)
2.檢查進程和系統服務,創建文件,修改文件,root后門是否異常
3.檢查開啟服務的日志是否異常(根據ip,惡意文件名等)
4.可疑文件分析。(世界殺毒網)
5.查看計劃任務

Utility Menu:

1.分頁查看文件:
more e.log
2.靜態查看進程:
pa aux | awk ‘{print $2}’
awk ’{print $2}’ 截取第二列顯示
3.查看文件狀態:
stat update
update為命令文件;
stat 用來查看文件時間狀態,查看什么時候被修改過

4.使用工具進行掃描rkhank,chkrootkit
rkhank –cheak

5.查看在某個時間段被創建的文件:
touch -t 201306300000 a
touch -t 201307010000 b
find / -cnewer a -a ! -cnewer b
時間段是2013年6月30 到7月1號;
a 和b 為被創建的文件; 

6.查看文件時間,做對比看那些文件被創建或修改:
ls ll
lsof -n
**1.列出所有打開的文件:**
lsof
備注: 如果不加任何參數,就會打開所有被打開的文件,建議加上一下參數來具體定位
**2. 查看誰正在使用某個文件**
lsof   /filepath/file
**3.遞歸查看某個目錄的文件信息**
lsof +D /filepath/filepath2/
****備注: 使用了+D,對應目錄下的所有子目錄和文件都會被列出
**4. 比使用+D選項,遍歷查看某個目錄的所有文件信息 的方法**
lsof | grep ‘/filepath/filepath2/’
**5. 列出某個用戶打開的文件信息**
lsof  -u username
****備注: -u 選項,u其實是user的縮寫
**6. 列出某個程序所打開的文件信息**
**lsof -c [MySQL](http://lib.csdn.net/base/14)**
****備注: -c 選項將會列出所有以[MySQL](http://lib.csdn.net/base/mysql)開頭的程序的文件,其實你也可以寫成 **lsof | grep mysql, **但是第一種方法明顯比第二種方法要少打幾個字符了
**7. 列出多個程序多打開的文件信息**
lsof -c mysql -c apache
**8. 列出某個用戶以及某個程序所打開的文件信息**
lsof -u test -c mysql
**9. 列出除了某個用戶外的被打開的文件信息**
lsof   -u ^root
備注:^這個符號在用戶名之前,將會把是root用戶打開的進程不讓顯示
**10. 通過某個進程號顯示該進行打開的文件**
lsof -p 1
**11. 列出多個進程號對應的文件信息**
lsof -p 123,456,789
**12. 列出除了某個進程號,其他進程號所打開的文件信息**
lsof -p ^1
**13 . 列出所有的網絡連接**
**lsof -i**
**14. 列出所有tcp 網絡連接信息**
lsof  -i tcp
**15. 列出所有udp網絡連接信息**
lsof  -i udp
**16. 列出誰在使用某個端口**
lsof -i :3306
**17. 列出誰在使用某個特定的udp端口**
lsof -i udp:55
**特定的tcp端口**
lsof -i tcp:80
**18. 列出某個用戶的所有活躍的網絡端口**
lsof  -a -u test -i
**19. 列出所有網絡文件系統**
lsof -N
**20.域名socket文件**
lsof -u
**21.某個用戶組所打開的文件信息**
lsof -g 5555
**22. 根據文件描述列出對應的文件信息**
lsof -d description(like 2)
**23. 根據文件描述范圍列出文件信息**
lsof -d 2-3
7.查找根目錄下所有帶關鍵字文件位置:
find / -type f | xargs grep -l  "market"

find ./ -mtime 0:返回最近24小時內修改過的文件。./代表需要查找的文件夾
find ./ -mtime 1 : 返回的是前48~24小時修改過的文件。而不是48小時以內修改過的文件。
那怎么返回10天內修改過的文件?find還可以支持表達式關系運算,所以可以把最近幾天的數據一天天的加起來:
find ./ -mtime 0 -o -mtime 1 -o -mtime 2 ……雖然比較土,但也算是個方法了。

ps aux | grep sshd      #查看進程
strace -o aa -ff -p 13619   #查看子進程
grep open aa* | grep -v -e No -e null -e denied| grep WR 
我們grep一下open系統調用,然后過濾掉錯誤信息和/dev/null信息,以及denied信息,并且找WR的,就是讀寫模式打開的,因為要把記錄的密碼寫入文件,肯定要是以寫方式打開的文件,大致的看看,很容易找到異常文件/tmp/xxxxxx
losf -i tcp:1521 -n     #查看端口被那些程序使用
lsof -p ^1               #查看出了1號進程所有的進程打開的文件信息
losf abc            #顯示文件的進行

find / -name zabbix*.log    #查看zabbix日志

查看80端口的tcp連接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l


sed 's/\.0/\./g'

查找大于100M的文件!
find /* -type f -size +100M 

查看當前目錄下文件和目錄大小:
du -h *

apache日志分析,現在來試試最基本的,獲取最多訪問的前10個IP地址及訪問次數。

cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn |wc -l 統計訪問IP的總數

cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn 統計訪問IP

cat access.log |awk '{print $1}' |sort |uniq -c |sort -rn|head 100 統計前100訪問IP

awk -F '//' '{print $2}' wooyun.txt
awk -F '.' '{if($1>0) print $0}' domain2ip.txt
grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' 11
 
cut -d " " -f 1 clientuser.log |uniq -c|sort -r|head -1|awk '{print $2}'
-d 以空格為截斷字符
-f 截取每行第一段
uniq -c 統計數量 如: 99 x.x.x.x
snort -r 倒序排列
head -1 顯示第一列
awk '{print $2}' 截取并打印第2 列字符
找出apache日志中訪問量最大的IP

在行首添加"http://"
sed -i 's/^/http:\/\//g' txt.txt
1、刪除文檔的第一行
sed -i '1d' <file>
2、刪除文檔的最后一行
sed -i '$d' <file>

工具介紹:

1.chkrookit 檢查后門

2.安裝rkhunter

    1.執行命令:
    tar -xvf rkhunter-1.4.0.tar.gz
    cd rkhunter-1.4.0
    ./installer.sh --install
    2.為基本系統程序建立校對樣本,建議系統安裝完成后就建立。
    執行命令:
    rkhunter --propupd
    ls /var/lib/rkhunter/db/rkhunter.dat #樣本文件位置
    3.運行rkhunter檢查系統
    它主要執行下面一系列的測試:
    3.1. MD5校驗測試, 檢測任何文件是否改動.
    3.2. 檢測rootkits使用的二進制和系統工具文件.
    3.3. 檢測特洛伊木馬程序的特征碼.
    3.4. 檢測大多常用程序的文件異常屬性.
    3.5. 執行一些系統相關的測試 - 因為rootkit hunter可支持多個系統平臺.
    3.6. 掃描任何混雜模式下的接口和后門程序常用的端口.
    3.7. 檢測如/etc/rc.d/目錄下的所有配置文件, 日志文件, 任何異常的隱藏文件等等. 例如, 在檢測/dev/.udev和/etc/.pwd.lock文件時候, 我的系統被警告.
    3.8. 對一些使用常用端口的應用程序進行版本測試. 如: Apache Web Server, Procmail等.
    執行命令:
    rkhunter --check
  如果您不想要每個部分都以 Enter 來繼續,想要讓程序自動持續執行,可以使用:
    /usr/local/bin/rkhunter --check --sk

3.檢查安全日志信息

more /var/log/secure |grep Accepted

4.查找webshell命令

find /opt/ -name "*.jsp" |xargs egrep 'assert|phpspy|c99sh|milw0rm|eval|\(gunerpress|\(base64_decoolcode|spider_bc|shell_exec|passthru|\(\$\_\POST\[|eval \(str_rot13|\.chr\(|\$\{\"\_P|eval\(\$\_R|file_put_contents\(\.\*\$\_|base64_decode'

find /opt/ -name "*.jsp" |xargs egrep '\.exec\(request.getParameter\('

常用的日志文件如下:
  access-log         紀錄HTTP/web的傳輸
  acct/pacct         紀錄用戶命令
  aculog           紀錄MODEM的活動
  btmp            紀錄失敗的紀錄
  lastlog  紀錄最近幾次成功登錄的事件和最后一次不成功的登錄
  messages    從syslog中記錄信息(有的鏈接到syslog文件)系統啟動后的信息和錯誤日志,是Red Hat Linux中最常用的日志之一 
  sudolog           紀錄使用sudo發出的命令
  sulog           紀錄使用su命令的使用
  syslog     從syslog中記錄信息(通常鏈接到messages文件)
  utmp            紀錄當前登錄的每個用戶
  wtmp        一個用戶每次登錄進入和退出時間的永久紀錄
  xferlog           紀錄FTP會話
/var/log/secure與安全相關的日志信息 
/var/log/maillog 與郵件相關的日志信息 
/var/log/cron 與定時任務相關的日志信息 
/var/log/spooler 與UUCP和news設備相關的日志信息 
/var/log/boot.log 守護進程啟動和停止相關的日志消息  

查看某個時間段被修改的日志:

cat /var/log/messgaes | grep “2012-6-1”
sed -n '/2017-01-04 11:00:00/,/2017-01-04 11:20:55/p'  ejabberd.log

找出 3 天"以前"被改動過的文件 (前第三天以前 → 2011/09/05 12:00 以前的文件) (> 72 小時)
find /var/log/ -mtime +3 -type f -print

找出前第 3 天被改動過的文件 (2011/09/04 12:00 ~ 2011/09/05 12:00 ?鵲奈募? (72 ~ 96 小時)
find /var/log/ -mtime 3 -type f -print

找出第 3 天被改動過的文件 (也可以這樣寫)
find /var/log/ -mtime +2 -mtime -4 -type f -print

找出第 7天以前到11天以前之間被改動過的文件 (也可以這樣寫)
# find /var/log/ -mtime +7 -mtime -11 -type f -print 


系統

# uname -a               # 查看內核/操作系統/CPU信息
# head -n 1 /etc/issue   # 查看操作系統版本
# cat /proc/cpuinfo      # 查看CPU信息
# hostname               # 查看計算機名
# lspci -tv              # 列出所有PCI設備
# lsusb -tv              # 列出所有USB設備
# lsmod                  # 列出加載的內核模塊
# env                    # 查看環境變量
資源

# free -m                # 查看內存使用量和交換區使用量
# df -h                  # 查看各分區使用情況
# du -sh <目錄名>        # 查看指定目錄的大小
# grep MemTotal /proc/meminfo   # 查看內存總量
# grep MemFree /proc/meminfo    # 查看空閑內存量
# uptime                 # 查看系統運行時間、用戶數、負載
# cat /proc/loadavg      # 查看系統負載
磁盤和分區

# mount | column -t      # 查看掛接的分區狀態
# fdisk -l               # 查看所有分區
# swapon -s              # 查看所有交換分區
# hdparm -i /dev/hda     # 查看磁盤參數(僅適用于IDE設備)
# dmesg | grep IDE       # 查看啟動時IDE設備檢測狀況
網絡

# ifconfig               # 查看所有網絡接口的屬性
# iptables -L            # 查看防火墻設置
# route -n               # 查看路由表
# netstat -lntp          # 查看所有監聽端口
# netstat -antp          # 查看所有已經建立的連接
# netstat -s             # 查看網絡統計信息
進程

# ps -ef                 # 查看所有進程
# top                    # 實時顯示進程狀態
用戶

# w                      # 查看活動用戶
# id <用戶名>            # 查看指定用戶信息
# last                   # 查看用戶登錄日志
# cut -d: -f1 /etc/passwd   # 查看系統所有用戶
# cut -d: -f1 /etc/group    # 查看系統所有組
# crontab -l             # 查看當前用戶的計劃任務
服務

# chkconfig --list       # 列出所有系統服務
# chkconfig --list | grep on    # 列出所有啟動的系統服務
程序

# rpm -qai                # 查看所有安裝的軟件包
$yum list     //列出所指定的軟件包,后可以加上你想查找的軟件包的名字
$yum linst installed      //列出所有已安裝的軟件包
$yum info installed       //列出所有已安裝的軟件包信息
查看 /var/log/yum.log
strings命令查看文件內容

復制/dev/sdc 到文件 cyqdrive.dd 中。將文件分割成多個 1GB 大小的文件。讀取錯誤時,忽略該錯誤而不停止拷貝行為。這個例子命令如下:
#dd if=/dev/sdc split=1G of=cyqdrive.dd
剛才已經展示如何創建一個磁盤鏡像,但只是創建鏡像到系統的本地文件。但是當當前的物理空間不足時就要使用 netcat 來將 dd 命令的的輸出通過網絡連接進行重定向。首先在目標服務器上,啟動 netcat 作為一個監聽,并將輸出重定向到一個遠程服務器上的文件。我會用 netcat 監聽 TCP 的 3452 端口,并將鏡像寫入一個遠程的文件 cyqimage.dd。
#nc -l -p 3452 > myimage.dd
  然后你可以對服務器(192.168.1.1)進行鏡像拷貝,并通過標準輸出(沒有指定輸出的文件)來將鏡像文件輸出到 netcat,然后由 netcat 將鏡像文件發送到目標服務器,使用如下命令:
# dd if=/dev/sdc split=1G of=cyqdrive.dd | nc 192.168.1.1 3452


lsmod       列出內核
modinfo   查看內核信息

1. lsmod 列出已經加載的內核模塊
lsmod 是列出目前系統中已加載的模塊的名稱及大小等;另外我們還可以查看 /proc/modules ,我們一樣可以知道系統已經加載的模塊。
2.modinfo 查看模塊信息
modinfo 可以查看模塊的信息,通過查看模塊信息來判定這個模塊的用途。
3.modprobe 掛載新模塊以及新模塊相依賴的模塊

cat /proc/modules

#!/bin/bash

###########################################################################
# Check Abnormal User
###########################################################################

if [ $# -eq 2 ];then
    if [ -d $1 ] && [ -d $2 ];then
        WEBCHK=1 
        WEBDIR=$1
        LOGDIR=$2
    else
        echo "Web dir $1 or $2 error, exit."
        exit -1
    fi 
else
    WEBCHK=0
fi

echo -e "\033[33m#### 0x0. Check system source use \033[0m"
echo -e "\033[33m|--> Check OS Version \033[0m"
cat /etc/redhat-release
echo -e "\033[33m|--> Check system cpu load \033[0m"
uptime
echo -e "\033[33m|--> Check system mem use \033[0m"
free -g
echo -e "\033[33m|--> Check system network rate use \033[0m"
sar -n DEV 3 1  | grep -vE '^$'
echo -e "\033[33m|--> Check system tool \033[0m"
ls -al `which stat` 
stat `which ps top netstat sshd lsof find`
echo ""

echo -e "\033[33m#### 0x1. Check abnormal user \033[0m"
echo -e "\033[33m|--> Check passwd stat info, GID=0 or use bash \033[0m"
stat /etc/passwd | grep -vE 'ile|Inode'
echo -e "\033[33m|--> Check GID=0 or use bash user \033[0m"
grep -E '/bash|:0+:' /etc/passwd | grep -vE 'root|mysql|rpm|mysql|shutdown|halt|sync'
echo -e "\033[33m|--> Check shadow stat info and no password user \033[0m"
stat /etc/shadow | grep -vE 'ile|Inode'
echo -e "\033[33m|--> Check no password user \033[0m"
awk -F: 'length($2)==0 {print $1}' /etc/shadow
echo ""

echo -e "\033[33m#### 0x2. Check service and task info \033[0m"
echo -e "\033[33m|--> Check start chkconfig service \033[0m"
chkconfig --list |grep -E '2:on|3:on' | awk '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check start rc.local \033[0m"
grep -vE '^$|^#' /etc/rc.local
echo -e "\033[33m|--> Check start crontab \033[0m"
crontab -l
echo ""

echo -e "\033[33m#### 0x3. Check process info \033[0m"
echo -e "\033[33m|--> Check ps result \033[0m"
ps axu | grep -v ]$
echo -e "\033[33m|--> Check hidden process \033[0m"
ps -ef | awk '{print $2}' | sort -n | uniq >1
ls /proc | sort -n |uniq >2
diff 1 2 | awk '{printf"%s ",$0}'
echo ""

echo -e "\033[33m#### 0x4. Check network info \033[0m"
echo -e "\033[33m|--> Check network hosts configure \033[0m"
cat /etc/hosts | grep -v 'localhost'
echo -e "\033[33m|--> Check network dns configure \033[0m"
cat /etc/resolv.conf | grep 'nameserver'
echo -e "\033[33m|--> Check network ip configure \033[0m"
/sbin/ip a|grep 'inet '| awk '{print $2}' | awk -F'/' '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check network interface promisc mode \033[0m"
ifconfig | grep 'PROMISC'
echo -e "\033[33m|--> Check network interface forward mode \033[0m"
cat /proc/sys/net/ipv4/ip_forward 
echo -e "\033[33m|--> Check rpc info\033[0m"
rpcinfo -p
echo -e "\033[33m|--> Check network service info\033[0m"
netstat -nap | grep -vE 'unix|raw'
echo -e "\033[33m|--> Check process <-> port info\033[0m"
lsof -i
echo ""

echo -e "\033[33m#### 0x5. Check file and module info \033[0m"
echo -e "\033[33m|--> Check file which link number equare 0 \033[0m"
lsof +L1
echo -e "\033[33m|--> Check file which change 3 days before now and executable \033[0m"
find / -path "/proc" -prune -o -type f -executable -mtime -3 -print
echo -e "\033[33m|--> Check module which installed \033[0m"
lsmod | awk '{printf"%s ",$1}'
echo ""
echo ""

echo -e "\033[33m#### 0x6. Check ssh and bash \033[0m"
echo -e "\033[33m|--> Check ssh key login host\033[0m"
if [ -e /root/.ssh/authorized_keys ]; then
    awk '{printf"%s ",$3}' /root/.ssh/authorized_keys
fi
echo -e "\033[33m|--> Check ssh password login user\033[0m"
lastlog | grep -vE 'Never'
echo -e "\033[33m|--> Check ssh now login\033[0m"
w
echo -e "\033[33m|--> Check ssh login success history\033[0m"
last -n 30
echo -e "\033[33m|--> Check ssh login fail history\033[0m"
grep -ri "ail" /var/log/secure* | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}'| sort -n | uniq | awk '{printf"%s ",$1}'
echo ""
echo -e "\033[33m|--> Check bash history size\033[0m"
echo $HISTSIZE
echo -e "\033[33m|--> Check some secure operation \033[0m"
history | grep -E 'wget|whoami'
echo -e "\033[33m|--> Check bash history \033[0m"
history 100 | awk '{for(i=2;i<=NF;i++)printf"%s ",$i;printf" <-- "}'
echo ""

echo -e "\033[33m#### 0x7. Check web log \033[0m"
echo -e "\033[33m|--> Check webshell \033[0m"
find $WEBDIR/ -type f -name '*.php' | xargs egrep '(phpspy|c99sh|milw0rm|eval\(gunerpress|eval\(base64_decode|spider_bc|@$)' | awk -F : '{print $1}' > /tmp/checkweb.log
grep -i 'select%20|sqlmap|script' $LOGDIR/*log  | grep 500 | grep -i \.php > /tmp/checkweb.log
cat /tmp/checkweb.log 
echo ""

echo -e "\033[33m#### 0x8. Check rootkit and av \033[0m"
yum install -y epel-release rkhunter clamav >/dev/null 2>&1 
echo -e "\033[33m|--> Check rootkit\033[0m"
rkhunter -c --sk >> /tmp/rkhunter.log
grep 'Warning' /tmp/rkhunter.log
echo -e "\033[33m|--> Check av\033[0m"
clamscan -r --bell -i / > /tmp/clamav.log 2>&1
cat /tmp/clamav.log
echo ""

Relevant Link:
暫無

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容