2 คะแนน โดย GN⁺ 3 시간 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • กรณีตัวอย่างของ การโจมตีแบบ social engineering ที่รีครูตเตอร์เข้าหาผ่าน ข้อความ LinkedIn แล้วขอให้รีวิวที่เก็บ GitHub สาธารณะ โดยอ้างว่าเป็นการรับสมัครหัวหน้าวิศวกร
  • ในโค้ดที่ขอให้รีวิวมี แบ็กดอร์ที่ปลอมตัวเป็น test suite ซ่อนอยู่ และคำขอให้ "ช่วยตรวจสอบปัญหา deprecated Node modules" ก็เป็น เหยื่อล่อ เพื่อชักจูงให้รัน npm install
  • เมื่อลองตรวจโค้ดด้วยความสงสัย โดยใช้ VPS ชั่วคราว และ เอเจนต์แบบอ่านอย่างเดียว แทนเครื่องโลคัล ไฟล์ปัญหาก็ถูกตรวจพบภายในไม่กี่วินาที
  • ทั้งคอมมิตในที่เก็บและโปรไฟล์รีครูตเตอร์ต่างก็เป็นการ สวมรอยตัวตนของบุคคลจริง โดยแอบอ้างเป็น นักพัฒนาตัวจริงและนักข่าวสายศิลปะ ตามลำดับ
  • นำเสนอ บทเรียนการป้องกันที่ใช้ได้จริง ว่าความระแวดระวัง, security hygiene, และ การใช้เอเจนต์แบบอ่านอย่างเดียว มีประสิทธิภาพกว่าการอ่านโค้ดด้วยตัวเองโดยตรง

ที่มาของการเข้าถึง

  • เมื่อสัปดาห์ก่อน ได้รับ ข้อความ LinkedIn จากรีครูตเตอร์ของ สตาร์ตอัปคริปโต รายเล็ก
    • มีการพูดคุยกันหลายครั้งตลอดหลายวัน และอีกฝ่ายอธิบายถึง proof-of-concept ที่พังอยู่ ซึ่งต้องการหัวหน้าวิศวกร
    • อีกฝ่ายส่ง ที่เก็บ GitHub สาธารณะ มาให้รีวิว พร้อมขอว่า "ช่วยตรวจสอบปัญหา deprecated Node modules"
  • การถูกขอให้รีวิวโค้ดเบสที่มีอยู่เดิมเป็นเรื่องปกติ แต่ครั้งนี้รู้สึก ผิดสังเกต จึงเพิ่มความระวังมากขึ้น

วิธีการตรวจสอบ

  • แทนที่จะ clone แล้วติดตั้ง dependency บนเครื่องตัวเอง ได้เปิด VPS ชั่วคราว บน Hetzner แล้ว clone ที่เก็บไปตรวจที่นั่น
  • ตั้ง Pi เป็น โหมดอ่านอย่างเดียว และเปิดใช้เฉพาะเครื่องมืออ่านไฟล์
    • คำสั่งที่ใช้: pi --tools read,grep,find,ls
  • เมื่อสั่งให้เอเจนต์รีวิวโค้ดเบสและชี้จุดน่าสงสัย มันก็หยุดที่ app/test/index.js แทบจะทันที

โครงสร้างของแบ็กดอร์

  • ที่เก็บนี้มีลักษณะเป็น React frontend + Node backend
  • กับดักอยู่ใน app/test/index.js ยาว ประมาณ 250 บรรทัด ซึ่ง ปลอมตัวเป็น test suite
  • ภายในมีการ ประกอบ URL จากชิ้นส่วนย่อย เพื่อซ่อนจุดหมาย
  • มี payload ซ่อนอยู่ท่ามกลาง test dummy ที่ถูกคอมเมนต์ทิ้งไว้ และทำให้ ไม่ว่าเซิร์ฟเวอร์จะส่งอะไรมา ก็สามารถรันบนเครื่องผู้ใช้ได้
    • payload อยู่ที่ บรรทัดที่ 225

