先前介紹PaaS服務中的Web app,讓我們可以快速的架設網站服務,
輕鬆點幾個鍵就能開出一個php可執行的環境
但我們要知道,在真實世界,攻擊是無所不在的,雖然WebApp可以隨時調整規模,
服務吞吐量,但經不起打阿,所以在Azure上要開啟所謂的WAF
(Web application Firewall)服務,微軟本身提供Application Gateway,
就可以做一些WAF防護的功能
如下參考資料,透由Application gateway可以阻擋如SQL injection,
Xss攻擊等,以保護後端服務
https://azure.microsoft.com/zh-tw/blog/azure-web-application-firewall-waf-generally-available/
情境:透由Application Gateway服務保護後端Web App
首先我們要進入先前建立的SQL Database,新建一張表,
後續要模擬SQL Injection做資料撈取
我們先建立一張table2的表,資料行有(id, name),並寫入一些資料
並把先前的Web App的hello.php程式修改一下,改成會撈取表單值GET值
另存成hello2.php,上傳至Web App環境
<?php
$id=$_GET["id"];
$serverName = "ithomemicro.database.windows.net"; // update me
$connectionOptions = array(
"Database" => "ithomemicromilua", // update me
"Uid" => "xxxx", // update me
"PWD" => "xxxx" // update me
);
//Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
$tsql= "SELECT *
FROM [dbo].[table2] where id = $id";
$getResults= sqlsrv_query($conn, $tsql);
if ($getResults == FALSE)
echo (sqlsrv_errors());
while ($row = sqlsrv_fetch_array($getResults, SQLSRV_FETCH_ASSOC)) {
echo ($row['name'] . PHP_EOL);
echo '<br>';
}
sqlsrv_free_stmt($getResults);
?>
跑出來的結果就是撈出id=1的name欄位值
那SQL Injection的下法就是在網址後面從id=1 改為 id=1 or 1=1
那就會變成這樣,整張表的資料都被撈出來了
若這時候我們有WAF,就可以阻擋這樣的攻擊,使攻擊失效,
那接下來就是建立WAF的說明
點選建立資源,搜尋輸入Application Gateway,
選擇應用程式閘道
依序輸入下列資訊,因為是Lab的關係,
我們選擇最低的定價層
執行個數輸入1
SKU為中
防火牆狀態選擇已啟用
防火牆模式選擇prevention(開啟阻擋)
HTTP2 停用
這時子網路的選擇遇到問題了,跳出提示應用程式閘道的子網路要獨立開來
因此我們再去子網路設定裡面建立
建立新的位址空間
新增子網路WAF
子網路設定完成後,再回來選就可以下一步了
在下一步之前,我們要先了解應用程式閘道的整個設定流程
要先有前端IP,接著由http/https接聽程式負責接聽,
並套用規則後才會將流量導至後端集區,後端集區的服務可為1至多個
接著我們依序開始設定,相關的設定後續可以再改,
可以參考下幾張圖的設定方式先建立出應用程式閘道
整個過程大約要15~20分鐘,建立完成後,看到WAF前端IP為104.215.184.99,
很開心就把網址掛上填進去,想要體會美好的成果,
結果頁面跳出 502 Server Error
後來搞了很久終於找到解法,簡單說,如果後端集區是一般的VM,
只做IPv4轉址應該沒什麼問題,但如果後端集區是Web App,
在設定上還要結合一些Powershell Code才能成功做出來
那到底該怎麼繼續做下去呢?我們明天再繼續說明…
See you next day ^^”