วิธีใช้งาน Kali Linux – OWASP Zap – Brute Force with Fuzz

ในการตรวจสอบ ความแข็งแกร่งของระบบป้องกันการโจมตี เรื่องหนึ่งคือความสามารถในการกัน Brute Force หรือ ความพยายามเดารหัสผ่าน OWASP Zap สามารถใช้เป็นเครื่องมือในการทำ Brute Force ได้ โดยใช้เครื่องมือที่ชื่อว่า Fuzz ขั้นตอนมีดังนี้ เปิด Zap และเปิด Web Browser ที่ตั้งค่าให้ Zap เป็น Proxy และ ทำการ Authentication ทดสอบดู ใน Zap จะปรากฏ POST Action ที่สำหรับส่ง Username และ Password เกิดขึ้น เลือก Username ที่ทดสอบใส่ลงไป แล้วคลิกขวา เลือก Fuzz จากนั้นคลิก Payloads จากนั้น คลิกปุ่ม Add เลือก Type เป็น Strings แล้วใส่ Username ที่จะใช้ในการเดา เสร็จแล้วคลิกปุ่ม Add จากนั้น เลือกข้อความที่เป็น Password แล้วคลิก Add แล้วคลิก Payload แล้วใส่ Password ที่จะเดา เสร็จแล้วคลิกปุ่ม Add เมื่อตั้งค่าเสร็จแล้ว คลิกปุ่ม Start Fuzz Zap จะทำการเดา Username/Password เมื่อเสร็จแล้ว ลองสังเกตผลใน Tab Fuzzer ผลที่ได้อาจจะแตกต่างกันในแต่ละระบบที่โจมตี แต่ในภาพ จะเห็นว่า มี Size Response Header อยู่บรรทัดหนึ่งที่มีขนาดแตกต่างจากอันที่ไม่สำเร็จ คือ 390 bytes (บรรทัดอื่นๆเป็น 310 bytes) เมื่อลองคลิกดู แล้วไปดูใน Tab Response จะเห็นว่า มีการ Set-Cookie แสดงว่า Login ได้แล้ว ใน Column Payloads จะเห็นว่า รหัสผ่านเป็น admin,123456 สามารถเอาไปทดสอบได้ ในตัวอย่างนี้ ถ้ามีระบบป้องกันการเดารหัสผ่าน เช่น fail2ban ก็จะสามารถลดความเสี่ยงได้ (บ้าง)

Read More »

วิธีใช้งาน Kali Linux – OWASP Zap – User Authentication

ในการตรวจสอบ Web Application ที่ต้องมีการ Authentication โดยใช้งานผ่าน Web Form จะต้องกำหนดค่าให้ OWASP Zap รู้ว่า จุดใดเป็น Login Form และ Field ใดที่ใช้เป็น Username และ Password ก่อน หลังจากนั้น จะสามารถกำหนดได้ว่า จะโจมตีด้วย Username ใดบ้าง เพื่อใช้ในการทดสอบ ขั้นตอนในการตั้งค่าและโจมตีมีดังนี้ ใน Web Browser ให้ตั้งค่า Proxy เป็น 127.0.0.1 Port 8080 ทำการเปิด Web Page ที่ต้องการโจมดี โดยให้ทำเป็น Login ตามปรกติ ด้วย Username/Password ที่ใช้งานได้จริง เมื่อ Login สำเร็จแล้ว จะได้หน้าตาประมาณนี้ จากนั้น กลับไปที่ OWASP Zap จะเห็นว่าใน Sites มี URL ของ Website ที่ต้องการโจมตีปรากฏอยู่ จากนั้นให้ คลิกขวาที่ URL ที่ต้องการโจมตี คลิก Include in Context > Default Context จะปรากฏหน้าต่าง Session Properties ให้ทราบว่า จะใช้งาน URL นี้ ให้คลิกปุ่ม OK จากนั้นให้คลิก POST Action ที่เป็นการส่งข้อมูลการ Login ผ่าน Web Form แล้ว คลิกขวา เลือก Flag as context > Default Context : Form-based Auth login Request จะปรากฏหน้าต่าง Session Properties อีกครั้ง ให้ทราบว่า จะใช้ Login Form Target URL และ Login Request POST DATA ดังภาพ ให้กำหนดว่า Username Parameter และ Password Parameter คือ Field ใด จากนั้น ให้คลิกปุ่ม OK จากนั้น ให้คลิก Tab Response ของ POST Action ที่ใช้ในการ Login แล้วมองหา ข้อความ ที่จะให้ OWASP Zap ค้นหา เพื่อเป็นการยืนยังว่า สามารถ Login ได้แล้ว จากนั้น คลิกขวา แล้วเลือก Flag as Context > Default Context: Authentication Logged-in indicator จะปรากฏหน้าต่าง Session Properties อีกครั้ง ให้ทราบว่า Regex pattern identified in Logged in response message คือคำใด จากนั้น ให้คลิกปุ่ม OK จากนั้น คลิก Users ด้านซ้ายมือ แล้ว คลิก เครื่องหมายถูก หน้า Username ที่จะใช้ในการ Login จากนั้น คลิก Forced Users ด้านซ้ายมือ แล้วเลือก User ที่จะใช้ในการโจมตี แล้วคลิก OK  

