เพื่อให้ Web Server ของเราปลอดภัยจากการถูกโจมตี บทความนี้จะเป็นการแนะนำการกำหนดค่าต่างๆของ web server ที่ให้บริการ ซึ่งทำงานด้วยบน Windows Server และ มีการติดตั้ง IIS, PHP, MySql, ASP.Net และ WordPress
- การกำหนดส่วนของ Windows Server อ้างอิงคำแนะนำจาก Quays SSL Labs ให้ได้ระดับ A ขึ้นไป
- ใช้ใบรับรองจาก CA ที่น่าเชื่อถือ และ ใช้การ RSA 2048 bits (SHA256withRSA) ขึ้นไป
- การกำหนด Cipher Suites ที่ปลอดภัย ซึ่งจะมีเครื่องมือที่ช่วยในการกำหนดดังนี้
- IIS Crypto เป็นโปรแกรมฟรีไม่ต้องติดตั้งสำหรับช่วยจัดการกำหนด protocols, ciphers, hashes and key exchange algorithms บน Windows Server โดยกำหนดพื้นฐานดังนี้
1. เมนู Schannel
1.1 Protocols เลือกกำหนดใช้งาน TLS 1.2 และ/หรือ TLS 1.3 เท่านั้น
1.2 Cipher เลือกกำหนดเป็น AES
1.3 Hashes เลือก SHA 256 ขึ้นไป
1.4 Key Exchanges สามารถเลือกได้ทั้ง Diffie-Hellman, PKCS และ ECDH
2. เมนู Cipher Suites สามารถกำหนด Cipher Suites ที่ปลอดภัยในปัจจุบัน ซึ่งค้นหาได้จากเว็บ https://www.tenable.com/plugins/nessus/156899
- IIS Crypto เป็นโปรแกรมฟรีไม่ต้องติดตั้งสำหรับช่วยจัดการกำหนด protocols, ciphers, hashes and key exchange algorithms บน Windows Server โดยกำหนดพื้นฐานดังนี้
- เป็นส่วนของการกำหนดใน IIS
- การกำหนดสำหรับ Security Headers ให้ได้ระดับ A+ อ้างอิงคำแนะนำจากเว็บ https://securityheaders.com/
- การจัดการ Http Response Header โดยกำหนดค่าดังนี้
- X-Frame-Options เป็นการกำหนดเพื่อหลีกเลี่ยงจากการถูกโจมตีด้วย Clickjacking
ตัวอย่างการกำหนดค่าเป็น SAMEORIGIN - X-XSS-Protection เป็นการป้องกันการโหลดสคริปต์ข้ามไซต์
ตัวอย่างการกำหนดเป็น 1; mode=block - X-Content-Type-Options เป็นการป้องการโจมตีเนื้อหาประเภท MINE (Multipurpose Internet Mail Extensions) ซึ่งเป็นรูปแบบที่ใช้ระบุประเภทของข้อมูลที่ถูกส่งผ่านเครือข่าย หรือเก็บที่เครื่องอุปกรณ์ มันช่วยบอกให้ระบบรับรู้ว่าไฟล์เป็นประเภทไหนและวิธีการจัดการข้อมูลนั้น ที่อาจถูกใช้ในการโจมตีเพื่อหลอกลวงระบบหรือละเว้นมาตรฐานการตรวจสอบปลอดภัย เช่น application/pdf, image/jpeg, text/html
ตัวอย่างการกำหนดค่าเป็น nosniff - Referrer-Policy เป็นการควบคุมการส่งผ่านส่วนอ้างอิง เช่น ป้องกันส่วน HTTPS ไม่ให้กลับไป HTTP ที่ไม่ปลอดภัย
ตัวอย่างการกำหนดค่าเป็น no-referrer-when-downgrade - Strict-Transport-Security เป็นการช่วยให้การเข้าเว็บไซต์ด้วย HTTPS เท่านั้น
ตัวอย่างการกำหนดค่าเป็น max-age=31536000; includeSubDomains; preload - Content-Security-Policy เป็นการระบุที่มาของเนื้อหาที่ได้รับอนุญาตให้โหลดบนเว็บไซต์ เช่น JavaScript เพื่อป้องกันการโจมตีแบบ Cross-Site Scripting (XSS)
ตัวอย่างการกำหนดค่าเป็น upgrade-insecure-requests - Permissions-Policy เป็นการควบคุมการเปิดใช้งานเช่น กล้อง หรือ ไมโครโฟน หรือ ฟีเจอร์อื่น ๆ
ตัวอย่างการกำหนดค่า เช่น geolocation=(), camera=(), microphone=()
- X-Frame-Options เป็นการกำหนดเพื่อหลีกเลี่ยงจากการถูกโจมตีด้วย Clickjacking
- การปกปิดเวอร์ชันไม่แสดงในส่วนของ Header สามารถกำหนดเพิ่มเติมดังนี้
- เมนู IIS Manager –> Configuration Editor
- Section: system.webServer/security/requestFiltering กำหนด removeServerHeader เป็น True เพื่อไม่ให้แสดง เวอร์ชันของ server
- Section: system.web/httpRuntime กำหนด enableVersionHeader เป็น False เพื่อไม่ให้แสดงเวอร์ชันของ IIS หรือ ASP.Net
- กำหนด expose_php = Off ใน php.ini เพื่อไม่ให้แสดงเวอร์ชันของ php
- ลบ X-Powered-By ออกจาก HTTP Response Headers
- เมนู IIS Manager –> Configuration Editor
- กำหนด IP Address ส่วนของ Remote Address ใน Windows Defender Firewall with Advance Security – Inbound Rules เพื่อควบคุมการเข้าถึงจากคอมพิวเตอร์ที่ได้รับอนุญาตเท่านั้น
- ปิด port ที่ไม่ได้ใช้งาน
- การกำหนดส่วนของเว็บ
- การเรียกใช้งานไรบรารีจากภายนอกเว็บไซต์ เช่น เดิม จะมีการเรียกใช้โดยอ้างอิงแบบ
src=”https://code.jquery.com/jquery-3.7.1.min.js” ซึ่งจะไม่มีการตรวจสอบความน่าเชื่อถือ
เพื่อสร้างความเชื่อมั่นว่าไรบรารีที่ใช้งานจะไม่มีการเปลี่ยนแปลง จึงมีการเพิ่มส่วนการตรวจสอบ integrity และ crossorigin ซึ่งสามารถเลือกใช้งาน Code Integration ได้จากเว็บ https://releases.jquery.com/jquery/ หรือ https://cdnjs.com/libraries ดังตัวอย่างนี้- src=”https://code.jquery.com/jquery-3.7.1.min.js” integrity=”sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=” crossorigin=”anonymous” หรือ
- src=”https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js” integrity=”sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g==” crossorigin=”anonymous” referrerpolicy=”no-referrer”
- การป้องกันการเรียกดู user data ผ่าน REST API ใน WordPress กรณีนี้ควรติดตั้งส่วนเสริมไม่ให้สามารถเรียกใช้งานผ่าน REST API โดยไม่มีการยืนยันตัวตนก่อน เช่น Disable WP REST API
- การเรียกใช้งานไรบรารีจากภายนอกเว็บไซต์ เช่น เดิม จะมีการเรียกใช้โดยอ้างอิงแบบ
- หลังจาก กำหนดค่าเรียบร้อยแล้ว สามารถทดสอบได้ที่ https://www.ssllabs.com/ssltest/analyze.html คลิกเลือก Do not show the results on the boards ก่อนสแกน ด้วยครับ
- Windows Server 2019 รองรับ TLS 1.2
- Windows Server 2022 รองรับ TLS 1.2 และ TLS 1.3
หมายเหตุ ทั้งนี้ Windows Server 2022 เพิ่มการรองรับ TLS 1.3 อย่างไรก็ตาม หากเปิดใช้งานทั้ง TLS 1.2 และ 1.3 Site Scanner จะส่งผลให้ได้เกรด A เท่านั้น เนื่องจากปัจจุบัน Windows Server ไม่รองรับการป้องกันการโจมตีแบบดาวน์เกรด หากไคลเอนต์ร้องขอ TLS 1.3 Windows จะยังคงอนุญาตให้ปรับไปใช้ TLS 1.2 ได้ และนั่นคือสาเหตุที่ Site Scanner รายงานเกรด A แทนที่จะเป็น A+