กลไกการทริกเกอร์

  • ไฟล์นี้ไม่ได้รอให้มีการรันเทสต์ก่อน
    • app/index.js เรียก const test = require('./test') ทำให้ app/test/index.js ถูกโหลดและทำงานทันที
  • package.json เชื่อม app/index.js เข้ากับ ขั้นตอนเริ่มต้นการทำงาน
  • แกนสำคัญคือ สคริปต์ prepare ซึ่ง npm จะรันให้อัตโนมัติหลัง npm install
    • ดังนั้น แค่ติดตั้ง dependency ก็ทำให้แบ็กดอร์ทำงานได้
  • คำสั่งให้ "ตรวจปัญหา deprecated Node modules" จึงเป็น เหยื่อล่อเพื่อชักจูงให้รัน npm install นั่นเอง
  • แม้จะสามารถรัน payload ใน sandbox เพื่อสังเกต payload ระยะที่สอง ได้ แต่เมื่อมีหลักฐานชัดว่ามันรันโค้ดที่เซิร์ฟเวอร์ส่งมา ก็หยุดการตรวจต่อทันที

ตัวตนที่ถูกสวมรอยรายแรก

  • คอมมิตทั้งหมดถูกสร้างด้วยชื่อและอีเมลของ นักพัฒนา full-stack ตัวจริง
    • เขามีโปรไฟล์ LinkedIn ปกติ เว็บไซต์ส่วนตัว และบัญชี GitHub ที่มีประวัติยาวนาน
  • ผู้เขียนจึงติดต่อไปโดยอ้างว่าได้รับช่วงดูแลโค้ดเบสนี้ต่อมา
    • เขาตอบว่าไม่เคยทำงานกับบริษัทนี้ และ เคยถูกแอบอ้างบน GitHub มาก่อนจนที่เก็บถูกลบไปแล้ว อีกทั้งไม่เกี่ยวข้องกับที่เก็บนี้เลย
    • เขายังบอกด้วยว่าตัวเขาเองก็กำลังรายงานที่เก็บลักษณะนี้อยู่เช่นกัน
  • ประวัติคอมมิตทั้งหมด 39 คอมมิต ถูกผูกไว้กับชื่อนักพัฒนาคนหนึ่งที่ไม่เคยแตะที่เก็บนี้จริงแม้แต่ครั้งเดียว

ตัวตนที่ถูกสวมรอยรายที่สอง

  • โปรไฟล์รีครูตเตอร์เป็นของ นักข่าวสายศิลปะตัวจริง ซึ่งมีประวัติด้านวัฒนธรรมล้วน ๆ และไม่มีองค์ประกอบทางเทคนิคเลย
  • เมื่อโต้กลับไปว่าติดตั้งไม่ได้ นักข่าวสายไม่เทคนิคคนนี้กลับ กลายเป็นผู้เชี่ยวชาญ npm และเวอร์ชัน Node ทันที และพยายามกดดันให้รัน npm install

เรื่องนี้เกิดขึ้นได้กับทุกคน

  • แม้จะเคยได้ยินเรื่องการโจมตีแบบนี้และเคยอ่านบน HN มาก่อน แต่เมื่อกลายเป็นเป้าหมายเองก็ยังโดนเล่นงานแบบไม่ทันตั้งตัวอยู่บ้าง
    • ตั้งแต่ข้อความแรกก็สงสัยอยู่แล้ว แต่ถ้าเป็นวันที่เหนื่อยหรือรีบมาก ก็อาจเผลอรัน npm install ไปก่อนโดยไม่ได้คิดให้รอบคอบ
  • ข้อความ LinkedIn ที่แนบลิงก์ให้รีวิวที่เก็บควรถูกมองด้วย ความระแวดระวังระดับหนึ่งและ security hygiene ที่ดี
  • การใช้ เอเจนต์แบบอ่านอย่างเดียว เพื่อรีวิวโค้ดได้ผลดีกว่าการอ่านด้วยตัวเองโดยตรง
    • แบ็กดอร์นี้ ปลอมตัวเป็นโค้ดมือใหม่ที่เขียนได้อย่างงุ่มง่าม แต่เอเจนต์กลับตรวจพบได้ภายในไม่กี่วินาที
  • มีการรายงานที่เก็บไปยัง GitHub และรายงานรีครูตเตอร์ไปยัง LinkedIn แล้ว แต่จนถึงตอนนี้ก็ยังไม่มีการเปลี่ยนแปลง และ โค้ดยังถูกเผยแพร่อยู่เหมือนเดิม

1 ความคิดเห็น

 
GN⁺ 3 시간 전
ความคิดเห็นจาก Hacker News
  • มีรีครูเตอร์จากสตาร์ตอัปคริปโตเล็ก ๆ ส่งรีโปสาธารณะบน GitHub มาให้ดู โดยบอกให้ช่วยตรวจ proof-of-concept repository ที่พังอยู่ และให้เช็ก “deprecated Node modules issue” ซึ่งสุดท้ายเป็นฟิชชิงเพื่อหลอกให้รัน npm install
    สคริปต์ prepare จะรันอัตโนมัติหลัง npm install และทำหน้าที่เป็นแบ็กดอร์ที่ให้เซิร์ฟเวอร์ส่งโค้ดอะไรก็ได้มารันบนเครื่องโลคัล เรื่องที่โดนฟิชชิงแบบนี้ได้ผ่าน LinkedIn ดูร้ายแรงจนน่าตกใจ

    • LinkedIn ไม่มีวิธีให้บริษัทปฏิเสธผู้ใช้ที่อ้างว่าทำงานอยู่ที่ $company และถ้าแค่ใส่ไว้ในโปรไฟล์ ผู้ใช้นั้นก็จะไปโผล่บน หน้าบริษัทอย่างเป็นทางการ
      บริษัทของเราก็เคยมีรีครูเตอร์ปลอมที่ใช้กลโกงแบบเดียวกัน โปรไฟล์ปลอมดูน่าเชื่อถือมากและยังมีโพสต์เกี่ยวกับ LinkedIn Premium ด้วย แต่คนเหล่านั้นไม่ใช่พนักงานจริง
      รายงานไปเท่าไรก็ไม่ถูกถอดลง สุดท้ายต้องเลี้ยงเหล้าเพื่อนที่ทำงานอยู่ LinkedIn ถึงจะแก้ได้ แต่ไม่ใช่ทุกสตาร์ตอัปจะมีเส้นสายแบบนั้น
    • ถ้าเป็นเพื่อนกัน ก็ไม่ควรปล่อยให้เพื่อนใช้ NPM
      พอเห็นคนยังโดนเจาะกันอยู่เรื่อย ๆ แบบนี้ ก็ไม่เข้าใจว่าทำไมถึงไม่ใช้เครื่องมืออย่าง PNPM หรืออย่างน้อยก็ปิดช่องโหว่ที่ชัดเจนและถูกใช้โจมตีบ่อยที่สุดอย่างการรันโค้ดตามอำเภอใจระหว่างดาวน์โหลดโค้ด
      เครื่องมือที่รันโค้ดตามอำเภอใจทันทีที่คุณพยายามดาวน์โหลดโค้ด ควรเลิกมีได้แล้ว
    • วิธีนี้เป็นกลโกงที่พิสูจน์แล้วว่าใช้ได้จริงบน Upwork โดยเฉพาะช่วงกระแสคริปโต/NFT ปี 2021~2022 และหลังจากนั้นก็ค่อย ๆ ลามจากโปรเจกต์คริปโตไปยังหมวดอื่นอีกมาก
      ครั้งล่าสุดที่จำได้คือไฟล์ดาวน์โหลดที่ปลอมเป็นไฟล์พักหน้าจอ Windows .scr และการที่ตอนนี้มันมาถึง LinkedIn แล้วคือขั้นที่แย่กว่าเดิม
      แพลตฟอร์มน่าจะไม่ค่อยสนใจเพราะมันดูเหมือน “มีงานเพิ่มขึ้น” คล้ายกับที่เครือข่ายโฆษณาอย่าง Google หรือ Meta ไม่ได้ใส่ใจกับโฆษณาหลอกลวงมากนัก
    • เคยเจอฟิชชิงที่พยายามเอาอีเมลแล้วส่งอะไรอย่าง bullshitpowershellladendoucument.pdf.docx มาให้ แต่การส่งตรงผ่าน LinkedIn DM แบบนี้ถือว่าใจกล้ามาก
    • ช่วงนี้สัมภาษณ์งานเยอะเลยได้เจอพวกมิจฉาชีพชัด ๆ หลายครั้ง หวังว่าคงไม่ใช่เพราะผมดูโง่พอจะหลอกได้ แต่เพราะการหลอกลวงแบบนี้มันเกิดบ่อยขึ้นจริง ๆ
  • เรื่องนี้น่าจะเข้าข่ายอาชญากรรมชัด ๆ แต่ไม่เข้าใจว่าทำไมถึงไม่มีช่องทางที่คนรู้จักกันดีคล้าย 911 สำหรับแจ้งและขอความช่วยเหลือเรื่องอาชญากรรมไซเบอร์
    สังคมต้องตามให้ทันอันตรายจริงและสร้างเครือข่ายช่วยเหลือให้เร็วขึ้น เพราะอาชญากรรมแบบเป็นขบวนการต้องใช้การป้องกันแบบเป็นขบวนการเหมือนกัน

    • น่าเสียดายที่อาชญากรไซเบอร์ตัวจริงรู้ ทริกประหลาดอย่างหนึ่ง คือ “ไปก่ออาชญากรรมจากประเทศที่ไม่สนใจอาชญากรรม”
    • https://www.ic3.gov
      คุณอาจไม่ได้รับคำตอบ แต่สำหรับพลเมืองสหรัฐฯ หรืออาจจะสำหรับใครก็ตาม เท่าที่ผมรู้ ที่นี่ใกล้เคียงกับ อินเทอร์เน็ต 911 มากที่สุดแล้ว
    • ปัญหาหลักคือไม่มี 911 ระดับโลก ที่ใช้ได้ข้ามประเทศ
      ปัญหาที่สองคือความไม่สมมาตร: การสร้างการหลอกลวงแบบนี้แทบไม่ต้องออกแรง แต่การตามจับและดำเนินคดีกลับต้องใช้ความพยายามมหาศาลและต้นทุนระดับดาราศาสตร์
    • ถ้าจะพูดแบบประชด ๆ นี่คือกิ่งที่อยู่สูงและเอื้อมถึงยากมากบนต้นไม้แห่งความเลวร้ายที่มนุษย์ทำต่อกัน
      มันอยู่ในระดับใกล้เคียงกับสายโทรศัพท์หลอกลวงที่แอบอ้างเป็นฝ่ายซัพพอร์ตของ Microsoft แล้วหลอกผู้สูงอายุ และแทบเป็นไปไม่ได้เลยที่จะจับตัวผู้ต้องสงสัย
      ไม่ว่าจะเพราะพวกเขาปกปิดร่องรอยเก่งมาก หรือบ่อยกว่านั้นคืออยู่ในประเทศที่รัฐบาลไม่สนใจ หรือถึงขั้นปล่อยผ่านการหลอกลวงชาวตะวันตก
    • FBI ก็มี IC3 แต่การรับมืออาชญากรรมไซเบอร์แย่มากจนแทบไร้ประโยชน์
      ต่อให้แจ้งความไป ก็น่าจะไม่มีใครช่วยหรือแม้แต่ติดต่อกลับ
  • ตอนนี้มันใกล้เคียงกับโจทย์สัมภาษณ์งานทั่วไปจนน่าอึดอัด
    สถานการณ์ที่มีคนส่งรีโปมาให้แล้วบอกว่าการติดตั้งพัง ช่วยดูให้หน่อย เป็นอะไรที่ดูเป็นธรรมชาติ และนักพัฒนาหลายคนถ้าเหนื่อยหรือกำลังหางานอยู่ก็อาจรัน npm install ไปก่อนโดยไม่ทันคิดลึก

    • พออยู่ในบริบทการสัมภาษณ์ยิ่งแย่กว่าเดิม
      เพราะไม่อยากดูชักช้า ก็เลยข้ามขั้นที่จะถามก่อนว่าอันนี้ควรรันได้ไหม
  • “รีโปก็รายงานกับ GitHub แล้ว รีครูเตอร์ก็รายงานกับ LinkedIn แล้ว แต่ยังไม่มีอะไรเปลี่ยนและโค้ดยังอยู่ครบ” อืม, Microsoft

    • เคยเห็นโฆษณาบน LinkedIn ที่ปลอมตัวเป็นข่าวของ CBC Canada
      พอกดเข้าไปก็เป็นวิดีโอปลอมที่อ้างว่านายกรัฐมนตรีแคนาดาประกาศแผนลงทุนคริปโตสำหรับชาวแคนาดาทุกคน และยังมีลิงก์สมัครด้วย พอรายงานไปกลับได้รับคำตอบว่าตรวจสอบแล้วไม่พบการละเมิดนโยบาย
    • แปลกไหม? Microsoft เป็นเจ้าของ LinkedIn, GitHub, NPM ทั้งหมด
      ทั้งสามอย่างล้วนมีปัญหาเรื่องความปลอดภัยหรือความเสถียร และยิ่ง Microsoft ลงลึกกับ AI มากขึ้น ก็ยิ่งดูเหมือนแย่ลงแทนที่จะดีขึ้น
      ไม่รู้เลยว่าประสิทธิภาพจาก AI ภายในบริษัท ที่บางคนบอกว่าเพิ่มได้ 10 เท่า มันหายไปไหนหมด
    • ควรรายงานในฐานะละเมิด DMCA
      แบบนั้นน่าจะโดนถอดลงทันที
  • ดูเหมือนจะใช้โดเมนเดียวกันกับหลายเป้าหมาย
    มีเธรดใน Reddit เมื่อ 3 เดือนก่อนที่คล้ายกันอยู่ด้วย: https://www.reddit.com/r/openclaw/comments/1rlet0h/someone_t...

  • ไม่เข้าใจว่าทำไมระบบปฏิบัติการทั่วโลกยังไม่ บล็อก npm ไปเลย
    คนพวกนี้ดูเหมือนจะไม่มีวันเรียนรู้

    • ไม่ได้เกี่ยวกับ npm โดยตรง
      การหลอกลวงแบบนี้ทำได้ด้วยเทคโนโลยีหลายอย่าง และต่อให้เป็น Makefile ก็ยังใช้ได้เหมือนกัน
  • อยากให้ Mac มี เฟรมเวิร์ก virtualization ที่ดีจริงเสียที
    การดาวน์โหลดสคริปต์สุ่มจากอินเทอร์เน็ตแบบไม่มีการป้องกันเหมือนปี 1995 นี่เริ่มน่าเบื่อมากแล้ว
    เวลาไปเจอคนแปลกหน้าแล้วเอาของของพวกเขาใส่ลึกเข้าไปในคอมพิวเตอร์ของตัวเอง ก็อย่าลืมใส่อุปกรณ์ป้องกัน

    • การไปรันสคริปต์สุ่มแบบ curl | bash จาก GitHub, AUR, NPM ก็แย่พอ ๆ กัน แต่ดูเหมือนนักพัฒนาหลายคนที่นี่ก็ยังมีสมมติฐานที่น่าสงสัยกับแนวปฏิบัติแย่ ๆ นี้อยู่
      เหตุการณ์แนว Shai-Hulud เล็ก ๆ หลายครั้งในช่วงไม่กี่สัปดาห์ที่ผ่านมา แสดงให้เห็นชัดว่ามันแย่แค่ไหน
    • บน Mac จริง ๆ ก็มีวิธีที่ใช้ได้อยู่แล้ว
      ใน IntelliJ สามารถตั้งให้รันคำสั่ง npm ภายใน Docker container ได้
  • ข้อเสนองานที่ได้รับจาก LinkedIn ช่วงหลัง ๆ ดูน่าสงสัยไปหมด
    บ้างก็ให้สมัครผ่านแพลตฟอร์ม บ้างก็ให้บันทึกวิดีโอแนะนำตัว หรือให้ทำ แบบทดสอบเขียนโค้ดคัดกรอง ที่อยู่หลังแพลตฟอร์มโค้ดอะไรสักอย่าง

    • พี่น้องของผมคนหนึ่งตกงานอยู่นานเพราะป่วย แล้วได้รับ “ข้อเสนองาน” จาก LinkedIn ที่ดูน่าเชื่อถือมาก
      อีกฝ่ายขอให้เขาเขียนเช็คเป็นค่ามัดจำโน้ตบุ๊กบริษัท ซึ่งมองเผิน ๆ ก็ไม่สมเหตุสมผลเลย แต่เพราะหางานมานานจนสิ้นหวัง เขากลับดีใจมากที่คิดว่าในที่สุดก็ได้งานแล้ว
      คนที่ว่างงานมานานมักสิ้นหวังจนมองข้ามสัญญาณอันตรายร้ายแรงที่คนมีเงินเก็บพอหรือคนที่ยังมีงานทำและกำลังจะย้ายงานไม่มีทางพลาด
  • ทุกวันนี้ ผู้เขียนแพ็กเกจ NPM ส่วนใหญ่โดนแฮ็กด้วยวิธีแบบนี้กันไม่ใช่หรือ?
    คนดูแล axios ก็ดูเหมือนจะโดนแนวทางเดียวกันผ่าน LinkedIn เหมือนกัน

    • เหมือนโดนกับดักจากเล่ห์ของตัวเอง
  • ผมใช้ LinkedIn แค่เพราะประกาศงาน แต่ช่วงไม่กี่เดือนมานี้ประกาศไร้สาระเยอะเกินไป
    มีประกาศจากบริษัทแนว ๆ Ladders, Swooped และที่คล้ายกันเต็มไปหมด ตอนนี้เริ่มรู้สึกว่าถึงเวลาทิ้ง LinkedIn ไปจริง ๆ แล้ว