編程的WAF(下)

      網友投稿 551 2025-03-31

      一、編程語言的要素

      天存信息的iWall3應用防火墻是一種創新式的類編程 WAF,它包含了編程語言的一些基本要素。

      1. 變量

      iWall3 中廣義的變量包括報文變量、環境變量和用戶變量:報文變量和環境變量相當于編程語言中的常量或傳入的參數,用戶變量則是真正編程語言意義上的變量,即用戶可以自行創建、使用和維護變量。

      2. 條件判斷

      iWall3 支持編程語言標準的條件判斷:即可以包含無限嵌套的 if - then - else 條件,每個 if 條件又可以使用 and - or - not 邏輯運算符連接多個子條件。

      3. 表達式

      類編程的WAF(下)

      iWall3 支持與通用編程語言一致的表達式:表達式由常量、變量、運算符和內置函數組成,以模板字符串方式內嵌書寫,可在條件判斷、變量賦值、模式匹配、日志輸出等任意位置使用。

      4. 語句

      條件執行部分,iWall3 允許用戶書寫任意語句:這些語句不限于 WAF 常規的阻止訪問和記錄日志,它可以實現更復雜的功能,如:改變其他規則的行為,修改 HTTP 報文的特定部分,輸出指定變量等。

      二、數據方式的語言表達

      天存信息的 iWall3 包含了編程語言的設計思想,但獨創性地以數據方式呈現。

      1. JSON格式

      安全產品的使用者通常是非程序員,他們習慣于面對配置文件而非一段代碼。因此,iWall3 的配置依舊以規則文件的形式出現,只是這里的規則不是純文本格式,而是可以體現出層次結構的 JSON 格式。

      充分利用 JSON 格式的名-值對 (對象) 和序列表 (數組) 結構,將語言要素和業務邏輯用 JSON 格式表達出來,兼顧規則的人機可讀性和高度靈活性。

      JSON 格式的每個元素都具有明確的名 (name),這就給了書寫者一個基本的框架和自說明的參數指引,既方便了自己書寫規則,也便于其他人對規則的維護。

      iWall3 規則具有明確細致的語法定義,從而能夠使用成熟的 JSON schema 方式來校驗 (validate) 規則的正確性,例如可以細致檢查動作的必選參數、可選參數以及拼寫錯誤。

      2. 規則結構

      一個規則即為一個 if-then-else 結構,在 JSON 格式中表現為一個名為 if 的對象和一個名為 then 的對象,以及可選的一個名為 else 的對象——

      if - 變量經選擇和整形后,與表達式模式的運算進行匹配。支持用邏輯運算符連接多個條件。

      then - 匹配后執行的一般語句和裁決語句,還可以包含子 if-then 結構。

      else - 不匹配時執行的語句和可選的子 if-then 結構。

      以下是規則的一個舉例:

      { "if": { "variable": "REQUEST_FILENAME_EXT", "operator": "inFromFile", "pattern": "restricted_file_exts.lst" }, "then": { "if": { "variable": "REMOTE_ADDR", "operator": "begin", "pattern": "192.168" }, "then": { "verdict": { "log": true, "action": "pass" }, "actions": [{ "action": "alterArgGet", "op": "set", "name": "iwall_rule_id", "value": "${RULE.id}" }], }, "else": { "verdict": { "log": true, "action": "deny" } } } }

      上述規則實現的功能為: 遇到訪問敏感文件類型時,記錄日志,并對不同訪問來源作不同響應:來自內網的,放行且將規則 id 作為參數傳給后端應用;來自外網的,則拒絕。

      3. 自動循環

      一般編程語言中都有名為 for 的循環語句,用來對可迭代數據進行逐個元素處理。HTTP 協議中的請求參數 (args)、頭 (header) 都是可迭代數據,在 iWall3 中表現為集合或者數組的數據類型。如果按照編程語言的慣例,用 for 循環去顯式地獲取數據,會讓規則寫得很繁瑣。

      iWall3 則實現了對可迭代變量類型的自動循環,只需列出變量名,即可自動進行循環迭代,簡化了書寫。而對于不需要參與循環的元素,也提供了成員篩選的手段,直接在變量名后列出白名單或黑名單成員即可。

      { "if": { "variable": "REQUEST_COOKIES:!cnzz_*", "transform": "urlDecodeUni", "operator": "detectSQLi" } }

      上述規則對請求 cookie 中的每個成員進行 SQL 注入檢查,但排除掉 cnzz_ 開頭的成員。

      4. 動態修改

      規則并非是靜態孤立的,它不僅可以自身執行動作,還可以在 HTTP 會話過程中去改變其他規則的屬性,稱為元屬性覆寫。元屬性覆寫功能實現了運行時的檢測和動作分離,通過動態調整其他規則的輸入和響應,滿足用戶復雜的需求。

      { "if": [{ "variable": "REQUEST_FILENAME", "operator": "=", "pattern": "admin.php" }, { "variable": "TIME.hour", "operator": "<", "pattern": "8" }], "then": { "actions": [{ "action": "alterRuleMeta", "rules": "10001,30001-30999", "meta": { "severity": "warning", "abnormal_weight": 15 } }] } }

      上述規則的功能是: 在 0:00am-8:00am 這一時間段內訪問 admin.php 時,部分規則的緊急度將被設為 critical,異常權值則被設為 15。

      三、針對HTTP協議的定制

      天存信息的 iWall3 的目標是實現 Web 應用防護,因此在語言設計上也有與 HTTP 協議密切相關的因素。

      1. 數據類型

      與編程語言中的變量一樣,iWall3 的變量也具有多種數據類型。其中有些數據類型是專門針對 HTTP 協議而設計的,如:

      2. 持久變量

      iWall3 的用戶變量具有自己的生命期。在語言層面,iWall3 不僅提供了 HTTP 會話期內有效的事務內變量,也提供了跨越 HTTP 會話的持久變量。

      持久變量提供了跨越 HTTP 事務的保存、計算和讀取數據的機制。這樣,Web 應用防護的邏輯就不局限于單個 HTTP 會話,而是可以在多個 HTTP 會話間建立聯系。

      3. 狀態維護

      HTTP 協議本身是無狀態的,這意味著沒有“用戶”的概念。但在防護功能上,我們又需要有一個“用戶”的概念,這樣才能將多個 HTTP 事務關聯起來,制定針對“用戶”的防護措施。

      iWall3 提供了主體的概念,它是 HTTP 事務的發起端和訪問者。對于每個 HTTP 事務,可以從設備、網絡和報文等不同層面采集信息,得到多個類型的主體。如此,書寫者能夠對多個 HTTP 事務中的同一主體應用規則 (如長時間攔截) 和共享數據 (如權重計算)。

      四、有什么用

      使用類編程 WAF,安全人員不再是規則的使用者,而變成了規則的生產者。針對應用的細致和獨立的安全需求,基本上都可以用編程的方式實現出來,不再受限于 WAF 產品提供的內置功能。

      如本文開頭所述的功能需求,即使僅僅在防范注入方面:

      某個域名或某些特定的 URL 不需要注入檢查;

      對來自外網的注入訪問進行攔截,來自內網的注入訪問只記錄,不攔截;

      對特定的請求參數名或特定特征的請求參數不進行注入檢查;

      非工作時段不僅攔截還阻止該用戶一段時間訪問;

      對 admin 等管理賬號登錄后的訪問不進行注入檢查;

      對于只記錄不攔截的請求,附加一個特別的請求頭發往應用;

      對某些 URL 的注入訪問,記錄下 HTTP 請求的全部報文;

      HTTP 響應碼為 500 的注入的日志緊急度設為 alert;

      對疑似的注入企圖不做一次攔截,而是進行加權計算。

      無論是上述某一條還是更復雜的組合,安全人員都可以在用戶現場通過高度靈活的類編程 iWall3 來實現。

      HTTP Web應用防火墻 WAF 網絡 運維 通用安全

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:word表格格式統一設置寬度教程(word的表格寬度設置)
      下一篇:【Elasticsearch】【基礎入門
      相關文章
      国产亚洲精品线观看动态图| 亚洲精品国产精品国自产观看 | 亚洲av色香蕉一区二区三区蜜桃| 亚洲a级在线观看| 亚洲国产精品综合一区在线| 久久综合亚洲色一区二区三区 | 亚洲欧美日韩中文二区| 亚洲色大成网站www| 亚洲一卡一卡二新区无人区| 亚洲一区二区三区写真| 狠狠色伊人亚洲综合网站色| 亚洲综合激情五月丁香六月| 亚洲国产欧美日韩精品一区二区三区 | 亚洲国产成人久久综合野外| 亚洲国产精品自产在线播放 | 亚洲精品视频免费| 亚洲欧洲中文日韩av乱码| 亚洲综合激情另类专区| 中文字幕久久亚洲一区| 国产精品亚洲精品日韩已满| 精品国产综合成人亚洲区| 亚洲AV成人无码久久精品老人 | 国产精品亚洲专区一区| xvideos亚洲永久网址| 亚洲男人的天堂在线va拉文| 国产亚洲精品激情都市| 亚洲国产精品无码一线岛国| 无码欧精品亚洲日韩一区| 亚洲综合无码一区二区三区| 亚洲伊人久久大香线蕉影院| 中文字幕乱码亚洲无线三区| 亚洲国产AV无码一区二区三区| 午夜亚洲福利在线老司机| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 综合亚洲伊人午夜网 | 亚洲国产精品国自产电影| 亚洲图片中文字幕| 亚洲色中文字幕在线播放| 在线视频亚洲一区| 亚洲综合色婷婷七月丁香| 内射少妇36P亚洲区|