ช่องโหว่ Bash
วันที่ 24 กันยายน 2557 พบช่องโหว่ของ Bash มีชื่อว่า “เชลล์ช๊อก” Shellshock โดยมีเลขกำกับช่องโหว่นี้ด้วยกัน 2 เลขคือ CVE-2014-6271 และ CVE-2014-7169 ช่องโหว่นี้สามารถทำการรีโมทชุดคำสั่งที่ทำงานได้ โดยข้ามขั้นตอนการตรวจสอบยืนยันสิทธิ์เข้าใช้งาน ซึ่งหากมีผู้ไม่หวังดีต้องการสร้างความเสียหาย อาจส่งโค้ดอันตรายเพื่อควบคุม OS (Linux,Unix) สามารถเข้าถึงข้อมูลที่สำคัญ / ฝังโค้ด / แฝงตัวเพื่อดำเนินการโจมตีเครื่องอื่น ๆ บน Internet หรือเพื่อวัตถุประสงค์อื่นๆ ก็แล้วแต่ …
Bash คืออะไร ?
ขอเท้าความถึง ลีนุกซ์ ก่อนละกัน ซึ่งทุกคนคิดว่าเคยได้ยินผ่านหูแล้วทั้งนั้น ซึ่งเป็นเพียง OS ที่มีตัว Kernel ที่ทำหน้าที่จัดสรรทรัพยากรต่างๆ ของระบบ ไม่สะดวกที่จะนำมาใช้งานโดยตรง เหล่านักพัฒนาจึงได้สร้างระบบติดต่อ ขึ้นมาครอบลินุกซ์เคอร์เนลเพื่อให้สามารถใช้งานได้สะดวกขึ้น — ซึ่ง shell ก็คือระบบติดต่อที่ว่านั้น ที่ทำหน้ารับคำสั่งจากผู้ใช้ไปส่งให้เคอร์เนล การติดต่อกับ shell จะติดต่อผ่านโปรแกรมเทอร์มินัลได้แก่พวก Putty, SecureCRT เป็นต้น
Bash (Bourne Again Shell) เป็น shell ที่ติดมาพร้อมกับระบบปฏิบัติการลีนุกซ์ ทำให้นิยมแพร่หลายมาก โดยพบว่าshell ที่ใช้กันมาใน
- UNIX คือ Bourne Shell (sh) Korn Shell (ksh) และ C Shell (tcsh)
- Linux คือ Bourne Again Shell (bash)
ผลกระทบ
ก็ทุกเครื่องที่มีการใช้งานลีนุกซ์ โดยเริ่มต้นนั้นให้รีบดำเนินการจากบนลงล่าง ตามความเสี่ยงที่มีโอกาสโดนโจมตีผ่านช่องโหว่ ดังนี้
- เครื่องเซิร์ฟเวอร์ลีนุกซ์ที่ต่อกับ Internet โดยตรงจำเป็นต้องรีบแก้ไขให้ไว้ที่สุด
- เครื่อง Desktop ที่เป็นลีนุกซ์ ที่มีการใช้งานอินเตอร์เนตด้วย
- เครื่องเซิร์ฟเวอร์ลีนุกซ์ที่ใช้งานภายในองค์กร
ระบบปฎิบัติการ Android ไม่แน่ใจว่าจะโดนช่องโหว่นี้ด้วยหรือไม่ พอดีทางผู้เขียนไม่ได้มีทดสอบ ใช้เครื่อง 2G อยู่ 🙂
วิธีการแก้ไข
1. ตรวจสอบ bash version ผ่าน
1 2 3 |
rpm -q bash |
2. ทาง Redhat ได้แนะนำวิธีทดสอบว่า bash ที่ติดตั้งอยู่ มีช่องโหว่ หรือไม่ ดังนี้
2.1 ตรวจสอบช่องโหว่ CVE-2014-6271 ผ่านโค้ด
1 2 3 |
env 'x=() { :;}; echo vulnerable' 'BASH_FUNC_x()=() { :;}; echo vulnerable' bash -c "echo test" |
- ขึ้นคำว่า valnerable แสดงว่า มีช่องโหว่อยู่
- หากขึ้นคำว่า valnerable + syntax error + test ขึ้นมาด้วย แสดงว่า bash ที่ติดตั้งอยู่ ไม่เคยได้รับการ patch ใดๆ เลย
2.2 ตรวจสอบช่องโหว่ CVE-2014-7169 ผ่านโค้ด
1 2 3 |
cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c "echo date"; cat /tmp/echo |
- หากพบช่องโหว่นี้ จะมีการสร้างไฟล์ /tmp/echo ขึ้นมา และ แสดงวัน-เวลาที่รันคำสั่ง ตามรูปด้านนี้เลย
2.3 ดำเนินการ update bash ผ่าน yum (หรือวิธีอื่นๆ ตามสะดวก)
1 2 3 |
yum update bash |
2.4 ตรวจสอบช่องโหว่ CVE-2014-6271 และ CVE-2014-7169 อีกครั้ง
- ไม่มีคำว่า valnerable แสดงว่า ช่องโหว่ถูกปิด แล้ว
- ขึ้นตามข้างต้น ได้รับการ fixed เพิ่มเติมจาก RHSA-2014:1306, RHSA-2014:1311 and RHSA-2014:1312 ด้วย
ค
- ไม่มีไฟล์ /tmp/echo และวันที่ ถูกปิดช่องโหว่เรียบร้อยแล้ว
3. วิธีการแก้ไขเบื้องต้นผ่าน Network-based mitigations
1 2 3 |
iptables -A INPUT -m string --algo bm --hex-string '|28 29 20 7B|' -j DROP |