วันพุธที่ 27 พฤศจิกายน พ.ศ. 2562

Email Phishing เป้าหมายจู่โจมผู้ใช้ Zimbra มาอีกแล้ว

        ผมเคยเขียนบทความเกียวกับ Email Phishing ที่มีเป้าหมายจู่โจมผู้ใช้งาน  Zimbra  กันไปบ้างแล้ว  แต่ก็พบว่าก็ยังเจออยู่เรื่อยๆ ด้วยเทคนิคลูกเล่นเยอะกว่าแต่ก่อน คราวนี้ผมได้รับแจ้งจาก Line Group ที่ผมสร้างไว้เพื่อพูดคุยกับผู้เคยอบรม Zimbra  กับผม  คุณ KorLid (@Korlid)  ได้ส่งตัวอย่าง Phishing Email เป็นไฟล์ในรูปแบบ eml มาให้ผม ซึ่งผมได้ลองเปิดดูโดยใช้โปรแกรม Email Client ที่ใช้งานอยู่ เจอ Email หน้าตาแบบนี้ครับ

ตัวอย่างข้อความใน phishing Email

  Email ที่ว่า มีรายละเอียดที่น่าสนใจ ดังนี้ครับ 

  • จ่าหน้าว่าถูกส่ง Email Address ที่ชื่อ domain เป็นของ  ISP  เจ้าดังรายหนึ่ง (ผมขอไม่เปิดเผยนามละกัน) ซึ่งทำให้ phishing email นี้มีความน่าเชื่อถือเพิ่มขึ้น 
  • เนื้อ Email จะมีข้อความเป็นภาษาไทย บอกประมาณว่า ขนาด Mailbox (กล่องจดหมาย)  ใกล้เต็ม ให้ลบ Email ทิ้งไปบ้าง  อันนี้ดูแล้วมีเหตุผล
  • ลงท้าย Email บอกให้ตรวจสอบบัญชีภายใน 24 ชั่วโมง แต่ถ้าไม่ทำ ต้องยืนยันบัญชี โดยการ click ที่ link  ข้อนี้นี้ไม่น่าจะใช่ละ 

ถ้าลอง click ไป จะเจอ website ให้เรากรอก User , Email , Password ตามรูป 



ถึงจุดนี้ หลายคนที่มีประสบการณ์ หรือเคยเป็นผู้ดูแลระบบ Zimbra ก็คงเริ่มเห็นข้อพิรุธหลายอย่าง ตามนี้ 

  1.  Email ทำให้ Mailbox เต็ม ทำไมต้องยืนยันตัวตนด้วย อย่างมาก user คนนั้นๆ ก็แค่รับ Email ใหม่ๆ ไม่ได้  อยากให้รับ Email ใหม่ๆ ได้ ก็ ไปที่ Zimbra Web Client ที่เคยใช้งานกัน  ทำการ Login เสร้จแล้วก็ลบ Email เก่าๆ ทิ้งก็เรียบร้อย 
  2. เมื่อกดที่ link   website ที่แสดงขึ้นมาตามรูป จะเห็น url แปลกๆ  ไม่ใช่ domain ขององค์กรเรา ไม่ใช้ domain ของ Zimbra
  3. ผมได้ลองกรอกข้อมูล พบว่ามีจุดที่ผิดปกติอีกอย่างคือ เวลากรอกในช่อง  PASSWORD และ CONFIRM PASSWORD   ตัวอักษรที่พิมพ์เข้าไปไม่มีการปิดบังอะไรเลย แทนที่เวลากรอก เราไม่ควรมองไม่เห็นตัวอักษรที่เราพิมพ์ แต่เห็นเป็น *  แทน ซึ่งกรณีนี้ พิมพ์อะไรก็ขึ้นมาตามตัวอักษรที่ิพิมพ์  

สังเกตุถึงตรงนี้ แน่นอกครับเป็น phishing email แน่นอน


