ช่องโหว่ Log4Shell (CVE-2021-44228) ถูกอธิบายโดยนักวิจัยและผู้เชี่ยวชาญด้านไซเบอร์เซキュリティว่าเป็นช่องโหว่ zero-day ร้ายแรงที่สุดตลอดกาล มันส่งผลต่อยูทิลิตี้ Java ที่ใช้กันอย่างแพร่หลายชื่อ Log4j ซึ่งมีมาตั้งแต่ปี 2001 สำหรับบันทึกและสื่อสารเหตุการณ์ต่างๆ เช่น การดำเนินงานระบบปกติและข้อผิดพลาดของซอฟต์แวร์ บทความนี้จะแสดงวิธีปกป้องระบบ Linux จากช่องโหว่นี้
ช่องโหว่ Log4Shell ทำงานอย่างไร?
ในระดับพื้นฐาน ช่องโหว่นี้เกิดจากการตรวจสอบข้อมูลนำเข้า (input validation) ที่ไม่เหมาะสม เกิดขึ้นเมื่อซอฟต์แวร์ไม่ตรวจสอบข้อมูลที่ได้รับอย่างถูกต้อง นำไปสู่ช่องโหว่ที่เป็นไปได้ เนื่องจากข้อมูลนำเข้าที่ไม่ได้รับการตรวจสอบอย่างถูกต้อง อาจถูกใช้เพื่อให้โปรแกรมทำงานในสิ่งที่ไม่ควรทำ
Log4Shell โดยเฉพาะ ใช้ประโยชน์จากคำขอที่ Log4j ส่งไปยังเซิร์ฟเวอร์ โดยใช้ LDAP และ JNDI ด้วยการใช้ประโยชน์จากคำขอเหล่านี้ ผู้โจมตีสามารถรันโค้ดบนระบบที่เปราะบางได้ ซึ่งอาจนำไปสู่การที่ผู้กระทำความชั่วร้ายควบคุมระบบทั้งหมด และมีความสามารถในการติดตั้งแรนซัมแวร์หรือขโมยข้อมูล
Log4Shell ส่งผลต่ออะไรบ้าง?
เนื่องจาก Java เป็นภาษาโปรแกรมมิ่งที่ได้รับความนิยมมาก ซอฟต์แวร์จำนวนมากที่เขียนด้วย Java และใช้ Log4j สำหรับฟังก์ชันการบันทึกข้อมูล จึงได้รับผลกระทบจากช่องโหว่นี้ ซอฟต์แวร์ที่รู้จักดีและใช้กันอย่างแพร่หลายที่ได้รับผลกระทบ รวมถึง Apache และเกมวิดีโอชื่อ Minecraft
วิธีรู้ว่าซอฟต์แวร์ไหนได้รับผลกระทบ?
Log4Shell ในลักษณะเดียวกับช่องโหว่ด้านไซเบอร์เซキュリティอื่นๆ ถูกบรรเทาลงด้วยการแพตช์ซอฟต์แวร์ที่ได้รับผลกระทบ อย่างไรก็ตาม กรณีของ Log4Shell ค่อนข้างพิเศษ เนื่องจากส่งผลต่อซอฟต์แวร์หลากหลายรูปแบบ และอาจยากที่จะจดรายการว่าอะไรได้รับผลกระทบ และอะไรไม่ได้
โชคดีที่ National Cyber Security Center ของเนเธอร์แลนด์ ได้เผยแพร่รายการครบถ้วนบน GitHub ซึ่งรวมชื่อซอฟต์แวร์ที่พัฒนาโดยองค์กรต่างๆ แจ้งว่าเปราะบางต่อ Log4Shell หรือไม่
วิธีสแกนเซิร์ฟเวอร์ Apache สำหรับช่องโหว่
เนื่องจากช่องโหว่นี้ส่งผลกระทบต่อชุมชนไซเบอร์เซキュリティและซอฟต์แวร์อย่างมาก จึงไม่น่าแปลกใจที่มีเครื่องมือสำหรับแอดมินิสเตรเตอร์สแกนเซิร์ฟเวอร์หาช่องโหว่
เครื่องมือสแกนหนึ่งคือ Log4j-RCE-Scanner ซึ่งช่วยสแกนช่องโหว่การรันคำสั่งระยะไกล (Remote Command Execution) บน Apache Log4j ที่หลายที่อยู่
ติดตั้ง Log4j-RCE-Scanner
ก่อนเริ่ม ต้องติดตั้ง dependencies คือ httpx และ curl
Curl ติดตั้งง่ายบน Ubuntu และ Debian-based ด้วยคำสั่ง apt:
sudo apt install curl
Arch Linux ใช้ pacman:
sudo pacman -Sy curl
CentOS และ Fedora ใช้ yum:
sudo yum install curl
ติดตั้ง httpx ด้วยคำสั่ง:
git clone https://github.com/projectdiscovery/httpx cd httpx/cmd/httpx && go build . sudo mv httpx /usr/local/bin/
หลังติดตั้ง dependencies แล้ว ให้ clone repository Log4j-RCE-Scanner:
git clone https://github.com/adilsoybali/Log4j-RCE-Scanner
เข้าไดเรกทอรีที่สร้างขึ้น:
cd Log4j-RCE-Scanner/
สุดท้าย ให้สิทธิ์รันสคริปต์ Bash:
chmod +x log4j-rce-scanner.sh
ใช้งาน Log4j-RCE-Scanner
หลังติดตั้งสแกนเนอร์แล้ว สามารถใช้งานได้เลย
อ่านส่วน help ของสคริปต์ด้วยคำสั่ง:
bash log4j-rce-scanner.sh -h
ตอนนี้สามารถสแกนเซิร์ฟเวอร์ Apache หาช่องโหว่ Log4Shell ได้:
bash log4j-rce-scanner.sh -d [domain] -b [Burp collaborator]
ระบุโดเมนและ Burp Collaborator ด้วยแฟล็ก -d และ -b หากโดเมนเปราะบาง DNS callbacks พร้อมชื่อโดเมนจะถูกส่งไปที่ Burp Collaborator
ทางเลือก -l ใช้ระบุรายการโดเมนได้เช่นกัน
ติดตั้งและใช้งานสแกนเนอร์แบบ Python
หากชอบใช้สคริปต์ Python สามารถใช้ log4-scanner ที่พัฒนาโดย Cybersecurity and Infrastructure Security Agency ของสหรัฐอเมริกา
ติดตั้งด้วย:
git clone https://github.com/cisagov/log4j-scanner/
เข้าไดเรกทอรี:
cd log4j-scanner/log4-scanner/
ติดตั้ง dependencies ด้วย pip3:
pip3 install -r requirements.txt
ดู help ของสคริปต์ด้วยแฟล็ก -h:
python3 log4j-scan.py -h
สแกน URL เดียวง่ายด้วยแฟล็ก -u:
python3 log4j-scan.py -u example.com
สแกนรายการ URL ด้วยแฟล็ก -l:
python3 log4j-scan.py -l list.txt
วิธีแพตช์ Apache
เพื่อต่อสู้กับช่องโหว่นี้ สำคัญมากที่จะอัปเดตการตั้งค่า Apache ให้ทันสมัย
ตรวจสอบเวอร์ชัน Apache ได้หลายวิธี: จากแผงควบคุมการจัดการ เช่น CPanel หรือ WebHost Manager หรือรันคำสั่ง httpd พร้อมแฟล็ก -v:
httpd -v
อัปเดต Apache เป็นเวอร์ชันล่าสุดที่ปลอดภัยที่สุด ด้วย apt บน Debian และ Ubuntu:
sudo apt update && sudo apt upgrade apache2
ผลลัพธ์เดียวกันบน CentOS ด้วย yum:
sudo yum install httpd
คำถามที่พบบ่อย
1. เวอร์ชัน Log4j ใดได้รับผลกระทบ?
เวอร์ชันต่ำกว่า 2.1.7.1 เปราะบางต่อการโจมตี เวอร์ชัน 2.15.0 แก้ไขส่วนที่โจมตีง่ายที่สุด และ 2.17.1 แก้ไขช่องโหว่ remote code execution ที่ยากต่อการโจมตี
2. ต้องใช้ Burp Collaborator เพื่อรับ DNS callbacks หรือไม่?
ตามนักพัฒนาสแกนเนอร์ Bash-based Burp Collaborator ใช้ร่วมกับสคริปต์เพื่อรับ DNS callbacks พร้อมชื่อโดเมนที่เปราะบาง ทางเลือกคือใช้ที่อยู่ Interact.sh
3. ต้องการ dependencies อื่นสำหรับสแกนเนอร์ Bash-based หรือไม่?
สำหรับการใช้งานพื้นฐาน ต้องมีแค่ httpx และ Curl ติดตั้ง อย่างไรก็ตาม เพื่อปลดล็อกฟังก์ชันบางอย่าง ต้องติดตั้ง Subfinder, Assetfinder, และ Amass ด้วย