เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect  - ตอนที่ 2 - ปรับแต่ง NGINX App Protect - transparent mode
Tags: nginx, waf, proen, appprotect
Published: 2021-09-17 09:22:00

*บทความนี้เป็นการใช้งาน NGINX Plus และ NGINX App Protect บน Proen Cloud จะมีค่าใช้จ่าย Subscription แบบรายเดือนครับ

ในตอนที่แล้ว เราได้ติดตั้ง NGINX Plus และ NGINX App Protect
เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect - ตอนที่ 1 - ติดตั้ง NGINX Plus และ NGINX App Protect
https://bit.ly/napproen

WAF ที่เราติดตั้ง ได้ถูกปรับแต่งมาแล้วโดย F5 ครับ ด้านหนึ่งจึงมี Signatures ที่ครอบคลุมการโจมตีหลากหลายรูปแบบ อีกด้านเป็นการกำหนดระดับการป้องกันให้อยู่บนความ "พอดี" พยายามที่จะไม่ Block traffic ปกติ หรือก็คือให้เกิด False Positive น้อยที่สุด

แม้จะมีการปรับแต่งมาแล้ว แต่ Application ที่มีการใช้งานเฉพาะทาง เช่น มีการใช้งาน sensitive parameter, หรือมีการส่ง/เรียกใช้ไฟล์ระบบ ถึงแม้จะเป็นการใช้งานปกติของ Application แต่ก็จะถูก Block ไปด้วย หรือเกิด False Positive นั่นเอง

ก่อนการใช้งานจริงบน Production เราจึงต้องทดสอบกับ WAF ก่อนครับ ว่า Applicatoin และ WAF ของเรานั้น สามารถทำงานร่วมกันได้

เริ่มจาก Proen Cloud ที่ติดตั้ง NGINX Plus และ NGINX App Protect
(วิธีติดตั้ง จาก EP ที่แล้ว https://bit.ly/napproen)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/25sshrb0sk4bcmz9upry.jpg)

ทดสอบการใช้งานแบบเดิมๆ ก่อนปรับแต่ง WAF

ทดสอบเข้าใช้งานแบบปกติ
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9kc9f9r3o03orx0timek.jpg)

ทดสอบการโจมตีด้วยเทคนิค Directory Traversal ไปยังไฟล์ htpasswd, ถูก Block โดย WAF
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wt80qd7683rsqh90yosz.jpg)

ก่อนการปรับแต่ง เราจำเป็นต้องใช้สิทธิ์ root เพื่อแก้ไข WAF Policies

ที่ NGINX Load Balancer เลือก Add-ons และ Install Root Access Add-ons, กด Install
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aninzcbae4gmdc57s08u.jpg)

รอติดตั้งประมาณ 10s แล้วกด Close
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l5sdu77pugwwemk6subs.jpg)

SSH ไปที่เครื่อง NGINX Load Balancer, ยกระดับสิทธิ์การใช้งานเป็น root โดยพิมพ์คำสั่ง 'sudo -i'
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hbmqgf74fx75d2acff3t.jpg)

List file NGINX App Protect Policy โดย
'cd /etc/app_protect/conf'
'ls'
จะพบไฟล์ NginxDefaultPolicy.json ซึ่งเราจะปรับแต่ง WAF ที่ไฟล์นี้
โดย NGINX Plus จะทำการอ่าน Configuration จาก NginxDefaultPolicy.json อีกทีหนึ่ง, ดังนั้น เราสามารถสร้าง Policy ไว้หลายๆ ไฟล์ก็ได้ครับ แล้วตอนท้ายเรามาดูวิธีการตั้งค่า ให้แต่ละ server หรือแต่ละ location เลือกใช้งาน policy คนละตัวกันได้ครับ

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qq5cbsiolhjig75w75ju.jpg)

สำหรับในขั้นนี้ เราจะปรับแต่ง 'NginxDefaultPolicy.json' ก่อน
'vi NginxDefaultPolicy.json'
เพิ่ม Configuration ให้เป็น