จะส่ง Phishing Email หลอกเราไม่ทำไม 

    จากรูปด้านบน เค้าจะหลอกเอาข้อมูล ชื่อ นามสกุล Email address พร้อมทั้ง password จากเราไป คำถามก็คือ เอาไปแล้วได้อะไร เท่าที่เคยเจอมา เค้าจะทำเพื่อ 

  • เอาข้อมูลนี้ มา hack account ของเราบน Zimbra  และใช้ประโยชน์จาก account ของเราในการส่ง Spam ขายของ 
  • ใช้ Account ของเราที่ถูก hack ได้แล้วนี้เป็นต้นทางในการส่ง Phishing Email ไปยัง User อื่นๆ ที่อยู่ใน email domain เดียวกันกับของเรา หรือ Email address อื่นๆ ที่เราเคยพูดคุย ต่อไปอีก  
  • ส่ง email ไปยังคู่ค้าเราโดยดูจาก Email ที่เคยรับและส่ง หลอกว่าถ้ามีการค้าขายกัน ให้โอนเงินเข้าบัญชีของ hacker แทนบัญชีเดิม อันนี้น่ากลัว โดยกันที่เสียหายเป็นหลักล้านบาทก็เคยได้ยิน และไม่ค่อยเป็นข่าว เพราะเสียหน้า เสียชื่อด้วย 


แจ้งเตือนไว้ให้ทราบนะครับ สำหรับผู้ดูและระบบ แจ้งเตือนผู้ใช้หรือ user ในองค์กรกันไว้ด้วยนะครับ 

ศิวัฒน์ ศิวะบวร

วันอังคารที่ 16 กรกฎาคม พ.ศ. 2562

อันตราย เตือนภัยช่องโหว่ด้านความปลอดภัยของ Zimbra (CVE-2016-9924, CVE-2018-20160, CVE-2019-9670)

อันตราย เตือนภัยช่องโหว่ด้านความปลอดภัยของ Zimbra (CVE-2016-9924, CVE-2018-20160, CVE-2019-9670)

ประมาณต้นเดิือน พฤษภาคมที่ผ่านมา ผมได้รับข้อความผ่านทาง Facebook Fanpage ของ Thai Zimbra  จาก คุณ Mana Saringkanratana‎ ว่ามีการพบ ช่องโหว่ด้านความปลอดภัย ของ Zimbra สามตัว คือ  CVE-2016-9924, CVE-2018-20160, CVE-2019-9670  ซึ่ง hacker สามารถใช้ช่องโหว่ทั้งสามตัวนี้ประกอบกัน  เป็นช่องทางเรียกใช้คำสั่ง ของ Linux บนเครื่อง Zimbra ได้ (ศัพท์เทคนิคเรียกว่า Remote Code Execution)  ซึ่งทำให้ผมต้องลองหาข้อมูลดูว่าร้ายแรงแค่ไหน อาการเป็นอย่างไร และป้องกันอย่างไร

เท่าที่พบ มีหลาย  web site ที่พูดถึง ซึ่งถ้าสนใจเชิงลึก ลองไปศึกษาดูกันเองละกันครับ ดูได้ตาม website อ้างอิงท้ายบทความ

Version  ของ Zimbra  ที่มีปัญหา 
 เท่าที่มีการรายงาน จะเกิดขึ้นกับ Zimbra Version 8.5 ถึง 8.7.11  โดยจะเกิดกับเครื่องที่มีการเปิด Port 80 หรือ 443 เพื่อให้มีการใช้  web client ของ Zimbra จาก Network ภายนอกได้ ซึ่งก็เปิดกันเป็นปกติอยู่แล้ว แปลว่า Zimbra version ข้างต้นไม่ปลอดภัย

