敏感信息監控通用方案

背景:

  春節過後公司有個核心部門遭到競爭對手的強力挖角,所謂鐵打的營盤流水的兵,人員的流失並不可怕,公司擔心的是wiki這類的文檔中心裏的設計、方案、策劃等核心資料外泄。所以必須要加強文檔庫敏感操作的監控,及時止損。

分析:

    如果文檔庫是開源或者自研產品,可以通過修改代碼滿足上述需求,如果像我們一樣使用confluence這樣的黑盒產品就比較頭疼了。Confluence對內容的導出分爲兩個維度:項目維度和頁面維度。其中項目維度的導出Confluence內置了審計日誌,而且我們已經通過權限控制限定了只有超級管理員才能進行導出。Confluence沒有提供頁面級別的審計日誌,這個就是我需要解決的問題。

思路:

    Web應用提供某一具體服務的url一般都會滿足特定規則,我們要先嚐試獲取黑盒產品導出操作的url,如圖:

   我們如果在confluence北向增加一層nginx反向代理,理論上我們可以獲取到所有流經Nginx的請求報文,根據正則表達等方式就可以判斷出是否屬於敏感的url。
  只發現有人在導出資料還不足夠,因爲原始需求是要爲公司止損,也就是說還要去找到“內鬼”。既然confluence有賬號系統,那麼肯定在http請求報文中藏有用戶信息,一般都藏在header中,只不過具體的header哪個屬性需要我們抓包去分析下。這個也很簡單,直接通過chrome就可以做到。如圖:

細節:

    經過上面的分析,核心問題就只剩下如何配置nginx了,我們既要能捕獲到我們關心的敏感信息,也要放行非敏感信息,很幸運,nginx的最長匹配規則讓問題變得再簡單不過了。我們只要給敏感url配置好日誌格式和專門的日誌產出文件,問題就OK了。配置如下:

  #在外面定義好輸出格式,至少要包含時間、頁面標識和用戶,有這三個屬性監控纔有意義。
  log_format exportFormat '"$time_local" "wiki" "$hostname" "$remote_addr" "$http_x_forwarded_for" "$status" "$upstream_addr" "$upstream_status" "$request_length" "$bytes_sent" "$request_time" "$upstream_response_time" "$request_method" "$server_protocol" "$host" "$request_uri" "$http_referer" "$request_body" "$http_user_agent" {"username":"$sent_http_x_ausername"}'; 
  
  # confidence非敏感路徑
    location / {
        proxy_pass         http://XX.XX.XXX.XX:port;
        proxy_set_header   Host $host:443;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;

        access_log      /var/log/nginx/wiki.access.log;
        error_log       /var/log/nginx/wiki.error.log;

        proxy_read_timeout  1200s;

        client_max_body_size 0;
    }

    location /spaces/flyingpdf/pdfpageexport.action {
        proxy_pass         http://XX.XX.XXX.XX:port;
        proxy_set_header   Host $host:443;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;

        access_log      /var/log/nginx/wiki.pdfexportnew.log exportFormat;
        error_log       /var/log/nginx/wiki.error.log;

        proxy_read_timeout  1200s;

        client_max_body_size 0;
    }

    location /exportword {
        proxy_pass         http://XX.XX.XXX.XX:port;
        proxy_set_header   Host $host:443;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host $server_name;
        proxy_set_header   X-Forwarded-Proto https;

        access_log      /var/log/nginx/wiki.wordexportnew.log exportFormat;
        error_log       /var/log/nginx/wiki.error.log;

        proxy_read_timeout  1200s;

        client_max_body_size 0;
    }

增強:

    目前爲止我們做到了發現敏感操作並記錄在案,爲了最快速度止損,還需要配合告警系統。有很多種思路:同一賬號3秒鐘內連續操作兩次;利用linux的郵件系統定時把相關日誌發送給管理員來人工分析;捕獲的敏感日誌在短時間內size激增;或者以上都作爲判斷依據分配不同權重等等。總之如何甄別是真的工作需求還是內鬼行爲,這裏就需要一點“智慧”了。

推廣:

    本文所闡述的是一種方法論,不限於confluence,也不限於nginx,其它網關和web服務也都適用,這裏只是提供了一種解決黑盒產品敏感操作監控的思路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章