web攻擊日誌分析之新手指

0x00 前言


現實中可能會常常出現web日誌當中出現一些被攻擊的跡象,好比針對你的一個站點的URL進行SQL注入測試等等,這時候須要你從日誌當中分析究竟是個什麼狀況,若是很是嚴重的話,可能須要調查取證誰來作的這個事情,攻擊流程是什麼樣子的。php

除此以外,還有其餘場景。html

做爲一名管理員,理解如何從安全的角度來分析日誌真的很重要。python

這篇文章內容包括了日誌分析的一些基礎知識,能夠解決上述需求。mysql

0x01 準備


出於演示目的,我進行如下設置。git

Apache 服務器

預安裝在Kali Linuxgithub

能夠用如下命令開啓:web

service apache2 start

enter image description here

MySQL

預安裝在Kali Linuxsql

能夠用如下命令開啓:shell

service mysql start

enter image description here

使用PHP-MySQL建立一個有漏洞的web應用

我使用PHP開發了一個有漏洞的web應用而且把它放在上面提到的 Apache-MySQL裏面。數據庫

上述設置完成後,我用了一些Kali Linux中的自動工具(ZAP、w3af)掃描這個有漏洞的應用的URL。

如今讓咱們來看看分析日誌中的不一樣狀況。

0x02 Apache服務中的日誌記錄


Debian系統上Apache服務器日誌的默認位置爲:/var/log/apache2/access.log

日誌記錄只是在服務器上存儲日誌。我還須要分析日誌以得出正確結果。在接下來的一節裏,咱們將看到咱們如何分析Apache服務器的訪問日誌以找出web站點上是否有攻擊嘗試。

分析日誌

手動檢查

在日誌量較小的狀況下,或者若是咱們查找一個指定關鍵詞,可使用像grep表達式這樣的工具觀察日誌。

在下圖中,咱們在URL中試圖搜尋全部關鍵詞爲「union」的請求。

enter image description here

從上圖中,咱們能夠看到URL中的「union select 1,2,3,4,5」請求。很明顯,ip地址爲 192.168.56.105的某人嘗試了SQL注入。 相似地,當咱們有本身的關鍵詞時能夠搜索特殊的關鍵詞。

enter image description here

在下圖中,咱們正在搜索試圖讀取「/etc/passwd」的請求,很明顯是本地文件包含嘗試。

如上面的截圖所示,咱們有許多本地文件包含的嘗試,且這些請求發送自ip地址 127.0.0.1。

不少時候,能輕易經過日誌看出是不是自動化掃描器產生的。

舉例來講, IBM appscan在許多攻擊payload中使用「appscan」這個詞。因此,在日誌中查看這樣的請求,咱們基本就能夠判斷有人在使用appscan掃描網站。

Microsoft Excel也是一個打開日誌文件和分析日誌的不錯的工具。咱們能夠經過指定「空格」爲分隔符以用excel打開日誌文件。

當咱們手頭沒有日誌分析工具時,這個也挺好用的。

除了這些關鍵詞,在分析期間要了解HTTP狀態代碼的基礎知識。如下是關於HTTP狀態代碼的高級信息的表格。

enter image description here

0x03 Web shells


webshell是網站/服務器的另外一個問題。webshell能夠已web server權限控制服務器。

在一些狀況下,咱們可使用webshell來訪問全部放在相同服務器上的其餘站點。

如下截圖顯示了Microsoft Excel 中開啓相同的access.log文件。

enter image description here

咱們清楚地看到有一個叫「b374k.php」的文件被訪問了。「b374k」是一個流行的webshell,所以這個文件是很可疑的。

查看相應代碼「200」,本行代表有人上傳了一個webshell並訪問了它。

在許多狀況下,攻擊者重命名webshell的名字以免懷疑。咱們必須變得聰明點,看看被訪問的文件是不是常規文件或者是否他們看起來不太同樣。咱們能夠更進一步,若是任何文件看起來可疑的話,還能夠查看文件類型和時間戳。

One single quote for the win

SQL注入是web應用中最多見的漏洞之一。大多數學習web應用安全的人是從學習SQL注入開始的。

識別一個傳統的SQL注入很容易,給URL參數添加一個單引號看看是否報錯。

任何咱們傳遞給服務器的東西都會被記錄,而且能夠朔源。

如下截圖顯示了日誌當中記錄了有對參數user傳入單引號測試是否有SQL注入的行爲。

%27是單引號的URL編碼。

enter image description here

出於管理目的,咱們還能夠運行查詢監視來查看數據庫中的哪一個請求被執行了。

enter image description here