อาการ
ถ้าถามผม โดน Remote Code Execution ไปเนี่ย โดนเจาะไปถึงระดับ Linux เรียกว่าทำอะไรได้เกือบทุกอย่างเลยครับ ถ้าให้ดี  คงต้องมีการตรวจสอบไปถึงระดับ Linux เลยว่ามีโปรแกรมแปลกปลอมอะไรถูกฝังไว้ หรือ มีโปรแกรมแปลกๆ อะไรทำงานอยู่หรือเปล่า
อาการของเครื่องที่โดน hack นี้ เท่าที่มีรายงาน และที่ผมเจอ จะมีอาการเป็นสามกลุ่มใหญ่ๆ คือ

1)  Zimbra ไม่ทำงานหรือทำงานผิดพลาด เช่น Start เสร็จแล้ว ตาย Restart แล้วก็ตาย

2)   Zimbra ดูเหมือนทำงานปกติดี แต่มีการฝังโปรแกรม บน Linux และเรียกโปรแกรมนี้ขึ้นมาทำงาน โดย โปรแกรมที่เจอว่ามีการฝังไว้ คือ
2.1 /tmp/zmcat,  /var/tmp/zcat , /tmp/l.sh, /tmp/s.sh 
 พวกนี้จะเป็น โปรแกรมที่ hacker  เอามาวางไว้ ถึงแม้จะชื่อเหมือนหรือคล้ายกับ คำสั่งของ zimbra  ก็ตาม แต่ปกติ ไม่น่าจะมี คำสั่งมาอยุ่ที่  /tmp หรือ /var/tmp
2.2 /opt/zimbra/log/zmswatch
ซึ่งถ้าใช้คำสั้ง file  ตรวจสอบดูไฟล์นี้ จะพบว่าเป็นคำสั่งทีเรียกใช้งานได้ (executable)  ซึ่งผิด ปกติครับ  ตัวอย่างเช่น

[zimbra@zimbra log]$ file /opt/zimbra/log/zmswatch zmswatch: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped

ปกติแล้วใน /opt/zimbra/log จะเก็บ log file ของ Zimbra ซึ่งเป็น Text ไฟล์ หรือไม่ก็เป็น log file ที่ถุก zip ไว้ (ไฟล์ลงท้ายด้วย .gz)  ไม่ควรจะมีคำสั่งใดๆมาเก็บไว้ที่ directory นี้

3) มีแอบสร้าง การสร้าง Account ของ Zimbra ขึ้นมา  อันนี้ต้องลองไล่ดูเองนะครับ ถ้าเห็นมี account บน Zimbra  ชื่อแปลกๆ ละก็ตรวจสอบให้ดีๆ ว่าเป็นของ Zimbra  หรือของคนในองค์กรหรือเปล่า

การปิดช่องโหว่ 
จากข้อมูลที่หามา มีสองวิธีที่พวกเราน่าจะพอทำกันได้ครับ
วิธีแรก คือ Upgrade เป็น Version 8.7.11 หรือ 8.8.x ครับ  ซึ่งถ้าจะใช้การ Upgrade มีคำแนะนำอยู่สองข้อ คือ Backup ของเดิมไว้กันเหนียว และ ทดลองที่ระบบ Test ก่อนทำที่เครื่องจริงหรือที่เราเรียกว่าระบบ Production  ที่ต้องทำแบบนี้เพราะเคยมีประวัติว่ามีคน Upgrade Zimbra ที่เครื่อง Production พอทำเสร้จแล้วเจอว่า Zimbra ทำงานผิดพลาด เรื่องนี้อย่าชะล่าใจนะครับ บางที่การ Upgrade จากต้นทาง Version เดียวกัน ไปเป็น Version ใหม่เดียวกัน เครือง A ไม่มีปัญหาแต่เครื่อง      B มีปัญหา ก็เจอมาแล้ว


