データフロー
- English
- 日本語
このドキュメントでは、モジュールとエージェント間のさまざまなデータフローを説明します。MessagePack はシリアル化プロトコルですが、読みやすさを考慮し、ここではデータが JSON 形式で表示されています。
無害な POST リクエスト
HeadersIn の Cookie 値の削除、また TLSProtocol と TLSCipher の入力を確認します。
{ "ModuleVersion": "sigsci-module-apache 0.214", "ServerVersion": "Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.11 OpenSSL/1.0.1f", "ServerFlavor": "prefork", "ServerName": "soysauce.in", "Timestamp": 1438838135, "RemoteAddr": "198.51.100.209", "Method": "POST", "Scheme": "https", "URI": "/add-data" "Protocol": "HTTP/1.1", "TLSProtocol": "TLSv1.2", "TLSCipher": "ECDHE-RSA-AES128-SHA256", "HeadersIn": [ [ "Host", "soysauce.in" ], [ "Accept", "*/*" ], [ "Connection", "keep-alive" ], [ "Cookie", "" ], [ "User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/600.7.12 (KHTML, like Gecko) Version/8.0.7 Safari/600.7.12"], [ "Accept-Language", "en-us" ], [ "Referer", "https://soysauce.in/" ], [ "Accept-Encoding", "gzip, deflate" ], ], "PostData": "foo=bar&company=something"}このリクエストは完全に無害であるため、返されるのは 200 レスポンスのみです (リクエストの続行を許可)。
{ "WAFResponse": 200}これでリクエストは終了です。
無害なリクエスト (404エラーあり)
$ curl -v '127.0.0.1:8085/junk'* Trying 127.0.0.1...* Connected to 127.0.0.1 (127.0.0.1) port 8085 (#0)> GET /junk HTTP/1.1> User-Agent: curl/7.37.1> Host: 127.0.0.1:8085> Accept: */*>< HTTP/1.1 404 Not Found< Content-Type: text/plain; charset=utf-8< Date: Wed, 05 Aug 2015 18:38:24 GMT< Content-Length: 19<以下のように変換されます。
{ "ModuleVersion": "sigsci-sdk-golang 1.0", "ServerVersion": "go1.4.2", "ServerFlavor": "", "ServerName": "127.0.0.1:8085", "Timestamp": 1438799904, "RemoteAddr": "127.0.0.1", "Method": "GET", "Scheme": "http", "URI": "/junk", "Protocol": "HTTP/1.1", "HeadersIn": [ [ "User-Agent", "curl/7.37.1" ], [ "Accept", "*/*" ], ],}レスポンスは 200 のみ、またはレスポンスの通過を許可します。
{ "WAFResponse": 200}サーバーは正常に稼働します。リクエストの最後に、エラーの発生や非常に大量の出力、または処理に非常に長い時間がかかったことが判明した場合、PostRequest でフォローアップします。ResponseCode、ResponseMillis、ResponseSize、さらに HeadersOut の編集内容および入力を確認します。
{ "ModuleVersion": "sigsci-sdk-golang 1.0", "ServerVersion": "go1.4.2", "ServerFlavor": "", "ServerName": "127.0.0.1:8085", "Timestamp": 1438799904, "RemoteAddr": "127.0.0.1", "Method": "GET", "Scheme": "http", "URI": "/junk", "Protocol": "HTTP/1.1", "WAFResponse": 200, "ResponseCode": 404, "ResponseMillis": 1, "ResponseSize": 19, "HeadersIn": [ [ "User-Agent", "curl/7.37.1" ], [ "Accept", "*/*" ], ], "HeadersOut": [ [ "Content-Type", "text/plain; charset=utf-8" ] ]}SQLI と 406 を含むブロックされたリクエスト
以下は生の HTTP ヘッダーです。
$ curl -v '127.0.0.1:8085/junk?id=1+UNION+ALL+SELECT+1'* Connected to 127.0.0.1 (127.0.0.1) port 8085 (#0)> GET /junk?id=1+UNION+ALL+SELECT+1 HTTP/1.1> User-Agent: curl/7.37.1> Host: 127.0.0.1:8085> Accept: */*>< HTTP/1.1 406 Not Acceptable< Content-Type: text/plain; charset=utf-8< Date: Wed, 05 Aug 2015 17:59:46 GMT< Content-Length: 19<406 not acceptableこれは、以下のフローに変換されます。
サーバー/モジュールはエージェントに以下を送信します。
{ "ModuleVersion": "sigsci-sdk-golang 1.0", "ServerVersion": "go1.4.2", "ServerFlavor": "", "ServerName": "127.0.0.1:8085", "Timestamp": 1438796694, "RemoteAddr": "127.0.0.1", "Method": "GET", "Scheme": "http", "URI": "/junk?id=1+UNION+ALL+SELECT+1", "Protocol": "HTTP/1.1", "HeadersIn": [ [ "Accept", "*/*" ], [ "User-Agent", "curl/7.37.1" ], ],}エージェントは以下のように応答します。RequestID が入力され、X-SigSci-Tags ヘッダーが検出内容 (この場合は SQLi) を記述していることを確認します。
{ "WAFResponse": 406, "RequestID": "55c24b96ca84c02201000001", "RequestHeaders": [ [ "X-SigSci-Tags", "SQLI" ] ]}リクエストはブロックされ、リクエストの最後に UpdateRequest メッセージが表示されます。
{ "RequestID": "55c24b96ca84c02201000001", "ResponseCode": 406, "ResponseMillis": 1, "ResponseSize": 19, "HeadersOut": [ [ "Content-Type", "text/plain; charset=utf-8" ], ]}