• Web Application Firewall 的常見偵測原理

    Image result for Web application firewall

    這篇文章主要討論 WAF (Web Application Firewall ) 的偵測與防護基本原理

    1. 正規化

    由於黑客會利用各種編碼的方式繞過驗證或是檢查,

    所以 WAF 必須將原始 Http Request 的數據內容進行正規化

    所謂的正規化就是將原始資料”轉化”為對於 WAF 無害的資料格式, 正規化主要目的為:

    • 資料格式轉換, 對 WAF 無害
    • 資料格式轉換, 讓 WAF 可以容易用規則判斷

    常見的正規化資料格式轉換有:

    • 大小寫
    • URL 編碼
    • Null Byte 結尾
    • /./ 或是 /../的使用
    • 空白字元
    • 註釋
    • //  與 \\ 的轉換
    • 特殊意義字元 \t \001等

     

     

    2. 黑名單 IP

    如果來源的 IP 位址是已知的黑客或是危險的用戶端, 可以直接中斷該連線請求

    下列是業界比較知名黑名單 IP 的來源

     

    3. 程式語言錯誤訊息

    當網站沒有適當的錯誤處理時,

    回傳過多的程式異常訊息會導致黑客利用該訊息對於後端程式解析進行攻擊,

    SQL injection 就是常見的一種攻擊方式

    每種程式語言與資料庫回傳的錯誤訊息都不同,

    WAF 會偵測到這些回傳錯誤訊息並且進行過濾, 進一步判斷是否為某個來源用戶端造成的錯誤, 對於該用戶端進行阻攔

     

    4. 合法的Method

    常見的 Method 包含 HTTP post, get, put等

    如果可以針對存取資源所開放的 http method 來做白名單 WAF設定會讓偵測更加準確

    白名單相對缺點是耗時且每次更新都要重新檢視, 當服務多的時候白名單的維護也是一個問題

    常見的WAF黑名單配置是 HTTP HEAD 與 HTTP Options 這兩個 mehtods, 因為對外開放容易導致透露過多訊息外露,

    HTTP Verb CRUD Entire Collection (e.g. /customers) Specific Item (e.g. /customers/{id})
    POST Create 201 (Created), ‘Location’ header with link to /customers/{id} containing new ID. 404 (Not Found), 409 (Conflict) if resource already exists..
    GET Read 200 (OK), list of customers. Use pagination, sorting and filtering to navigate big lists. 200 (OK), single customer. 404 (Not Found), if ID not found or invalid.
    PUT Update/Replace 405 (Method Not Allowed), unless you want to update/replace every resource in the entire collection. 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
    PATCH Update/Modify 405 (Method Not Allowed), unless you want to modify the collection itself. 200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.
    DELETE Delete 405 (Method Not Allowed), unless you want to delete the whole collection—not often desirable. 200 (OK). 404 (Not Found), if ID not found or invalid.

    http://www.restapitutorial.com/lessons/httpmethods.html

     

    6. HTTP 標準協議

    檢查請求的內容是否符合 HTTP 標準協議, 這是一種比較有效且直覺的方式

    任意修改 HTTP 協議內容可能會導致的攻擊如下:

    Nature Type ID Name View(s)
    ChildOf Meta Attack Pattern 272 Protocol Manipulation
    1000
    ParentOf Detailed Attack Pattern 5 Blue Boxing
    1000
    ParentOf Detailed Attack Pattern 33 HTTP Request Smuggling
    1000
    ParentOf Detailed Attack Pattern 34 HTTP Response Splitting
    1000
    ParentOf Standard Attack Pattern 90 Reflection Attack in Authentication Protocol
    1000
    ParentOf Standard Attack Pattern 105 HTTP Request Splitting
    1000
    ParentOf Detailed Attack Pattern 273 HTTP Response Smuggling
    1000
    ParentOf Detailed Attack Pattern 274 HTTP Verb Tampering
    1000

    http://capec.mitre.org/data/definitions/220.html

    HTTP 協議中檢查的重點為:

    • MIME中filename 檔名
    • URL 合法性
    • Content-Length數值
    • 衝突與重複的 HTTP headers,  例如 keep-alive 與close重複與衝突
    • 不安全的字元, 例如 ” “, “<“, “>”,  “{“, “}”, “|”, “\”, “^”, “~”,   “[“, “]”, and “`”.等
    • 過濾異常缺少 Http header 的請求, 一般正常的請求會包含  Host, User-Agent, Accept headers, 因此如果缺少或是沒有值都是表示異常
    • Content-Length不等於 0 但是卻沒有Content-Type
    • HTTP protocol version

    https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

    http://www.ietf.org/rfc/rfc2183.txt

    http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13

    http://www.ietf.org/rfc/rfc1738.txt

     

    7. 合法字元範圍白名單

    適用HTTP範圍 建議ASCII字符範圍
    REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES ASCII 1-255

    ASCII全部範圍, 除了 NULL

    REQUEST_URI, REQUEST_HEADERS, ARGS and ARGS_NAMES ASCII 9,10,13,32-126,128-255

    ASCII可視字元範圍 + TAB + 換行

     REQUEST_URI, REQUEST_HEADERS, ARGS, ARGS_NAMES and REQUEST_BODY ASCII 32-36,38-126

    可視範圍, 除了 %

    ARGS, ARGS_NAMES and REQUEST_BODY ASCII 38,44-46,48-58,61,65-90,95,97-122

    僅包含 A-Z a-z 0-9 = – _ . , : &

    除了 User-Agent, Referer and Cookie的 REQUEST_HEADERS ASCII 32,34,38,42-59,61,65-90,95,97-122

    A-Z a-z 0-9 = – _ . , : & ” * + / SPACE

    參考 ModSecurity Rules

     

    8. HTTP request Smuggling 攻擊

    HTTP request smuggling 攻擊主要利用重複傳送 content-length 造成 Web proxy 與 Web server 讀取資料的異常

    常見的特徵會在 HTTP 請求內容內出現重複不一致的 Content-Length與Transfer-Encoding

     

    詳細參考:

    http://projects.webappsec.org/HTTP-Request-Smuggling

    9. Header Injection 攻擊

    這種攻擊方式主要在 Http header 中加入換行符號  %0d %0a

    https://en.wikipedia.org/wiki/HTTP_header_injection

    目錄字典攻擊

    這種攻擊方式黑客嘗試訪問非正常或是未經授權的訪問路徑

    常見的特徵有 /../ ..\ ../  Index of  To Parent Directory等

    因此當訪問路徑包含有 /../ ..\ ../ 也是異常的一種訪問

     

    10. 異常的系統檔案讀取

    有些常見的系統檔案或是設定檔不對外開放, 如果在來源請求中有這些檔案名稱也是異常存取,

    • Linux: /etc/passwd/  /etc/hosts
    • Windows: /WINDOWS/system32/drivers/etc/hosts  /boot.ini
    • PhpAdmin: /etc/phpmyadmin/config.inc.php
    • MySQL: /var/log/mysql.err

    可參考這列表

    https://github.com/lightos/Panoptic/blob/master/cases.xml

    11. OWASP top 10 攻擊

    其他攻擊的檢測還包含 OWASP top 10

    • A1 Injection
    • A2 Broken Authentication and Session Management
    • A3 Cross-Site Scripting (XSS)
    • A4 Broken Access Control (As it was in 2004)
    • A5 Security Misconfiguration
    • A6 Sensitive Data Exposure
    • A7 Insufficient Attack Protection (NEW)
    • A8 Cross-Site Request Forgery (CSRF)
    • A9 Using Components with Known Vulnerabilities
    • A10 Underprotected APIs (NEW)

    12. 異常已知的 User Agent

    常見的自動化攻擊工具或是網站攻擊工具會有預設的 UserAgent ,

    這也是一種可以過濾基本已知網站攻擊工具的一種方式

    例如:

    “ArchiveTeam”, // ignores robots.txt and hammers server
    “adwords”, // referrer spam
    “autoemailspider”, // spam harvester
    “blogsearchbot-martin”, // from honeypot
    “BrowserEmulator/”, // open proxy software

    參考

    https://perishablepress.com/ultimate-htaccess-blacklist/

    Posted by Tony @ 9:00 pm

  • Leave a Reply

    Your email address will not be published.