วิธีที่สอง สำหรับ zimbra version ตั้งแต่  8.5 แก้ไขไฟล์ ปิดช่องโหว่ซะ โดยแก้ไขไฟล์ที่ชื่อ /opt/zimbra/mailboxd/etc/service.web.xml.in  (อย่าลืม copy  ไฟล์ดั้งเดิมเก็บไว้ด้วยนะครับ กันเหนียว )
ขั้นตอนก็คือ เปิดไฟล์ที่ว่านี้ขึ้นมาหาบรรทัด ทีมีคำว่า ProxyServlet กับบรรทัดที่มีคำว่า   AutoDiscoveryServlet 

...
<servlet-name>ProxyServlet</servlet-name>
    <servlet-class>com.zimbra.cs.zimlet.ProxyServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>allowed.ports</param-name>
      <param-value>%%zimbraMailPort%%, %%zimbraMailSSLPort%%, 7070</param-value>
...
 <servlet-name>AutoDiscoverServlet</servlet-name>
    <servlet-class>com.zimbra.cs.service.AutoDiscoverServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>allowed.ports</param-name>
      <param-value>%%zimbraMailPort%%, %%zimbraMailSSLPort%%, %%zimbraAdminPort%%, 7070, 7443</param-value>
    </init-param>
...

ซึ่งใน Tag ทั้งสองอันนี้ ให้ดูที่บรรทัด  <param-value> ให้หาคำว่าคำว่า %%zimbraMailPort%%, %%zimbraMailSSLPort%%,

 แล้วลบออก  ผลลัพท์จะได้ตามนี้ครับ

  <servlet>
    <servlet-name>ProxyServlet</servlet-name>
    <servlet-class>com.zimbra.cs.zimlet.ProxyServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>allowed.ports</param-name>
      <param-value>7070</param-value>
    </init-param>
    <load-on-startup>8</load-on-startup>
  </servlet>
...
  <servlet>
    <servlet-name>AutoDiscoverServlet</servlet-name>
    <servlet-class>com.zimbra.cs.service.AutoDiscoverServlet</servlet-class>
    <async-supported>true</async-supported>
    <init-param>
      <param-name>allowed.ports</param-name>
      <param-value>%%zimbraAdminPort%%, 7070, 7443</param-value>
    </init-param>
    <load-on-startup>12</load-on-startup>
  </servlet>

เสร้จแล้ว save file และทำการ restart zimbra สักรอบเป็นอันเสร็จ

วิธีนี้อาจจะดูซับซ้อนไปหน่อย แต่ก็สะดวกดีเพราะแก้ไขแค่สองไฟล์ก็จบแล้ว

ถ้ามีข้อมูลหรือเจออะไรแปลกๆ ที่น่าจะเป็นผลจากช่องโหว่ด้านความปลอดภัยของ Zimbra ชุดนี้ ส่งข้อมูลมา update กันหน่อยนะครับ


website อ้างอิง 
https://portswigger.net/daily-swig/multiple-rce-vulnerabilities-impact-all-versions-of-zimbra-email-software
https://lorenzo.mile.si/zimbra-cve-2019-9670-being-actively-exploited-how-to-clean-the-zmcat-infection/961/
https://blog.tint0.com/2019/03/a-saga-of-code-executions-on-zimbra.html
https://forums.zimbra.org/viewtopic.php?t=66005

ทำยังไงให้ส่ง Email ที่ใหญ่กว่า 7 MB บน Zimbra ได้

ปัญหาของผู้ใช้ Zimbra ที่เจอกันบ่อยๆ คือ พยายามจะ Attach file ที่มีขนาดใหญ่  หรือ ขนาดโดยรวมของ Attach file มีขนาดใหญ่ แล้ว Zimbra ไม่ยอม  ขึ้น error ประมาณว่า

“Attachment failed since the item would exceed the size limit of  N MB”

ถ้าอยากจะเพิ่ม limit หรือข้อจำกัดให้สามารถ Attach file ขนาดใหญ่ๆ บน Zimbra ได้จะทำอย่างไร

