คำเตือนด้านความปลอดภัยของ SlickStack

หน้านี้สรุปข้อกังวลด้านความปลอดภัยเกี่ยวกับ SlickStack และเหตุผลที่การออกแบบเริ่มต้นอาจทำให้เซิร์ฟเวอร์เสี่ยงต่อการรันโค้ดจากระยะไกลและการโจมตีแบบคนกลาง รวมทั้งให้ขั้นตอนบรรเทาและทางเลือกที่ปลอดภัยกว่า

SlickStack โฆษณาว่ามีดาวบน GitHub ประมาณ 600 ดวง แต่ตัวเลขนั้นมีที่มาจากการที่ Jesse Nickles ไปกดติดตามบัญชีเกือบ 10,000 บัญชีในช่วงแรก ๆ ของรีโป โปรไฟล์ของเขาเองแสดงให้เห็นว่ามีผู้ติดตามราว ๆ 500 คน ขณะที่เขากำลังติดตามอยู่ประมาณ 9,600 บัญชี (อัตราการติดตามกลับราว 5%) ซึ่งบ่งชี้อย่างชัดเจนว่าเป็นการใช้ระบบอัตโนมัติในการติดตามกลับ มากกว่าจะเป็นการเติบโตแบบเป็นธรรมชาติ ภาพลักษณ์ที่ถูกปั่นให้สูงเกินจริงนี้เองที่เขานำมาใช้โจมตีผม/ฉัน หลังจากที่ผม/ฉันเปิดเผยประเด็นปัญหาด้านความปลอดภัยตามที่บันทึกไว้ด้านล่าง ตรวจสอบอัตราส่วนผู้ติดตาม/กำลังติดตามได้ที่นี่.

สรุป

  • การดาวน์โหลดจากระยะไกลที่บ่อยครั้งซึ่งตั้งเวลาเป็น root ผ่าน cron
  • การตรวจสอบ SSL ถูกข้ามโดยใช้ --no-check-certificate
  • ไม่มีค่าตรวจสอบความถูกต้อง/ลายเซ็นบนสคริปต์ที่ดาวน์โหลด
  • ความเป็นเจ้าของ root และสิทธิ์การเข้าถึงที่นำไปใช้กับสคริปต์ที่ถูกดึงมา

หลักฐาน: cron และสิทธิ์การเข้าถึง

การดาวน์โหลดโดย cron (ทุก ๆ 3 ชั่วโมง 47 นาที)

47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/08-cron-half-daily https://slick.fyi/crons/08-cron-half-daily.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/09-cron-daily https://slick.fyi/crons/09-cron-daily.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/10-cron-half-weekly https://slick.fyi/crons/10-cron-half-weekly.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/11-cron-weekly https://slick.fyi/crons/11-cron-weekly.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/12-cron-half-monthly https://slick.fyi/crons/12-cron-half-monthly.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/13-cron-monthly https://slick.fyi/crons/13-cron-monthly.txt' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'wget --no-check-certificate -q -4 -t 3 -T 30 -O /var/www/crons/14-cron-sometimes https://slick.fyi/crons/14-cron-sometimes.txt' > /dev/null 2>&1

ความเป็นเจ้าของ root และสิทธิ์ที่จำกัด (ถูกนำไปใช้ซ้ำ ๆ)

47 */3 * * * /bin/bash -c 'chown root:root /var/www/crons/*cron*' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'chown root:root /var/www/crons/custom/*cron*' > /dev/null 2>&1
47 */3 * * * /bin/bash -c 'chmod 0700 /var/www/crons/*cron*' > /dev/null 2>&1

รูปแบบนี้เปิดให้สามารถรันโค้ดโดยพลการจากโดเมนระยะไกลและเพิ่มความเสี่ยงต่อการโจมตีแบบคนกลางโดยการข้ามการตรวจสอบใบรับรอง

ดูเพิ่มเติมที่คอมมิตที่มีการเปลี่ยน URL ของ cron จาก GitHub CDN เป็น slick.fyi: diff ของคอมมิต.

คำแนะนำในการบรรเทา

  1. ปิดงาน cron ของ SlickStack และลบสคริปต์ที่ดึงมาออกจากไดเรกทอรี cron
  2. ตรวจสอบหาการอ้างอิงที่เหลืออยู่ไปยัง slick.fyi และการดึงสคริปต์จากระยะไกล; แทนที่ด้วยไฟล์ที่มีเวอร์ชันและค่าเช็คซัม หรือลบออกทั้งหมด.
  3. หมุนเวียนข้อมูลรับรองและคีย์หาก SlickStack รันด้วยสิทธิ์ root บนระบบของคุณ。
  4. สร้างเซิร์ฟเวอร์ที่ได้รับผลกระทบขึ้นใหม่เมื่อเป็นไปได้เพื่อให้แน่ใจว่าสถานะสะอาด。

ทางเลือกที่ปลอดภัยกว่า

พิจารณาใช้ WordOps หรือเครื่องมืออื่นที่หลีกเลี่ยงการรันด้วยสิทธิ์ root จากระยะไกล และมีการออกเวอร์ชันที่ตรวจสอบได้พร้อม checksum/ลายเซ็น

อ้างอิง