{
    "policy": {
        "name": "app_protect_default_policy",
        "template": { "name": "POLICY_TEMPLATE_NGINX_BASE" },
        "applicationLanguage": "utf-8",
        "enforcementMode": "blocking"
    }
}

บน Proen มี Editor ให้เลือกใช้ทั้ง vi และ nano ถ้าไม่ถนัดสามารถ copy จาก editor อื่นๆมาวางได้ครับ

**Important: การพิมพ์ช่องว่าง ไม่สามารถใช้ tab ได้, จะต้องใช้ spacebar เท่านั้น

Save configuration
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6el1f40eujpmt8v93zlc.jpg)

reload NGINX เพื่อใช้ Configuration ใหม่, ถ้าไม่มี output ใด ๆ ออกมา แสดงว่า reload สำเร็จ, แต่หากได้ข้อความ Error ให้เช็คว่ามีการใช้ tab หรือไม่(ใช้ tab ไม่ได้ครับ) หรือการใส่ , {} ตรงตามตัวอย่างไหม, หรือติดต่อทีมงานให้ช่วย Support ได้ครับ
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o01d5k8s5d8we6oarplw.jpg)

ถ้าเราทดสอบการใช้งานตอนนี้ จะพบว่าสามารถ Block การโจมตีได้เหมือนเดิม เพราะอยู่ใน Blocking mode
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zd49o5nhei57uhl3813m.jpg)

เปลี่ยน WAF policy ที่ไฟล์ NginxDefaultPolicy.conf จาก blocking เป็น transparent แล้ว save
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/evw96gcdgcgrqnrmvfyy.jpg)

transparent mode คือการยอมให้การโจมตีผ่านไปได้ โดยไม่ Block, จะทำแค่ log เก็บไว้

transparent mode เหมาะสำหรับการ tuning/ก่อนขึ้น Production ของ Application ใหม่ๆ เพื่อปรับแต่ง WAF ให้สอดคล้องกับ Application ได้โดยไม่กระทบกับการใช้งานของ User

reload NGINX Configuration อีกครั้ง, หากไม่มี output ใด ๆ ออกมาแสดงว่า reload สำเร็จ, แต่หากได้ Error ให้เช็คว่ามีการใช้ tab หรือไ(ใช้ tab ไม่ได้ครับ) หรือการใส่ , {} ตรงตามตัวอย่างไหม, หรือติดต่อทีมงานให้ช่วย Support ได้ครับ
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oxdbv5l29ir0zkecebts.jpg)

ทดสอบโจมตีอีกครั้ง ด้วยเทคนิคเดิม พบว่าหน้าเว็บไม่ถูกบล็อกแล้ว
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cbx1newzy11texxrc7v.jpg)

ตรวจสอบ App Protect log ณ เวลาเดียวกัน 8:27:08 พบว่ามี log เก็บไว้ โดยแสดงรายละเอียดการโจมตีแบบ Directory Traversal technique
'cat /var/log/nginx/app_protect.log | grep '8:27'

เวลาทำการทดสอบของแต่ละเครื่องจะไม่ตรงกันครับ สามารถเรียกดู log โดยใช้เพียง
'cat /var/log/nginx/app_protect.log' ก็ได้เช่นกัน

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ranjjlzjpn71dm2bymm3.jpg)

โดยสรุป NGINX App Protect สามารถเลือก Mode การใช้งานได้ 2 Modes โดย blocking mode เหมาะกับใช้บน Production ที่ต้องสามารถ Block การโจมตี เพื่อป้องกัน Backend application ของเราได้, ส่วน transparent mode เหมาะกับการทดสอบก่อนใช้งานจริง เพื่อให้ทดสอบได้เต็มที่ทุกฟังก์ชั่นโดยไม่ถูกปิดกั้น และเห็นจุดบกพร่องเพื่อแก้ไข/ปรับ WAF Policies ให้สอดคล้องกับ Application ได้



---
แถมอีกนิดจากที่เกริ่นไว้ตอนต้น การเลือกใช้งาน WAF policy ให้แตกต่างกัน บนแต่ละ server/location