วิธีการปรับแต่ง 
ที่จริงเราสามารถปรับค่า parameter ที่จำกัดขนาดของ attach file บน Zimbra ได้ครับ แต่ต้องอาศัย Account ของผู้ดูแลระบบ (Account ผู้ใช้งานธรรมดาของ Zimbra ไม่มีสิทธินะครับ) โดย Login ไปที่ web GUI  ป้อน URL https://zimbra_hostname:7071 โดยแทนที่ zimbra_hostname ด้วย IP Address หรือ Hostname ของ zimbra 

โดย parameter ที่ต้องปรับแก้ มีสองจุดครับ 

1) ปรับค่า Max Upload File Size 

จุดแรกที่เราต้องปรับคือ Max Upload File Size หรือขนาดที่ใหญ่ที่สุดของไฟล์ที่ Upload ขึ้นไปที่ Zimbra ได้ โดยไปที่ 

Configure >> Global Settings  





























ที่หัวข้อ General Information  ดูที่บรรทัด 

Maximum size of a file uploaded from the desktop (KB) 

ปรับค่า Max Upload File Size 










ค่านี้เป็นตัวกำหนดขนาดที่ใหญ่ที่สุดของไฟล์ 1 ไฟล์ (หน่วยเป็น KB) ทีสามารถ Upload ไปที่ Zimbra ได้ ซึ่งการ attach file ก็ถือว่าเป็นการ upload ไฟล์ขึ้นไปที่ Zimbra อย่างหนึ่งครับ Default อยู่ที่ประมาณ 10 MB แต่จริงๆ ได้ไม่ถึงหรอกครับ เดี๋ยวไว้บอกที่หลัง ว่าทำไมไม่ได้ 

หลังจากปรับค่าตามที่ต้องการไปแล้ว ก็กดปุ่ม save ด้วยครับ 

2) ปรับค่า Maximum Message Size 
หลังจากผ่านขั้นตอนดังกล่าวแล้ว ยังไม่จบนะครับ เรามี parameter ที่ต้องปรับอีกที่หนึ่ง คือค่า Maximum Message Size

วิธีการ ไปที่ Configure >> Global Settings  >> MTA  >> 

ที่หัวข้อ Messages  หา parameter บรรทัด Maximum messages size(KB) 

การปรับค่า Maximum message size

ค่านี้ เป็นค่าที่กำหนดขนาดที่ใหญ่ที่สุดของ Email 1 ฉบับ ที่ส่งได้ในระบบ ซึ่งค่านี้จะเป็นกำหนดขนาดของ Email ทั้งหมด ซึ่งรวม เนื้อ email + email header + attach file ทั้งหมดครับ ค่าที่ระบุ หน่วยเป็น KB (Kilobyte) 

ปรับแก้แล้ว อย่าลืม save ด้วยนะครับ 

ปัญหาของการกำหนดค่า 

สำหรับคนที่เคยเจอกับปัญหานี้ ถ้าลองสังเกตุดีๆ จะเห็นนะครับ ว่าค่า default ของ  parameter ทั้งสองตัว คือ 10Mb  แต่เวลา attach file จริงๆ ได้ไม่เกิน 7Mb  ?

ที่เป็นแบบนี้ ไม่แน่ใจว่าเป็น Bug ของ Zimbra v8.x หรือเปล่า แต่ก็เป็นปัญหาที่เกิดขึ้นจริงๆครับ ว่าขนาดที่ zimbra อนุญาต จะเล็กกว่าค่าที่เราระบุที่ parameter ทั้งสองตัว วิธีแก้ปัญหาแบบอ้อมๆ ของผมก็คือ ระบุค่าทั้งสองจุดนี้ ให้มากกว่าค่าจริงๆ ที่เราต้องการจริงๆ สักหนึ่งในสาม เช่น ต้องการ 10MB  ผมจะระบุค่าเป็น  13 หรือ 14 MB ครับ 

หวังว่าจะได้ความรู้เพิ่มเติมไปใช้งาน หรือแก้ปัญหากันนะครับ