若是咱們觀察以上圖片,傳遞一個單引號給參數「user」的SQL語句被執行了。

0x04 使用自動化工具分析


當存在大量日誌時。手動檢查就會變得困難。在這種情景下,除了一些手動檢查以外咱們可使用自動化工具。

雖然有許多高效的商業工具,可是我要向大家介紹一款被稱爲「Scalp」的免費工具。

據他們的官方連接所說,Scalp是用於Apache服務器,旨在查找安全問題的日誌分析器。主要理念是瀏覽大量日誌文件並經過從HTTP/GET中提取可能的攻擊。

Scalp能夠從如下連接下載:

https://code.google.com/p/apache-scalp/

Scalp是python腳本,因此要求咱們的機器中安裝python。

如下圖片顯示該工具的幫助。

enter image description here

如咱們在上圖所見,咱們須要使用標誌-l來提供要分析的日誌文件。

同時,咱們須要提供使用標誌-f提供一個過濾文件讓Scalp在access.log文件中識別可能的攻擊。

咱們可使用PHPIDS項目中的過濾器來檢測任何惡意的嘗試。

該文件名爲「default_filter.xml 」,能夠從如下連接中下載:

https://github.com/PHPIDS/PHPIDS/blob/master/lib/IDS/default_filter.xml

如下代碼塊是取自上面連接的一部分。

#!html
<filter>
??????<id>12</id>
??????<rule><![CDATA[(?:etc\/\W*passwd)]]></rule>
??????<description>Detects etc/passwd inclusion attempts</description>
??????<tags>
??????????<tag>dt</tag>
??????????<tag>id</tag>
??????????<tag>lfi</tag>
??????</tags>
??????<impact>5</impact>
</filter>

它是使用XML標籤訂義的規則集來檢測不一樣的攻擊測試。以上代碼片斷是檢測文件包含攻擊嘗試的一個示例。

下載此文件以後,把它放入Scalp的同一文件夾下。

運行如下命令來使用Scalp分析日誌。

#!bash
python scalp-0.4.py –l /var/log/apache2/access.log –f filter.xml –o output –html

enter image description here

「output」是報告保存的目錄。若是不存在的話,由Scalp自動建立。-html是用來生成HTML格式的報告。 如咱們在上圖看到的那樣,Scalp結果代表它分析了4001行,超過4024並發現了296個攻擊模式。

運行上述命令後在輸出目錄內生成報告。咱們能夠在瀏覽器內打開它並查看結果。 下面截圖顯示的輸出顯示了目錄遍歷攻擊嘗試的一小部分。

enter image description here

MySQL中的日誌記錄


本節論述了數據庫中的攻擊分析和監視它們的方法。

第一步是查看設置了什麼變量。咱們可使用「show variables;」完成,以下所示。

enter image description here

接下來顯示了上述命令的輸出。

enter image description here

如咱們在上圖中看到的,日誌記錄已開啓。該值默認爲OFF。

這裏另外一個重要的記錄是 「log_output」,這是說咱們正在把結果寫入到文件中。另外,咱們也能夠用表。

咱們能夠看見「log_slow_queries」爲ON。默認值爲OFF。

全部這些選項都有詳細解釋且能夠在下面提供的MySQL文檔連接裏直接閱讀:

http://dev.mysql.com/doc/refman/5.0/en/server-logs.html

MySQL的查詢監控


請求日誌記錄從客戶端處收到並執行的語句。默認記錄是不開啓的,由於比較損耗性能。

咱們能夠從MySQL終端中開啓它們或者能夠編輯MySQL配置文件,以下圖所示。

我正在使用VIM編輯器打開位於/etc/mysql目錄內的「my.cnf」文件。

enter image description here

若是咱們向下滾動,能夠看見日誌正被寫入一個稱爲「mysql.log」的文件內。

enter image description here

咱們還能看到記錄「log_slow_queries」 ,是記錄SQL語句執行花了很長時間的日誌。

enter image description here

如今一切就緒。若是有人用惡意查詢數據庫,咱們能夠在這些日誌中觀察到。以下所示:

enter image description here

上圖顯示了查詢命中了名爲「webservice」的數據庫並試圖使用SQL注入繞過認證。

0x05 更多日誌記錄


默認地,Apache只記錄GET請求,要記錄POST數據的話,咱們可使用一個稱爲「mod_dumpio」的Apache模塊。要了解更多關於實現部分的信息,請參考如下連接:

http://httpd.apache.org/docs/2.2/mod/mod_dumpio.html

另外,咱們可使用「 mod security」達到相同結果。

Reference http://httpd.apache.org/docs/2.2/logs.html

相關文章
相關標籤/搜索