Read More »

วิธีใช้งาน Kali Linux – OWASP Zap – Active Scan

ใน Kali Linux มีเครื่องมือ Web Application Security Scanner ที่น่าสนใจตัวหนึ่ง คือ OWASP Zap (Open Web Application Security Project) เหมาะสำหรับการใช้งานตั้งแต่การทดสอบเบื้องต้น ไปจนถึงการโจมตีขั้นสูงได้ *** คำเตือน : อย่าใช้เครื่องมือนี้กับระบบคอมพิวเตอร์ที่ท่านไม่ใช่เจ้าข้องเด็ดขาด *** ในบทความนี้ จะแสดงขั้นตอนการทดสอบ Web Application โดยใช้กระบวนการ Active Scan ใน Kali Linux เปิด Applications > 03 Web Application Analysis > owasp-zap เลือก No, I do not want to persist this session at this moment in time แล้วคลิก Start (ยังไม่ต้องใช้ในตอนนี้) ในช่อง URL to attack ใส่ URL ของ Web Application ที่ต้องการทดสอบ แล้วคลิก Attack ระบบจะทำการ Spider และ Active Scan ตามลำดับ ผลที่ได้ “ในเบื้องต้น” ก็จะแค่แสดงในส่วนของ Alerts ทั่วไปเกี่ยวกับการตั้งค่าที่อาจจะไม่เหมาะสม เช่น X-Frame-Options Header ไม่ได้ตั้งค่าไว้, มีการใช้ Private IP, ไม่ได้ป้องกัน XSS และอื่นๆเป็นต้น เนื่องจากเครื่องที่ทำการทดสอบนี้ จริงๆแล้ว มี Directory ย่อยๆ ลงไปอีกมากมาย ที่ไม่ได้ชี้ Link ไปจาก index.php ในหน้าแรกของ Web Site วิธีการที่จะให้ OWASP ZAP กวาดไฟล์เดอร์ย่อยๆออกมา ใช้คลิกขวาที่ Sites ที่ต้องการ แล้ว Attack > Forced Browse site จากนั้นจะปรากฏ Forced Browse Tab ขึ้นมา ให้เลือก directory-list-1.0.txt ซึ่งจะทำการ Brute Force ชื่อ Directory ที่เค้าไปเก็บรวบรวมมา จากนั้น ทำการ Attack ด้วย Spider อีกครั้ง จากนั้น ทำการ Attack ด้วย Active Scan อีกครั้ง แต่ให้ตั้งค่าใน Policy Tab ดังภาพ เพื่อให้ Threshold เป็น High และ Strength เป็น Insane (จะอธิบายละเอียดอีกครั้งในบทความต่อไป) คลิก Go ทั้ง 2 บรรทัด แล้วคลิก Start Scan ดูผลการ Scan ได้ที่ Alerts Tab ดังตัวอย่างพบว่ามีช่องโหว่สำคัญคือ Cross Site Scripting (Reflected), Path Traversal และ Remote File Inclusion โดยบอกวิธีการ Attack ที่ใช้ในการทดสอบ และวิธีการแก้ไขพร้อม จะกลับมาอภิปราย และอธิบายรายละเอียดอีกครั้งในบทความต่อไป References: https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project https://github.com/zaproxy/zap-core-help/wiki https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project

Read More »

การตั้งค่า MaxRequestWorkers บน Apache ให้เหมาะสมกับจำนวนผู้ใช้

