擋掉溢位入侵駭客(病毒)

擋掉溢位入侵駭客(病毒)的 Script. 如下

grep "URI too long" /var/log/apache/error.log|
 awk '{FS="client ";print $2}'|awk '{FS="] request";print $1}'|
 sort|uniq|grep [0-9.]|
 awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'

取自 用 iptables 擋掉可能是新病毒的連線
不過. 知道自己的 Apache 有溢位的漏洞,
應該要去修補 Apache 才對呀.. XD

解說:
以下取自 用 iptables 擋掉可能是新病毒的連線

因為這個 script 有點長, 分別解釋一下用途,
指令之間是以管道(pipeline, | )隔開, 讓前一個指令輸出的結果當成下一個指令的輸入.

1. grep "URI too long" /var/log/apache/error.log
從 apache 的錯誤紀錄中, 找到偶 "URI too long" 這個字串的紀錄, 而會有這個連線的電腦, 可能是中毒的電腦.

2. awk '{FS="client ";print $2}'|awk '{FS="] request";print $1}'
這是兩個指令, 不過功能是一組的, 也就是將紀錄中, 屬於 IP 的部份抓出來, 所以用 awk 來去頭去尾.

3. sort|uniq
這也是兩個指令, 功能是將重覆的 IP 消除, 所以先以 sort 將剛剛抓到的資料排序, 再以 uniq 指令, 將同樣的資料只取一次

4. grep [0-9.]
這個比較特別, 由於抓出來的資料有幾筆會有問題, 所以用 grep 過濾, 只抓看起來像 IP 的資料.
(註: 後來改成了 grep [0-9]|grep "." , 因為 grep [0-9.] 還是會有些看起來是日期的資料留下來, 所以分成兩個步驟, 可以比較確實的過濾掉.

5. awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'
將剛剛抓下來的資料, 改寫成 iptables 的用法, 也就是:
-A INPUT : 對本主機的連線
-s 剛剛抓的資料 : 如果是從可能中毒的電腦來的
-j DROP : 就丟掉....

如果上面的 script 沒有問題, 應該可以看到類似以下的結果:
/usr/sbin/iptables -A INPUT -s 192.168.0.3 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.0.21 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.32 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.40 -j DROP
/usr/sbin/iptables -A INPUT -s 192.168.1.77 -j DROP

之後就可以選擇幾種作法:
1. 直接用 xargs 執行
2. 將結果寫入 /etc/rc.d/rc.firewall.uritoolong (舉例)
3. 使用 crontab 定期執行這個 script

舉一反三:
1. 以同樣的原理, 也可以將 root.exe , /script/*.dll , MSOffice/ , _vti_ 等字串列入, 因為這幾個也是中毒後的電腦會嘗試攻擊的連線, 如果不屬於自己管理的網域, 就擋掉.

2. 以同樣的原理, 如果屬於自己管理的網域, 就可以查到中毒的電腦, 先將電腦離線以免再傳染.


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 未分類。將永久鏈結加入書籤。

擋掉溢位入侵駭客(病毒) 有 4 則回應

  1. chungblue 說道:

    引用:
    awk '{print "/usr/sbin/iptables -A INPUT -s "$1" -j DROP"}'
    -s的解釋應該如下
    -s:位址[遮罩] [!][連接埠[:port]]
    我們可以指定來源連接埠的範圍
    這部份設為"$1"有點不太懂

  2. Tsung 說道:

    在這邊的 $1 是變數, 你把他想成 ip 就是了.
    可以了解嗎?

  3. chungblue 說道:

    原來那是變數喔
    FW_IP="163.26.197.8"
    類似這樣子嗎?

  4. Tsung 說道:

    嗯~~ $1 是 awk parse 回來的東西暫存變數,
    就類似你說的那樣子沒錯 🙂

發表迴響