เริ่มจาก เรามาดู Configuration ที่เรียกใช้ WAF policy ครับ อยู่ที่
'vi /etc/nginx/app-protect.conf'
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y2tbos6brrslj59asyhw.jpg)

พบว่า มีการเรียกใช้ app_protect_policy_file ที่ "/etc/app_protect/conf/NginxDefaultPolicy.json"
โดย Policy นี้ จะครอบคลุมไปยังทุกๆ server/location บน NGINX Plus เครื่องนี้

เราไปที่ Configuration file ของ NGINX บ้างครับ
'vi /etc/nginx/nginx-jelastic.conf'
มองหาบรรทัดที่ขึ้นเป็น server ของเรา listen อยู่ที่ port 80
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/77gf74jsva70ekl37ild.jpg)

ทำการเพิ่ม Server ขึ้นมาอีก 1 ตัว โดยมีหน้าที่เหมือน Server เครื่องเดิมคือทำการ Proxy ไปยัง default_upstream, สิ่งที่ต่างกันก็คือ Server ตัวใหม่ listen อยู่ที่ port 8080
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i9lng29jd6qh916syc76.jpg)

เราลองกำหนดให้ server ใหม่ของเรา ใช้งาน WAF policy ที่ต่างออกไปจากเดิม โดยการเพิ่ม
'app_protect_policy_file /etc/app_protect/conf/NginxDefaultPolicy-blocking.json;'
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h6ce92vzrmzoo5klcuzm.jpg)

save file, จากนั้นทำการเพิ่ม NginxDefaultPolicy-blocking.json โดย copy จาก Policy เดิม
'cd /etc/app_protect/conf/'
'cp NginxDefaultPolicy.json NginxDefaultPolicy-blocking.json'

แก้ไขไฟล์  NginxDefaultPolicy-blocking.json ให้อยู่ใน blocking mode โดยแก้ในส่วนของ name และ enforcementMode
'vi NginxDefaultPolicy-blocking.json'
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rc2p2unrhjdtm1rwz5yo.jpg)

save file, และ reload NGINX configuration
'nginx -s reload'

ทดสอบการใช้งาน server เดิม listen 80 ซึ่งเป็น transparent mode การโจมตีสามารถผ่านได้ โดยมี Log ไว้
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t5wuy4e0phr7huoiqzlx.jpg)

ทดสอบ server ใหม่ listen 8080 ซึ่งเป็น blocking mode การโจมตีจะถูก block ทันที และถูก Log ไว้เช่นกัน
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ejj9crhw5ad0qs9q6gvd.jpg)

สำหรับ EP หน้า เราจะมา Configure ให้ละเอียดลงไปในแต่ละ Protection Mechanism ครับ ซึ่งจะมีทั้งหมด 17 Mechanisms ไว้เลือกที่น่าสนใจมาคุยกันก่อน




---
Series: เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect


เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect - ตอนที่ 1 - ติดตั้ง NGINX Plus และ NGINX App Protect
https://bit.ly/napproen

เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect  - ตอนที่ 2 - ปรับแต่ง NGINX App Protect - transparent mode
https://bit.ly/napproen-ep2

เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect - ตอนที่ 3 - ปรับแต่ง NGINX App Protect - Data Guard
https://bit.ly/napproen-ep3

เสริมความปลอดภัยให้ Backend Applications ด้วย NGINX App Protect - ตอนที่ 4 - ปรับแต่ง NGINX App Protect - HTTP Compliance
https://bit.ly/napproen-ep4

---
สัปดาห์หน้า พบกับ Protection Mechanism ถัดไป ติดตามได้ที่
FB Page: นั่งเล่น NGINX
https://web.facebook.com/NungLenNGINX
FB Group: ร่วมพูดคุยและแลกเปลี่ยนความรู้ไปกับเรา NGINX Super User TH
https://web.facebook.com/groups/394098015436072

เริ่มต้นใช้งานได้ที่ https://app.manage.proen.cloud/
มีทีม Support ให้ครับ
อีกหนึ่งช่องทาง nginx@mfec.co.th