ปัญหาของ PSU Webmail ในช่วง 9-15 สิงหาคม 2559 ที่ผ่านมา คือ เมื่อเริ่มเข้าสู่เวลาราชการ ในวันทำการ พบว่า มีการตอบสนองที่ช้า บางครั้งต้องรอถึง 15-20 วินาที หรือ ผู้ใช้บางท่านแจ้งว่า Timeout ไปเลย หรือไม่ก็ใช้งานไปสักพัก ถูกดีดกลับมาหน้า Login ใหม่ แต่เมื่อพ้นเวลาราชการ พบว่าการตอบสนองก็เร็วขึ้นดังเดิม รวมถึงในช่วงวันหยุดก็เร็วอย่างที่ควรเป็น ขอบคุณทาง NetAdmin ที่ทำระบบตรวจสอบไว้ที่หน้า Data Center เพื่อตรวจจับความเร็วในการตอบสนองบริการ PSU Webmail ด้วย SmokePing ผลที่ได้เป็นดังภาพ จะเห็นว่า มีความหน่วงในการตอบสนอง เฉพาะในวันเวลาราชการเท่านั้น … ทำไม ??? ทำการตรวจสอบด้วยคำสั่ง ps aux |grep apache| wc -l เพื่อดูว่า มีจำนวน Apache อยู่กี่ Process พบว่า ในช่วงเวลาที่ระบบหน่วง มี Process เกือบคงที่ที่ 150 แต่ในช่วงที่ระบบทำงานได้เร็ว มีจำนวนประมาณ 50 process จากการศึกษา พบว่า Apache2 ที่ใช้ MPM Prefork นั้น จะจำกัดค่า MaxRequestWorkers ไว้ โดยหากไม่กำหนดค่าใดๆจะตั้งไว้ที่ 256 แต่เมื่อตรวจสอบในไฟล์ /etc/apache2/mods-enabled/mpm_prefork.conf พบว่า <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxRequestWorkers 150 MaxConnectionsPerChild 0 </IfModule> ทำให้เพดานของจำนวน Process ไปจำกัดที่ 150 ดังที่ตรวจสอบเบื้องต้น เมื่อมีผู้ใช้มากขึ้นกว่าเดิม จึงทำให้ Process ไม่เพียงพอต่อความต้องการ เป็นผลให้เกิดการหน่วงขึ้น จึงทำการแก้ไข MaxRequestWorkers เป็น 256 แล้ว Restart Apache ผลทำให้ จำนวน Apache Process ขึ้นไปถึง 200 Process และการตอบสนองเร็วขึ้นตามที่ควรเป็นดังภาพ (หลังเวลา 14:45) ทั้งนี้ การกำหนดจำนวน MaxRequestWorkers นั้น ต้องสัมพันธ์กับ RAM ของ Server ด้วย โดยมีสูตรคร่าวๆ คือ จำนวน RAM ในหน่วย MB หารด้วยขนาดของ Apache Process โดยเฉลี่ย เช่น มี RAM 4GB = 4 x 1024 = 4096 ขนาดเฉลี่ย Apache Process = 20 ดังนั้น MaxRequestWorkers = 4096/20 = 204 แต่จริงๆแล้ว ควรเผื่อ Memory ไว้ให้ OS และอื่นๆด้วย (อาจจะไม่เต็ม 4096) หากขยับค่า MaxRequestWorkers แล้วยังพบว่า จำนวน Process ยังขึ้นไปเต็มเพดานอยู่ ควรพิจารณาเพิ่ม Memory ด้วย ประมาณนี้ครับ UPDATE: ผลการปรับแก้ไข ทำให้ เวลาในการตอบสนอง จากที่หน่วง 10 วินาที เหลือ เพียง 50 มิลลิวินาที ดังภาพ  

Read More »

วิธีตรวจสอบเว็บไซต์ที่โดน Hack #17

ปัจจุบันพบว่า รูปแบบของ Backdoor เปลี่ยนไป จากเดิมเป็น Base64 ซึ่งสามารถตรวจจับได้จาก Pattern ของ eval และ base64_decode ไปเป็น การใช้ eval ร่วมกับการใช้เทคนิคที่เรียกว่า Obfuscate หรือ การทำให้ PHP Code ปรกติ แปลงไปเป็นรูปแบบที่ซับซ้อนยิ่งขึ้น ทำให้การตรวจสอบด้วยเทคนิคเดิมไม่เจอ จาก วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2 แสดงให้เห็นรูปแบบเดิม ดังภาพ จะเปลี่ยนมาเป็นแบบนี้ ดังนั้น อาจจะต้องปรับเปลี่ยนคำสั่งในการค้นหาเป็น find /var/www -name “*.php” -user www-data -type f | xargs grep GLOBAL แต่ก็พบว่า มีการซ่อน base64_decode ในรูปแบบนี้ก็มี ถึงแม้จะเลี่ยงการใช้ base64_decode ตรงๆแต่ก็ยังต้องใช้ eval อยู่ดี ดังนั้น จึงต้องใช้คำสั่งต่อไปนี้ในการค้นหา find /var/www -name “*.php” -user www-data -type f | xargs grep eval > eval.txt ซึ่งอาจจะได้ไฟล์มาจำนวนมาก ทั้งทีใช่และไม่ใช่ Backdoor เก็บไว้ในไฟล์ eval.txt ดังภาพ จึงต้องใช้วิธี แก้ไขไฟล์ eval.txt ดังกล่าว โดยลบบรรทัดที่ไม่ใช่ Backdoor ออก ให้เหลือแต่บรรทัดที่น่าสงสัยว่าจะเป็น Backdoor ไว้ แล้ว Save จากนั้นใช้คำสั่งต่อไปนี้เพื่อเก็บไฟล์ทั้งหมดไว้ก่อน ในไฟล์ suspect.tar.gz cut -d: -f1 eval.txt | xargs tar -zcvf suspect.tar.gz จากนั้น ทำ List ของไฟล์ที่ต้องเข้าตรวจสอบจริงๆ เก็บในไฟล์ชื่อ eval2.txt ด้วยคำสั่ง cut -d: -f1 eval.txt > eval2.txt แล้วจึงแก้ไขไฟล์ หรือ ลบทิ้งต่อไป

Read More »