गोलैंग में एक ओपन-सोर्स प्रोजेक्ट जो विभिन्न API सुरक्षा उपकरणों और WAF का पता लगाने की तर्क और बायपास के लिए मूल्यांकन करता है
GoTestWAF एक API और OWASP हमला सिमुलेशन टूल है जो REST, GraphQL, gRPC, SOAP, XMLRPC और अन्य सहित कई प्रकार के API प्रोटोकॉल का समर्थन करता है।
यह वेब एप्लिकेशन सुरक्षा समाधानों, जैसे API सुरक्षा प्रॉक्सी, Web Application Firewalls, IPS, API गेटवे और अन्य का मूल्यांकन करने के लिए डिज़ाइन किया गया था।
GoTestWAF HTTP अनुरोधों के विभिन्न भागों में रखे गए एन्कोडेड पेलोड का उपयोग करके दुर्भावनापूर्ण अनुरोध उत्पन्न करता है: इसका body, headers, URL parameters, आदि। उत्पन्न अनुरोध GoTestWAF लॉन्च के दौरान निर्दिष्ट एप्लिकेशन सुरक्षा समाधान URL पर भेजे जाते हैं। सुरक्षा समाधान के मूल्यांकन के परिणाम आपकी मशीन पर बनाई गई रिपोर्ट फ़ाइल में दर्ज किए जाते हैं।
अनुरोध निर्माण के लिए डिफ़ॉल्ट शर्तें testcases फ़ोल्डर में निम्नलिखित प्रारूप की YAML फ़ाइलों में परिभाषित की गई हैं:```yaml
payload:
* `payload` एक दुर्भावनापूर्ण हमला नमूना है (जैसे XSS payload जैसे ```<script>alert(111)</script>``` या कुछ और परिष्कृत)।
चूंकि payloads के लिए YAML स्ट्रिंग का प्रारूप आवश्यक है, उन्हें [बाइनरी डेटा के रूप में एन्कोड किया जाना चाहिए](https://yaml.org/type/binary.html)।
* `encoder` एक एन्कोडर है जिसे HTTP अनुरोध में रखने से पहले payload पर लागू किया जाना है। संभावित एन्कोडर हैं:
* Base64
* Base64Flat
* JSUnicode
* URL
* Plain (payload स्ट्रिंग को यथावत रखने के लिए)
* XML Entity
* `placeholder` HTTP अनुरोध के अंदर एक स्थान है जहाँ एन्कोडेड payload होना चाहिए। संभावित placeholders हैं:
* gRPC
* Header
* UserAgent
* RequestBody
* JSONRequest
* JSONBody
* HTMLForm
* HTMLMultipartForm
* SOAPBody
* XMLBody
* URLParam
* URLPath
* RawRequest
`RawRequest` placeholder आपको एक मनमाना HTTP अनुरोध करने की अनुमति देगा। payload को URL पथ, Headers या body में स्ट्रिंग `{{payload}}` को प्रतिस्थापित करके प्रतिस्थापित किया जाता है। `RawRequest` placeholder के फ़ील्ड:
* `method`
* `path`
* `headers`
* `body`
`RawRequest` placeholder के लिए आवश्यक फ़ील्ड:
* `method` फ़ील्ड
उदाहरण:
```yaml
payload:
- test
encoder:
- Plain
placeholder:
- RawRequest:
method: "POST"
path: "/"
headers:
Content-Type: "multipart/form-data; boundary=boundary"
body: |
--boundary
Content-disposition: form-data; name="field1"
Test
--boundary
Content-disposition: form-data; name="field2"
Content-Type: text/plain; charset=utf-7
Knock knock.
{{payload}}
--boundary--
type: RawRequest test
```
* `type` फ़ाइल में payloads के पूरे समूह का नाम है। यह मनमाना हो सकता है, लेकिन फ़ाइल में हमलों के प्रकार को प्रतिबिंबित करना चाहिए।
अनुरोध निर्माण एक तीन-चरणीय प्रक्रिया है जिसमें payload की मात्रा को encoder और placeholder की मात्राओं से गुणा किया जाता है।
मान लीजिए आपने 2 **payloads**, 3 **encoders** (Base64, JSUnicode, और URL) और 1 **placeholder** (URLParameter - HTTP GET parameter) परिभाषित किया है।
इस मामले में, GoTestWAF एक परीक्षण मामले में 2x3x1 = 6 अनुरोध भेजेगा।
GoTestWAF लॉन्च के दौरान, आप दो एम्बेडेड के बीच परीक्षण मामले भी चुन सकते हैं: OWASP Top-10, OWASP-API,
या अपना स्वयं का ([कॉन्फ़िगरेशन विकल्प](#configuration-options) `testCasePath` का उपयोग करके)।
## आवश्यकताएँ
* GoTestwaf सभी लोकप्रिय ऑपरेटिंग सिस्टम (Linux, Windows, macOS) का समर्थन करता है, और यदि सिस्टम में [Go](https://golang.org/doc/install) स्थापित है तो इसे मूल रूप से बनाया जा सकता है। यदि आप GoTestWaf को मूल रूप से चलाना चाहते हैं,
तो सुनिश्चित करें कि PDF रिपोर्ट उत्पन्न करने में सक्षम होने के लिए आपके पास Chrome वेब ब्राउज़र है। यदि आपके पास Chrome नहीं है,
तो आप HTML प्रारूप में एक रिपोर्ट बना सकते हैं।
* यदि GoTestWAF को Docker कंटेनर के रूप में चला रहे हैं, तो कृपया सुनिश्चित करें कि आपने [Docker स्थापित और कॉन्फ़िगर किया है](https://docs.docker.com/get-docker/),
और GoTestWAF और मूल्यांकन किए गए एप्लिकेशन सुरक्षा समाधान एक ही [Docker नेटवर्क](https://docs.docker.com/network/) से जुड़े हैं।
* GoTestWAF के सफलतापूर्वक शुरू होने के लिए, कृपया सुनिश्चित करें कि GoTestWAF चलाने वाली मशीन का IP पता एप्लिकेशन सुरक्षा समाधान चलाने वाली मशीन पर whitelisted है।
## Docker के साथ त्वरित शुरुआत
नीचे दिए गए चरण Docker पर न्यूनतम कॉन्फ़िगरेशन के साथ GoTestWAF को डाउनलोड और शुरू करने की प्रक्रिया बताते हैं।
1. Docker Hub से [GoTestWAF इमेज](https://hub.docker.com/r/wallarm/gotestwaf) खींचें:
```
docker pull wallarm/gotestwaf
```
2. GoTestWAF इमेज शुरू करें:
```sh
docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports \
wallarm/gotestwaf --url=<EVALUATED_SECURITY_SOLUTION_URL>
```
यदि आवश्यक हो, तो आप `${PWD}/reports` को मूल्यांकन रिपोर्ट रखने के लिए उपयोग किए जाने वाले किसी अन्य फ़ोल्डर के पथ से बदल सकते हैं।
यदि आप वैकल्पिक रूप से रिपोर्ट ईमेल नहीं करना चाहते हैं, तो ईमेल अनुरोध संदेश दिखाई देने के बाद बस Enter दबाएँ, या आप संदेश को छोड़ने के लिए --noEmailReport का उपयोग कर सकते हैं:
```sh
docker run --rm --network="host" -v ${PWD}/reports:/app/reports \
wallarm/gotestwaf --url=<EVALUATED_SECURITY_SOLUTION_URL> --noEmailReport
```
यदि मूल्यांकन किया गया सुरक्षा उपकरण बाहरी रूप से उपलब्ध है, तो आप `--network="host"` विकल्प छोड़ सकते हैं। यह विकल्प 127.0.0.1 पर चलने वाले Docker कंटेनरों की परस्पर क्रिया को सक्षम करता है।
gRPC परीक्षण करने के लिए आपके पास एक कार्यशील endpoint होना चाहिए और --grpcPort <port> cli विकल्प का उपयोग करना चाहिए।
```sh
docker run --rm --network="host" -it -v ${PWD}/reports:/app/reports \
wallarm/gotestwaf --grpcPort 9000 --url=http://my.grpc.endpoint
```
3. रिपोर्ट के लिए अपना ईमेल जाँचें।
आपने न्यूनतम कॉन्फ़िगरेशन के साथ GoTestWAF का उपयोग करके अपने एप्लिकेशन सुरक्षा समाधान का सफलतापूर्वक मूल्यांकन किया है।
उन्नत कॉन्फ़िगरेशन विकल्पों के बारे में जानने के लिए, कृपया इस [लिंक](#configuration-options) का उपयोग करें।
## मूल्यांकन परिणामों की जाँच