Laravel Framework (Kinsing Malware Attacks)
ต้องเล่าก่อนว่า เรื่องเกิดจาก small project ตัวนึงที่มี Active users (AU) อยู่ที่ประมาณ 100 AU ซึ่งใช้ vCPU 4 Core ก็อยู่ที่ประมาณไม่เกิน 5% แต่พอต้องรับ load ที่มากขึ้นจาก 100 AU มาเป็น 500 AU เราก็คิดว่า 4 Core นี่เหลือ ๆ แต่ปรากฏว่าขึ้น 100% ทุก Core เลย ทำให้เมื่องานเริ่มผู้ใช้เข้ามาพร้อม ๆ กันก็ล่มเลย ไม่ว่าจะ Scale out ขนาดไหนก็ขึ้น 100% ทุก Core เหมือนเดิม ทั้ง ๆ ที่ AU ก็แค่ 500 แต่จังหวะนั้นทำอะไรไม่ได้เพราะพอ Server workload เริ่มเยอะขึ้นทำ process ไม่ทัน bugs เริ่มมาทำให้ต้องมาแก้ไขบัคเพื่อให้ข้อมูลกลับมาปกติเหมือนเดิมก่อน
จังหวะที่ CPU ขึ้น 100% ทุก core เราก็ไม่ได้สงสัยอะไรเพราะคิดว่าวางแผนผิดทำให้รับ load ไม่ไหว แต่พองานจบคนเริ่มไม่ใช้งานระบบ CPU ก็ยังขึ้น 100% ตลอดยัน 3 ทุ่ม มันเริ่มแปลก ๆ ละเป็นไปไม่ได้ สักพัก Google Cloud Platform (GCP) แจ้งว่ามา server เรามีการทำ Mining cryptocurrency พอเข้าไปดูเจอเลยครับ “/tmp/kdevtmpfsi”
Process นี่ละที่มันรันตลอดงาน พยายาม kill process แล้วก็รันขึ้นมากินอีก พอเข้าไปดูที่ /tmp เจอจะ ๆ เลยครับ “Kinsing Malware”
พอเข้าไปดู Kinsing malware มันมาสำหรับใช้ resource เพื่อขุด cryptocurrency เหมือนที่ GCP แจ้งมาไม่มีผิด เจอตัวการทำ server down ละ จังหวะนั้นย้าย VM เอาข้อมูลออกก่อนดีกว่า เราก็ย้ายทุกอย่างผูก Domain name (DN), SSL/TLS Certificate ใหม่ ตัว Malware ก็ไม่มาสบายใจหน่อย Server ที่ติดก็ปิดไป เช้าวันรุ่งขึ้นก็เอาอีก Kinsing malware มาอีกแล้ว มันแปลก ๆ ละ เลยปรึกษากับพี่ ๆ ที่ทำ Infra เขาก็เข้ามาช่วยดูทันที (ต้องขอบคุณพี่มากครับ) เลยทำให้สามารถหยุดการทำงานของ Kinsing Malware ได้ วิธีการเบื้องต้นที่หยุด malware ได้
$ sudo kill -9 <PID>$ sudo find / -iname kdevtmpfsi* -exec rm -fv {} \;$ sudo find / -iname kinsing* -exec rm -fv {} \;$ sudo chown -R root:root /tmp/kdevtmpfsi$ sudo chown -R root:root /tmp/kinsing$ sudo chmod 0444 /tmp/kdevtmpfsi /tmp/kinsing$ sudo chmod 0444 /tmp/kinsing$ sudo chown -R root:root /tmp/kdevtmpfsi$ sudo chown -R root:root /tmp/kinsing$ touch /tmp/kdevtmpfsi && touch /var/tmp/kinsing
หลังจากใช้คำสั่งด้านบนไปแล้ว ตัว Kinsing ก็หยุดใช้ CPU ได้จริง ๆ แต่มันก็ยังพยายามที่จะ download malware ตัวเองเข้ามาเพื่อรันอยู่
ดูจาก curl -o /tmp/kinsing สิ่งที่คิดคือจะทำอย่างไงเพื่อเป็นการปกป้อง ไม่ให้ Kinsing malware เข้ามาในเครื่องได้ เลย Simulate case มา 12 เคส และทำ Checklist ว่า Passed อะไรบ้าง Failed อะไรบ้าง และพอมานั่งวิเคราะห์ดูแล้ว Kinsing Malware เริ่มระบาดหนักขึ้นตอนที่ค่า Cryptocurrency ขึ้นสูงขึ้น ซึ่งปกติแล้วมันจะเข้าผ่านช่องโห่วของ Docker API และมันตั้งเป้าที่ 1,000 container ต่อวัน ที่จะทำให้ Server ทั้งหลายติด Malware เพื่อจะขุดเหรียญให้มัน แต่ Server เราไม่ได้ใช้ Docker เลย แต่ก่อนหน้ามีลง Laradock (Laravel + Docker) ไว้ที่ VM อีกเครื่องนึง ซึ่ง Docker container เป็นเป้าหมายหลักของมัน อาจจะทำให้ Laravel framework เกิดความเสี่ยงไปด้วย
🎉 🎉 Solution 🎉 🎉
สรุปการทดสอบตลอดสัปดาห์
- Kinsing malware เข้ามาในเครื่อง server ที่ set laravel project เป็น root path ของ web server ผ่านช่องโห่วของ Laravel framework ด้วย API ที่เปิดการใช้งานแบบ Debug mode (วิธีการป้องกัน ให้เราทำการdisable debug mode on production ถ้าจะ debug จริง ๆ ต้องเปลี่ยน root path ซะก่อน และที่สำคัญแต่จะ deploy app จะต้องมั่นใจเสมอว่าปิด debug เรียบร้อยแล้ว)
- เครื่อง server ที่ใช้ Laradock (Laravel + Docker) ตัว Kinsing malware เข้ามาผ่านช่องโหว่ของ Docker API (Update latest patch)
Ref: