ตรวจจับการเปลี่ยนเจ้าของส่วนขยาย Chrome ที่ติดตั้งไว้
(github.com/classvsoftware)- Under New Management เป็นส่วนขยายที่คอยตรวจสอบเป็นระยะว่าข้อมูลนักพัฒนาของส่วนขยายเบราว์เซอร์ที่ติดตั้งไว้มีการเปลี่ยนแปลงบน Chrome Web Store หรือ Firefox Addons หรือไม่
- หากข้อมูลนักพัฒนาเปลี่ยนไป จะแสดง ป้ายสีแดง บนไอคอนส่วนขยายเพื่อให้ผู้ใช้ทราบว่ามีการเปลี่ยนเจ้าของ
- ความจำเป็นของมันเริ่มจากปัญหาที่นักพัฒนาส่วนขยายมักได้รับข้อเสนอซื้อกิจการอยู่บ่อยครั้ง และในเกือบทุกกรณีผู้ซื้อพยายามหาประโยชน์จากผู้ใช้เดิม
- ผู้ใช้อาจไม่รู้ว่าส่วนขยายที่ติดตั้งไว้มีการเปลี่ยนเจ้าของแล้วและ อาจถูกทำให้ไม่ปลอดภัย ทำให้เครื่องมือนี้ช่วยเปิดโอกาสให้ตัดสินใจได้
- เนื่องจากเบราว์เซอร์มีข้อจำกัดในการแก้ไขโดเมนของมาร์เก็ตเพลสส่วนขยาย การตรวจสอบข้อมูลนักพัฒนาจึงถูกมอบหมายให้ เซิร์ฟเวอร์ API ของ ExBoost
ตรวจจับการเปลี่ยนเจ้าของส่วนขยาย
- Under New Management จะตรวจสอบเป็นช่วง ๆ ว่าข้อมูลนักพัฒนาของส่วนขยายที่ติดตั้งไว้มีการเปลี่ยนแปลงใน Chrome Web Store หรือร้าน Firefox Addons หรือไม่
- หากมีการเปลี่ยนแปลง จะแสดง ป้ายสีแดง บนไอคอนส่วนขยายเพื่อให้ผู้ใช้รับรู้ว่ามีการเปลี่ยนเจ้าของ
- เป้าหมายคือเปิดโอกาสให้ผู้ใช้ได้ตัดสินใจอย่างมีข้อมูลเกี่ยวกับซอฟต์แวร์ที่ตนใช้งาน
ทำไมจึงจำเป็น
- นักพัฒนาส่วนขยายมักได้รับข้อเสนอให้ขายส่วนขยายของตนอย่างต่อเนื่อง
- README ระบุว่าในเกือบทุกกรณี ผู้ซื้อต้องการ หลอกลวง ผู้ใช้เดิม
- ผู้ใช้อาจไม่ทราบว่าส่วนขยายที่ติดตั้งไว้มีการเปลี่ยนเจ้าของ และตอนนี้ อาจถูกทำให้ไม่ปลอดภัย แล้ว
วิธีติดตั้ง
- ติดตั้งบน Chrome: Chrome Web Store
- ติดตั้งบน Firefox: Firefox Add-ons
- หรือดาวน์โหลด prebuilt release แล้วแตกไฟล์
.zipและโหลดไดเรกทอรีdistเข้าเบราว์เซอร์
บิลด์จากซอร์ส
- Under New Management ใช้ Plasmo
pnpm install: ติดตั้ง dependenciespnpm dev: รันในเครื่องpnpm build --zip: บิลด์สำหรับรีลีสpnpm build --target=firefox-mv3: บิลด์สำหรับ Firefox
ทำไมต้องมีเซิร์ฟเวอร์ภายนอก
- เบราว์เซอร์มีกฎ พิเศษ สำหรับการแก้ไขโดเมนของมาร์เก็ตเพลสส่วนขยาย
- ตัวอย่างเช่น ไม่สามารถตั้งกฎ
declarative_net_requestกับchromewebstore.google.comได้ - ดังนั้นงานตรวจสอบข้อมูลนักพัฒนาจึงถูกมอบหมายให้ ExBoost เซิร์ฟเวอร์ API
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ID ของส่วนขยายได้มาจาก คีย์ส่วนตัว ที่นักพัฒนาอัปโหลดไปพร้อมกันตอนส่งขึ้นแอปสโตร์ครั้งแรก และถ้าไฟล์ ZIP ที่อัปโหลดภายหลังมี
key.pemอีกอันอยู่ ID ก็จะเปลี่ยนอย่างไรก็ตาม ถ้าไม่มี
key.pemID ของส่วนขยายจะคงเดิม ดังนั้นถ้า ID เปลี่ยนก็มีความเป็นไปได้ว่าเจ้าของเปลี่ยนไป แต่เจ้าของเดิมก็อาจส่งต่อคีย์ส่วนตัวให้เจ้าของใหม่แล้วก็ได้ Google ไม่ได้บังคับให้ใช้คีย์ส่วนตัวทุกครั้งที่อัปโหลด ดังนั้นเจ้าของใหม่จึงสามารถเผยแพร่การเปลี่ยนแปลงได้แม้ไม่มีคีย์นั้นระบบนิเวศของส่วนขยายน่าสนใจ เลยกำลังทำเครื่องมือในด้านนี้ด้วย อยากสร้างรีโพซิทอรี GitHub สำหรับส่วนขยายตัวใดตัวหนึ่ง บันทึกทุกการอัปเดตเป็นการเปลี่ยนแปลงในรีโพซิทอรี แล้วลองรันตัววิเคราะห์แบบสแตติกกับ runtime taint analysis เพื่อติดตามว่าอินพุตของผู้ใช้ไหลไปยัง sink ที่เสี่ยงอย่าง
evalหรือpostMessageหรือไม่: https://github.com/milesrichardson/crxmonระหว่างเจรจา พอบอกว่าจะถอดส่วนขยายลงและส่งซอร์สโค้ดทั้งหมดให้เขาไปเผยแพร่เอง อีกฝ่ายกลับคาดหวังว่าจะส่งมอบ ข้อมูลรับรองบัญชีส่วนขยาย Opera ให้ด้วย สุดท้ายก็ล้มดีลไป และเครื่องมือแบบนี้ก็มีประโยชน์อยู่บ้าง แต่เห็นด้วยว่า สแกนเนอร์มัลแวร์ สำหรับส่วนขยายน่าจะดีกว่า
นักพัฒนาควรเซ็นส่วนขยายหรือ manifest ด้วยคีย์ส่วนตัว แล้วแชร์คีย์สาธารณะหรือรวมไว้ในการอัปโหลด การอัปเดตก็ต้องเซ็นด้วยคีย์ส่วนตัวเดิมต่อไป และตราบใดที่คีย์ไม่เปลี่ยน ก็สามารถตรวจสอบได้จากคีย์สาธารณะของการอัปโหลดครั้งแรกว่าใช้คีย์ส่วนตัวเดียวกันหรือไม่ การที่การอัปโหลดภายหลังจะมีคีย์สาธารณะรวมอยู่ด้วยหรือไม่ไม่ใช่ประเด็นสำคัญ หากขายหรือแชร์คีย์ส่วนตัว คนอื่นก็สามารถสร้างอัปเดตที่เซ็นอย่างถูกต้องได้ แต่นั่นเป็นความเสี่ยงที่เกิดจากผู้เซ็นไม่เก็บคีย์ส่วนตัวไว้เป็นความลับ ไม่ว่าจะเป็น Google หรือใครก็ตาม ถ้าแชร์คีย์ส่วนตัว การรับรองแหล่งที่มา ของส่วนขยายก็พังลง
แต่สงสัยจริง ๆ ว่าเป็นไปได้หรือที่ Google จะอนุญาตให้เจ้าของใหม่เผยแพร่การเปลี่ยนแปลงได้โดยไม่มีคีย์ส่วนตัว Chrome Web Store จู้จี้มากแม้กับเรื่องเล็ก ๆ น้อย ๆ แปลกที่เรื่องแบบนั้นกลับไม่ใส่ใจ
ผมใช้ส่วนขยาย 3 ตัวที่เผยแพร่ไว้เฉพาะสำหรับผู้ทดสอบ และใช้อยู่โดยไม่ต้องใช้โหมดนักพัฒนาหรือ
rsync/robocopyเพื่อให้ติดตั้งบนหลายเครื่องได้ง่าย แต่สุดสัปดาห์นี้ Chrome ปิดใช้งานทั้งหมดเฉพาะในเครื่องหนึ่ง ด้วยเหตุผลว่า “ไม่ได้อยู่ใน Chrome Web Store และอาจถูกเพิ่มเข้ามาโดยผู้ใช้ไม่รู้ตัว” จะบังคับเปิดก็ไม่ได้ และในสโตร์แสดงว่า “ปิดใช้งาน” พร้อมปุ่ม “เปิดใช้งานตอนนี้” แต่แค่แบนเนอร์หายไป พอรีเฟรชก็กลับมาอีก โปรไฟล์ Chrome นั้นล็อกอินด้วยบัญชีที่อยู่ในรายการอนุญาตป้ายสถานะบนหน้า Chrome Web Store แสดงว่าบัญชีของผมในฐานะนักพัฒนาไม่มีบทลงโทษและสถานะปกติดี ถ้าไม่ได้ล็อกอินด้วยอีเมลในรายการอนุญาตก็คงดูหน้านั้นไม่ได้ด้วยซ้ำ จึงเข้าใจไม่ได้ว่าในเมื่อ “ใส่ใจมากขนาดนี้” แต่กลับอนุญาตให้อัปเดตโดยไม่มีคีย์ได้
CWS ไม่ควรเปลี่ยน ID ของส่วนขยายเดิมอย่างเด็ดขาด เพราะ ID ใช้ระบุตัวตนของส่วนขยายอย่างเฉพาะเจาะจง หาก ID เปลี่ยน ไคลเอนต์ Chrome จะร้องขออัปเดตของส่วนขยายนั้นไม่ได้ และ CWS กับ Chrome ก็ไม่รองรับฟีเจอร์ย้ายผู้ใช้จากส่วนขยายหนึ่งไปยังอีกส่วนขยายหนึ่ง
เท่าที่ผมรู้ CWS จะปฏิเสธหากหลังจากส่งครั้งแรกแล้ว ZIP มี
key.pemอยู่ ถ้า ID ของส่วนขยายเปลี่ยน นั่นก็ไม่ใช่ส่วนขยายตัวเดิม การที่เจ้าของใหม่เผยแพร่การเปลี่ยนแปลงได้แม้ไม่มี PEM นั้นโดยรวมถือว่าถูก แต่ถ้านักพัฒนาเซ็นส่วนขยายที่ส่งเข้า CWS เอง ก็จะอัปเดตไม่ได้หากไม่มี PEM พูดตรง ๆ ตอนนี้ไม่รู้ด้วยซ้ำว่ายังเป็นฟีเจอร์ที่ทำได้อยู่ไหม และเมื่อก่อนมันเป็นกับดักใหญ่ที่นักพัฒนาทำคีย์ส่วนตัวที่ใช้กับการอัปโหลดหายจนทำฐานผู้ติดตั้งพังหมดแทบทุกคนคงยอมในที่สุดถ้าราคาเหมาะสม ความแตกต่างระหว่างแต่ละคนก็มีแค่ว่าต้องได้เงินเท่าไร
เมื่อไม่กี่เดือนก่อน ผมทำส่วนขยายโอเพนซอร์สฟรีสำหรับกดข้ามโฆษณา YouTube อย่างรวดเร็ว แล้วเอามาแชร์ที่นี่จนขึ้นหน้าแรก
ภายในหนึ่งสัปดาห์ คนที่เคยมาคอมเมนต์ในโพสต์ Show HN ของผมก็เอามันไปคัดลอก แล้วโปรโมตเวอร์ชันของตัวเองบน Reddit จนไวรัลและมีผู้ใช้เกิน 300,000 คน: https://github.com/rkk3/ad-accelerator/blob/main/lessons_pos...
ผมสงสัยว่าทำไมไม่ส่ง PR มายังส่วนขยายโอเพนซอร์สฟรี แต่กลับคัดลอกไปแทน แล้วไม่กี่สัปดาห์ต่อมาเขาก็พยายามขายมันในหลายเว็บด้วยราคา ห้าหลัก เขาอาจยังเป็นเจ้าของอยู่ก็ได้ แต่ผมสังเกตเห็นว่านักพัฒนาที่ระบุใน Chrome Store ก็เปลี่ยนไปจากตอนเปิดตัวครั้งแรกด้วย
ผมไม่ได้เข้าใจเบื้องหลังทั้งหมด แต่ส่วนขยายดังกล่าวโดยเนื้อแท้แล้วเป็น JavaScript เล็ก ๆ แค่ราว 50 บรรทัด การจะบอกว่ามีใครขโมยไปถือว่าค่อนข้างแรง ตัวไอเดียเองไม่มีมูลค่า และก็ยากจะอ้างว่าไอเดียนี้ใหม่มาก ต่อให้สมมติว่าอีกฝ่ายได้แรงบันดาลใจมา ลำดับเวลาว่าใครทำอะไรก่อนก็ไม่ได้ชัดเจนมากนัก
อย่างไรก็ตาม YouTube กับ Chrome จะปล่อยให้มันทำงานได้นานแค่ไหนก็เป็นอีกเรื่องหนึ่ง และพวกเขาก็อาจไม่ยินดีนัก
“…ถ้าทั้งโลกกำลังร้องเพลงของเธอ / และภาพวาดของเธอถูกแขวนอยู่ทุกที่ / จำไว้ว่าสิ่งที่เคยเป็นของเธอ ตอนนี้เป็นของทุกคนแล้ว / มันไม่ใช่เรื่องถูกหรือผิด / เธอจะยึดติดกับมันเท่าไรก็ได้ / แต่ก็มีแค่เธอเท่านั้นที่จะกระวนกระวาย…” — “What Light” ของ Wilco
มีประโยชน์จริง ๆ แต่ตามที่คนอื่นพูด สิ่งนี้ควรเป็น ฟีเจอร์ในตัวเบราว์เซอร์
ผมยังไม่ได้ดูซอร์สโค้ดลึก ๆ แต่สงสัยว่าถ้ามีการเปลี่ยนเจ้าของ มันจะแจ้งอัตโนมัติไหม ไม่จำเป็นต้องเรียลไทม์ แต่ตอนเริ่มต้นจะแจ้งไหม หรือว่าต้องรันคำสั่งตรวจสอบเอง
เรื่องนี้เคยเป็นประเด็นเมื่อไม่กี่เดือนก่อนด้วย: https://news.ycombinator.com/item?id=36233068
อย่างที่คอมเมนต์บนสุดตอนนั้นว่าไว้ Firefox และ Chrome ควรเปลี่ยนนโยบายการอัปเกรดส่วนขยายอัตโนมัติในกรณีแบบนี้ ถ้าส่วนขยายเปิดเผยว่ามีการเปลี่ยนเจ้าของ การอัปเกรดควรต้องขออนุมัติจากผู้ใช้ และถ้าไม่เปิดเผย ผู้ใช้ก็ควรสามารถรายงานว่าเป็นอันตรายได้ นอกจากนี้ ชื่อเรื่องน่าจะควรมี “Show HN” ด้วย
ผมตัดสินว่าการแจ้งเตือนที่แรงกว่านั้นจะรุกล้ำผู้ใช้มากเกินไป
นั่นทำให้มูลค่าของผลิตภัณฑ์หรือบริษัทตอนขายลดลง เป็นมิตรต่อผู้ใช้ แต่ไม่เป็นมิตรต่อผู้สร้างที่ต้องจ่ายบิล
นี่ไม่ใช่เรื่องล้อเล่น
ผมเคยเป็นเจ้าของส่วนขยาย Chrome โอเพนซอร์สที่ค่อนข้างได้รับความนิยมมาหลายปี แต่ยอดบริจาครวมทั้งหมดยังไม่พอค่ากาแฟหนึ่งเดือนด้วยซ้ำ
แต่ข้อเสนอให้ขายส่วนขยายกลับมีจำนวนมากและตัวเลขบ้าคลั่ง รวมถึงกรณีที่มีเจตนาร้ายอย่างชัดเจน หรือถึงขั้นพูดออกมาตรง ๆ แบบนั้น ผมปฏิเสธทั้งหมด แต่การคาดหวังว่า ศีลธรรม ของผู้พัฒนาดั้งเดิมจะเป็นระบบความปลอดภัยและความเป็นส่วนตัวเพียงอย่างเดียวในสถานการณ์แบบนี้ ไม่ใช่การตัดสินใจที่มีสติเลย
เห็นด้วยกับเป้าหมายอยู่มากและเข้าใจข้อจำกัดทางเทคนิค แต่การส่งรายการส่วนขยายทั้งหมดของผู้ใช้ไปยัง เครือข่ายโฆษณาที่เน้นส่วนขยาย ก็ดูน่าสงสัยอยู่บ้าง
เหตุผลที่ต้องใช้เซิร์ฟเวอร์ภายนอกระบุว่า เพราะเบราว์เซอร์มีกฎพิเศษสำหรับการแก้ไขโดเมนตลาดส่วนขยายอย่าง
chromewebstore.google.comจึงมอบหมายการตรวจสอบข้อมูลนักพัฒนาให้กับเซิร์ฟเวอร์ API ของ ExBoosthttps://www.extensionboost.com/
ExBoost อธิบายตัวเองว่าเป็นเครือข่ายความร่วมมือของส่วนขยายเบราว์เซอร์ที่ต้องการผู้ใช้และรีวิวมากขึ้น โดยใส่สล็อต ExBoost ไว้ใน UI ของส่วนขยาย แล้วแสดงการโปรโมตส่วนขยายที่คล้ายกันหรือคำขอให้รีวิว
เมื่อดูผลลัพธ์ API ของส่วนขยายหนึ่งที่ติดตั้งไว้ จะมีเมทาดาทาเกี่ยวกับนักพัฒนาออกมา ลองใช้ Chrome API
chrome.management.get(id)แล้ว แต่ข้อมูลนี้ไม่ถูกส่งกลับมา และก็ดูเหมือนไม่มีวิธีดึงเนื้อหาmanifest.jsonแบบโปรแกรมได้ ดังนั้นถ้าส่วนขยายนี้จะทำสิ่งที่ตั้งใจทำจริง ๆ ก็จำเป็นต้องมีแหล่งข้อมูลภายนอกอยู่ดีhttps://github.com/classvsoftware/under-new-management/blob/...
https://api.extensionboost.com/v1/developer?extension_ids=gh...
เนื้อหาขอให้ใส่โค้ดของเขาในส่วนขยายของผม และบอกว่า “ถ้านายแสดงของฉัน ฉันก็จะแสดงของนาย ค่าใช้จ่าย 0 ทุกฝ่ายได้ประโยชน์” ดูน่าสงสัยเลยจัดเป็นสแปมไป และมันก็ดูไม่ต่างจากสแปมอื่น ๆ ที่เคยได้จากพวกมิจฉาชีพ
สำหรับส่วนขยาย Firefox มี โปรแกรมส่วนขยายแนะนำ ของ Mozilla และระบุว่าก่อนจะถูกรวมเข้าไป จะผ่านการตรวจสอบทางเทคนิคอย่างเข้มงวดจากผู้เชี่ยวชาญด้านความปลอดภัยของพนักงาน: https://support.mozilla.org/en-US/kb/recommended-extensions-...
อย่างไรก็ตาม จากเอกสารสนับสนุนอย่างเดียว ยังไม่ชัดเจนว่าทุกการอัปเดตถูกตรวจสอบก่อนเผยแพร่หรือไม่ หากตรวจทุกครั้ง ก็น่าจะช่วยแก้ปัญหานี้ได้ในระดับหนึ่งสำหรับส่วนขยายยอดนิยม แต่ก็สงสัยเหมือนกันว่าจะเกิดความล่าช้าแค่ไหนเมื่อต้องมีอัปเดตความปลอดภัยเร่งด่วน
นโยบายส่วนตัวตอนนี้คืออนุญาตให้เฉพาะ ส่วนขยายที่ผ่านการคัดสรร แบบนั้นเท่านั้นทำงานได้บนทุกเว็บไซต์และแท็บ
คือโครงสร้างที่แม้แต่องค์กรที่ได้รับความนิยมหรือเป็นที่รู้จักมากเพียงใด หากละเมิดกฎซ้ำ ๆ หรือพยายามเลี่ยงฟังก์ชันของมาร์เก็ตเพลซ ก็อาจถูกแบนได้
ในกรณีที่ประสงค์ร้ายจริง ๆ มักขาย ข้อมูลรับรอง ของบัญชีนักพัฒนา Google เองตอนส่งต่อส่วนขยาย ดังนั้นกรณีแบบนี้จะตรวจจับไม่ได้
นานมาแล้วเคยติดตั้ง adblock และชอบมาก
ซื้อเครื่องใหม่แล้วต้องติดตั้งใหม่ ตอนนั้นเป็นครั้งแรกที่ดูสิทธิ์ที่ต้องขอ แล้วแทบช็อกไปเลย ในเชิงตรรกะก็ถูกว่าถ้าจะบล็อกโฆษณาได้ มันต้องมองเห็นสิ่งที่ผมดูอยู่ แต่ไม่เคยคิดเรื่องนี้อย่างจริงจังมาก่อน
ตอนนี้ใช้ Pi-hole และไม่ใช้ส่วนขยายเลยสักตัว
ถึงอย่างนั้น การมีตัวเลือกให้คนที่ต้องการก็เป็นเรื่องดี และแต่ละคนก็มีโปรไฟล์ความเสี่ยงและความกังวลต่างกัน
บางส่วนขยายเป็นโอเพนซอร์สและน่าเชื่อถือ แต่ก็มีจำนวนมากที่ไม่ใช่ และดูเหมือนผู้คนจะตรวจสอบได้ยาก
แค่ให้รายการบล็อก แล้วเบราว์เซอร์จะบล็อกเองโดยตรง ไม่รู้ว่า Firefox ทำได้ไหม: https://developer.apple.com/documentation/safariservices/cre...
ถ้าเป็นผู้ซื้อส่วนขยายที่เป็นอันตราย ก็น่าจะหลีกเลี่ยงเรื่องนี้ได้ด้วยการคงชื่อนักพัฒนาเดิมไว้ไม่ใช่หรือ หรือ Chrome Extension Store จัดการชื่อนักพัฒนาอย่างเข้มงวด?
ตัวอย่างเช่น ผู้ปฏิบัติการระดับรัฐที่มีเจตนาร้ายอาจเสนอเงินหลายสิบล้านดอลลาร์ให้ผู้เขียน uBlock เพื่อให้ได้สิทธิ์เข้าถึงเบราว์เซอร์จำนวนมากก็ได้ ไม่รู้ว่าเชิงเศรษฐศาสตร์จะคุ้มแค่ไหน แต่ส่วนขยายที่เฉพาะทางกว่านั้นน่าจะถูกเล็งได้ในราคาถูกกว่ามาก
สงสัยว่าปัญหานี้รุนแรงบน Chrome มากกว่าเบราว์เซอร์อื่นหรือไม่
ส่วนขยายเบราว์เซอร์เดียวที่ฉันใช้คือ HonorLock ซึ่งเป็นซอฟต์แวร์คุมสอบ และจำเป็นต้องใช้ ส่วนขยายนี้ใช้ได้เฉพาะ Chrome จึงต้องใช้ Chrome เป็นครั้งคราวเพราะ HonorLock ถ้าเปิดลิงก์ติดตั้งใน Safari จะมีข้อความให้ติดตั้ง Chrome: https://app.honorlock.com/install/extension
สงสัยว่าในส่วนขยายของ Chrome มีคุณสมบัติอะไรที่ทำให้รองรับ use case ของ HonorLock ได้โดยเฉพาะ ขณะเดียวกันก็ทำให้เครื่องมือในบทความนี้มีประโยชน์มากขึ้นหรือไม่